Comparing version
@@ -1,1 +0,1 @@ | ||
let $a2188ba8c266b376$export$cacd6541cfeeb6c1;(function(Direction){Direction["None"]="0";Direction["Left"]="left";Direction["Right"]="right";Direction["Up"]="up";Direction["Down"]="down"})($a2188ba8c266b376$export$cacd6541cfeeb6c1||($a2188ba8c266b376$export$cacd6541cfeeb6c1={}));const $a2188ba8c266b376$export$86ae6e8ac17a67c6=Object.freeze({Horizontal:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right],Vertical:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down],All:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down,$a2188ba8c266b376$export$cacd6541cfeeb6c1.None]});let $a2188ba8c266b376$export$a1d3109c03b1d511;(function(GestureState){GestureState["Inactive"]="inactive";GestureState["Active"]="active";GestureState["Blocked"]="blocked"})($a2188ba8c266b376$export$a1d3109c03b1d511||($a2188ba8c266b376$export$a1d3109c03b1d511={}));let $a2188ba8c266b376$export$b8339a9622c147c0;(function(PointerManagerState){PointerManagerState["NoPointer"]="nopointer";PointerManagerState["SinglePointer"]="singlepointer";PointerManagerState["DualPointer"]="dualpointer"})($a2188ba8c266b376$export$b8339a9622c147c0||($a2188ba8c266b376$export$b8339a9622c147c0={}));let $a2188ba8c266b376$export$2fb579dd5dfdbea;(function(PointerListenerState){PointerListenerState["NoActiveGesture"]="noactivegesture";PointerListenerState["ActiveGesture"]="activegesture"})($a2188ba8c266b376$export$2fb579dd5dfdbea||($a2188ba8c266b376$export$2fb579dd5dfdbea={}));class $07c7ab2351895186$export$baf26146a414f24a{constructor(x,y){this.x=x;this.y=y}}class $c0ee1a209fd4fc8d$export$9b781de7bf37bf48{constructor(startPoint,endPoint){this.startPoint=startPoint;this.endPoint=endPoint;this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None;this.deltaX=this.endPoint.x-this.startPoint.x;this.deltaY=this.endPoint.y-this.startPoint.y;this.x=this.deltaX;this.y=this.deltaY;this.vectorLength=Math.sqrt(Math.pow(this.deltaX,2)+Math.pow(this.deltaY,2));if(Math.abs(this.deltaX)>Math.abs(this.deltaY)){if(this.startPoint.x<this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Right;else if(this.startPoint.x>this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Left}else{if(this.startPoint.y<this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Down;else if(this.startPoint.y>this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Up}}}class $1f7944f1763e45ce$export$2db6c17465f94a2{static getVector(startPointerEvent,endPointerEvent){const startPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(startPointerEvent.clientX,startPointerEvent.clientY);const endPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(endPointerEvent.clientX,endPointerEvent.clientY);const vector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vector}static getSpeed(vector,startTimestamp,endTimestamp){let speed=0;const timespan_ms=endTimestamp-startTimestamp;const timespan_s=timespan_ms/1e3;if(vector!=null&×pan_s!=0)speed=vector.vectorLength/timespan_s;return speed}static calculateRotationAngle(vector_1,vector_2){const angleVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const angleVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const origin=new(0,$07c7ab2351895186$export$baf26146a414f24a)(0,0);const translationVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_1.startPoint,origin);const translatedEndPoint_1=this.translatePoint(angleVector_1.endPoint,translationVector_1);const translationVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_2.startPoint,origin);const translatedEndPoint_2=this.translatePoint(angleVector_2.endPoint,translationVector_2);const rotationAngle=this.calcAngleRad(translatedEndPoint_1)*-1;const x_2_rotated=translatedEndPoint_2.x*Math.cos(rotationAngle)-translatedEndPoint_2.y*Math.sin(rotationAngle);const y_2_rotated=Math.round(translatedEndPoint_2.x*Math.sin(rotationAngle)+translatedEndPoint_2.y*Math.cos(rotationAngle));const angleDeg=Math.atan2(y_2_rotated,x_2_rotated)*180/Math.PI;return angleDeg}static calculateVectorAngle(vector_1,vector_2){let angleDeg=0;if(vector_1.vectorLength>0&&vector_2.vectorLength>0){const cos=(vector_1.x*vector_2.x+vector_1.y*vector_2.y)/(vector_1.vectorLength*vector_2.vectorLength);const angleRad=Math.acos(cos);angleDeg=this.rad2deg(angleRad)}return angleDeg}static translatePoint(point,vector){const newX=point.x+vector.x;const newY=point.y+vector.y;const translatedPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(newX,newY);return translatedPoint}static calcAngleDegrees(point){let angle=Math.atan2(point.y,point.x)*180/Math.PI;if(angle<0)angle=360+angle;return angle}static calcAngleRad(point){let angle=Math.atan2(point.y,point.x);if(angle<0)angle=2*Math.PI+angle;return angle}static deg2rad(angleDeg){const rad=Math.PI/180*angleDeg;return rad}static rad2deg(angleRad){const deg=angleRad/(Math.PI/180);return deg}static getCenter(pointA,pointB){const centerX=(pointA.x+pointB.x)/2;const centerY=(pointA.y+pointB.y)/2;const center=new(0,$07c7ab2351895186$export$baf26146a414f24a)(centerX,centerY);return center}static getCenterMovementVector(vector_1,vector_2){const startPoint=this.getCenter(vector_1.startPoint,vector_2.startPoint);const endPoint=this.getCenter(vector_1.endPoint,vector_2.endPoint);const vectorBetweenCenterPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vectorBetweenCenterPoints}static calculateAbsoluteDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const absoluteDistanceChange=vectorBetweenEndPoints.vectorLength-vectorBetweenStartPoints.vectorLength;return absoluteDistanceChange}static calculateRelativeDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const relativeDistanceChange=vectorBetweenEndPoints.vectorLength/vectorBetweenStartPoints.vectorLength;return relativeDistanceChange}}class $5fe7e4b452e08fad$export$bbcc47898202c6b8{constructor(pointer){this.pointer=pointer;this.parameters=pointer.parameters}getTarget(){return this.pointer.initialPointerEvent.target}getCurrentPointerEvent(){return this.pointer.currentPointerEvent}getCurrentDirection(){return this.parameters.live.vector.direction}onIdle(){}onPointerMove(pointermoveEvent){}onPointerUp(pointerupEvent){}onPointerLeave(pointerleaveEvent){}onPointerCancel(pointercancelEvent){}}let $d25d2392b002d8dc$var$PointerState;(function(PointerState){PointerState["Active"]="active";PointerState["Removed"]="removed";PointerState["Canceled"]="canceled"})($d25d2392b002d8dc$var$PointerState||($d25d2392b002d8dc$var$PointerState={}));class $d25d2392b002d8dc$export$b56007f12edf0c17{constructor(pointerEvent,options){this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;const now=(new Date).getTime();this.pointerId=pointerEvent.pointerId;this.vectorTimespan=this.options.vectorTimespan??100;this.initialPointerEvent=pointerEvent;this.currentPointerEvent=pointerEvent;this.recognizedEvents=[pointerEvent];this.state=$d25d2392b002d8dc$var$PointerState.Active;const nullVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(pointerEvent,pointerEvent);const globalParameters={startX:this.initialPointerEvent.clientX,startY:this.initialPointerEvent.clientY,vector:nullVector,deltaX:0,deltaY:0,startTimestampUTC:now,startTimestamp:this.initialPointerEvent.timeStamp,currentTimestamp:this.initialPointerEvent.timeStamp,endTimestamp:null,maximumSpeed:0,currentSpeed:0,distance:0,maximumDistance:0,averageSpeed:0,finalSpeed:0,traveledDistance:0,hasBeenMoved:false,duration:0};const liveParameters={duration:0,speed:0,vector:nullVector,distance:0,isMoving:false};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}getTarget(){return this.initialPointerEvent.target}reset(){}onIdle(){const now=(new Date).getTime();const duration=now-this.parameters.global.startTimestampUTC;this.parameters.global.duration=duration}onPointerMove(pointermoveEvent){this.parameters.global.hasBeenMoved=true;this.parameters.live.isMoving=true;this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.parameters.global.finalSpeed=this.parameters.live.speed;this.parameters.live.speed=0;this.parameters.live.isMoving=false;this.state=$d25d2392b002d8dc$var$PointerState.Removed;this.parameters.global.endTimestamp=pointerupEvent.timeStamp;this.update(pointerupEvent);if(this.DEBUG===true)console.log(`[PointerInput] pointerdown ended. pointerdown duration: ${this.parameters.global.duration}ms`)}onPointerLeave(pointerleaveEvent){this.onPointerUp(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent);this.parameters.live.speed=0;this.state=$d25d2392b002d8dc$var$PointerState.Canceled;this.parameters.live.isMoving=false;this.parameters.global.endTimestamp=pointercancelEvent.timeStamp;if(this.DEBUG===true)console.log(`[PointerInput] canceled, pointerdown duration:${this.parameters.global.duration}ms`)}update(pointerEvent){this.currentPointerEvent=pointerEvent;this.recognizedEvents.push(pointerEvent);const timedPointerEvents=this.getTimedPointerEvents();const liveVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(timedPointerEvents[0],timedPointerEvents[1]);this.parameters.live.vector=liveVector;this.parameters.live.distance=liveVector.vectorLength;this.parameters.live.speed=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getSpeed(liveVector,timedPointerEvents[0].timeStamp,timedPointerEvents[1].timeStamp);if(this.parameters.live.speed>this.parameters.global.maximumSpeed)this.parameters.global.maximumSpeed=this.parameters.live.speed;this.parameters.global.currentTimestamp=pointerEvent.timeStamp;this.parameters.global.duration=pointerEvent.timeStamp-this.parameters.global.startTimestamp;this.parameters.global.deltaX=liveVector.endPoint.x-this.parameters.global.startX;this.parameters.global.deltaY=liveVector.endPoint.y-this.parameters.global.startY;const globalVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(this.initialPointerEvent,this.currentPointerEvent);this.parameters.global.vector=globalVector;this.parameters.global.distance=globalVector.vectorLength;if(globalVector.vectorLength>this.parameters.global.maximumDistance)this.parameters.global.maximumDistance=globalVector.vectorLength;if(this.DEBUG===true){console.log(`[PointerInput] current speed: ${this.parameters.live.speed}px/s`);console.log(`[PointerInput] pointerdown duration: ${this.parameters.global.duration}ms`);console.log(`[PointerInput] live vector length within vectorTimespan: ${this.parameters.live.vector.vectorLength}px`)}}getTimedPointerEvents(){let startPointerEvent=this.initialPointerEvent;const endPointerEvent=this.recognizedEvents[this.recognizedEvents.length-1];let startIndex=this.recognizedEvents.length-1;let elapsedTime=0;const endTimeStamp=endPointerEvent.timeStamp;while(elapsedTime<this.vectorTimespan){startIndex=startIndex-1;if(startIndex<0)break;startPointerEvent=this.recognizedEvents[startIndex];elapsedTime=endTimeStamp-startPointerEvent.timeStamp}const pointerEvents=[startPointerEvent,endPointerEvent];this.recognizedEvents=this.recognizedEvents.slice(-20);return pointerEvents}}const $f752273e736c5336$export$6e9c3b1e1fa2b597=CustomEvent;class $f752273e736c5336$export$61ce360501d38a6f{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.validPointerManagerState=null;this.validPointerInputConstructor=(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8);this.domElement=domElement;this.initialPointerEvent=null;this.initialParameters=null;this.activeStateParameters=null;this.options={bubbles:true,blocks:[],supportedDirections:[],DEBUG:false,...options};this.DEBUG=this.options.DEBUG}getEmptyGestureParameters(){const nullRecognitionParameters={global:{min:{},max:{},boolean:{}},live:{min:{},max:{},boolean:{}}};return nullRecognitionParameters}getGestureParameters(){let gestureParameters;if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){gestureParameters=this.activeStateParameters;if(this.DEBUG==true){console.log(`[${this.eventBaseName}] validating using activeStateParameters`);console.log(gestureParameters)}}else{if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating using initialParameters`);gestureParameters=this.initialParameters}if(gestureParameters==null)throw new Error("[Gesture] no gesture parameters found. Do not call .getGestureParameters on abstract class Gesture");return gestureParameters}validateGestureParameters(pointerInput){const gestureParameters=this.getGestureParameters();let isValid=true;let timespan;for(timespan in gestureParameters){const timedGestureParameters=gestureParameters[timespan];const timedPointerInputValues=pointerInput.parameters[timespan];let minOrMaxOrBoolean;for(minOrMaxOrBoolean in timedGestureParameters){const evaluationParameters=timedGestureParameters[minOrMaxOrBoolean];let gestureParameterName;for(gestureParameterName in evaluationParameters){const gestureParameter=evaluationParameters[gestureParameterName];const pointerInputValue=timedPointerInputValues[gestureParameterName];if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating ${timespan} ${minOrMaxOrBoolean}: required: ${gestureParameter}, pointer: ${pointerInputValue}`);if(typeof gestureParameter=="boolean"&&typeof pointerInputValue=="boolean")isValid=this.validateBooleanParameter(gestureParameter,pointerInputValue);else if(typeof gestureParameter=="number"&&typeof pointerInputValue=="number")isValid=this.validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMaxOrBoolean);if(isValid==false){if(this.DEBUG==true)console.log(`[${this.eventBaseName}] invalidated `);return false}}}}return true}validateBooleanParameter(gestureParameter,pointerInputValue){if(gestureParameter==null)return true;else if(gestureParameter==pointerInputValue){if(this.DEBUG==true)console.log(`validated: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return true}if(this.DEBUG==true)console.log(`dismissing ${this.eventBaseName}: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return false}validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMax){if(minOrMax=="min"){if(pointerInputValue>=gestureParameter)return true}else if(minOrMax=="max"){if(pointerInputValue<=gestureParameter)return true}return false}validateDirection(pointerInput){const currentDirection=pointerInput.getCurrentDirection();if(this.options.supportedDirections.length&&!this.options.supportedDirections.includes(currentDirection)){if(this.DEBUG==true)console.log(`[Gestures] dismissing ${this.eventBaseName}: supported directions: ${this.options.supportedDirections}, current direction: ${currentDirection}`);return false}return true}validateGestureState(){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked)return false;return true}validatePointerManagerState(pointerManager){if(pointerManager.state==this.validPointerManagerState)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerManagerState invalidated ${this.eventBaseName}: ${pointerManager.state}`);return false}validatePointerInputConstructor(pointerInput){if(pointerInput instanceof this.validPointerInputConstructor)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerInputConstructor invalidated ${this.eventBaseName}: ${this.validPointerInputConstructor}`);return false}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);const pointerInput=pointerManager.activePointerInput;if(isValid==true&&pointerInput!=null){isValid=this.validatePointerInputConstructor(pointerInput);if(isValid==true)isValid=this.validateDirection(pointerInput);if(isValid==true)isValid=this.validateGestureParameters(pointerInput)}return isValid}recognize(pointerManager){const isValid=this.validate(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive)this.onStart(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.initialPointerEvent==null)this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}else if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active&&isValid==false)this.onEnd(pointerManager);else if(this.DEBUG==true)console.log(`not firing event ${this.eventBaseName}. No SinglePointerInput found`)}getPointerInput(pointerManager){if(pointerManager.hasPointersOnSurface()==true&&pointerManager.activePointerInput instanceof this.validPointerInputConstructor)return pointerManager.activePointerInput;else if(pointerManager.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17)){const pointerInput=pointerManager.getlastRemovedPointerInput();if(pointerInput instanceof this.validPointerInputConstructor)return pointerInput}return null}setInitialPointerEvent(pointerManager){const pointerInput=this.getPointerInput(pointerManager);if(pointerInput instanceof this.validPointerInputConstructor){const pointerEvent=pointerInput.getCurrentPointerEvent();this.initialPointerEvent=pointerEvent}}emit(pointerManager,eventName){eventName=eventName||this.eventBaseName;if(this.DEBUG===true)console.log(`[Gestures] detected and firing event ${eventName}`);const pointerInput=this.getPointerInput(pointerManager);if(pointerInput!=null){const target=pointerInput.getTarget();if(target instanceof EventTarget){const eventData=this.getEventData(pointerInput,pointerManager);const eventOptions={detail:eventData,bubbles:this.options.bubbles};if(this.DEBUG===true)console.log(eventOptions);const event=new $f752273e736c5336$export$6e9c3b1e1fa2b597(eventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(event);else this.domElement.dispatchEvent(event);const currentDirection=eventData.live.direction;const hasSupportedDirections=!!this.options.supportedDirections;if(hasSupportedDirections==true&¤tDirection!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None&&(eventName==this.eventBaseName||eventName=="swipe"))for(let d=0;d<this.options.supportedDirections.length;d++){const direction=this.options.supportedDirections[d];if(direction==currentDirection){const directionEventName=eventName+direction;if(this.DEBUG==true)console.log(`[Gestures] detected and firing event ${directionEventName}`);const directionEvent=new CustomEvent(directionEventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(directionEvent);else this.domElement.dispatchEvent(directionEvent)}}}}}onStart(pointerManager){this.blockGestures();this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.setInitialPointerEvent(pointerManager);const eventName=`${this.eventBaseName}start`;this.emit(pointerManager,eventName)}onEnd(pointerManager){this.unblockGestures();if(this.DEBUG==true)console.log(`[${this.eventBaseName}] ended. Setting ${this.eventBaseName}.state = ${(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}`);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;const eventName=`${this.eventBaseName}end`;this.emit(pointerManager,eventName)}onTouchStart(event){}onTouchMove(event){}onTouchEnd(event){}onTouchCancel(event){}block(gesture){if(this.options.blocks.indexOf(gesture)==-1)this.options.blocks.push(gesture)}unblock(gesture){if(this.options.blocks.indexOf(gesture)!=-1)this.options.blocks.splice(this.options.blocks.indexOf(gesture),1)}blockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive){if(this.DEBUG==false)console.log(`[Gesture] blocking ${gesture.eventBaseName}`);gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked}}}unblockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}}getEventData(pointerInput,pointerManager){throw new Error("Gesture subclasses require a getEventData method()")}}class $e8978caba4d46d00$export$718b85c80185d86e extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(singlePointerInput,pointerManager){const globalParameters=singlePointerInput.parameters.live;const liveParameters=singlePointerInput.parameters.live;let globalVector=globalParameters.vector;let globalDuration=globalParameters.duration;if(this.initialPointerEvent!=null){const globalStartPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(this.initialPointerEvent.clientX,this.initialPointerEvent.clientY);const globalEndPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(singlePointerInput.pointer.currentPointerEvent.clientX,singlePointerInput.pointer.currentPointerEvent.clientY);globalVector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(globalStartPoint,globalEndPoint);globalDuration=singlePointerInput.pointer.currentPointerEvent.timeStamp-this.initialPointerEvent.timeStamp}const globalGestureEventData={deltaX:globalVector.x,deltaY:globalVector.y,distance:globalVector.vectorLength,speedX:globalVector.x/globalDuration,speedY:globalVector.y/globalDuration,speed:globalVector.vectorLength/globalDuration,direction:globalVector.direction,scale:1,rotation:0,center:{x:globalParameters.vector.endPoint.x,y:globalParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.vector.x,deltaY:liveParameters.vector.y,distance:liveParameters.vector.vectorLength,speedX:liveParameters.vector.x/singlePointerInput.pointer.vectorTimespan,speedY:liveParameters.vector.y/singlePointerInput.pointer.vectorTimespan,speed:liveParameters.speed,direction:liveParameters.vector.direction,scale:1,rotation:0,center:{x:liveParameters.vector.endPoint.x,y:liveParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const eventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return eventData}}class $b6ec4e8a6d9d51ec$export$4451a18ddc7083b7 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.eventBaseName="tap";let globalMaxDuration=200;let liveMaxDistance=30;let globalMaxDistance=30;if(options){if("maxDuration"in options)globalMaxDuration=options["maxDuration"];if("maxDistance"in options){liveMaxDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.max["duration"]=globalMaxDuration;this.initialParameters.live.max["distance"]=liveMaxDistance;this.initialParameters.global.max["distance"]=globalMaxDistance}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);if(isValid===true){if(pointerManager.lastInputSessionPointerCount!=1)return false;else{const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))isValid=this.validateGestureParameters(singlePointerInput);else isValid=false}}return isValid}onStart(pointerManager){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}}class $5653a1f5fdc2db30$export$90610caf6d8d0242 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){static minDuration=600;constructor(domElement,options){super(domElement,options);this.eventBaseName="press";let globalMinDuration=600;let globalMaxDistance=10;let globalMaxMaximumDistance=20;if(options){if("minDuration"in options)globalMinDuration=options["minDuration"];if("maxDistance"in options){globalMaxMaximumDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.min["duration"]=globalMinDuration;this.initialParameters.global.max["distance"]=globalMaxDistance;this.initialParameters.global.max["maximumDistance"]=globalMaxMaximumDistance;this.hasBeenEmitted=false}recognize(pointerManager){const isValid=this.validate(pointerManager);const singlePointerInput=this.getPointerInput(pointerManager);const minDuration=this.initialParameters.global.min["duration"]||$5653a1f5fdc2db30$export$90610caf6d8d0242.minDuration;if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(isValid==true&&this.hasBeenEmitted==false){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager);this.hasBeenEmitted=true;this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.blockGestures()}else if(isValid==false&&this.hasBeenEmitted==true){this.onEnd(pointerManager);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.hasBeenEmitted=false}else{const duration=singlePointerInput.parameters.global.duration;if(this.hasBeenEmitted==true&&duration<=minDuration)this.hasBeenEmitted=false}}if(singlePointerInput==null)this.hasBeenEmitted=false}}class $7a0f7fd2f33d0212$export$f86166cd6057c2d1 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;this.eventBaseName="pan";this.initialParameters.global.min["duration"]=0;this.initialParameters.live.min["distance"]=10;this.initialParameters.global.boolean["hasBeenMoved"]=true;this.swipeFinalSpeed=600;this.isSwipe=false;this.options.supportedDirections=options?.supportedDirections??(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;this.initialSupportedDirections=this.options.supportedDirections}validate(pointerManager){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active)this.options.supportedDirections=(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;const isValid=super.validate(pointerManager);return isValid}onStart(pointerManager){this.isSwipe=false;super.onStart(pointerManager)}onEnd(pointerManager){const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.swipeFinalSpeed<singlePointerInput.parameters.global.finalSpeed&&singlePointerInput.parameters.live.vector.direction!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None){this.isSwipe=true;this.emit(pointerManager,"swipe")}else if(this.DEBUG==true){if(singlePointerInput.parameters.global.finalSpeed<this.swipeFinalSpeed)console.log(`[Pan] dismissing swipe. Final speed: ${singlePointerInput.parameters.global.finalSpeed} < ${this.swipeFinalSpeed}`);else console.log(`[Pan] dismissing swipe. Direction: ${singlePointerInput.parameters.live.vector.direction}`)}}super.onEnd(pointerManager);this.options.supportedDirections=this.initialSupportedDirections}onTouchMove(event){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.DEBUG==true)console.log("[Pan] preventing touchmove default");event.preventDefault();event.stopPropagation()}}}class $ba0aae203ff6b3f9$export$bdba51b3ce92d5f1{constructor(pointer_1,pointer_2){this.pointerIds=new Set([pointer_1.pointerId,pointer_2.pointerId]);this.startTimestamp=(new Date).getTime();this.pointerMap={};this.pointerMap[pointer_1.pointerId]=pointer_1;this.pointerMap[pointer_2.pointerId]=pointer_2;this.pointer_1=pointer_1;this.pointer_2=pointer_2;this.initialPointerEvent=pointer_1.initialPointerEvent;this.currentPointerEvent=pointer_1.initialPointerEvent;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalParameters={duration:0,center:globalCenter,centerHasBeenMoved:false,centerMovementDistance:0,centerMovementVector:globalCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveParameters={center:liveCenter,centerIsMoving:false,centerMovementDistance:0,centerMovementVector:liveCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}removePointer(pointerId){if(pointerId==this.pointer_1.pointerId)return this.pointer_2;else if(pointerId==this.pointer_2.pointerId)return this.pointer_1;else throw new Error(`[DualPointerInput] cannot remove Pointer #${pointerId}. The pointer is not part of this DualPointerInput`)}getTarget(){return this.initialPointerEvent.target}update(pointerEvent){if(pointerEvent instanceof PointerEvent)this.currentPointerEvent=pointerEvent;const now=(new Date).getTime();this.parameters.global["duration"]=now-this.startTimestamp;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(globalVector_1,globalVector_2);const globalRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(globalVector_1,globalVector_2);const globalRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(globalVector_1,globalVector_2);const globalVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(globalVector_1,globalVector_2);this.parameters.global["center"]=globalCenter;this.parameters.global["centerMovementVector"]=globalCenterMovementVector;this.parameters.global["centerMovementDistance"]=globalCenterMovementVector.vectorLength;this.parameters.global["absolutePointerDistanceChange"]=globalAbsoluteDistanceChange;this.parameters.global["relativePointerDistanceChange"]=globalRelativeDistanceChange;this.parameters.global["rotationAngle"]=globalRotationAngle;this.parameters.global["absoluteRotationAngle"]=Math.abs(globalRotationAngle);this.parameters.global["vectorAngle"]=globalVectorAngle;this.parameters.global["absoluteVectorAngle"]=Math.abs(globalVectorAngle);const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(liveVector_1,liveVector_2);const liveRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(liveVector_1,liveVector_2);const liveRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(liveVector_1,liveVector_2);const liveVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(liveVector_1,liveVector_2);if(liveCenterMovementVector.vectorLength>0){this.parameters.live.centerIsMoving=true;this.parameters.global.centerHasBeenMoved=true}else this.parameters.live.centerIsMoving=false;this.parameters.live["center"]=liveCenter;this.parameters.live["centerMovementDistance"]=liveCenterMovementVector.vectorLength;this.parameters.live["centerMovementVector"]=liveCenterMovementVector;this.parameters.live["absolutePointerDistanceChange"]=liveAbsoluteDistanceChange;this.parameters.live["relativePointerDistanceChange"]=liveRelativeDistanceChange;this.parameters.live["rotationAngle"]=liveRotationAngle;this.parameters.live["absoluteRotationAngle"]=Math.abs(liveRotationAngle);this.parameters.live["vectorAngle"]=liveVectorAngle;this.parameters.live["absoluteVectorAngle"]=Math.abs(liveVectorAngle)}onPointerMove(pointermoveEvent){this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.update(pointerupEvent)}onPointerLeave(pointerleaveEvent){this.update(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent)}onIdle(){this.update()}getCurrentDirection(){return this.parameters.live.centerMovementVector.direction}getCurrentPointerEvent(){return this.currentPointerEvent}}class $a1a4c2869495e604$export$f9d89efe4b7795e7 extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent_1=null;this.initialPointerEvent_2=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;this.validPointerInputConstructor=(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1);const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(dualPointerInput,pointerManager){const globalParameters=dualPointerInput.parameters.global;const liveParameters=dualPointerInput.parameters.live;const globalGestureEventData={deltaX:globalParameters.centerMovementVector.x,deltaY:globalParameters.centerMovementVector.y,distance:globalParameters.centerMovementDistance,speedX:globalParameters.centerMovementVector.x/globalParameters.duration,speedY:globalParameters.centerMovementVector.y/globalParameters.duration,speed:globalParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:globalParameters.centerMovementVector.direction,scale:globalParameters.relativePointerDistanceChange,rotation:globalParameters.rotationAngle,center:globalParameters.center,srcEvent:dualPointerInput.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.centerMovementVector.x,deltaY:liveParameters.centerMovementVector.y,distance:liveParameters.centerMovementDistance,speedX:liveParameters.centerMovementVector.x/globalParameters.duration,speedY:liveParameters.centerMovementVector.y/globalParameters.duration,speed:liveParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:liveParameters.centerMovementVector.direction,scale:liveParameters.relativePointerDistanceChange,rotation:liveParameters.rotationAngle,center:{x:liveParameters.centerMovementVector.startPoint.x,y:liveParameters.centerMovementVector.startPoint.y},srcEvent:dualPointerInput.currentPointerEvent};const gestureEventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return gestureEventData}}class $ed7931f1d96d5294$export$826ae541ddf1527b extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="pinch";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.min["absolutePointerDistanceChange"]=5;this.initialParameters.live.max["absoluteRotationAngle"]=20;this.initialParameters.live.min["absoluteVectorAngle"]=10}}class $9fe2bb90b337f66c$export$152db69a76b6b79e extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="rotate";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.min["absoluteRotationAngle"]=5;this.activeStateParameters.live.min["absoluteRotationAngle"]=0}}class $59226122237c359c$export$8847187e02a498e8 extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="twofingerpan";this.initialParameters.live.min["centerMovementDistance"]=10;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.max["absoluteVectorAngle"]=150;this.activeStateParameters.live.min["centerMovementDistance"]=0}}class $4f5a7b355079efa2$export$af6d1be017a420a{constructor(options){options=options||{};this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.activePointerInput=null;this.lastRemovedPointer=null;this.lastInputSessionPointerCount=0;this.pointerAllocation={};this.unusedPointers={};this.onSurfacePointers={}}addPointer(pointerdownEvent){if(this.DEBUG==true)console.log(`[PointerManager] adding Pointer #${pointerdownEvent.pointerId.toString()}`);const pointerOptions={DEBUG:this.DEBUG};const pointer=new(0,$d25d2392b002d8dc$export$b56007f12edf0c17)(pointerdownEvent,pointerOptions);this.onSurfacePointers[pointer.pointerId]=pointer;if(this.activePointerInput==null)this.setActiveSinglePointerInput(pointer);else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))this.setActiveDualPointerInput(this.activePointerInput.pointer,pointer);else if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1))this.unusedPointers[pointer.pointerId]=pointer;this.lastInputSessionPointerCount=this.currentPointerCount()}removePointer(pointerId){if(this.DEBUG==true){console.log(`[PointerManager] starting to remove Pointer #${pointerId}`);console.log(`[PointerManager] state: ${this.state}`)}const pointer=this.onSurfacePointers[pointerId];this.lastRemovedPointer=pointer;delete this.onSurfacePointers[pointerId];if(pointerId in this.unusedPointers)delete this.unusedPointers[pointerId];if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)){if(this.activePointerInput.pointerIds.has(pointerId)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from DualPointerInput`);const remainingPointer=this.activePointerInput.removePointer(pointerId);this.activePointerInput=null;const unusedPointerInput=this.getUnusedPointer();if(unusedPointerInput instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))this.setActiveDualPointerInput(remainingPointer,unusedPointerInput);else this.setActiveSinglePointerInput(remainingPointer)}}else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from SinglePointerInput`);this.activePointerInput=null;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;if(Object.keys(this.unusedPointers).length>0){this.unusedPointers={};throw new Error("[PointerManager] found unused Pointers although there should not be any")}if(Object.keys(this.onSurfacePointers).length>0){this.onSurfacePointers={};throw new Error("[PointerManager] found onSurfacePointers although there should not be any")}}if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveSinglePointerInput(pointer){pointer.reset();const singlePointerInput=new(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)(pointer);this.activePointerInput=singlePointerInput;this.pointerAllocation[pointer.pointerId]=singlePointerInput;delete this.unusedPointers[pointer.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveDualPointerInput(pointer_1,pointer_2){pointer_1.reset();pointer_2.reset();const dualPointerInput=new(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)(pointer_1,pointer_2);this.activePointerInput=dualPointerInput;this.pointerAllocation[pointer_1.pointerId]=dualPointerInput;this.pointerAllocation[pointer_2.pointerId]=dualPointerInput;delete this.unusedPointers[pointer_1.pointerId];delete this.unusedPointers[pointer_2.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}hasPointersOnSurface(){if(Object.keys(this.onSurfacePointers).length>0)return true;return false}currentPointerCount(){return Object.keys(this.onSurfacePointers).length}getUnusedPointer(){if(Object.keys(this.unusedPointers).length>0){const pointer=Object.values(this.unusedPointers)[0];return pointer}return null}getPointerFromId(pointerId){if(pointerId in this.onSurfacePointers)return this.onSurfacePointers[pointerId];return null}getlastRemovedPointerInput(){if(this.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))return this.pointerAllocation[this.lastRemovedPointer.pointerId];return null}onIdle(){for(const pointerId in this.onSurfacePointers){const pointer=this.onSurfacePointers[pointerId];pointer.onIdle()}this.activePointerInput?.onIdle()}onPointerMove(pointermoveEvent){const pointer=this.getPointerFromId(pointermoveEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerMove(pointermoveEvent);this.activePointerInput?.onPointerMove(pointermoveEvent)}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerManager] pointerup detected");const pointer=this.getPointerFromId(pointerupEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerUp(pointerupEvent);this.activePointerInput?.onPointerUp(pointerupEvent);this.removePointer(pointerupEvent.pointerId)}onPointerCancel(pointercancelEvent){if(this.DEBUG==true)console.log("[PointerManager] pointercancel detected");const pointer=this.getPointerFromId(pointercancelEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerCancel(pointercancelEvent);this.activePointerInput?.onPointerCancel(pointercancelEvent);this.removePointer(pointercancelEvent.pointerId)}}const $03c52e54621b9b86$var$ALL_GESTURE_CLASSES=[(0,$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7),(0,$5653a1f5fdc2db30$export$90610caf6d8d0242),(0,$7a0f7fd2f33d0212$export$f86166cd6057c2d1),(0,$ed7931f1d96d5294$export$826ae541ddf1527b),(0,$9fe2bb90b337f66c$export$152db69a76b6b79e),(0,$59226122237c359c$export$8847187e02a498e8)];class $03c52e54621b9b86$export$9371bd96776f4e82{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture;this.activeGestures=[];this.hadActiveGestureDuringCurrentContact=false;this.gestureEventHandlers={};this.lastRecognitionTimestamp=null;this.idleRecognitionIntervalId=null;this.pointerEventHandlers={};this.touchEventHandlers={};options=options||{};this.options={DEBUG:false,DEBUG_GESTURES:false,DEBUG_POINTERMANAGER:false,bubbles:true,handleTouchEvents:true,consecutiveGestures:true,simultaneousGestures:true,supportedGestures:[],...options};this.DEBUG=this.options.DEBUG;const supportedGestures=options.supportedGestures??$03c52e54621b9b86$var$ALL_GESTURE_CLASSES;const instantiatedGestures=supportedGestures.map(GestureClass=>{if(typeof GestureClass==="function"){const gestureOptions={bubbles:this.options.bubbles,DEBUG:this.options.DEBUG_GESTURES};return new GestureClass(domElement,gestureOptions)}if(typeof GestureClass==="object")return GestureClass;throw new Error(`unsupported gesture type: ${typeof GestureClass}`)});this.supportedGestures=instantiatedGestures;this.domElement=domElement;const pointerManagerOptions={DEBUG:this.options.DEBUG_POINTERMANAGER};this.pointerManager=new(0,$4f5a7b355079efa2$export$af6d1be017a420a)(pointerManagerOptions);this.addPointerEventListeners();this.addTouchEventListeners()}addPointerEventListeners(){const domElement=this.domElement;const onPointerDown=this.onPointerDown.bind(this);const onPointerMove=this.onPointerMove.bind(this);const onPointerUp=this.onPointerUp.bind(this);const onPointerCancel=this.onPointerCancel.bind(this);domElement.addEventListener("pointerdown",onPointerDown,{passive:true});domElement.addEventListener("pointermove",onPointerMove,{passive:true});domElement.addEventListener("pointerup",onPointerUp,{passive:true});domElement.addEventListener("pointercancel",onPointerCancel,{passive:true});this.pointerEventHandlers={pointerdown:onPointerDown,pointermove:onPointerMove,pointerup:onPointerUp,pointercancel:onPointerCancel}}onPointerDown(pointerdownEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerdown event detected");this.domElement.setPointerCapture(pointerdownEvent.pointerId);this.pointerManager.addPointer(pointerdownEvent);this.options.pointerdown?.(pointerdownEvent,this);if(this.idleRecognitionIntervalId!=null)this.clearIdleRecognitionInterval();this.idleRecognitionIntervalId=setInterval(()=>{this.onIdle()},100)}onPointerMove(pointermoveEvent){if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerMove(pointermoveEvent);this.recognizeGestures();this.options.pointermove?.(pointermoveEvent,this)}}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerup event detected");this.domElement.releasePointerCapture(pointerupEvent.pointerId);if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerUp(pointerupEvent);this.recognizeGestures();this.options.pointerup?.(pointerupEvent,this)}this.clearIdleRecognitionInterval()}onPointerCancel(pointercancelEvent){this.domElement.releasePointerCapture(pointercancelEvent.pointerId);if(this.DEBUG==true)console.log("[PointerListener] pointercancel detected");this.pointerManager.onPointerCancel(pointercancelEvent);this.recognizeGestures();this.clearIdleRecognitionInterval();this.options.pointercancel?.(pointercancelEvent,this)}removePointerEventListeners(){for(const event in this.pointerEventHandlers){const handler=this.pointerEventHandlers[event];this.domElement.removeEventListener(event,handler)}}addTouchEventListeners(){if(this.options.handleTouchEvents==true){const onTouchMove=this.onTouchMove.bind(this);this.domElement.addEventListener("touchmove",onTouchMove);this.touchEventHandlers["touchmove"]=onTouchMove}}removeTouchEventListeners(){for(const event in this.touchEventHandlers){const handler=this.touchEventHandlers[event];this.domElement.removeEventListener(event,handler)}}onTouchMove(event){for(let g=0;g<this.supportedGestures.length;g++){const gesture=this.supportedGestures[g];gesture.onTouchMove(event)}}onIdle(){if(this.pointerManager.hasPointersOnSurface()==false)this.clearIdleRecognitionInterval();else{const now=(new Date).getTime();let timedelta=null;if(this.lastRecognitionTimestamp!=null)timedelta=now-this.lastRecognitionTimestamp;if(timedelta==null||timedelta>100){this.pointerManager.onIdle();if(this.DEBUG==true)console.log("[PointerListener] onIdle - running idle recognition");this.recognizeGestures()}}}clearIdleRecognitionInterval(){if(this.idleRecognitionIntervalId!=null){clearInterval(this.idleRecognitionIntervalId);this.idleRecognitionIntervalId=null}}recognizeGestures(){this.lastRecognitionTimestamp=(new Date).getTime();let gesturesForRecognition=this.supportedGestures;if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture){if(this.hadActiveGestureDuringCurrentContact==true&&this.pointerManager.hasPointersOnSurface()==true)gesturesForRecognition=[]}for(let g=0;g<gesturesForRecognition.length;g++){const gesture=gesturesForRecognition[g];gesture.recognize(this.pointerManager);this.updateActiveGestures(gesture);if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)break}if(this.DEBUG==true)console.log(`[PointerListener] hadActiveGestureDuringCurrentContact: ${this.hadActiveGestureDuringCurrentContact}`);if(this.pointerManager.hasPointersOnSurface()==false)this.hadActiveGestureDuringCurrentContact=false}updateActiveGestures(gesture){if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){this.hadActiveGestureDuringCurrentContact=true;if(this.activeGestures.indexOf(gesture)<0)this.activeGestures.push(gesture)}else{const index=this.activeGestures.indexOf(gesture);if(index>=0)this.activeGestures.splice(index,1)}if(this.activeGestures.length>0)this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture;else this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture}parseEventsString(eventsString){return eventsString.trim().split(/\s+/g)}on(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(!(eventType in this.gestureEventHandlers))this.gestureEventHandlers[eventType]=[];if(this.gestureEventHandlers[eventType].indexOf(handlerReference)==-1)this.gestureEventHandlers[eventType].push(handlerReference);this.domElement.addEventListener(eventType,handlerReference,{capture:false,passive:true})}}off(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);if(this.DEBUG==true){console.log(`[PointerListener] turning off events: ${eventsString}`);console.log(this.gestureEventHandlers)}for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];const index=handlerList.indexOf(handlerReference);if(this.DEBUG==true)console.log(`[PointerListener] turning off ${eventType}. Index on handlerList: ${index}`);if(index>=0){handlerList.splice(index,1);this.gestureEventHandlers[eventType]=handlerList}this.domElement.removeEventListener(eventType,handlerReference,false)}}}destroy(){for(const eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];for(let h=0;h<handlerList.length;h++){const handler=handlerList[h];this.domElement.removeEventListener(eventType,handler)}delete this.gestureEventHandlers[eventType]}this.removePointerEventListeners();this.removeTouchEventListeners()}}export{$a2188ba8c266b376$export$cacd6541cfeeb6c1 as Direction,$a2188ba8c266b376$export$86ae6e8ac17a67c6 as Directions,$a2188ba8c266b376$export$a1d3109c03b1d511 as GestureState,$1f7944f1763e45ce$export$2db6c17465f94a2 as Geometry,$03c52e54621b9b86$export$9371bd96776f4e82 as PointerListener,$f752273e736c5336$export$6e9c3b1e1fa2b597 as GestureEvent,$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7 as Tap,$5653a1f5fdc2db30$export$90610caf6d8d0242 as Press,$7a0f7fd2f33d0212$export$f86166cd6057c2d1 as Pan,$59226122237c359c$export$8847187e02a498e8 as TwoFingerPan,$ed7931f1d96d5294$export$826ae541ddf1527b as Pinch,$9fe2bb90b337f66c$export$152db69a76b6b79e as Rotate}; | ||
let $a2188ba8c266b376$export$cacd6541cfeeb6c1;(function(Direction){Direction["None"]="0";Direction["Left"]="left";Direction["Right"]="right";Direction["Up"]="up";Direction["Down"]="down"})($a2188ba8c266b376$export$cacd6541cfeeb6c1||($a2188ba8c266b376$export$cacd6541cfeeb6c1={}));const $a2188ba8c266b376$export$86ae6e8ac17a67c6=Object.freeze({Horizontal:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right],Vertical:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down],All:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down,$a2188ba8c266b376$export$cacd6541cfeeb6c1.None]});let $a2188ba8c266b376$export$a1d3109c03b1d511;(function(GestureState){GestureState["Inactive"]="inactive";GestureState["Active"]="active";GestureState["Blocked"]="blocked"})($a2188ba8c266b376$export$a1d3109c03b1d511||($a2188ba8c266b376$export$a1d3109c03b1d511={}));let $a2188ba8c266b376$export$b8339a9622c147c0;(function(PointerManagerState){PointerManagerState["NoPointer"]="nopointer";PointerManagerState["SinglePointer"]="singlepointer";PointerManagerState["DualPointer"]="dualpointer"})($a2188ba8c266b376$export$b8339a9622c147c0||($a2188ba8c266b376$export$b8339a9622c147c0={}));let $a2188ba8c266b376$export$2fb579dd5dfdbea;(function(PointerListenerState){PointerListenerState["NoActiveGesture"]="noactivegesture";PointerListenerState["ActiveGesture"]="activegesture"})($a2188ba8c266b376$export$2fb579dd5dfdbea||($a2188ba8c266b376$export$2fb579dd5dfdbea={}));class $07c7ab2351895186$export$baf26146a414f24a{constructor(x,y){this.x=x;this.y=y}}class $c0ee1a209fd4fc8d$export$9b781de7bf37bf48{constructor(startPoint,endPoint){this.startPoint=startPoint;this.endPoint=endPoint;this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None;this.deltaX=this.endPoint.x-this.startPoint.x;this.deltaY=this.endPoint.y-this.startPoint.y;this.x=this.deltaX;this.y=this.deltaY;this.vectorLength=Math.sqrt(Math.pow(this.deltaX,2)+Math.pow(this.deltaY,2));if(Math.abs(this.deltaX)>Math.abs(this.deltaY)){if(this.startPoint.x<this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Right;else if(this.startPoint.x>this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Left}else{if(this.startPoint.y<this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Down;else if(this.startPoint.y>this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Up}}}class $1f7944f1763e45ce$export$2db6c17465f94a2{static getVector(startPointerEvent,endPointerEvent){const startPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(startPointerEvent.clientX,startPointerEvent.clientY);const endPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(endPointerEvent.clientX,endPointerEvent.clientY);const vector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vector}static getSpeed(vector,startTimestamp,endTimestamp){let speed=0;const timespan_ms=endTimestamp-startTimestamp;const timespan_s=timespan_ms/1e3;if(vector!=null&×pan_s!=0)speed=vector.vectorLength/timespan_s;return speed}static calculateRotationAngle(vector_1,vector_2){const angleVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const angleVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const origin=new(0,$07c7ab2351895186$export$baf26146a414f24a)(0,0);const translationVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_1.startPoint,origin);const translatedEndPoint_1=this.translatePoint(angleVector_1.endPoint,translationVector_1);const translationVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_2.startPoint,origin);const translatedEndPoint_2=this.translatePoint(angleVector_2.endPoint,translationVector_2);const rotationAngle=this.calcAngleRad(translatedEndPoint_1)*-1;const x_2_rotated=translatedEndPoint_2.x*Math.cos(rotationAngle)-translatedEndPoint_2.y*Math.sin(rotationAngle);const y_2_rotated=Math.round(translatedEndPoint_2.x*Math.sin(rotationAngle)+translatedEndPoint_2.y*Math.cos(rotationAngle));const angleDeg=Math.atan2(y_2_rotated,x_2_rotated)*180/Math.PI;return angleDeg}static calculateVectorAngle(vector_1,vector_2){let angleDeg=0;if(vector_1.vectorLength>0&&vector_2.vectorLength>0){const cos=(vector_1.x*vector_2.x+vector_1.y*vector_2.y)/(vector_1.vectorLength*vector_2.vectorLength);const angleRad=Math.acos(cos);angleDeg=this.rad2deg(angleRad)}return angleDeg}static translatePoint(point,vector){const newX=point.x+vector.x;const newY=point.y+vector.y;const translatedPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(newX,newY);return translatedPoint}static calcAngleDegrees(point){let angle=Math.atan2(point.y,point.x)*180/Math.PI;if(angle<0)angle=360+angle;return angle}static calcAngleRad(point){let angle=Math.atan2(point.y,point.x);if(angle<0)angle=2*Math.PI+angle;return angle}static deg2rad(angleDeg){const rad=Math.PI/180*angleDeg;return rad}static rad2deg(angleRad){const deg=angleRad/(Math.PI/180);return deg}static getCenter(pointA,pointB){const centerX=(pointA.x+pointB.x)/2;const centerY=(pointA.y+pointB.y)/2;const center=new(0,$07c7ab2351895186$export$baf26146a414f24a)(centerX,centerY);return center}static getCenterMovementVector(vector_1,vector_2){const startPoint=this.getCenter(vector_1.startPoint,vector_2.startPoint);const endPoint=this.getCenter(vector_1.endPoint,vector_2.endPoint);const vectorBetweenCenterPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vectorBetweenCenterPoints}static calculateAbsoluteDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const absoluteDistanceChange=vectorBetweenEndPoints.vectorLength-vectorBetweenStartPoints.vectorLength;return absoluteDistanceChange}static calculateRelativeDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const relativeDistanceChange=vectorBetweenEndPoints.vectorLength/vectorBetweenStartPoints.vectorLength;return relativeDistanceChange}}class $5fe7e4b452e08fad$export$bbcc47898202c6b8{constructor(pointer){this.pointer=pointer;this.parameters=pointer.parameters}getTarget(){return this.pointer.initialPointerEvent.target}getCurrentPointerEvent(){return this.pointer.currentPointerEvent}getCurrentDirection(){return this.parameters.live.vector.direction}onIdle(){}onPointerMove(pointermoveEvent){}onPointerUp(pointerupEvent){}onPointerLeave(pointerleaveEvent){}onPointerCancel(pointercancelEvent){}}let $d25d2392b002d8dc$var$PointerState;(function(PointerState){PointerState["Active"]="active";PointerState["Removed"]="removed";PointerState["Canceled"]="canceled"})($d25d2392b002d8dc$var$PointerState||($d25d2392b002d8dc$var$PointerState={}));class $d25d2392b002d8dc$export$b56007f12edf0c17{constructor(pointerEvent,options){this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;const now=(new Date).getTime();this.pointerId=pointerEvent.pointerId;this.vectorTimespan=this.options.vectorTimespan??100;this.initialPointerEvent=pointerEvent;this.currentPointerEvent=pointerEvent;this.recognizedEvents=[pointerEvent];this.state=$d25d2392b002d8dc$var$PointerState.Active;const nullVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(pointerEvent,pointerEvent);const globalParameters={startX:this.initialPointerEvent.clientX,startY:this.initialPointerEvent.clientY,vector:nullVector,deltaX:0,deltaY:0,startTimestampUTC:now,startTimestamp:this.initialPointerEvent.timeStamp,currentTimestamp:this.initialPointerEvent.timeStamp,endTimestamp:null,maximumSpeed:0,currentSpeed:0,distance:0,maximumDistance:0,averageSpeed:0,finalSpeed:0,traveledDistance:0,hasBeenMoved:false,duration:0};const liveParameters={duration:0,speed:0,vector:nullVector,distance:0,isMoving:false};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}getTarget(){return this.initialPointerEvent.target}reset(){}onIdle(){const now=(new Date).getTime();const duration=now-this.parameters.global.startTimestampUTC;this.parameters.global.duration=duration}onPointerMove(pointermoveEvent){this.parameters.global.hasBeenMoved=true;this.parameters.live.isMoving=true;this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.parameters.global.finalSpeed=this.parameters.live.speed;this.parameters.live.speed=0;this.parameters.live.isMoving=false;this.state=$d25d2392b002d8dc$var$PointerState.Removed;this.parameters.global.endTimestamp=pointerupEvent.timeStamp;this.update(pointerupEvent);if(this.DEBUG===true)console.log(`[PointerInput] pointerdown ended. pointerdown duration: ${this.parameters.global.duration}ms`)}onPointerLeave(pointerleaveEvent){this.onPointerUp(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent);this.parameters.live.speed=0;this.state=$d25d2392b002d8dc$var$PointerState.Canceled;this.parameters.live.isMoving=false;this.parameters.global.endTimestamp=pointercancelEvent.timeStamp;if(this.DEBUG===true)console.log(`[PointerInput] canceled, pointerdown duration:${this.parameters.global.duration}ms`)}update(pointerEvent){this.currentPointerEvent=pointerEvent;this.recognizedEvents.push(pointerEvent);const timedPointerEvents=this.getTimedPointerEvents();const liveVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(timedPointerEvents[0],timedPointerEvents[1]);this.parameters.live.vector=liveVector;this.parameters.live.distance=liveVector.vectorLength;this.parameters.live.speed=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getSpeed(liveVector,timedPointerEvents[0].timeStamp,timedPointerEvents[1].timeStamp);if(this.parameters.live.speed>this.parameters.global.maximumSpeed)this.parameters.global.maximumSpeed=this.parameters.live.speed;this.parameters.global.currentTimestamp=pointerEvent.timeStamp;this.parameters.global.duration=pointerEvent.timeStamp-this.parameters.global.startTimestamp;this.parameters.global.deltaX=liveVector.endPoint.x-this.parameters.global.startX;this.parameters.global.deltaY=liveVector.endPoint.y-this.parameters.global.startY;const globalVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(this.initialPointerEvent,this.currentPointerEvent);this.parameters.global.vector=globalVector;this.parameters.global.distance=globalVector.vectorLength;if(globalVector.vectorLength>this.parameters.global.maximumDistance)this.parameters.global.maximumDistance=globalVector.vectorLength;if(this.DEBUG===true){console.log(`[PointerInput] current speed: ${this.parameters.live.speed}px/s`);console.log(`[PointerInput] pointerdown duration: ${this.parameters.global.duration}ms`);console.log(`[PointerInput] live vector length within vectorTimespan: ${this.parameters.live.vector.vectorLength}px`)}}getTimedPointerEvents(){let startPointerEvent=this.initialPointerEvent;const endPointerEvent=this.recognizedEvents[this.recognizedEvents.length-1];let startIndex=this.recognizedEvents.length-1;let elapsedTime=0;const endTimeStamp=endPointerEvent.timeStamp;while(elapsedTime<this.vectorTimespan){startIndex=startIndex-1;if(startIndex<0)break;startPointerEvent=this.recognizedEvents[startIndex];elapsedTime=endTimeStamp-startPointerEvent.timeStamp}const pointerEvents=[startPointerEvent,endPointerEvent];this.recognizedEvents=this.recognizedEvents.slice(-20);return pointerEvents}}class $f752273e736c5336$export$6e9c3b1e1fa2b597 extends CustomEvent{}class $f752273e736c5336$export$61ce360501d38a6f{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.validPointerManagerState=null;this.validPointerInputConstructor=(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8);this.domElement=domElement;this.initialPointerEvent=null;this.initialParameters=null;this.activeStateParameters=null;this.options={bubbles:true,blocks:[],supportedDirections:[],DEBUG:false,...options};this.DEBUG=this.options.DEBUG}getEmptyGestureParameters(){const nullRecognitionParameters={global:{min:{},max:{},boolean:{}},live:{min:{},max:{},boolean:{}}};return nullRecognitionParameters}getGestureParameters(){let gestureParameters;if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){gestureParameters=this.activeStateParameters;if(this.DEBUG==true){console.log(`[${this.eventBaseName}] validating using activeStateParameters`);console.log(gestureParameters)}}else{if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating using initialParameters`);gestureParameters=this.initialParameters}if(gestureParameters==null)throw new Error("[Gesture] no gesture parameters found. Do not call .getGestureParameters on abstract class Gesture");return gestureParameters}validateGestureParameters(pointerInput){const gestureParameters=this.getGestureParameters();let isValid=true;let timespan;for(timespan in gestureParameters){const timedGestureParameters=gestureParameters[timespan];const timedPointerInputValues=pointerInput.parameters[timespan];let minOrMaxOrBoolean;for(minOrMaxOrBoolean in timedGestureParameters){const evaluationParameters=timedGestureParameters[minOrMaxOrBoolean];let gestureParameterName;for(gestureParameterName in evaluationParameters){const gestureParameter=evaluationParameters[gestureParameterName];const pointerInputValue=timedPointerInputValues[gestureParameterName];if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating ${timespan} ${minOrMaxOrBoolean}: required: ${gestureParameter}, pointer: ${pointerInputValue}`);if(typeof gestureParameter=="boolean"&&typeof pointerInputValue=="boolean")isValid=this.validateBooleanParameter(gestureParameter,pointerInputValue);else if(typeof gestureParameter=="number"&&typeof pointerInputValue=="number")isValid=this.validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMaxOrBoolean);if(isValid==false){if(this.DEBUG==true)console.log(`[${this.eventBaseName}] invalidated `);return false}}}}return true}validateBooleanParameter(gestureParameter,pointerInputValue){if(gestureParameter==null)return true;else if(gestureParameter==pointerInputValue){if(this.DEBUG==true)console.log(`validated: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return true}if(this.DEBUG==true)console.log(`dismissing ${this.eventBaseName}: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return false}validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMax){if(minOrMax=="min"){if(pointerInputValue>=gestureParameter)return true}else if(minOrMax=="max"){if(pointerInputValue<=gestureParameter)return true}return false}validateDirection(pointerInput){const currentDirection=pointerInput.getCurrentDirection();if(this.options.supportedDirections.length&&!this.options.supportedDirections.includes(currentDirection)){if(this.DEBUG==true)console.log(`[Gestures] dismissing ${this.eventBaseName}: supported directions: ${this.options.supportedDirections}, current direction: ${currentDirection}`);return false}return true}validateGestureState(){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked)return false;return true}validatePointerManagerState(pointerManager){if(pointerManager.state==this.validPointerManagerState)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerManagerState invalidated ${this.eventBaseName}: ${pointerManager.state}`);return false}validatePointerInputConstructor(pointerInput){if(pointerInput instanceof this.validPointerInputConstructor)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerInputConstructor invalidated ${this.eventBaseName}: ${this.validPointerInputConstructor}`);return false}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);const pointerInput=pointerManager.activePointerInput;if(isValid==true&&pointerInput!=null){isValid=this.validatePointerInputConstructor(pointerInput);if(isValid==true)isValid=this.validateDirection(pointerInput);if(isValid==true)isValid=this.validateGestureParameters(pointerInput)}return isValid}recognize(pointerManager){const isValid=this.validate(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive)this.onStart(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.initialPointerEvent==null)this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}else if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active&&isValid==false)this.onEnd(pointerManager);else if(this.DEBUG==true)console.log(`not firing event ${this.eventBaseName}. No SinglePointerInput found`)}getPointerInput(pointerManager){if(pointerManager.hasPointersOnSurface()==true&&pointerManager.activePointerInput instanceof this.validPointerInputConstructor)return pointerManager.activePointerInput;else if(pointerManager.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17)){const pointerInput=pointerManager.getlastRemovedPointerInput();if(pointerInput instanceof this.validPointerInputConstructor)return pointerInput}return null}setInitialPointerEvent(pointerManager){const pointerInput=this.getPointerInput(pointerManager);if(pointerInput instanceof this.validPointerInputConstructor){const pointerEvent=pointerInput.getCurrentPointerEvent();this.initialPointerEvent=pointerEvent}}emit(pointerManager,eventName){eventName=eventName||this.eventBaseName;if(this.DEBUG===true)console.log(`[Gestures] detected and firing event ${eventName}`);const pointerInput=this.getPointerInput(pointerManager);if(pointerInput!=null){const target=pointerInput.getTarget();if(target instanceof EventTarget){const eventData=this.getEventData(pointerInput,pointerManager);const eventOptions={detail:eventData,bubbles:this.options.bubbles};if(this.DEBUG===true)console.log(eventOptions);const event=new $f752273e736c5336$export$6e9c3b1e1fa2b597(eventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(event);else this.domElement.dispatchEvent(event);const currentDirection=eventData.live.direction;const hasSupportedDirections=!!this.options.supportedDirections;if(hasSupportedDirections==true&¤tDirection!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None&&(eventName==this.eventBaseName||eventName=="swipe"))for(let d=0;d<this.options.supportedDirections.length;d++){const direction=this.options.supportedDirections[d];if(direction==currentDirection){const directionEventName=eventName+direction;if(this.DEBUG==true)console.log(`[Gestures] detected and firing event ${directionEventName}`);const directionEvent=new CustomEvent(directionEventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(directionEvent);else this.domElement.dispatchEvent(directionEvent)}}}}}onStart(pointerManager){this.blockGestures();this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.setInitialPointerEvent(pointerManager);const eventName=`${this.eventBaseName}start`;this.emit(pointerManager,eventName)}onEnd(pointerManager){this.unblockGestures();if(this.DEBUG==true)console.log(`[${this.eventBaseName}] ended. Setting ${this.eventBaseName}.state = ${(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}`);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;const eventName=`${this.eventBaseName}end`;this.emit(pointerManager,eventName)}onTouchStart(event){}onTouchMove(event){}onTouchEnd(event){}onTouchCancel(event){}block(gesture){if(this.options.blocks.indexOf(gesture)==-1)this.options.blocks.push(gesture)}unblock(gesture){if(this.options.blocks.indexOf(gesture)!=-1)this.options.blocks.splice(this.options.blocks.indexOf(gesture),1)}blockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive){if(this.DEBUG==false)console.log(`[Gesture] blocking ${gesture.eventBaseName}`);gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked}}}unblockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}}getEventData(pointerInput,pointerManager){throw new Error("Gesture subclasses require a getEventData method()")}}class $e8978caba4d46d00$export$718b85c80185d86e extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(singlePointerInput,pointerManager){const globalParameters=singlePointerInput.parameters.live;const liveParameters=singlePointerInput.parameters.live;let globalVector=globalParameters.vector;let globalDuration=globalParameters.duration;if(this.initialPointerEvent!=null){const globalStartPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(this.initialPointerEvent.clientX,this.initialPointerEvent.clientY);const globalEndPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(singlePointerInput.pointer.currentPointerEvent.clientX,singlePointerInput.pointer.currentPointerEvent.clientY);globalVector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(globalStartPoint,globalEndPoint);globalDuration=singlePointerInput.pointer.currentPointerEvent.timeStamp-this.initialPointerEvent.timeStamp}const globalGestureEventData={deltaX:globalVector.x,deltaY:globalVector.y,distance:globalVector.vectorLength,speedX:globalVector.x/globalDuration,speedY:globalVector.y/globalDuration,speed:globalVector.vectorLength/globalDuration,direction:globalVector.direction,scale:1,rotation:0,center:{x:globalParameters.vector.endPoint.x,y:globalParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.vector.x,deltaY:liveParameters.vector.y,distance:liveParameters.vector.vectorLength,speedX:liveParameters.vector.x/singlePointerInput.pointer.vectorTimespan,speedY:liveParameters.vector.y/singlePointerInput.pointer.vectorTimespan,speed:liveParameters.speed,direction:liveParameters.vector.direction,scale:1,rotation:0,center:{x:liveParameters.vector.endPoint.x,y:liveParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const eventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return eventData}}class $b6ec4e8a6d9d51ec$export$4451a18ddc7083b7 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.eventBaseName="tap";let globalMaxDuration=200;let liveMaxDistance=30;let globalMaxDistance=30;if(options){if("maxDuration"in options)globalMaxDuration=options["maxDuration"];if("maxDistance"in options){liveMaxDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.max["duration"]=globalMaxDuration;this.initialParameters.live.max["distance"]=liveMaxDistance;this.initialParameters.global.max["distance"]=globalMaxDistance}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);if(isValid===true){if(pointerManager.lastInputSessionPointerCount!=1)return false;else{const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))isValid=this.validateGestureParameters(singlePointerInput);else isValid=false}}return isValid}onStart(pointerManager){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}}class $5653a1f5fdc2db30$export$90610caf6d8d0242 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){static minDuration=600;constructor(domElement,options){super(domElement,options);this.eventBaseName="press";let globalMinDuration=600;let globalMaxDistance=10;let globalMaxMaximumDistance=20;if(options){if("minDuration"in options)globalMinDuration=options["minDuration"];if("maxDistance"in options){globalMaxMaximumDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.min["duration"]=globalMinDuration;this.initialParameters.global.max["distance"]=globalMaxDistance;this.initialParameters.global.max["maximumDistance"]=globalMaxMaximumDistance;this.hasBeenEmitted=false}recognize(pointerManager){const isValid=this.validate(pointerManager);const singlePointerInput=this.getPointerInput(pointerManager);const minDuration=this.initialParameters.global.min["duration"]||$5653a1f5fdc2db30$export$90610caf6d8d0242.minDuration;if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(isValid==true&&this.hasBeenEmitted==false){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager);this.hasBeenEmitted=true;this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.blockGestures()}else if(isValid==false&&this.hasBeenEmitted==true){this.onEnd(pointerManager);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.hasBeenEmitted=false}else{const duration=singlePointerInput.parameters.global.duration;if(this.hasBeenEmitted==true&&duration<=minDuration)this.hasBeenEmitted=false}}if(singlePointerInput==null)this.hasBeenEmitted=false}}class $7a0f7fd2f33d0212$export$f86166cd6057c2d1 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;this.eventBaseName="pan";this.initialParameters.global.min["duration"]=0;this.initialParameters.live.min["distance"]=10;this.initialParameters.global.boolean["hasBeenMoved"]=true;this.swipeFinalSpeed=600;this.isSwipe=false;this.options.supportedDirections=options?.supportedDirections??(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;this.initialSupportedDirections=this.options.supportedDirections}validate(pointerManager){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active)this.options.supportedDirections=(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;const isValid=super.validate(pointerManager);return isValid}onStart(pointerManager){this.isSwipe=false;super.onStart(pointerManager)}onEnd(pointerManager){const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.swipeFinalSpeed<singlePointerInput.parameters.global.finalSpeed&&singlePointerInput.parameters.live.vector.direction!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None){this.isSwipe=true;this.emit(pointerManager,"swipe")}else if(this.DEBUG==true){if(singlePointerInput.parameters.global.finalSpeed<this.swipeFinalSpeed)console.log(`[Pan] dismissing swipe. Final speed: ${singlePointerInput.parameters.global.finalSpeed} < ${this.swipeFinalSpeed}`);else console.log(`[Pan] dismissing swipe. Direction: ${singlePointerInput.parameters.live.vector.direction}`)}}super.onEnd(pointerManager);this.options.supportedDirections=this.initialSupportedDirections}onTouchMove(event){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.DEBUG==true)console.log("[Pan] preventing touchmove default");event.preventDefault();event.stopPropagation()}}}class $ba0aae203ff6b3f9$export$bdba51b3ce92d5f1{constructor(pointer_1,pointer_2){this.pointerIds=new Set([pointer_1.pointerId,pointer_2.pointerId]);this.startTimestamp=(new Date).getTime();this.pointerMap={};this.pointerMap[pointer_1.pointerId]=pointer_1;this.pointerMap[pointer_2.pointerId]=pointer_2;this.pointer_1=pointer_1;this.pointer_2=pointer_2;this.initialPointerEvent=pointer_1.initialPointerEvent;this.currentPointerEvent=pointer_1.initialPointerEvent;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalParameters={duration:0,center:globalCenter,centerHasBeenMoved:false,centerMovementDistance:0,centerMovementVector:globalCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveParameters={center:liveCenter,centerIsMoving:false,centerMovementDistance:0,centerMovementVector:liveCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}removePointer(pointerId){if(pointerId==this.pointer_1.pointerId)return this.pointer_2;else if(pointerId==this.pointer_2.pointerId)return this.pointer_1;else throw new Error(`[DualPointerInput] cannot remove Pointer #${pointerId}. The pointer is not part of this DualPointerInput`)}getTarget(){return this.initialPointerEvent.target}update(pointerEvent){if(pointerEvent instanceof PointerEvent)this.currentPointerEvent=pointerEvent;const now=(new Date).getTime();this.parameters.global["duration"]=now-this.startTimestamp;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(globalVector_1,globalVector_2);const globalRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(globalVector_1,globalVector_2);const globalRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(globalVector_1,globalVector_2);const globalVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(globalVector_1,globalVector_2);this.parameters.global["center"]=globalCenter;this.parameters.global["centerMovementVector"]=globalCenterMovementVector;this.parameters.global["centerMovementDistance"]=globalCenterMovementVector.vectorLength;this.parameters.global["absolutePointerDistanceChange"]=globalAbsoluteDistanceChange;this.parameters.global["relativePointerDistanceChange"]=globalRelativeDistanceChange;this.parameters.global["rotationAngle"]=globalRotationAngle;this.parameters.global["absoluteRotationAngle"]=Math.abs(globalRotationAngle);this.parameters.global["vectorAngle"]=globalVectorAngle;this.parameters.global["absoluteVectorAngle"]=Math.abs(globalVectorAngle);const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(liveVector_1,liveVector_2);const liveRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(liveVector_1,liveVector_2);const liveRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(liveVector_1,liveVector_2);const liveVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(liveVector_1,liveVector_2);if(liveCenterMovementVector.vectorLength>0){this.parameters.live.centerIsMoving=true;this.parameters.global.centerHasBeenMoved=true}else this.parameters.live.centerIsMoving=false;this.parameters.live["center"]=liveCenter;this.parameters.live["centerMovementDistance"]=liveCenterMovementVector.vectorLength;this.parameters.live["centerMovementVector"]=liveCenterMovementVector;this.parameters.live["absolutePointerDistanceChange"]=liveAbsoluteDistanceChange;this.parameters.live["relativePointerDistanceChange"]=liveRelativeDistanceChange;this.parameters.live["rotationAngle"]=liveRotationAngle;this.parameters.live["absoluteRotationAngle"]=Math.abs(liveRotationAngle);this.parameters.live["vectorAngle"]=liveVectorAngle;this.parameters.live["absoluteVectorAngle"]=Math.abs(liveVectorAngle)}onPointerMove(pointermoveEvent){this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.update(pointerupEvent)}onPointerLeave(pointerleaveEvent){this.update(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent)}onIdle(){this.update()}getCurrentDirection(){return this.parameters.live.centerMovementVector.direction}getCurrentPointerEvent(){return this.currentPointerEvent}}class $a1a4c2869495e604$export$f9d89efe4b7795e7 extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent_1=null;this.initialPointerEvent_2=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;this.validPointerInputConstructor=(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1);const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(dualPointerInput,pointerManager){const globalParameters=dualPointerInput.parameters.global;const liveParameters=dualPointerInput.parameters.live;const globalGestureEventData={deltaX:globalParameters.centerMovementVector.x,deltaY:globalParameters.centerMovementVector.y,distance:globalParameters.centerMovementDistance,speedX:globalParameters.centerMovementVector.x/globalParameters.duration,speedY:globalParameters.centerMovementVector.y/globalParameters.duration,speed:globalParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:globalParameters.centerMovementVector.direction,scale:globalParameters.relativePointerDistanceChange,rotation:globalParameters.rotationAngle,center:globalParameters.center,srcEvent:dualPointerInput.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.centerMovementVector.x,deltaY:liveParameters.centerMovementVector.y,distance:liveParameters.centerMovementDistance,speedX:liveParameters.centerMovementVector.x/globalParameters.duration,speedY:liveParameters.centerMovementVector.y/globalParameters.duration,speed:liveParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:liveParameters.centerMovementVector.direction,scale:liveParameters.relativePointerDistanceChange,rotation:liveParameters.rotationAngle,center:{x:liveParameters.centerMovementVector.startPoint.x,y:liveParameters.centerMovementVector.startPoint.y},srcEvent:dualPointerInput.currentPointerEvent};const gestureEventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return gestureEventData}}class $ed7931f1d96d5294$export$826ae541ddf1527b extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="pinch";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.min["absolutePointerDistanceChange"]=5;this.initialParameters.live.max["absoluteRotationAngle"]=20;this.initialParameters.live.min["absoluteVectorAngle"]=10}}class $9fe2bb90b337f66c$export$152db69a76b6b79e extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="rotate";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.min["absoluteRotationAngle"]=5;this.activeStateParameters.live.min["absoluteRotationAngle"]=0}}class $59226122237c359c$export$8847187e02a498e8 extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="twofingerpan";this.initialParameters.live.min["centerMovementDistance"]=10;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.max["absoluteVectorAngle"]=150;this.activeStateParameters.live.min["centerMovementDistance"]=0}}class $4f5a7b355079efa2$export$af6d1be017a420a{constructor(options){options=options||{};this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.activePointerInput=null;this.lastRemovedPointer=null;this.lastInputSessionPointerCount=0;this.pointerAllocation={};this.unusedPointers={};this.onSurfacePointers={}}addPointer(pointerdownEvent){if(this.DEBUG==true)console.log(`[PointerManager] adding Pointer #${pointerdownEvent.pointerId.toString()}`);const pointerOptions={DEBUG:this.DEBUG};const pointer=new(0,$d25d2392b002d8dc$export$b56007f12edf0c17)(pointerdownEvent,pointerOptions);this.onSurfacePointers[pointer.pointerId]=pointer;if(this.activePointerInput==null)this.setActiveSinglePointerInput(pointer);else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))this.setActiveDualPointerInput(this.activePointerInput.pointer,pointer);else if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1))this.unusedPointers[pointer.pointerId]=pointer;this.lastInputSessionPointerCount=this.currentPointerCount()}removePointer(pointerId){if(this.DEBUG==true){console.log(`[PointerManager] starting to remove Pointer #${pointerId}`);console.log(`[PointerManager] state: ${this.state}`)}const pointer=this.onSurfacePointers[pointerId];this.lastRemovedPointer=pointer;delete this.onSurfacePointers[pointerId];if(pointerId in this.unusedPointers)delete this.unusedPointers[pointerId];if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)){if(this.activePointerInput.pointerIds.has(pointerId)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from DualPointerInput`);const remainingPointer=this.activePointerInput.removePointer(pointerId);this.activePointerInput=null;const unusedPointerInput=this.getUnusedPointer();if(unusedPointerInput instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))this.setActiveDualPointerInput(remainingPointer,unusedPointerInput);else this.setActiveSinglePointerInput(remainingPointer)}}else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from SinglePointerInput`);this.activePointerInput=null;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;if(Object.keys(this.unusedPointers).length>0){this.unusedPointers={};throw new Error("[PointerManager] found unused Pointers although there should not be any")}if(Object.keys(this.onSurfacePointers).length>0){this.onSurfacePointers={};throw new Error("[PointerManager] found onSurfacePointers although there should not be any")}}if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveSinglePointerInput(pointer){pointer.reset();const singlePointerInput=new(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)(pointer);this.activePointerInput=singlePointerInput;this.pointerAllocation[pointer.pointerId]=singlePointerInput;delete this.unusedPointers[pointer.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveDualPointerInput(pointer_1,pointer_2){pointer_1.reset();pointer_2.reset();const dualPointerInput=new(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)(pointer_1,pointer_2);this.activePointerInput=dualPointerInput;this.pointerAllocation[pointer_1.pointerId]=dualPointerInput;this.pointerAllocation[pointer_2.pointerId]=dualPointerInput;delete this.unusedPointers[pointer_1.pointerId];delete this.unusedPointers[pointer_2.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}hasPointersOnSurface(){if(Object.keys(this.onSurfacePointers).length>0)return true;return false}currentPointerCount(){return Object.keys(this.onSurfacePointers).length}getUnusedPointer(){if(Object.keys(this.unusedPointers).length>0){const pointer=Object.values(this.unusedPointers)[0];return pointer}return null}getPointerFromId(pointerId){if(pointerId in this.onSurfacePointers)return this.onSurfacePointers[pointerId];return null}getlastRemovedPointerInput(){if(this.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))return this.pointerAllocation[this.lastRemovedPointer.pointerId];return null}onIdle(){for(const pointerId in this.onSurfacePointers){const pointer=this.onSurfacePointers[pointerId];pointer.onIdle()}this.activePointerInput?.onIdle()}onPointerMove(pointermoveEvent){const pointer=this.getPointerFromId(pointermoveEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerMove(pointermoveEvent);this.activePointerInput?.onPointerMove(pointermoveEvent)}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerManager] pointerup detected");const pointer=this.getPointerFromId(pointerupEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerUp(pointerupEvent);this.activePointerInput?.onPointerUp(pointerupEvent);this.removePointer(pointerupEvent.pointerId)}onPointerCancel(pointercancelEvent){if(this.DEBUG==true)console.log("[PointerManager] pointercancel detected");const pointer=this.getPointerFromId(pointercancelEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerCancel(pointercancelEvent);this.activePointerInput?.onPointerCancel(pointercancelEvent);this.removePointer(pointercancelEvent.pointerId)}}const $03c52e54621b9b86$var$ALL_GESTURE_CLASSES=[(0,$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7),(0,$5653a1f5fdc2db30$export$90610caf6d8d0242),(0,$7a0f7fd2f33d0212$export$f86166cd6057c2d1),(0,$ed7931f1d96d5294$export$826ae541ddf1527b),(0,$9fe2bb90b337f66c$export$152db69a76b6b79e),(0,$59226122237c359c$export$8847187e02a498e8)];class $03c52e54621b9b86$export$9371bd96776f4e82{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture;this.activeGestures=[];this.hadActiveGestureDuringCurrentContact=false;this.gestureEventHandlers={};this.lastRecognitionTimestamp=null;this.idleRecognitionIntervalId=null;this.pointerEventHandlers={};this.touchEventHandlers={};options=options||{};this.options={DEBUG:false,DEBUG_GESTURES:false,DEBUG_POINTERMANAGER:false,bubbles:true,handleTouchEvents:true,consecutiveGestures:true,simultaneousGestures:true,supportedGestures:[],...options};this.DEBUG=this.options.DEBUG;const supportedGestures=options.supportedGestures??$03c52e54621b9b86$var$ALL_GESTURE_CLASSES;const instantiatedGestures=supportedGestures.map(GestureClass=>{if(typeof GestureClass==="function"){const gestureOptions={bubbles:this.options.bubbles,DEBUG:this.options.DEBUG_GESTURES};return new GestureClass(domElement,gestureOptions)}if(typeof GestureClass==="object")return GestureClass;throw new Error(`unsupported gesture type: ${typeof GestureClass}`)});this.supportedGestures=instantiatedGestures;this.domElement=domElement;const pointerManagerOptions={DEBUG:this.options.DEBUG_POINTERMANAGER};this.pointerManager=new(0,$4f5a7b355079efa2$export$af6d1be017a420a)(pointerManagerOptions);this.addPointerEventListeners();this.addTouchEventListeners()}addPointerEventListeners(){const domElement=this.domElement;const onPointerDown=this.onPointerDown.bind(this);const onPointerMove=this.onPointerMove.bind(this);const onPointerUp=this.onPointerUp.bind(this);const onPointerCancel=this.onPointerCancel.bind(this);domElement.addEventListener("pointerdown",onPointerDown,{passive:true});domElement.addEventListener("pointermove",onPointerMove,{passive:true});domElement.addEventListener("pointerup",onPointerUp,{passive:true});domElement.addEventListener("pointercancel",onPointerCancel,{passive:true});this.pointerEventHandlers={pointerdown:onPointerDown,pointermove:onPointerMove,pointerup:onPointerUp,pointercancel:onPointerCancel}}onPointerDown(pointerdownEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerdown event detected");this.domElement.setPointerCapture(pointerdownEvent.pointerId);this.pointerManager.addPointer(pointerdownEvent);this.options.pointerdown?.(pointerdownEvent,this);if(this.idleRecognitionIntervalId!=null)this.clearIdleRecognitionInterval();this.idleRecognitionIntervalId=setInterval(()=>{this.onIdle()},100)}onPointerMove(pointermoveEvent){if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerMove(pointermoveEvent);this.recognizeGestures();this.options.pointermove?.(pointermoveEvent,this)}}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerup event detected");this.domElement.releasePointerCapture(pointerupEvent.pointerId);if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerUp(pointerupEvent);this.recognizeGestures();this.options.pointerup?.(pointerupEvent,this)}this.clearIdleRecognitionInterval()}onPointerCancel(pointercancelEvent){this.domElement.releasePointerCapture(pointercancelEvent.pointerId);if(this.DEBUG==true)console.log("[PointerListener] pointercancel detected");this.pointerManager.onPointerCancel(pointercancelEvent);this.recognizeGestures();this.clearIdleRecognitionInterval();this.options.pointercancel?.(pointercancelEvent,this)}removePointerEventListeners(){for(const event in this.pointerEventHandlers){const handler=this.pointerEventHandlers[event];this.domElement.removeEventListener(event,handler)}}addTouchEventListeners(){if(this.options.handleTouchEvents==true){const onTouchMove=this.onTouchMove.bind(this);this.domElement.addEventListener("touchmove",onTouchMove);this.touchEventHandlers["touchmove"]=onTouchMove}}removeTouchEventListeners(){for(const event in this.touchEventHandlers){const handler=this.touchEventHandlers[event];this.domElement.removeEventListener(event,handler)}}onTouchMove(event){for(let g=0;g<this.supportedGestures.length;g++){const gesture=this.supportedGestures[g];gesture.onTouchMove(event)}}onIdle(){if(this.pointerManager.hasPointersOnSurface()==false)this.clearIdleRecognitionInterval();else{const now=(new Date).getTime();let timedelta=null;if(this.lastRecognitionTimestamp!=null)timedelta=now-this.lastRecognitionTimestamp;if(timedelta==null||timedelta>100){this.pointerManager.onIdle();if(this.DEBUG==true)console.log("[PointerListener] onIdle - running idle recognition");this.recognizeGestures()}}}clearIdleRecognitionInterval(){if(this.idleRecognitionIntervalId!=null){clearInterval(this.idleRecognitionIntervalId);this.idleRecognitionIntervalId=null}}recognizeGestures(){this.lastRecognitionTimestamp=(new Date).getTime();let gesturesForRecognition=this.supportedGestures;if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture){if(this.hadActiveGestureDuringCurrentContact==true&&this.pointerManager.hasPointersOnSurface()==true)gesturesForRecognition=[]}for(let g=0;g<gesturesForRecognition.length;g++){const gesture=gesturesForRecognition[g];gesture.recognize(this.pointerManager);this.updateActiveGestures(gesture);if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)break}if(this.DEBUG==true)console.log(`[PointerListener] hadActiveGestureDuringCurrentContact: ${this.hadActiveGestureDuringCurrentContact}`);if(this.pointerManager.hasPointersOnSurface()==false)this.hadActiveGestureDuringCurrentContact=false}updateActiveGestures(gesture){if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){this.hadActiveGestureDuringCurrentContact=true;if(this.activeGestures.indexOf(gesture)<0)this.activeGestures.push(gesture)}else{const index=this.activeGestures.indexOf(gesture);if(index>=0)this.activeGestures.splice(index,1)}if(this.activeGestures.length>0)this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture;else this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture}parseEventsString(eventsString){return eventsString.trim().split(/\s+/g)}on(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(!(eventType in this.gestureEventHandlers))this.gestureEventHandlers[eventType]=[];if(this.gestureEventHandlers[eventType].indexOf(handlerReference)==-1)this.gestureEventHandlers[eventType].push(handlerReference);this.domElement.addEventListener(eventType,handlerReference,{capture:false,passive:true})}}off(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);if(this.DEBUG==true){console.log(`[PointerListener] turning off events: ${eventsString}`);console.log(this.gestureEventHandlers)}for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];const index=handlerList.indexOf(handlerReference);if(this.DEBUG==true)console.log(`[PointerListener] turning off ${eventType}. Index on handlerList: ${index}`);if(index>=0){handlerList.splice(index,1);this.gestureEventHandlers[eventType]=handlerList}this.domElement.removeEventListener(eventType,handlerReference,false)}}}destroy(){for(const eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];for(let h=0;h<handlerList.length;h++){const handler=handlerList[h];this.domElement.removeEventListener(eventType,handler)}delete this.gestureEventHandlers[eventType]}this.removePointerEventListeners();this.removeTouchEventListeners()}}export{$a2188ba8c266b376$export$cacd6541cfeeb6c1 as Direction,$a2188ba8c266b376$export$86ae6e8ac17a67c6 as Directions,$a2188ba8c266b376$export$a1d3109c03b1d511 as GestureState,$1f7944f1763e45ce$export$2db6c17465f94a2 as Geometry,$03c52e54621b9b86$export$9371bd96776f4e82 as PointerListener,$f752273e736c5336$export$6e9c3b1e1fa2b597 as GestureEvent,$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7 as Tap,$5653a1f5fdc2db30$export$90610caf6d8d0242 as Press,$7a0f7fd2f33d0212$export$f86166cd6057c2d1 as Pan,$59226122237c359c$export$8847187e02a498e8 as TwoFingerPan,$ed7931f1d96d5294$export$826ae541ddf1527b as Pinch,$9fe2bb90b337f66c$export$152db69a76b6b79e as Rotate}; |
@@ -1,1 +0,1 @@ | ||
let $a2188ba8c266b376$export$cacd6541cfeeb6c1;(function(Direction){Direction["None"]="0";Direction["Left"]="left";Direction["Right"]="right";Direction["Up"]="up";Direction["Down"]="down"})($a2188ba8c266b376$export$cacd6541cfeeb6c1||($a2188ba8c266b376$export$cacd6541cfeeb6c1={}));const $a2188ba8c266b376$export$86ae6e8ac17a67c6=Object.freeze({Horizontal:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right],Vertical:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down],All:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down,$a2188ba8c266b376$export$cacd6541cfeeb6c1.None]});let $a2188ba8c266b376$export$a1d3109c03b1d511;(function(GestureState){GestureState["Inactive"]="inactive";GestureState["Active"]="active";GestureState["Blocked"]="blocked"})($a2188ba8c266b376$export$a1d3109c03b1d511||($a2188ba8c266b376$export$a1d3109c03b1d511={}));let $a2188ba8c266b376$export$b8339a9622c147c0;(function(PointerManagerState){PointerManagerState["NoPointer"]="nopointer";PointerManagerState["SinglePointer"]="singlepointer";PointerManagerState["DualPointer"]="dualpointer"})($a2188ba8c266b376$export$b8339a9622c147c0||($a2188ba8c266b376$export$b8339a9622c147c0={}));let $a2188ba8c266b376$export$2fb579dd5dfdbea;(function(PointerListenerState){PointerListenerState["NoActiveGesture"]="noactivegesture";PointerListenerState["ActiveGesture"]="activegesture"})($a2188ba8c266b376$export$2fb579dd5dfdbea||($a2188ba8c266b376$export$2fb579dd5dfdbea={}));class $07c7ab2351895186$export$baf26146a414f24a{constructor(x,y){this.x=x;this.y=y}}class $c0ee1a209fd4fc8d$export$9b781de7bf37bf48{constructor(startPoint,endPoint){this.startPoint=startPoint;this.endPoint=endPoint;this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None;this.deltaX=this.endPoint.x-this.startPoint.x;this.deltaY=this.endPoint.y-this.startPoint.y;this.x=this.deltaX;this.y=this.deltaY;this.vectorLength=Math.sqrt(Math.pow(this.deltaX,2)+Math.pow(this.deltaY,2));if(Math.abs(this.deltaX)>Math.abs(this.deltaY)){if(this.startPoint.x<this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Right;else if(this.startPoint.x>this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Left}else{if(this.startPoint.y<this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Down;else if(this.startPoint.y>this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Up}}}class $1f7944f1763e45ce$export$2db6c17465f94a2{static getVector(startPointerEvent,endPointerEvent){const startPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(startPointerEvent.clientX,startPointerEvent.clientY);const endPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(endPointerEvent.clientX,endPointerEvent.clientY);const vector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vector}static getSpeed(vector,startTimestamp,endTimestamp){let speed=0;const timespan_ms=endTimestamp-startTimestamp;const timespan_s=timespan_ms/1e3;if(vector!=null&×pan_s!=0)speed=vector.vectorLength/timespan_s;return speed}static calculateRotationAngle(vector_1,vector_2){const angleVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const angleVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const origin=new(0,$07c7ab2351895186$export$baf26146a414f24a)(0,0);const translationVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_1.startPoint,origin);const translatedEndPoint_1=this.translatePoint(angleVector_1.endPoint,translationVector_1);const translationVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_2.startPoint,origin);const translatedEndPoint_2=this.translatePoint(angleVector_2.endPoint,translationVector_2);const rotationAngle=this.calcAngleRad(translatedEndPoint_1)*-1;const x_2_rotated=translatedEndPoint_2.x*Math.cos(rotationAngle)-translatedEndPoint_2.y*Math.sin(rotationAngle);const y_2_rotated=Math.round(translatedEndPoint_2.x*Math.sin(rotationAngle)+translatedEndPoint_2.y*Math.cos(rotationAngle));const angleDeg=Math.atan2(y_2_rotated,x_2_rotated)*180/Math.PI;return angleDeg}static calculateVectorAngle(vector_1,vector_2){let angleDeg=0;if(vector_1.vectorLength>0&&vector_2.vectorLength>0){const cos=(vector_1.x*vector_2.x+vector_1.y*vector_2.y)/(vector_1.vectorLength*vector_2.vectorLength);const angleRad=Math.acos(cos);angleDeg=this.rad2deg(angleRad)}return angleDeg}static translatePoint(point,vector){const newX=point.x+vector.x;const newY=point.y+vector.y;const translatedPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(newX,newY);return translatedPoint}static calcAngleDegrees(point){let angle=Math.atan2(point.y,point.x)*180/Math.PI;if(angle<0)angle=360+angle;return angle}static calcAngleRad(point){let angle=Math.atan2(point.y,point.x);if(angle<0)angle=2*Math.PI+angle;return angle}static deg2rad(angleDeg){const rad=Math.PI/180*angleDeg;return rad}static rad2deg(angleRad){const deg=angleRad/(Math.PI/180);return deg}static getCenter(pointA,pointB){const centerX=(pointA.x+pointB.x)/2;const centerY=(pointA.y+pointB.y)/2;const center=new(0,$07c7ab2351895186$export$baf26146a414f24a)(centerX,centerY);return center}static getCenterMovementVector(vector_1,vector_2){const startPoint=this.getCenter(vector_1.startPoint,vector_2.startPoint);const endPoint=this.getCenter(vector_1.endPoint,vector_2.endPoint);const vectorBetweenCenterPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vectorBetweenCenterPoints}static calculateAbsoluteDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const absoluteDistanceChange=vectorBetweenEndPoints.vectorLength-vectorBetweenStartPoints.vectorLength;return absoluteDistanceChange}static calculateRelativeDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const relativeDistanceChange=vectorBetweenEndPoints.vectorLength/vectorBetweenStartPoints.vectorLength;return relativeDistanceChange}}class $5fe7e4b452e08fad$export$bbcc47898202c6b8{constructor(pointer){this.pointer=pointer;this.parameters=pointer.parameters}getTarget(){return this.pointer.initialPointerEvent.target}getCurrentPointerEvent(){return this.pointer.currentPointerEvent}getCurrentDirection(){return this.parameters.live.vector.direction}onIdle(){}onPointerMove(pointermoveEvent){}onPointerUp(pointerupEvent){}onPointerLeave(pointerleaveEvent){}onPointerCancel(pointercancelEvent){}}let $d25d2392b002d8dc$var$PointerState;(function(PointerState){PointerState["Active"]="active";PointerState["Removed"]="removed";PointerState["Canceled"]="canceled"})($d25d2392b002d8dc$var$PointerState||($d25d2392b002d8dc$var$PointerState={}));class $d25d2392b002d8dc$export$b56007f12edf0c17{constructor(pointerEvent,options){this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;const now=(new Date).getTime();this.pointerId=pointerEvent.pointerId;this.vectorTimespan=this.options.vectorTimespan??100;this.initialPointerEvent=pointerEvent;this.currentPointerEvent=pointerEvent;this.recognizedEvents=[pointerEvent];this.state=$d25d2392b002d8dc$var$PointerState.Active;const nullVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(pointerEvent,pointerEvent);const globalParameters={startX:this.initialPointerEvent.clientX,startY:this.initialPointerEvent.clientY,vector:nullVector,deltaX:0,deltaY:0,startTimestampUTC:now,startTimestamp:this.initialPointerEvent.timeStamp,currentTimestamp:this.initialPointerEvent.timeStamp,endTimestamp:null,maximumSpeed:0,currentSpeed:0,distance:0,maximumDistance:0,averageSpeed:0,finalSpeed:0,traveledDistance:0,hasBeenMoved:false,duration:0};const liveParameters={duration:0,speed:0,vector:nullVector,distance:0,isMoving:false};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}getTarget(){return this.initialPointerEvent.target}reset(){}onIdle(){const now=(new Date).getTime();const duration=now-this.parameters.global.startTimestampUTC;this.parameters.global.duration=duration}onPointerMove(pointermoveEvent){this.parameters.global.hasBeenMoved=true;this.parameters.live.isMoving=true;this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.parameters.global.finalSpeed=this.parameters.live.speed;this.parameters.live.speed=0;this.parameters.live.isMoving=false;this.state=$d25d2392b002d8dc$var$PointerState.Removed;this.parameters.global.endTimestamp=pointerupEvent.timeStamp;this.update(pointerupEvent);if(this.DEBUG===true)console.log(`[PointerInput] pointerdown ended. pointerdown duration: ${this.parameters.global.duration}ms`)}onPointerLeave(pointerleaveEvent){this.onPointerUp(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent);this.parameters.live.speed=0;this.state=$d25d2392b002d8dc$var$PointerState.Canceled;this.parameters.live.isMoving=false;this.parameters.global.endTimestamp=pointercancelEvent.timeStamp;if(this.DEBUG===true)console.log(`[PointerInput] canceled, pointerdown duration:${this.parameters.global.duration}ms`)}update(pointerEvent){this.currentPointerEvent=pointerEvent;this.recognizedEvents.push(pointerEvent);const timedPointerEvents=this.getTimedPointerEvents();const liveVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(timedPointerEvents[0],timedPointerEvents[1]);this.parameters.live.vector=liveVector;this.parameters.live.distance=liveVector.vectorLength;this.parameters.live.speed=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getSpeed(liveVector,timedPointerEvents[0].timeStamp,timedPointerEvents[1].timeStamp);if(this.parameters.live.speed>this.parameters.global.maximumSpeed)this.parameters.global.maximumSpeed=this.parameters.live.speed;this.parameters.global.currentTimestamp=pointerEvent.timeStamp;this.parameters.global.duration=pointerEvent.timeStamp-this.parameters.global.startTimestamp;this.parameters.global.deltaX=liveVector.endPoint.x-this.parameters.global.startX;this.parameters.global.deltaY=liveVector.endPoint.y-this.parameters.global.startY;const globalVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(this.initialPointerEvent,this.currentPointerEvent);this.parameters.global.vector=globalVector;this.parameters.global.distance=globalVector.vectorLength;if(globalVector.vectorLength>this.parameters.global.maximumDistance)this.parameters.global.maximumDistance=globalVector.vectorLength;if(this.DEBUG===true){console.log(`[PointerInput] current speed: ${this.parameters.live.speed}px/s`);console.log(`[PointerInput] pointerdown duration: ${this.parameters.global.duration}ms`);console.log(`[PointerInput] live vector length within vectorTimespan: ${this.parameters.live.vector.vectorLength}px`)}}getTimedPointerEvents(){let startPointerEvent=this.initialPointerEvent;const endPointerEvent=this.recognizedEvents[this.recognizedEvents.length-1];let startIndex=this.recognizedEvents.length-1;let elapsedTime=0;const endTimeStamp=endPointerEvent.timeStamp;while(elapsedTime<this.vectorTimespan){startIndex=startIndex-1;if(startIndex<0)break;startPointerEvent=this.recognizedEvents[startIndex];elapsedTime=endTimeStamp-startPointerEvent.timeStamp}const pointerEvents=[startPointerEvent,endPointerEvent];this.recognizedEvents=this.recognizedEvents.slice(-20);return pointerEvents}}const $f752273e736c5336$export$6e9c3b1e1fa2b597=CustomEvent;class $f752273e736c5336$export$61ce360501d38a6f{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.validPointerManagerState=null;this.validPointerInputConstructor=(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8);this.domElement=domElement;this.initialPointerEvent=null;this.initialParameters=null;this.activeStateParameters=null;this.options={bubbles:true,blocks:[],supportedDirections:[],DEBUG:false,...options};this.DEBUG=this.options.DEBUG}getEmptyGestureParameters(){const nullRecognitionParameters={global:{min:{},max:{},boolean:{}},live:{min:{},max:{},boolean:{}}};return nullRecognitionParameters}getGestureParameters(){let gestureParameters;if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){gestureParameters=this.activeStateParameters;if(this.DEBUG==true){console.log(`[${this.eventBaseName}] validating using activeStateParameters`);console.log(gestureParameters)}}else{if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating using initialParameters`);gestureParameters=this.initialParameters}if(gestureParameters==null)throw new Error("[Gesture] no gesture parameters found. Do not call .getGestureParameters on abstract class Gesture");return gestureParameters}validateGestureParameters(pointerInput){const gestureParameters=this.getGestureParameters();let isValid=true;let timespan;for(timespan in gestureParameters){const timedGestureParameters=gestureParameters[timespan];const timedPointerInputValues=pointerInput.parameters[timespan];let minOrMaxOrBoolean;for(minOrMaxOrBoolean in timedGestureParameters){const evaluationParameters=timedGestureParameters[minOrMaxOrBoolean];let gestureParameterName;for(gestureParameterName in evaluationParameters){const gestureParameter=evaluationParameters[gestureParameterName];const pointerInputValue=timedPointerInputValues[gestureParameterName];if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating ${timespan} ${minOrMaxOrBoolean}: required: ${gestureParameter}, pointer: ${pointerInputValue}`);if(typeof gestureParameter=="boolean"&&typeof pointerInputValue=="boolean")isValid=this.validateBooleanParameter(gestureParameter,pointerInputValue);else if(typeof gestureParameter=="number"&&typeof pointerInputValue=="number")isValid=this.validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMaxOrBoolean);if(isValid==false){if(this.DEBUG==true)console.log(`[${this.eventBaseName}] invalidated `);return false}}}}return true}validateBooleanParameter(gestureParameter,pointerInputValue){if(gestureParameter==null)return true;else if(gestureParameter==pointerInputValue){if(this.DEBUG==true)console.log(`validated: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return true}if(this.DEBUG==true)console.log(`dismissing ${this.eventBaseName}: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return false}validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMax){if(minOrMax=="min"){if(pointerInputValue>=gestureParameter)return true}else if(minOrMax=="max"){if(pointerInputValue<=gestureParameter)return true}return false}validateDirection(pointerInput){const currentDirection=pointerInput.getCurrentDirection();if(this.options.supportedDirections.length&&!this.options.supportedDirections.includes(currentDirection)){if(this.DEBUG==true)console.log(`[Gestures] dismissing ${this.eventBaseName}: supported directions: ${this.options.supportedDirections}, current direction: ${currentDirection}`);return false}return true}validateGestureState(){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked)return false;return true}validatePointerManagerState(pointerManager){if(pointerManager.state==this.validPointerManagerState)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerManagerState invalidated ${this.eventBaseName}: ${pointerManager.state}`);return false}validatePointerInputConstructor(pointerInput){if(pointerInput instanceof this.validPointerInputConstructor)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerInputConstructor invalidated ${this.eventBaseName}: ${this.validPointerInputConstructor}`);return false}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);const pointerInput=pointerManager.activePointerInput;if(isValid==true&&pointerInput!=null){isValid=this.validatePointerInputConstructor(pointerInput);if(isValid==true)isValid=this.validateDirection(pointerInput);if(isValid==true)isValid=this.validateGestureParameters(pointerInput)}return isValid}recognize(pointerManager){const isValid=this.validate(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive)this.onStart(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.initialPointerEvent==null)this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}else if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active&&isValid==false)this.onEnd(pointerManager);else if(this.DEBUG==true)console.log(`not firing event ${this.eventBaseName}. No SinglePointerInput found`)}getPointerInput(pointerManager){if(pointerManager.hasPointersOnSurface()==true&&pointerManager.activePointerInput instanceof this.validPointerInputConstructor)return pointerManager.activePointerInput;else if(pointerManager.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17)){const pointerInput=pointerManager.getlastRemovedPointerInput();if(pointerInput instanceof this.validPointerInputConstructor)return pointerInput}return null}setInitialPointerEvent(pointerManager){const pointerInput=this.getPointerInput(pointerManager);if(pointerInput instanceof this.validPointerInputConstructor){const pointerEvent=pointerInput.getCurrentPointerEvent();this.initialPointerEvent=pointerEvent}}emit(pointerManager,eventName){eventName=eventName||this.eventBaseName;if(this.DEBUG===true)console.log(`[Gestures] detected and firing event ${eventName}`);const pointerInput=this.getPointerInput(pointerManager);if(pointerInput!=null){const target=pointerInput.getTarget();if(target instanceof EventTarget){const eventData=this.getEventData(pointerInput,pointerManager);const eventOptions={detail:eventData,bubbles:this.options.bubbles};if(this.DEBUG===true)console.log(eventOptions);const event=new $f752273e736c5336$export$6e9c3b1e1fa2b597(eventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(event);else this.domElement.dispatchEvent(event);const currentDirection=eventData.live.direction;const hasSupportedDirections=!!this.options.supportedDirections;if(hasSupportedDirections==true&¤tDirection!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None&&(eventName==this.eventBaseName||eventName=="swipe"))for(let d=0;d<this.options.supportedDirections.length;d++){const direction=this.options.supportedDirections[d];if(direction==currentDirection){const directionEventName=eventName+direction;if(this.DEBUG==true)console.log(`[Gestures] detected and firing event ${directionEventName}`);const directionEvent=new CustomEvent(directionEventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(directionEvent);else this.domElement.dispatchEvent(directionEvent)}}}}}onStart(pointerManager){this.blockGestures();this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.setInitialPointerEvent(pointerManager);const eventName=`${this.eventBaseName}start`;this.emit(pointerManager,eventName)}onEnd(pointerManager){this.unblockGestures();if(this.DEBUG==true)console.log(`[${this.eventBaseName}] ended. Setting ${this.eventBaseName}.state = ${(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}`);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;const eventName=`${this.eventBaseName}end`;this.emit(pointerManager,eventName)}onTouchStart(event){}onTouchMove(event){}onTouchEnd(event){}onTouchCancel(event){}block(gesture){if(this.options.blocks.indexOf(gesture)==-1)this.options.blocks.push(gesture)}unblock(gesture){if(this.options.blocks.indexOf(gesture)!=-1)this.options.blocks.splice(this.options.blocks.indexOf(gesture),1)}blockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive){if(this.DEBUG==false)console.log(`[Gesture] blocking ${gesture.eventBaseName}`);gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked}}}unblockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}}getEventData(pointerInput,pointerManager){throw new Error("Gesture subclasses require a getEventData method()")}}class $e8978caba4d46d00$export$718b85c80185d86e extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(singlePointerInput,pointerManager){const globalParameters=singlePointerInput.parameters.live;const liveParameters=singlePointerInput.parameters.live;let globalVector=globalParameters.vector;let globalDuration=globalParameters.duration;if(this.initialPointerEvent!=null){const globalStartPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(this.initialPointerEvent.clientX,this.initialPointerEvent.clientY);const globalEndPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(singlePointerInput.pointer.currentPointerEvent.clientX,singlePointerInput.pointer.currentPointerEvent.clientY);globalVector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(globalStartPoint,globalEndPoint);globalDuration=singlePointerInput.pointer.currentPointerEvent.timeStamp-this.initialPointerEvent.timeStamp}const globalGestureEventData={deltaX:globalVector.x,deltaY:globalVector.y,distance:globalVector.vectorLength,speedX:globalVector.x/globalDuration,speedY:globalVector.y/globalDuration,speed:globalVector.vectorLength/globalDuration,direction:globalVector.direction,scale:1,rotation:0,center:{x:globalParameters.vector.endPoint.x,y:globalParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.vector.x,deltaY:liveParameters.vector.y,distance:liveParameters.vector.vectorLength,speedX:liveParameters.vector.x/singlePointerInput.pointer.vectorTimespan,speedY:liveParameters.vector.y/singlePointerInput.pointer.vectorTimespan,speed:liveParameters.speed,direction:liveParameters.vector.direction,scale:1,rotation:0,center:{x:liveParameters.vector.endPoint.x,y:liveParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const eventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return eventData}}class $b6ec4e8a6d9d51ec$export$4451a18ddc7083b7 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.eventBaseName="tap";let globalMaxDuration=200;let liveMaxDistance=30;let globalMaxDistance=30;if(options){if("maxDuration"in options)globalMaxDuration=options["maxDuration"];if("maxDistance"in options){liveMaxDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.max["duration"]=globalMaxDuration;this.initialParameters.live.max["distance"]=liveMaxDistance;this.initialParameters.global.max["distance"]=globalMaxDistance}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);if(isValid===true){if(pointerManager.lastInputSessionPointerCount!=1)return false;else{const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))isValid=this.validateGestureParameters(singlePointerInput);else isValid=false}}return isValid}onStart(pointerManager){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}}class $5653a1f5fdc2db30$export$90610caf6d8d0242 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){static minDuration=600;constructor(domElement,options){super(domElement,options);this.eventBaseName="press";let globalMinDuration=600;let globalMaxDistance=10;let globalMaxMaximumDistance=20;if(options){if("minDuration"in options)globalMinDuration=options["minDuration"];if("maxDistance"in options){globalMaxMaximumDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.min["duration"]=globalMinDuration;this.initialParameters.global.max["distance"]=globalMaxDistance;this.initialParameters.global.max["maximumDistance"]=globalMaxMaximumDistance;this.hasBeenEmitted=false}recognize(pointerManager){const isValid=this.validate(pointerManager);const singlePointerInput=this.getPointerInput(pointerManager);const minDuration=this.initialParameters.global.min["duration"]||$5653a1f5fdc2db30$export$90610caf6d8d0242.minDuration;if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(isValid==true&&this.hasBeenEmitted==false){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager);this.hasBeenEmitted=true;this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.blockGestures()}else if(isValid==false&&this.hasBeenEmitted==true){this.onEnd(pointerManager);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.hasBeenEmitted=false}else{const duration=singlePointerInput.parameters.global.duration;if(this.hasBeenEmitted==true&&duration<=minDuration)this.hasBeenEmitted=false}}if(singlePointerInput==null)this.hasBeenEmitted=false}}class $7a0f7fd2f33d0212$export$f86166cd6057c2d1 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;this.eventBaseName="pan";this.initialParameters.global.min["duration"]=0;this.initialParameters.live.min["distance"]=10;this.initialParameters.global.boolean["hasBeenMoved"]=true;this.swipeFinalSpeed=600;this.isSwipe=false;this.options.supportedDirections=options?.supportedDirections??(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;this.initialSupportedDirections=this.options.supportedDirections}validate(pointerManager){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active)this.options.supportedDirections=(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;const isValid=super.validate(pointerManager);return isValid}onStart(pointerManager){this.isSwipe=false;super.onStart(pointerManager)}onEnd(pointerManager){const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.swipeFinalSpeed<singlePointerInput.parameters.global.finalSpeed&&singlePointerInput.parameters.live.vector.direction!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None){this.isSwipe=true;this.emit(pointerManager,"swipe")}else if(this.DEBUG==true){if(singlePointerInput.parameters.global.finalSpeed<this.swipeFinalSpeed)console.log(`[Pan] dismissing swipe. Final speed: ${singlePointerInput.parameters.global.finalSpeed} < ${this.swipeFinalSpeed}`);else console.log(`[Pan] dismissing swipe. Direction: ${singlePointerInput.parameters.live.vector.direction}`)}}super.onEnd(pointerManager);this.options.supportedDirections=this.initialSupportedDirections}onTouchMove(event){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.DEBUG==true)console.log("[Pan] preventing touchmove default");event.preventDefault();event.stopPropagation()}}}class $ba0aae203ff6b3f9$export$bdba51b3ce92d5f1{constructor(pointer_1,pointer_2){this.pointerIds=new Set([pointer_1.pointerId,pointer_2.pointerId]);this.startTimestamp=(new Date).getTime();this.pointerMap={};this.pointerMap[pointer_1.pointerId]=pointer_1;this.pointerMap[pointer_2.pointerId]=pointer_2;this.pointer_1=pointer_1;this.pointer_2=pointer_2;this.initialPointerEvent=pointer_1.initialPointerEvent;this.currentPointerEvent=pointer_1.initialPointerEvent;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalParameters={duration:0,center:globalCenter,centerHasBeenMoved:false,centerMovementDistance:0,centerMovementVector:globalCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveParameters={center:liveCenter,centerIsMoving:false,centerMovementDistance:0,centerMovementVector:liveCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}removePointer(pointerId){if(pointerId==this.pointer_1.pointerId)return this.pointer_2;else if(pointerId==this.pointer_2.pointerId)return this.pointer_1;else throw new Error(`[DualPointerInput] cannot remove Pointer #${pointerId}. The pointer is not part of this DualPointerInput`)}getTarget(){return this.initialPointerEvent.target}update(pointerEvent){if(pointerEvent instanceof PointerEvent)this.currentPointerEvent=pointerEvent;const now=(new Date).getTime();this.parameters.global["duration"]=now-this.startTimestamp;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(globalVector_1,globalVector_2);const globalRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(globalVector_1,globalVector_2);const globalRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(globalVector_1,globalVector_2);const globalVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(globalVector_1,globalVector_2);this.parameters.global["center"]=globalCenter;this.parameters.global["centerMovementVector"]=globalCenterMovementVector;this.parameters.global["centerMovementDistance"]=globalCenterMovementVector.vectorLength;this.parameters.global["absolutePointerDistanceChange"]=globalAbsoluteDistanceChange;this.parameters.global["relativePointerDistanceChange"]=globalRelativeDistanceChange;this.parameters.global["rotationAngle"]=globalRotationAngle;this.parameters.global["absoluteRotationAngle"]=Math.abs(globalRotationAngle);this.parameters.global["vectorAngle"]=globalVectorAngle;this.parameters.global["absoluteVectorAngle"]=Math.abs(globalVectorAngle);const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(liveVector_1,liveVector_2);const liveRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(liveVector_1,liveVector_2);const liveRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(liveVector_1,liveVector_2);const liveVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(liveVector_1,liveVector_2);if(liveCenterMovementVector.vectorLength>0){this.parameters.live.centerIsMoving=true;this.parameters.global.centerHasBeenMoved=true}else this.parameters.live.centerIsMoving=false;this.parameters.live["center"]=liveCenter;this.parameters.live["centerMovementDistance"]=liveCenterMovementVector.vectorLength;this.parameters.live["centerMovementVector"]=liveCenterMovementVector;this.parameters.live["absolutePointerDistanceChange"]=liveAbsoluteDistanceChange;this.parameters.live["relativePointerDistanceChange"]=liveRelativeDistanceChange;this.parameters.live["rotationAngle"]=liveRotationAngle;this.parameters.live["absoluteRotationAngle"]=Math.abs(liveRotationAngle);this.parameters.live["vectorAngle"]=liveVectorAngle;this.parameters.live["absoluteVectorAngle"]=Math.abs(liveVectorAngle)}onPointerMove(pointermoveEvent){this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.update(pointerupEvent)}onPointerLeave(pointerleaveEvent){this.update(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent)}onIdle(){this.update()}getCurrentDirection(){return this.parameters.live.centerMovementVector.direction}getCurrentPointerEvent(){return this.currentPointerEvent}}class $a1a4c2869495e604$export$f9d89efe4b7795e7 extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent_1=null;this.initialPointerEvent_2=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;this.validPointerInputConstructor=(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1);const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(dualPointerInput,pointerManager){const globalParameters=dualPointerInput.parameters.global;const liveParameters=dualPointerInput.parameters.live;const globalGestureEventData={deltaX:globalParameters.centerMovementVector.x,deltaY:globalParameters.centerMovementVector.y,distance:globalParameters.centerMovementDistance,speedX:globalParameters.centerMovementVector.x/globalParameters.duration,speedY:globalParameters.centerMovementVector.y/globalParameters.duration,speed:globalParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:globalParameters.centerMovementVector.direction,scale:globalParameters.relativePointerDistanceChange,rotation:globalParameters.rotationAngle,center:globalParameters.center,srcEvent:dualPointerInput.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.centerMovementVector.x,deltaY:liveParameters.centerMovementVector.y,distance:liveParameters.centerMovementDistance,speedX:liveParameters.centerMovementVector.x/globalParameters.duration,speedY:liveParameters.centerMovementVector.y/globalParameters.duration,speed:liveParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:liveParameters.centerMovementVector.direction,scale:liveParameters.relativePointerDistanceChange,rotation:liveParameters.rotationAngle,center:{x:liveParameters.centerMovementVector.startPoint.x,y:liveParameters.centerMovementVector.startPoint.y},srcEvent:dualPointerInput.currentPointerEvent};const gestureEventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return gestureEventData}}class $ed7931f1d96d5294$export$826ae541ddf1527b extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="pinch";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.min["absolutePointerDistanceChange"]=5;this.initialParameters.live.max["absoluteRotationAngle"]=20;this.initialParameters.live.min["absoluteVectorAngle"]=10}}class $9fe2bb90b337f66c$export$152db69a76b6b79e extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="rotate";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.min["absoluteRotationAngle"]=5;this.activeStateParameters.live.min["absoluteRotationAngle"]=0}}class $59226122237c359c$export$8847187e02a498e8 extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="twofingerpan";this.initialParameters.live.min["centerMovementDistance"]=10;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.max["absoluteVectorAngle"]=150;this.activeStateParameters.live.min["centerMovementDistance"]=0}}class $4f5a7b355079efa2$export$af6d1be017a420a{constructor(options){options=options||{};this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.activePointerInput=null;this.lastRemovedPointer=null;this.lastInputSessionPointerCount=0;this.pointerAllocation={};this.unusedPointers={};this.onSurfacePointers={}}addPointer(pointerdownEvent){if(this.DEBUG==true)console.log(`[PointerManager] adding Pointer #${pointerdownEvent.pointerId.toString()}`);const pointerOptions={DEBUG:this.DEBUG};const pointer=new(0,$d25d2392b002d8dc$export$b56007f12edf0c17)(pointerdownEvent,pointerOptions);this.onSurfacePointers[pointer.pointerId]=pointer;if(this.activePointerInput==null)this.setActiveSinglePointerInput(pointer);else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))this.setActiveDualPointerInput(this.activePointerInput.pointer,pointer);else if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1))this.unusedPointers[pointer.pointerId]=pointer;this.lastInputSessionPointerCount=this.currentPointerCount()}removePointer(pointerId){if(this.DEBUG==true){console.log(`[PointerManager] starting to remove Pointer #${pointerId}`);console.log(`[PointerManager] state: ${this.state}`)}const pointer=this.onSurfacePointers[pointerId];this.lastRemovedPointer=pointer;delete this.onSurfacePointers[pointerId];if(pointerId in this.unusedPointers)delete this.unusedPointers[pointerId];if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)){if(this.activePointerInput.pointerIds.has(pointerId)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from DualPointerInput`);const remainingPointer=this.activePointerInput.removePointer(pointerId);this.activePointerInput=null;const unusedPointerInput=this.getUnusedPointer();if(unusedPointerInput instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))this.setActiveDualPointerInput(remainingPointer,unusedPointerInput);else this.setActiveSinglePointerInput(remainingPointer)}}else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from SinglePointerInput`);this.activePointerInput=null;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;if(Object.keys(this.unusedPointers).length>0){this.unusedPointers={};throw new Error("[PointerManager] found unused Pointers although there should not be any")}if(Object.keys(this.onSurfacePointers).length>0){this.onSurfacePointers={};throw new Error("[PointerManager] found onSurfacePointers although there should not be any")}}if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveSinglePointerInput(pointer){pointer.reset();const singlePointerInput=new(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)(pointer);this.activePointerInput=singlePointerInput;this.pointerAllocation[pointer.pointerId]=singlePointerInput;delete this.unusedPointers[pointer.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveDualPointerInput(pointer_1,pointer_2){pointer_1.reset();pointer_2.reset();const dualPointerInput=new(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)(pointer_1,pointer_2);this.activePointerInput=dualPointerInput;this.pointerAllocation[pointer_1.pointerId]=dualPointerInput;this.pointerAllocation[pointer_2.pointerId]=dualPointerInput;delete this.unusedPointers[pointer_1.pointerId];delete this.unusedPointers[pointer_2.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}hasPointersOnSurface(){if(Object.keys(this.onSurfacePointers).length>0)return true;return false}currentPointerCount(){return Object.keys(this.onSurfacePointers).length}getUnusedPointer(){if(Object.keys(this.unusedPointers).length>0){const pointer=Object.values(this.unusedPointers)[0];return pointer}return null}getPointerFromId(pointerId){if(pointerId in this.onSurfacePointers)return this.onSurfacePointers[pointerId];return null}getlastRemovedPointerInput(){if(this.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))return this.pointerAllocation[this.lastRemovedPointer.pointerId];return null}onIdle(){for(const pointerId in this.onSurfacePointers){const pointer=this.onSurfacePointers[pointerId];pointer.onIdle()}this.activePointerInput?.onIdle()}onPointerMove(pointermoveEvent){const pointer=this.getPointerFromId(pointermoveEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerMove(pointermoveEvent);this.activePointerInput?.onPointerMove(pointermoveEvent)}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerManager] pointerup detected");const pointer=this.getPointerFromId(pointerupEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerUp(pointerupEvent);this.activePointerInput?.onPointerUp(pointerupEvent);this.removePointer(pointerupEvent.pointerId)}onPointerCancel(pointercancelEvent){if(this.DEBUG==true)console.log("[PointerManager] pointercancel detected");const pointer=this.getPointerFromId(pointercancelEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerCancel(pointercancelEvent);this.activePointerInput?.onPointerCancel(pointercancelEvent);this.removePointer(pointercancelEvent.pointerId)}}const $03c52e54621b9b86$var$ALL_GESTURE_CLASSES=[(0,$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7),(0,$5653a1f5fdc2db30$export$90610caf6d8d0242),(0,$7a0f7fd2f33d0212$export$f86166cd6057c2d1),(0,$ed7931f1d96d5294$export$826ae541ddf1527b),(0,$9fe2bb90b337f66c$export$152db69a76b6b79e),(0,$59226122237c359c$export$8847187e02a498e8)];class $03c52e54621b9b86$export$9371bd96776f4e82{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture;this.activeGestures=[];this.hadActiveGestureDuringCurrentContact=false;this.gestureEventHandlers={};this.lastRecognitionTimestamp=null;this.idleRecognitionIntervalId=null;this.pointerEventHandlers={};this.touchEventHandlers={};options=options||{};this.options={DEBUG:false,DEBUG_GESTURES:false,DEBUG_POINTERMANAGER:false,bubbles:true,handleTouchEvents:true,consecutiveGestures:true,simultaneousGestures:true,supportedGestures:[],...options};this.DEBUG=this.options.DEBUG;const supportedGestures=options.supportedGestures??$03c52e54621b9b86$var$ALL_GESTURE_CLASSES;const instantiatedGestures=supportedGestures.map(GestureClass=>{if(typeof GestureClass==="function"){const gestureOptions={bubbles:this.options.bubbles,DEBUG:this.options.DEBUG_GESTURES};return new GestureClass(domElement,gestureOptions)}if(typeof GestureClass==="object")return GestureClass;throw new Error(`unsupported gesture type: ${typeof GestureClass}`)});this.supportedGestures=instantiatedGestures;this.domElement=domElement;const pointerManagerOptions={DEBUG:this.options.DEBUG_POINTERMANAGER};this.pointerManager=new(0,$4f5a7b355079efa2$export$af6d1be017a420a)(pointerManagerOptions);this.addPointerEventListeners();this.addTouchEventListeners()}addPointerEventListeners(){const domElement=this.domElement;const onPointerDown=this.onPointerDown.bind(this);const onPointerMove=this.onPointerMove.bind(this);const onPointerUp=this.onPointerUp.bind(this);const onPointerCancel=this.onPointerCancel.bind(this);domElement.addEventListener("pointerdown",onPointerDown,{passive:true});domElement.addEventListener("pointermove",onPointerMove,{passive:true});domElement.addEventListener("pointerup",onPointerUp,{passive:true});domElement.addEventListener("pointercancel",onPointerCancel,{passive:true});this.pointerEventHandlers={pointerdown:onPointerDown,pointermove:onPointerMove,pointerup:onPointerUp,pointercancel:onPointerCancel}}onPointerDown(pointerdownEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerdown event detected");this.domElement.setPointerCapture(pointerdownEvent.pointerId);this.pointerManager.addPointer(pointerdownEvent);this.options.pointerdown?.(pointerdownEvent,this);if(this.idleRecognitionIntervalId!=null)this.clearIdleRecognitionInterval();this.idleRecognitionIntervalId=setInterval(()=>{this.onIdle()},100)}onPointerMove(pointermoveEvent){if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerMove(pointermoveEvent);this.recognizeGestures();this.options.pointermove?.(pointermoveEvent,this)}}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerup event detected");this.domElement.releasePointerCapture(pointerupEvent.pointerId);if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerUp(pointerupEvent);this.recognizeGestures();this.options.pointerup?.(pointerupEvent,this)}this.clearIdleRecognitionInterval()}onPointerCancel(pointercancelEvent){this.domElement.releasePointerCapture(pointercancelEvent.pointerId);if(this.DEBUG==true)console.log("[PointerListener] pointercancel detected");this.pointerManager.onPointerCancel(pointercancelEvent);this.recognizeGestures();this.clearIdleRecognitionInterval();this.options.pointercancel?.(pointercancelEvent,this)}removePointerEventListeners(){for(const event in this.pointerEventHandlers){const handler=this.pointerEventHandlers[event];this.domElement.removeEventListener(event,handler)}}addTouchEventListeners(){if(this.options.handleTouchEvents==true){const onTouchMove=this.onTouchMove.bind(this);this.domElement.addEventListener("touchmove",onTouchMove);this.touchEventHandlers["touchmove"]=onTouchMove}}removeTouchEventListeners(){for(const event in this.touchEventHandlers){const handler=this.touchEventHandlers[event];this.domElement.removeEventListener(event,handler)}}onTouchMove(event){for(let g=0;g<this.supportedGestures.length;g++){const gesture=this.supportedGestures[g];gesture.onTouchMove(event)}}onIdle(){if(this.pointerManager.hasPointersOnSurface()==false)this.clearIdleRecognitionInterval();else{const now=(new Date).getTime();let timedelta=null;if(this.lastRecognitionTimestamp!=null)timedelta=now-this.lastRecognitionTimestamp;if(timedelta==null||timedelta>100){this.pointerManager.onIdle();if(this.DEBUG==true)console.log("[PointerListener] onIdle - running idle recognition");this.recognizeGestures()}}}clearIdleRecognitionInterval(){if(this.idleRecognitionIntervalId!=null){clearInterval(this.idleRecognitionIntervalId);this.idleRecognitionIntervalId=null}}recognizeGestures(){this.lastRecognitionTimestamp=(new Date).getTime();let gesturesForRecognition=this.supportedGestures;if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture){if(this.hadActiveGestureDuringCurrentContact==true&&this.pointerManager.hasPointersOnSurface()==true)gesturesForRecognition=[]}for(let g=0;g<gesturesForRecognition.length;g++){const gesture=gesturesForRecognition[g];gesture.recognize(this.pointerManager);this.updateActiveGestures(gesture);if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)break}if(this.DEBUG==true)console.log(`[PointerListener] hadActiveGestureDuringCurrentContact: ${this.hadActiveGestureDuringCurrentContact}`);if(this.pointerManager.hasPointersOnSurface()==false)this.hadActiveGestureDuringCurrentContact=false}updateActiveGestures(gesture){if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){this.hadActiveGestureDuringCurrentContact=true;if(this.activeGestures.indexOf(gesture)<0)this.activeGestures.push(gesture)}else{const index=this.activeGestures.indexOf(gesture);if(index>=0)this.activeGestures.splice(index,1)}if(this.activeGestures.length>0)this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture;else this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture}parseEventsString(eventsString){return eventsString.trim().split(/\s+/g)}on(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(!(eventType in this.gestureEventHandlers))this.gestureEventHandlers[eventType]=[];if(this.gestureEventHandlers[eventType].indexOf(handlerReference)==-1)this.gestureEventHandlers[eventType].push(handlerReference);this.domElement.addEventListener(eventType,handlerReference,{capture:false,passive:true})}}off(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);if(this.DEBUG==true){console.log(`[PointerListener] turning off events: ${eventsString}`);console.log(this.gestureEventHandlers)}for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];const index=handlerList.indexOf(handlerReference);if(this.DEBUG==true)console.log(`[PointerListener] turning off ${eventType}. Index on handlerList: ${index}`);if(index>=0){handlerList.splice(index,1);this.gestureEventHandlers[eventType]=handlerList}this.domElement.removeEventListener(eventType,handlerReference,false)}}}destroy(){for(const eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];for(let h=0;h<handlerList.length;h++){const handler=handlerList[h];this.domElement.removeEventListener(eventType,handler)}delete this.gestureEventHandlers[eventType]}this.removePointerEventListeners();this.removeTouchEventListeners()}}var Direction=$a2188ba8c266b376$export$cacd6541cfeeb6c1;var Directions=$a2188ba8c266b376$export$86ae6e8ac17a67c6;var GestureState=$a2188ba8c266b376$export$a1d3109c03b1d511;var Geometry=$1f7944f1763e45ce$export$2db6c17465f94a2;var PointerListener=$03c52e54621b9b86$export$9371bd96776f4e82;var GestureEvent=$f752273e736c5336$export$6e9c3b1e1fa2b597;var Tap=$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7;var Press=$5653a1f5fdc2db30$export$90610caf6d8d0242;var Pan=$7a0f7fd2f33d0212$export$f86166cd6057c2d1;var TwoFingerPan=$59226122237c359c$export$8847187e02a498e8;var Pinch=$ed7931f1d96d5294$export$826ae541ddf1527b;var Rotate=$9fe2bb90b337f66c$export$152db69a76b6b79e; | ||
let $a2188ba8c266b376$export$cacd6541cfeeb6c1;(function(Direction){Direction["None"]="0";Direction["Left"]="left";Direction["Right"]="right";Direction["Up"]="up";Direction["Down"]="down"})($a2188ba8c266b376$export$cacd6541cfeeb6c1||($a2188ba8c266b376$export$cacd6541cfeeb6c1={}));const $a2188ba8c266b376$export$86ae6e8ac17a67c6=Object.freeze({Horizontal:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right],Vertical:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down],All:[$a2188ba8c266b376$export$cacd6541cfeeb6c1.Left,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Right,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Up,$a2188ba8c266b376$export$cacd6541cfeeb6c1.Down,$a2188ba8c266b376$export$cacd6541cfeeb6c1.None]});let $a2188ba8c266b376$export$a1d3109c03b1d511;(function(GestureState){GestureState["Inactive"]="inactive";GestureState["Active"]="active";GestureState["Blocked"]="blocked"})($a2188ba8c266b376$export$a1d3109c03b1d511||($a2188ba8c266b376$export$a1d3109c03b1d511={}));let $a2188ba8c266b376$export$b8339a9622c147c0;(function(PointerManagerState){PointerManagerState["NoPointer"]="nopointer";PointerManagerState["SinglePointer"]="singlepointer";PointerManagerState["DualPointer"]="dualpointer"})($a2188ba8c266b376$export$b8339a9622c147c0||($a2188ba8c266b376$export$b8339a9622c147c0={}));let $a2188ba8c266b376$export$2fb579dd5dfdbea;(function(PointerListenerState){PointerListenerState["NoActiveGesture"]="noactivegesture";PointerListenerState["ActiveGesture"]="activegesture"})($a2188ba8c266b376$export$2fb579dd5dfdbea||($a2188ba8c266b376$export$2fb579dd5dfdbea={}));class $07c7ab2351895186$export$baf26146a414f24a{constructor(x,y){this.x=x;this.y=y}}class $c0ee1a209fd4fc8d$export$9b781de7bf37bf48{constructor(startPoint,endPoint){this.startPoint=startPoint;this.endPoint=endPoint;this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None;this.deltaX=this.endPoint.x-this.startPoint.x;this.deltaY=this.endPoint.y-this.startPoint.y;this.x=this.deltaX;this.y=this.deltaY;this.vectorLength=Math.sqrt(Math.pow(this.deltaX,2)+Math.pow(this.deltaY,2));if(Math.abs(this.deltaX)>Math.abs(this.deltaY)){if(this.startPoint.x<this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Right;else if(this.startPoint.x>this.endPoint.x)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Left}else{if(this.startPoint.y<this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Down;else if(this.startPoint.y>this.endPoint.y)this.direction=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).Up}}}class $1f7944f1763e45ce$export$2db6c17465f94a2{static getVector(startPointerEvent,endPointerEvent){const startPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(startPointerEvent.clientX,startPointerEvent.clientY);const endPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(endPointerEvent.clientX,endPointerEvent.clientY);const vector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vector}static getSpeed(vector,startTimestamp,endTimestamp){let speed=0;const timespan_ms=endTimestamp-startTimestamp;const timespan_s=timespan_ms/1e3;if(vector!=null&×pan_s!=0)speed=vector.vectorLength/timespan_s;return speed}static calculateRotationAngle(vector_1,vector_2){const angleVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const angleVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const origin=new(0,$07c7ab2351895186$export$baf26146a414f24a)(0,0);const translationVector_1=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_1.startPoint,origin);const translatedEndPoint_1=this.translatePoint(angleVector_1.endPoint,translationVector_1);const translationVector_2=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(angleVector_2.startPoint,origin);const translatedEndPoint_2=this.translatePoint(angleVector_2.endPoint,translationVector_2);const rotationAngle=this.calcAngleRad(translatedEndPoint_1)*-1;const x_2_rotated=translatedEndPoint_2.x*Math.cos(rotationAngle)-translatedEndPoint_2.y*Math.sin(rotationAngle);const y_2_rotated=Math.round(translatedEndPoint_2.x*Math.sin(rotationAngle)+translatedEndPoint_2.y*Math.cos(rotationAngle));const angleDeg=Math.atan2(y_2_rotated,x_2_rotated)*180/Math.PI;return angleDeg}static calculateVectorAngle(vector_1,vector_2){let angleDeg=0;if(vector_1.vectorLength>0&&vector_2.vectorLength>0){const cos=(vector_1.x*vector_2.x+vector_1.y*vector_2.y)/(vector_1.vectorLength*vector_2.vectorLength);const angleRad=Math.acos(cos);angleDeg=this.rad2deg(angleRad)}return angleDeg}static translatePoint(point,vector){const newX=point.x+vector.x;const newY=point.y+vector.y;const translatedPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(newX,newY);return translatedPoint}static calcAngleDegrees(point){let angle=Math.atan2(point.y,point.x)*180/Math.PI;if(angle<0)angle=360+angle;return angle}static calcAngleRad(point){let angle=Math.atan2(point.y,point.x);if(angle<0)angle=2*Math.PI+angle;return angle}static deg2rad(angleDeg){const rad=Math.PI/180*angleDeg;return rad}static rad2deg(angleRad){const deg=angleRad/(Math.PI/180);return deg}static getCenter(pointA,pointB){const centerX=(pointA.x+pointB.x)/2;const centerY=(pointA.y+pointB.y)/2;const center=new(0,$07c7ab2351895186$export$baf26146a414f24a)(centerX,centerY);return center}static getCenterMovementVector(vector_1,vector_2){const startPoint=this.getCenter(vector_1.startPoint,vector_2.startPoint);const endPoint=this.getCenter(vector_1.endPoint,vector_2.endPoint);const vectorBetweenCenterPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(startPoint,endPoint);return vectorBetweenCenterPoints}static calculateAbsoluteDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const absoluteDistanceChange=vectorBetweenEndPoints.vectorLength-vectorBetweenStartPoints.vectorLength;return absoluteDistanceChange}static calculateRelativeDistanceChange(vector_1,vector_2){const vectorBetweenStartPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.startPoint,vector_2.startPoint);const vectorBetweenEndPoints=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(vector_1.endPoint,vector_2.endPoint);const relativeDistanceChange=vectorBetweenEndPoints.vectorLength/vectorBetweenStartPoints.vectorLength;return relativeDistanceChange}}class $5fe7e4b452e08fad$export$bbcc47898202c6b8{constructor(pointer){this.pointer=pointer;this.parameters=pointer.parameters}getTarget(){return this.pointer.initialPointerEvent.target}getCurrentPointerEvent(){return this.pointer.currentPointerEvent}getCurrentDirection(){return this.parameters.live.vector.direction}onIdle(){}onPointerMove(pointermoveEvent){}onPointerUp(pointerupEvent){}onPointerLeave(pointerleaveEvent){}onPointerCancel(pointercancelEvent){}}let $d25d2392b002d8dc$var$PointerState;(function(PointerState){PointerState["Active"]="active";PointerState["Removed"]="removed";PointerState["Canceled"]="canceled"})($d25d2392b002d8dc$var$PointerState||($d25d2392b002d8dc$var$PointerState={}));class $d25d2392b002d8dc$export$b56007f12edf0c17{constructor(pointerEvent,options){this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;const now=(new Date).getTime();this.pointerId=pointerEvent.pointerId;this.vectorTimespan=this.options.vectorTimespan??100;this.initialPointerEvent=pointerEvent;this.currentPointerEvent=pointerEvent;this.recognizedEvents=[pointerEvent];this.state=$d25d2392b002d8dc$var$PointerState.Active;const nullVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(pointerEvent,pointerEvent);const globalParameters={startX:this.initialPointerEvent.clientX,startY:this.initialPointerEvent.clientY,vector:nullVector,deltaX:0,deltaY:0,startTimestampUTC:now,startTimestamp:this.initialPointerEvent.timeStamp,currentTimestamp:this.initialPointerEvent.timeStamp,endTimestamp:null,maximumSpeed:0,currentSpeed:0,distance:0,maximumDistance:0,averageSpeed:0,finalSpeed:0,traveledDistance:0,hasBeenMoved:false,duration:0};const liveParameters={duration:0,speed:0,vector:nullVector,distance:0,isMoving:false};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}getTarget(){return this.initialPointerEvent.target}reset(){}onIdle(){const now=(new Date).getTime();const duration=now-this.parameters.global.startTimestampUTC;this.parameters.global.duration=duration}onPointerMove(pointermoveEvent){this.parameters.global.hasBeenMoved=true;this.parameters.live.isMoving=true;this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.parameters.global.finalSpeed=this.parameters.live.speed;this.parameters.live.speed=0;this.parameters.live.isMoving=false;this.state=$d25d2392b002d8dc$var$PointerState.Removed;this.parameters.global.endTimestamp=pointerupEvent.timeStamp;this.update(pointerupEvent);if(this.DEBUG===true)console.log(`[PointerInput] pointerdown ended. pointerdown duration: ${this.parameters.global.duration}ms`)}onPointerLeave(pointerleaveEvent){this.onPointerUp(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent);this.parameters.live.speed=0;this.state=$d25d2392b002d8dc$var$PointerState.Canceled;this.parameters.live.isMoving=false;this.parameters.global.endTimestamp=pointercancelEvent.timeStamp;if(this.DEBUG===true)console.log(`[PointerInput] canceled, pointerdown duration:${this.parameters.global.duration}ms`)}update(pointerEvent){this.currentPointerEvent=pointerEvent;this.recognizedEvents.push(pointerEvent);const timedPointerEvents=this.getTimedPointerEvents();const liveVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(timedPointerEvents[0],timedPointerEvents[1]);this.parameters.live.vector=liveVector;this.parameters.live.distance=liveVector.vectorLength;this.parameters.live.speed=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getSpeed(liveVector,timedPointerEvents[0].timeStamp,timedPointerEvents[1].timeStamp);if(this.parameters.live.speed>this.parameters.global.maximumSpeed)this.parameters.global.maximumSpeed=this.parameters.live.speed;this.parameters.global.currentTimestamp=pointerEvent.timeStamp;this.parameters.global.duration=pointerEvent.timeStamp-this.parameters.global.startTimestamp;this.parameters.global.deltaX=liveVector.endPoint.x-this.parameters.global.startX;this.parameters.global.deltaY=liveVector.endPoint.y-this.parameters.global.startY;const globalVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getVector(this.initialPointerEvent,this.currentPointerEvent);this.parameters.global.vector=globalVector;this.parameters.global.distance=globalVector.vectorLength;if(globalVector.vectorLength>this.parameters.global.maximumDistance)this.parameters.global.maximumDistance=globalVector.vectorLength;if(this.DEBUG===true){console.log(`[PointerInput] current speed: ${this.parameters.live.speed}px/s`);console.log(`[PointerInput] pointerdown duration: ${this.parameters.global.duration}ms`);console.log(`[PointerInput] live vector length within vectorTimespan: ${this.parameters.live.vector.vectorLength}px`)}}getTimedPointerEvents(){let startPointerEvent=this.initialPointerEvent;const endPointerEvent=this.recognizedEvents[this.recognizedEvents.length-1];let startIndex=this.recognizedEvents.length-1;let elapsedTime=0;const endTimeStamp=endPointerEvent.timeStamp;while(elapsedTime<this.vectorTimespan){startIndex=startIndex-1;if(startIndex<0)break;startPointerEvent=this.recognizedEvents[startIndex];elapsedTime=endTimeStamp-startPointerEvent.timeStamp}const pointerEvents=[startPointerEvent,endPointerEvent];this.recognizedEvents=this.recognizedEvents.slice(-20);return pointerEvents}}class $f752273e736c5336$export$6e9c3b1e1fa2b597 extends CustomEvent{}class $f752273e736c5336$export$61ce360501d38a6f{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.validPointerManagerState=null;this.validPointerInputConstructor=(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8);this.domElement=domElement;this.initialPointerEvent=null;this.initialParameters=null;this.activeStateParameters=null;this.options={bubbles:true,blocks:[],supportedDirections:[],DEBUG:false,...options};this.DEBUG=this.options.DEBUG}getEmptyGestureParameters(){const nullRecognitionParameters={global:{min:{},max:{},boolean:{}},live:{min:{},max:{},boolean:{}}};return nullRecognitionParameters}getGestureParameters(){let gestureParameters;if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){gestureParameters=this.activeStateParameters;if(this.DEBUG==true){console.log(`[${this.eventBaseName}] validating using activeStateParameters`);console.log(gestureParameters)}}else{if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating using initialParameters`);gestureParameters=this.initialParameters}if(gestureParameters==null)throw new Error("[Gesture] no gesture parameters found. Do not call .getGestureParameters on abstract class Gesture");return gestureParameters}validateGestureParameters(pointerInput){const gestureParameters=this.getGestureParameters();let isValid=true;let timespan;for(timespan in gestureParameters){const timedGestureParameters=gestureParameters[timespan];const timedPointerInputValues=pointerInput.parameters[timespan];let minOrMaxOrBoolean;for(minOrMaxOrBoolean in timedGestureParameters){const evaluationParameters=timedGestureParameters[minOrMaxOrBoolean];let gestureParameterName;for(gestureParameterName in evaluationParameters){const gestureParameter=evaluationParameters[gestureParameterName];const pointerInputValue=timedPointerInputValues[gestureParameterName];if(this.DEBUG==true)console.log(`[${this.eventBaseName}] validating ${timespan} ${minOrMaxOrBoolean}: required: ${gestureParameter}, pointer: ${pointerInputValue}`);if(typeof gestureParameter=="boolean"&&typeof pointerInputValue=="boolean")isValid=this.validateBooleanParameter(gestureParameter,pointerInputValue);else if(typeof gestureParameter=="number"&&typeof pointerInputValue=="number")isValid=this.validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMaxOrBoolean);if(isValid==false){if(this.DEBUG==true)console.log(`[${this.eventBaseName}] invalidated `);return false}}}}return true}validateBooleanParameter(gestureParameter,pointerInputValue){if(gestureParameter==null)return true;else if(gestureParameter==pointerInputValue){if(this.DEBUG==true)console.log(`validated: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return true}if(this.DEBUG==true)console.log(`dismissing ${this.eventBaseName}: required value: ${gestureParameter}, current value: ${pointerInputValue}`);return false}validateMinMaxParameter(gestureParameter,pointerInputValue,minOrMax){if(minOrMax=="min"){if(pointerInputValue>=gestureParameter)return true}else if(minOrMax=="max"){if(pointerInputValue<=gestureParameter)return true}return false}validateDirection(pointerInput){const currentDirection=pointerInput.getCurrentDirection();if(this.options.supportedDirections.length&&!this.options.supportedDirections.includes(currentDirection)){if(this.DEBUG==true)console.log(`[Gestures] dismissing ${this.eventBaseName}: supported directions: ${this.options.supportedDirections}, current direction: ${currentDirection}`);return false}return true}validateGestureState(){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked)return false;return true}validatePointerManagerState(pointerManager){if(pointerManager.state==this.validPointerManagerState)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerManagerState invalidated ${this.eventBaseName}: ${pointerManager.state}`);return false}validatePointerInputConstructor(pointerInput){if(pointerInput instanceof this.validPointerInputConstructor)return true;if(this.DEBUG==true)console.log(`[Gesture] PointerInputConstructor invalidated ${this.eventBaseName}: ${this.validPointerInputConstructor}`);return false}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);const pointerInput=pointerManager.activePointerInput;if(isValid==true&&pointerInput!=null){isValid=this.validatePointerInputConstructor(pointerInput);if(isValid==true)isValid=this.validateDirection(pointerInput);if(isValid==true)isValid=this.validateGestureParameters(pointerInput)}return isValid}recognize(pointerManager){const isValid=this.validate(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive)this.onStart(pointerManager);if(isValid==true&&this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.initialPointerEvent==null)this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}else if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active&&isValid==false)this.onEnd(pointerManager);else if(this.DEBUG==true)console.log(`not firing event ${this.eventBaseName}. No SinglePointerInput found`)}getPointerInput(pointerManager){if(pointerManager.hasPointersOnSurface()==true&&pointerManager.activePointerInput instanceof this.validPointerInputConstructor)return pointerManager.activePointerInput;else if(pointerManager.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17)){const pointerInput=pointerManager.getlastRemovedPointerInput();if(pointerInput instanceof this.validPointerInputConstructor)return pointerInput}return null}setInitialPointerEvent(pointerManager){const pointerInput=this.getPointerInput(pointerManager);if(pointerInput instanceof this.validPointerInputConstructor){const pointerEvent=pointerInput.getCurrentPointerEvent();this.initialPointerEvent=pointerEvent}}emit(pointerManager,eventName){eventName=eventName||this.eventBaseName;if(this.DEBUG===true)console.log(`[Gestures] detected and firing event ${eventName}`);const pointerInput=this.getPointerInput(pointerManager);if(pointerInput!=null){const target=pointerInput.getTarget();if(target instanceof EventTarget){const eventData=this.getEventData(pointerInput,pointerManager);const eventOptions={detail:eventData,bubbles:this.options.bubbles};if(this.DEBUG===true)console.log(eventOptions);const event=new $f752273e736c5336$export$6e9c3b1e1fa2b597(eventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(event);else this.domElement.dispatchEvent(event);const currentDirection=eventData.live.direction;const hasSupportedDirections=!!this.options.supportedDirections;if(hasSupportedDirections==true&¤tDirection!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None&&(eventName==this.eventBaseName||eventName=="swipe"))for(let d=0;d<this.options.supportedDirections.length;d++){const direction=this.options.supportedDirections[d];if(direction==currentDirection){const directionEventName=eventName+direction;if(this.DEBUG==true)console.log(`[Gestures] detected and firing event ${directionEventName}`);const directionEvent=new CustomEvent(directionEventName,eventOptions);if(eventOptions.bubbles==true)target.dispatchEvent(directionEvent);else this.domElement.dispatchEvent(directionEvent)}}}}}onStart(pointerManager){this.blockGestures();this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.setInitialPointerEvent(pointerManager);const eventName=`${this.eventBaseName}start`;this.emit(pointerManager,eventName)}onEnd(pointerManager){this.unblockGestures();if(this.DEBUG==true)console.log(`[${this.eventBaseName}] ended. Setting ${this.eventBaseName}.state = ${(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}`);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;const eventName=`${this.eventBaseName}end`;this.emit(pointerManager,eventName)}onTouchStart(event){}onTouchMove(event){}onTouchEnd(event){}onTouchCancel(event){}block(gesture){if(this.options.blocks.indexOf(gesture)==-1)this.options.blocks.push(gesture)}unblock(gesture){if(this.options.blocks.indexOf(gesture)!=-1)this.options.blocks.splice(this.options.blocks.indexOf(gesture),1)}blockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive){if(this.DEBUG==false)console.log(`[Gesture] blocking ${gesture.eventBaseName}`);gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Blocked}}}unblockGestures(){for(let g=0;g<this.options.blocks.length;g++){const gesture=this.options.blocks[g];gesture.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive}}getEventData(pointerInput,pointerManager){throw new Error("Gesture subclasses require a getEventData method()")}}class $e8978caba4d46d00$export$718b85c80185d86e extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(singlePointerInput,pointerManager){const globalParameters=singlePointerInput.parameters.live;const liveParameters=singlePointerInput.parameters.live;let globalVector=globalParameters.vector;let globalDuration=globalParameters.duration;if(this.initialPointerEvent!=null){const globalStartPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(this.initialPointerEvent.clientX,this.initialPointerEvent.clientY);const globalEndPoint=new(0,$07c7ab2351895186$export$baf26146a414f24a)(singlePointerInput.pointer.currentPointerEvent.clientX,singlePointerInput.pointer.currentPointerEvent.clientY);globalVector=new(0,$c0ee1a209fd4fc8d$export$9b781de7bf37bf48)(globalStartPoint,globalEndPoint);globalDuration=singlePointerInput.pointer.currentPointerEvent.timeStamp-this.initialPointerEvent.timeStamp}const globalGestureEventData={deltaX:globalVector.x,deltaY:globalVector.y,distance:globalVector.vectorLength,speedX:globalVector.x/globalDuration,speedY:globalVector.y/globalDuration,speed:globalVector.vectorLength/globalDuration,direction:globalVector.direction,scale:1,rotation:0,center:{x:globalParameters.vector.endPoint.x,y:globalParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.vector.x,deltaY:liveParameters.vector.y,distance:liveParameters.vector.vectorLength,speedX:liveParameters.vector.x/singlePointerInput.pointer.vectorTimespan,speedY:liveParameters.vector.y/singlePointerInput.pointer.vectorTimespan,speed:liveParameters.speed,direction:liveParameters.vector.direction,scale:1,rotation:0,center:{x:liveParameters.vector.endPoint.x,y:liveParameters.vector.endPoint.y},srcEvent:singlePointerInput.pointer.currentPointerEvent};const eventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return eventData}}class $b6ec4e8a6d9d51ec$export$4451a18ddc7083b7 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.eventBaseName="tap";let globalMaxDuration=200;let liveMaxDistance=30;let globalMaxDistance=30;if(options){if("maxDuration"in options)globalMaxDuration=options["maxDuration"];if("maxDistance"in options){liveMaxDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.max["duration"]=globalMaxDuration;this.initialParameters.live.max["distance"]=liveMaxDistance;this.initialParameters.global.max["distance"]=globalMaxDistance}validate(pointerManager){let isValid=this.validateGestureState();if(isValid==true)isValid=this.validatePointerManagerState(pointerManager);if(isValid===true){if(pointerManager.lastInputSessionPointerCount!=1)return false;else{const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))isValid=this.validateGestureParameters(singlePointerInput);else isValid=false}}return isValid}onStart(pointerManager){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager)}}class $5653a1f5fdc2db30$export$90610caf6d8d0242 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){static minDuration=600;constructor(domElement,options){super(domElement,options);this.eventBaseName="press";let globalMinDuration=600;let globalMaxDistance=10;let globalMaxMaximumDistance=20;if(options){if("minDuration"in options)globalMinDuration=options["minDuration"];if("maxDistance"in options){globalMaxMaximumDistance=options["maxDistance"];globalMaxDistance=options["maxDistance"]}}this.initialParameters.global.min["duration"]=globalMinDuration;this.initialParameters.global.max["distance"]=globalMaxDistance;this.initialParameters.global.max["maximumDistance"]=globalMaxMaximumDistance;this.hasBeenEmitted=false}recognize(pointerManager){const isValid=this.validate(pointerManager);const singlePointerInput=this.getPointerInput(pointerManager);const minDuration=this.initialParameters.global.min["duration"]||$5653a1f5fdc2db30$export$90610caf6d8d0242.minDuration;if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(isValid==true&&this.hasBeenEmitted==false){this.setInitialPointerEvent(pointerManager);this.emit(pointerManager);this.hasBeenEmitted=true;this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active;this.blockGestures()}else if(isValid==false&&this.hasBeenEmitted==true){this.onEnd(pointerManager);this.state=(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Inactive;this.hasBeenEmitted=false}else{const duration=singlePointerInput.parameters.global.duration;if(this.hasBeenEmitted==true&&duration<=minDuration)this.hasBeenEmitted=false}}if(singlePointerInput==null)this.hasBeenEmitted=false}}class $7a0f7fd2f33d0212$export$f86166cd6057c2d1 extends(0,$e8978caba4d46d00$export$718b85c80185d86e){constructor(domElement,options){super(domElement,options);this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;this.eventBaseName="pan";this.initialParameters.global.min["duration"]=0;this.initialParameters.live.min["distance"]=10;this.initialParameters.global.boolean["hasBeenMoved"]=true;this.swipeFinalSpeed=600;this.isSwipe=false;this.options.supportedDirections=options?.supportedDirections??(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;this.initialSupportedDirections=this.options.supportedDirections}validate(pointerManager){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active)this.options.supportedDirections=(0,$a2188ba8c266b376$export$86ae6e8ac17a67c6).All;const isValid=super.validate(pointerManager);return isValid}onStart(pointerManager){this.isSwipe=false;super.onStart(pointerManager)}onEnd(pointerManager){const singlePointerInput=pointerManager.getlastRemovedPointerInput();if(singlePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.swipeFinalSpeed<singlePointerInput.parameters.global.finalSpeed&&singlePointerInput.parameters.live.vector.direction!=(0,$a2188ba8c266b376$export$cacd6541cfeeb6c1).None){this.isSwipe=true;this.emit(pointerManager,"swipe")}else if(this.DEBUG==true){if(singlePointerInput.parameters.global.finalSpeed<this.swipeFinalSpeed)console.log(`[Pan] dismissing swipe. Final speed: ${singlePointerInput.parameters.global.finalSpeed} < ${this.swipeFinalSpeed}`);else console.log(`[Pan] dismissing swipe. Direction: ${singlePointerInput.parameters.live.vector.direction}`)}}super.onEnd(pointerManager);this.options.supportedDirections=this.initialSupportedDirections}onTouchMove(event){if(this.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){if(this.DEBUG==true)console.log("[Pan] preventing touchmove default");event.preventDefault();event.stopPropagation()}}}class $ba0aae203ff6b3f9$export$bdba51b3ce92d5f1{constructor(pointer_1,pointer_2){this.pointerIds=new Set([pointer_1.pointerId,pointer_2.pointerId]);this.startTimestamp=(new Date).getTime();this.pointerMap={};this.pointerMap[pointer_1.pointerId]=pointer_1;this.pointerMap[pointer_2.pointerId]=pointer_2;this.pointer_1=pointer_1;this.pointer_2=pointer_2;this.initialPointerEvent=pointer_1.initialPointerEvent;this.currentPointerEvent=pointer_1.initialPointerEvent;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalParameters={duration:0,center:globalCenter,centerHasBeenMoved:false,centerMovementDistance:0,centerMovementVector:globalCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveParameters={center:liveCenter,centerIsMoving:false,centerMovementDistance:0,centerMovementVector:liveCenterMovementVector,absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0};const parameters={global:globalParameters,live:liveParameters};this.parameters=parameters}removePointer(pointerId){if(pointerId==this.pointer_1.pointerId)return this.pointer_2;else if(pointerId==this.pointer_2.pointerId)return this.pointer_1;else throw new Error(`[DualPointerInput] cannot remove Pointer #${pointerId}. The pointer is not part of this DualPointerInput`)}getTarget(){return this.initialPointerEvent.target}update(pointerEvent){if(pointerEvent instanceof PointerEvent)this.currentPointerEvent=pointerEvent;const now=(new Date).getTime();this.parameters.global["duration"]=now-this.startTimestamp;const globalVector_1=this.pointer_1.parameters.global.vector;const globalVector_2=this.pointer_2.parameters.global.vector;const globalCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(globalVector_1.startPoint,globalVector_2.startPoint);const globalCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(globalVector_1,globalVector_2);const globalAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(globalVector_1,globalVector_2);const globalRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(globalVector_1,globalVector_2);const globalRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(globalVector_1,globalVector_2);const globalVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(globalVector_1,globalVector_2);this.parameters.global["center"]=globalCenter;this.parameters.global["centerMovementVector"]=globalCenterMovementVector;this.parameters.global["centerMovementDistance"]=globalCenterMovementVector.vectorLength;this.parameters.global["absolutePointerDistanceChange"]=globalAbsoluteDistanceChange;this.parameters.global["relativePointerDistanceChange"]=globalRelativeDistanceChange;this.parameters.global["rotationAngle"]=globalRotationAngle;this.parameters.global["absoluteRotationAngle"]=Math.abs(globalRotationAngle);this.parameters.global["vectorAngle"]=globalVectorAngle;this.parameters.global["absoluteVectorAngle"]=Math.abs(globalVectorAngle);const liveVector_1=this.pointer_1.parameters.live.vector;const liveVector_2=this.pointer_2.parameters.live.vector;const liveCenter=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenter(liveVector_1.startPoint,liveVector_2.startPoint);const liveCenterMovementVector=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).getCenterMovementVector(liveVector_1,liveVector_2);const liveAbsoluteDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateAbsoluteDistanceChange(liveVector_1,liveVector_2);const liveRelativeDistanceChange=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRelativeDistanceChange(liveVector_1,liveVector_2);const liveRotationAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateRotationAngle(liveVector_1,liveVector_2);const liveVectorAngle=(0,$1f7944f1763e45ce$export$2db6c17465f94a2).calculateVectorAngle(liveVector_1,liveVector_2);if(liveCenterMovementVector.vectorLength>0){this.parameters.live.centerIsMoving=true;this.parameters.global.centerHasBeenMoved=true}else this.parameters.live.centerIsMoving=false;this.parameters.live["center"]=liveCenter;this.parameters.live["centerMovementDistance"]=liveCenterMovementVector.vectorLength;this.parameters.live["centerMovementVector"]=liveCenterMovementVector;this.parameters.live["absolutePointerDistanceChange"]=liveAbsoluteDistanceChange;this.parameters.live["relativePointerDistanceChange"]=liveRelativeDistanceChange;this.parameters.live["rotationAngle"]=liveRotationAngle;this.parameters.live["absoluteRotationAngle"]=Math.abs(liveRotationAngle);this.parameters.live["vectorAngle"]=liveVectorAngle;this.parameters.live["absoluteVectorAngle"]=Math.abs(liveVectorAngle)}onPointerMove(pointermoveEvent){this.update(pointermoveEvent)}onPointerUp(pointerupEvent){this.update(pointerupEvent)}onPointerLeave(pointerleaveEvent){this.update(pointerleaveEvent)}onPointerCancel(pointercancelEvent){this.update(pointercancelEvent)}onIdle(){this.update()}getCurrentDirection(){return this.parameters.live.centerMovementVector.direction}getCurrentPointerEvent(){return this.currentPointerEvent}}class $a1a4c2869495e604$export$f9d89efe4b7795e7 extends(0,$f752273e736c5336$export$61ce360501d38a6f){constructor(domElement,options){super(domElement,options);this.initialPointerEvent_1=null;this.initialPointerEvent_2=null;this.validPointerManagerState=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;this.validPointerInputConstructor=(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1);const nullRecognitionParameters=this.getEmptyGestureParameters();this.initialParameters={...nullRecognitionParameters};this.activeStateParameters=JSON.parse(JSON.stringify({...nullRecognitionParameters}))}getEventData(dualPointerInput,pointerManager){const globalParameters=dualPointerInput.parameters.global;const liveParameters=dualPointerInput.parameters.live;const globalGestureEventData={deltaX:globalParameters.centerMovementVector.x,deltaY:globalParameters.centerMovementVector.y,distance:globalParameters.centerMovementDistance,speedX:globalParameters.centerMovementVector.x/globalParameters.duration,speedY:globalParameters.centerMovementVector.y/globalParameters.duration,speed:globalParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:globalParameters.centerMovementVector.direction,scale:globalParameters.relativePointerDistanceChange,rotation:globalParameters.rotationAngle,center:globalParameters.center,srcEvent:dualPointerInput.currentPointerEvent};const liveGestureEventData={deltaX:liveParameters.centerMovementVector.x,deltaY:liveParameters.centerMovementVector.y,distance:liveParameters.centerMovementDistance,speedX:liveParameters.centerMovementVector.x/globalParameters.duration,speedY:liveParameters.centerMovementVector.y/globalParameters.duration,speed:liveParameters.centerMovementVector.vectorLength/globalParameters.duration,direction:liveParameters.centerMovementVector.direction,scale:liveParameters.relativePointerDistanceChange,rotation:liveParameters.rotationAngle,center:{x:liveParameters.centerMovementVector.startPoint.x,y:liveParameters.centerMovementVector.startPoint.y},srcEvent:dualPointerInput.currentPointerEvent};const gestureEventData={recognizer:this,global:globalGestureEventData,live:liveGestureEventData,pointerManager:pointerManager};return gestureEventData}}class $ed7931f1d96d5294$export$826ae541ddf1527b extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="pinch";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.min["absolutePointerDistanceChange"]=5;this.initialParameters.live.max["absoluteRotationAngle"]=20;this.initialParameters.live.min["absoluteVectorAngle"]=10}}class $9fe2bb90b337f66c$export$152db69a76b6b79e extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="rotate";this.initialParameters.live.min["centerMovementDistance"]=0;this.initialParameters.live.max["centerMovementDistance"]=50;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.min["absoluteRotationAngle"]=5;this.activeStateParameters.live.min["absoluteRotationAngle"]=0}}class $59226122237c359c$export$8847187e02a498e8 extends(0,$a1a4c2869495e604$export$f9d89efe4b7795e7){constructor(domElement,options){super(domElement,options);this.eventBaseName="twofingerpan";this.initialParameters.live.min["centerMovementDistance"]=10;this.initialParameters.live.max["absolutePointerDistanceChange"]=50;this.initialParameters.live.max["absoluteVectorAngle"]=150;this.activeStateParameters.live.min["centerMovementDistance"]=0}}class $4f5a7b355079efa2$export$af6d1be017a420a{constructor(options){options=options||{};this.options={DEBUG:false,...options};this.DEBUG=this.options.DEBUG;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;this.activePointerInput=null;this.lastRemovedPointer=null;this.lastInputSessionPointerCount=0;this.pointerAllocation={};this.unusedPointers={};this.onSurfacePointers={}}addPointer(pointerdownEvent){if(this.DEBUG==true)console.log(`[PointerManager] adding Pointer #${pointerdownEvent.pointerId.toString()}`);const pointerOptions={DEBUG:this.DEBUG};const pointer=new(0,$d25d2392b002d8dc$export$b56007f12edf0c17)(pointerdownEvent,pointerOptions);this.onSurfacePointers[pointer.pointerId]=pointer;if(this.activePointerInput==null)this.setActiveSinglePointerInput(pointer);else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8))this.setActiveDualPointerInput(this.activePointerInput.pointer,pointer);else if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1))this.unusedPointers[pointer.pointerId]=pointer;this.lastInputSessionPointerCount=this.currentPointerCount()}removePointer(pointerId){if(this.DEBUG==true){console.log(`[PointerManager] starting to remove Pointer #${pointerId}`);console.log(`[PointerManager] state: ${this.state}`)}const pointer=this.onSurfacePointers[pointerId];this.lastRemovedPointer=pointer;delete this.onSurfacePointers[pointerId];if(pointerId in this.unusedPointers)delete this.unusedPointers[pointerId];if(this.activePointerInput instanceof(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)){if(this.activePointerInput.pointerIds.has(pointerId)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from DualPointerInput`);const remainingPointer=this.activePointerInput.removePointer(pointerId);this.activePointerInput=null;const unusedPointerInput=this.getUnusedPointer();if(unusedPointerInput instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))this.setActiveDualPointerInput(remainingPointer,unusedPointerInput);else this.setActiveSinglePointerInput(remainingPointer)}}else if(this.activePointerInput instanceof(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)){if(this.DEBUG==true)console.log(`[PointerManager] removing Pointer #${pointerId} from SinglePointerInput`);this.activePointerInput=null;this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).NoPointer;if(Object.keys(this.unusedPointers).length>0){this.unusedPointers={};throw new Error("[PointerManager] found unused Pointers although there should not be any")}if(Object.keys(this.onSurfacePointers).length>0){this.onSurfacePointers={};throw new Error("[PointerManager] found onSurfacePointers although there should not be any")}}if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveSinglePointerInput(pointer){pointer.reset();const singlePointerInput=new(0,$5fe7e4b452e08fad$export$bbcc47898202c6b8)(pointer);this.activePointerInput=singlePointerInput;this.pointerAllocation[pointer.pointerId]=singlePointerInput;delete this.unusedPointers[pointer.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).SinglePointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}setActiveDualPointerInput(pointer_1,pointer_2){pointer_1.reset();pointer_2.reset();const dualPointerInput=new(0,$ba0aae203ff6b3f9$export$bdba51b3ce92d5f1)(pointer_1,pointer_2);this.activePointerInput=dualPointerInput;this.pointerAllocation[pointer_1.pointerId]=dualPointerInput;this.pointerAllocation[pointer_2.pointerId]=dualPointerInput;delete this.unusedPointers[pointer_1.pointerId];delete this.unusedPointers[pointer_2.pointerId];this.state=(0,$a2188ba8c266b376$export$b8339a9622c147c0).DualPointer;if(this.DEBUG==true)console.log(`[PointerManager] state: ${this.state}`)}hasPointersOnSurface(){if(Object.keys(this.onSurfacePointers).length>0)return true;return false}currentPointerCount(){return Object.keys(this.onSurfacePointers).length}getUnusedPointer(){if(Object.keys(this.unusedPointers).length>0){const pointer=Object.values(this.unusedPointers)[0];return pointer}return null}getPointerFromId(pointerId){if(pointerId in this.onSurfacePointers)return this.onSurfacePointers[pointerId];return null}getlastRemovedPointerInput(){if(this.lastRemovedPointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))return this.pointerAllocation[this.lastRemovedPointer.pointerId];return null}onIdle(){for(const pointerId in this.onSurfacePointers){const pointer=this.onSurfacePointers[pointerId];pointer.onIdle()}this.activePointerInput?.onIdle()}onPointerMove(pointermoveEvent){const pointer=this.getPointerFromId(pointermoveEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerMove(pointermoveEvent);this.activePointerInput?.onPointerMove(pointermoveEvent)}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerManager] pointerup detected");const pointer=this.getPointerFromId(pointerupEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerUp(pointerupEvent);this.activePointerInput?.onPointerUp(pointerupEvent);this.removePointer(pointerupEvent.pointerId)}onPointerCancel(pointercancelEvent){if(this.DEBUG==true)console.log("[PointerManager] pointercancel detected");const pointer=this.getPointerFromId(pointercancelEvent.pointerId);if(pointer instanceof(0,$d25d2392b002d8dc$export$b56007f12edf0c17))pointer.onPointerCancel(pointercancelEvent);this.activePointerInput?.onPointerCancel(pointercancelEvent);this.removePointer(pointercancelEvent.pointerId)}}const $03c52e54621b9b86$var$ALL_GESTURE_CLASSES=[(0,$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7),(0,$5653a1f5fdc2db30$export$90610caf6d8d0242),(0,$7a0f7fd2f33d0212$export$f86166cd6057c2d1),(0,$ed7931f1d96d5294$export$826ae541ddf1527b),(0,$9fe2bb90b337f66c$export$152db69a76b6b79e),(0,$59226122237c359c$export$8847187e02a498e8)];class $03c52e54621b9b86$export$9371bd96776f4e82{constructor(domElement,options){this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture;this.activeGestures=[];this.hadActiveGestureDuringCurrentContact=false;this.gestureEventHandlers={};this.lastRecognitionTimestamp=null;this.idleRecognitionIntervalId=null;this.pointerEventHandlers={};this.touchEventHandlers={};options=options||{};this.options={DEBUG:false,DEBUG_GESTURES:false,DEBUG_POINTERMANAGER:false,bubbles:true,handleTouchEvents:true,consecutiveGestures:true,simultaneousGestures:true,supportedGestures:[],...options};this.DEBUG=this.options.DEBUG;const supportedGestures=options.supportedGestures??$03c52e54621b9b86$var$ALL_GESTURE_CLASSES;const instantiatedGestures=supportedGestures.map(GestureClass=>{if(typeof GestureClass==="function"){const gestureOptions={bubbles:this.options.bubbles,DEBUG:this.options.DEBUG_GESTURES};return new GestureClass(domElement,gestureOptions)}if(typeof GestureClass==="object")return GestureClass;throw new Error(`unsupported gesture type: ${typeof GestureClass}`)});this.supportedGestures=instantiatedGestures;this.domElement=domElement;const pointerManagerOptions={DEBUG:this.options.DEBUG_POINTERMANAGER};this.pointerManager=new(0,$4f5a7b355079efa2$export$af6d1be017a420a)(pointerManagerOptions);this.addPointerEventListeners();this.addTouchEventListeners()}addPointerEventListeners(){const domElement=this.domElement;const onPointerDown=this.onPointerDown.bind(this);const onPointerMove=this.onPointerMove.bind(this);const onPointerUp=this.onPointerUp.bind(this);const onPointerCancel=this.onPointerCancel.bind(this);domElement.addEventListener("pointerdown",onPointerDown,{passive:true});domElement.addEventListener("pointermove",onPointerMove,{passive:true});domElement.addEventListener("pointerup",onPointerUp,{passive:true});domElement.addEventListener("pointercancel",onPointerCancel,{passive:true});this.pointerEventHandlers={pointerdown:onPointerDown,pointermove:onPointerMove,pointerup:onPointerUp,pointercancel:onPointerCancel}}onPointerDown(pointerdownEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerdown event detected");this.domElement.setPointerCapture(pointerdownEvent.pointerId);this.pointerManager.addPointer(pointerdownEvent);this.options.pointerdown?.(pointerdownEvent,this);if(this.idleRecognitionIntervalId!=null)this.clearIdleRecognitionInterval();this.idleRecognitionIntervalId=setInterval(()=>{this.onIdle()},100)}onPointerMove(pointermoveEvent){if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerMove(pointermoveEvent);this.recognizeGestures();this.options.pointermove?.(pointermoveEvent,this)}}onPointerUp(pointerupEvent){if(this.DEBUG==true)console.log("[PointerListener] pointerup event detected");this.domElement.releasePointerCapture(pointerupEvent.pointerId);if(this.pointerManager.hasPointersOnSurface()==true){this.pointerManager.onPointerUp(pointerupEvent);this.recognizeGestures();this.options.pointerup?.(pointerupEvent,this)}this.clearIdleRecognitionInterval()}onPointerCancel(pointercancelEvent){this.domElement.releasePointerCapture(pointercancelEvent.pointerId);if(this.DEBUG==true)console.log("[PointerListener] pointercancel detected");this.pointerManager.onPointerCancel(pointercancelEvent);this.recognizeGestures();this.clearIdleRecognitionInterval();this.options.pointercancel?.(pointercancelEvent,this)}removePointerEventListeners(){for(const event in this.pointerEventHandlers){const handler=this.pointerEventHandlers[event];this.domElement.removeEventListener(event,handler)}}addTouchEventListeners(){if(this.options.handleTouchEvents==true){const onTouchMove=this.onTouchMove.bind(this);this.domElement.addEventListener("touchmove",onTouchMove);this.touchEventHandlers["touchmove"]=onTouchMove}}removeTouchEventListeners(){for(const event in this.touchEventHandlers){const handler=this.touchEventHandlers[event];this.domElement.removeEventListener(event,handler)}}onTouchMove(event){for(let g=0;g<this.supportedGestures.length;g++){const gesture=this.supportedGestures[g];gesture.onTouchMove(event)}}onIdle(){if(this.pointerManager.hasPointersOnSurface()==false)this.clearIdleRecognitionInterval();else{const now=(new Date).getTime();let timedelta=null;if(this.lastRecognitionTimestamp!=null)timedelta=now-this.lastRecognitionTimestamp;if(timedelta==null||timedelta>100){this.pointerManager.onIdle();if(this.DEBUG==true)console.log("[PointerListener] onIdle - running idle recognition");this.recognizeGestures()}}}clearIdleRecognitionInterval(){if(this.idleRecognitionIntervalId!=null){clearInterval(this.idleRecognitionIntervalId);this.idleRecognitionIntervalId=null}}recognizeGestures(){this.lastRecognitionTimestamp=(new Date).getTime();let gesturesForRecognition=this.supportedGestures;if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)gesturesForRecognition=[this.activeGestures[0]];else if(this.options.consecutiveGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture){if(this.hadActiveGestureDuringCurrentContact==true&&this.pointerManager.hasPointersOnSurface()==true)gesturesForRecognition=[]}for(let g=0;g<gesturesForRecognition.length;g++){const gesture=gesturesForRecognition[g];gesture.recognize(this.pointerManager);this.updateActiveGestures(gesture);if(this.options.simultaneousGestures==false&&this.state==(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture)break}if(this.DEBUG==true)console.log(`[PointerListener] hadActiveGestureDuringCurrentContact: ${this.hadActiveGestureDuringCurrentContact}`);if(this.pointerManager.hasPointersOnSurface()==false)this.hadActiveGestureDuringCurrentContact=false}updateActiveGestures(gesture){if(gesture.state==(0,$a2188ba8c266b376$export$a1d3109c03b1d511).Active){this.hadActiveGestureDuringCurrentContact=true;if(this.activeGestures.indexOf(gesture)<0)this.activeGestures.push(gesture)}else{const index=this.activeGestures.indexOf(gesture);if(index>=0)this.activeGestures.splice(index,1)}if(this.activeGestures.length>0)this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).ActiveGesture;else this.state=(0,$a2188ba8c266b376$export$2fb579dd5dfdbea).NoActiveGesture}parseEventsString(eventsString){return eventsString.trim().split(/\s+/g)}on(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(!(eventType in this.gestureEventHandlers))this.gestureEventHandlers[eventType]=[];if(this.gestureEventHandlers[eventType].indexOf(handlerReference)==-1)this.gestureEventHandlers[eventType].push(handlerReference);this.domElement.addEventListener(eventType,handlerReference,{capture:false,passive:true})}}off(eventsString,handlerReference){const eventTypes=this.parseEventsString(eventsString);if(this.DEBUG==true){console.log(`[PointerListener] turning off events: ${eventsString}`);console.log(this.gestureEventHandlers)}for(let e=0;e<eventTypes.length;e++){const eventType=eventTypes[e];if(eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];const index=handlerList.indexOf(handlerReference);if(this.DEBUG==true)console.log(`[PointerListener] turning off ${eventType}. Index on handlerList: ${index}`);if(index>=0){handlerList.splice(index,1);this.gestureEventHandlers[eventType]=handlerList}this.domElement.removeEventListener(eventType,handlerReference,false)}}}destroy(){for(const eventType in this.gestureEventHandlers){const handlerList=this.gestureEventHandlers[eventType];for(let h=0;h<handlerList.length;h++){const handler=handlerList[h];this.domElement.removeEventListener(eventType,handler)}delete this.gestureEventHandlers[eventType]}this.removePointerEventListeners();this.removeTouchEventListeners()}}var Direction=$a2188ba8c266b376$export$cacd6541cfeeb6c1;var Directions=$a2188ba8c266b376$export$86ae6e8ac17a67c6;var GestureState=$a2188ba8c266b376$export$a1d3109c03b1d511;var Geometry=$1f7944f1763e45ce$export$2db6c17465f94a2;var PointerListener=$03c52e54621b9b86$export$9371bd96776f4e82;var GestureEvent=$f752273e736c5336$export$6e9c3b1e1fa2b597;var Tap=$b6ec4e8a6d9d51ec$export$4451a18ddc7083b7;var Press=$5653a1f5fdc2db30$export$90610caf6d8d0242;var Pan=$7a0f7fd2f33d0212$export$f86166cd6057c2d1;var TwoFingerPan=$59226122237c359c$export$8847187e02a498e8;var Pinch=$ed7931f1d96d5294$export$826ae541ddf1527b;var Rotate=$9fe2bb90b337f66c$export$152db69a76b6b79e; |
@@ -301,6 +301,4 @@ export enum Direction { | ||
type DualPointerInputConstructor = new (...args: ConstructorParameters<typeof DualPointerInput>) => DualPointerInput; | ||
export const GestureEvent: { | ||
new (type: string, eventInitDict?: CustomEventInit<GestureEventData> | undefined): CustomEvent<GestureEventData>; | ||
prototype: CustomEvent<any>; | ||
}; | ||
export class GestureEvent extends CustomEvent<GestureEventData> { | ||
} | ||
interface GestureOptions { | ||
@@ -307,0 +305,0 @@ DEBUG: boolean; |
@@ -1,2 +0,2 @@ | ||
function t(t,e,i,n){Object.defineProperty(t,e,{get:i,set:n,enumerable:!0,configurable:!0})}let e;var i;t(module.exports,"Direction",(()=>e)),t(module.exports,"Directions",(()=>n)),t(module.exports,"GestureState",(()=>s)),t(module.exports,"Geometry",(()=>v)),t(module.exports,"PointerListener",(()=>U)),t(module.exports,"GestureEvent",(()=>P)),t(module.exports,"Tap",(()=>b)),t(module.exports,"Press",(()=>I)),t(module.exports,"Pan",(()=>f)),t(module.exports,"TwoFingerPan",(()=>x)),t(module.exports,"Pinch",(()=>S)),t(module.exports,"Rotate",(()=>B)),(i=e||(e={})).None="0",i.Left="left",i.Right="right",i.Up="up",i.Down="down";const n=Object.freeze({Horizontal:[e.Left,e.Right],Vertical:[e.Up,e.Down],All:[e.Left,e.Right,e.Up,e.Down,e.None]});let s;var r;let o;var a;let l;var c;(r=s||(s={})).Inactive="inactive",r.Active="active",r.Blocked="blocked",(a=o||(o={})).NoPointer="nopointer",a.SinglePointer="singlepointer",a.DualPointer="dualpointer",(c=l||(l={})).NoActiveGesture="noactivegesture",c.ActiveGesture="activegesture";class h{constructor(t,e){this.x=t,this.y=e}}class u{constructor(t,i){this.startPoint=t,this.endPoint=i,this.direction=e.None,this.deltaX=this.endPoint.x-this.startPoint.x,this.deltaY=this.endPoint.y-this.startPoint.y,this.x=this.deltaX,this.y=this.deltaY,this.vectorLength=Math.sqrt(Math.pow(this.deltaX,2)+Math.pow(this.deltaY,2)),Math.abs(this.deltaX)>Math.abs(this.deltaY)?this.startPoint.x<this.endPoint.x?this.direction=e.Right:this.startPoint.x>this.endPoint.x&&(this.direction=e.Left):this.startPoint.y<this.endPoint.y?this.direction=e.Down:this.startPoint.y>this.endPoint.y&&(this.direction=e.Up)}}class v{static getVector(t,e){const i=new h(t.clientX,t.clientY),n=new h(e.clientX,e.clientY);return new u(i,n)}static getSpeed(t,e,i){let n=0;const s=(i-e)/1e3;return null!=t&&0!=s&&(n=t.vectorLength/s),n}static calculateRotationAngle(t,e){const i=new u(t.startPoint,e.startPoint),n=new u(t.endPoint,e.endPoint),s=new h(0,0),r=new u(i.startPoint,s),o=this.translatePoint(i.endPoint,r),a=new u(n.startPoint,s),l=this.translatePoint(n.endPoint,a),c=-1*this.calcAngleRad(o),v=l.x*Math.cos(c)-l.y*Math.sin(c),p=Math.round(l.x*Math.sin(c)+l.y*Math.cos(c));return 180*Math.atan2(p,v)/Math.PI}static calculateVectorAngle(t,e){let i=0;if(t.vectorLength>0&&e.vectorLength>0){const n=(t.x*e.x+t.y*e.y)/(t.vectorLength*e.vectorLength),s=Math.acos(n);i=this.rad2deg(s)}return i}static translatePoint(t,e){const i=t.x+e.x,n=t.y+e.y;return new h(i,n)}static calcAngleDegrees(t){let e=180*Math.atan2(t.y,t.x)/Math.PI;return e<0&&(e=360+e),e}static calcAngleRad(t){let e=Math.atan2(t.y,t.x);return e<0&&(e=2*Math.PI+e),e}static deg2rad(t){return Math.PI/180*t}static rad2deg(t){return t/(Math.PI/180)}static getCenter(t,e){const i=(t.x+e.x)/2,n=(t.y+e.y)/2;return new h(i,n)}static getCenterMovementVector(t,e){const i=this.getCenter(t.startPoint,e.startPoint),n=this.getCenter(t.endPoint,e.endPoint);return new u(i,n)}static calculateAbsoluteDistanceChange(t,e){const i=new u(t.startPoint,e.startPoint);return new u(t.endPoint,e.endPoint).vectorLength-i.vectorLength}static calculateRelativeDistanceChange(t,e){const i=new u(t.startPoint,e.startPoint);return new u(t.endPoint,e.endPoint).vectorLength/i.vectorLength}}class p{constructor(t){this.pointer=t,this.parameters=t.parameters}getTarget(){return this.pointer.initialPointerEvent.target}getCurrentPointerEvent(){return this.pointer.currentPointerEvent}getCurrentDirection(){return this.parameters.live.vector.direction}onIdle(){}onPointerMove(t){}onPointerUp(t){}onPointerLeave(t){}onPointerCancel(t){}}let d;var m;(m=d||(d={})).Active="active",m.Removed="removed",m.Canceled="canceled";class g{constructor(t,e){this.options={DEBUG:!1,...e},this.DEBUG=this.options.DEBUG;const i=(new Date).getTime();this.pointerId=t.pointerId,this.vectorTimespan=this.options.vectorTimespan??100,this.initialPointerEvent=t,this.currentPointerEvent=t,this.recognizedEvents=[t],this.state=d.Active;const n=v.getVector(t,t),s={global:{startX:this.initialPointerEvent.clientX,startY:this.initialPointerEvent.clientY,vector:n,deltaX:0,deltaY:0,startTimestampUTC:i,startTimestamp:this.initialPointerEvent.timeStamp,currentTimestamp:this.initialPointerEvent.timeStamp,endTimestamp:null,maximumSpeed:0,currentSpeed:0,distance:0,maximumDistance:0,averageSpeed:0,finalSpeed:0,traveledDistance:0,hasBeenMoved:!1,duration:0},live:{duration:0,speed:0,vector:n,distance:0,isMoving:!1}};this.parameters=s}getTarget(){return this.initialPointerEvent.target}reset(){}onIdle(){const t=(new Date).getTime()-this.parameters.global.startTimestampUTC;this.parameters.global.duration=t}onPointerMove(t){this.parameters.global.hasBeenMoved=!0,this.parameters.live.isMoving=!0,this.update(t)}onPointerUp(t){this.parameters.global.finalSpeed=this.parameters.live.speed,this.parameters.live.speed=0,this.parameters.live.isMoving=!1,this.state=d.Removed,this.parameters.global.endTimestamp=t.timeStamp,this.update(t),!0===this.DEBUG&&console.log(`[PointerInput] pointerdown ended. pointerdown duration: ${this.parameters.global.duration}ms`)}onPointerLeave(t){this.onPointerUp(t)}onPointerCancel(t){this.update(t),this.parameters.live.speed=0,this.state=d.Canceled,this.parameters.live.isMoving=!1,this.parameters.global.endTimestamp=t.timeStamp,!0===this.DEBUG&&console.log(`[PointerInput] canceled, pointerdown duration:${this.parameters.global.duration}ms`)}update(t){this.currentPointerEvent=t,this.recognizedEvents.push(t);const e=this.getTimedPointerEvents(),i=v.getVector(e[0],e[1]);this.parameters.live.vector=i,this.parameters.live.distance=i.vectorLength,this.parameters.live.speed=v.getSpeed(i,e[0].timeStamp,e[1].timeStamp),this.parameters.live.speed>this.parameters.global.maximumSpeed&&(this.parameters.global.maximumSpeed=this.parameters.live.speed),this.parameters.global.currentTimestamp=t.timeStamp,this.parameters.global.duration=t.timeStamp-this.parameters.global.startTimestamp,this.parameters.global.deltaX=i.endPoint.x-this.parameters.global.startX,this.parameters.global.deltaY=i.endPoint.y-this.parameters.global.startY;const n=v.getVector(this.initialPointerEvent,this.currentPointerEvent);this.parameters.global.vector=n,this.parameters.global.distance=n.vectorLength,n.vectorLength>this.parameters.global.maximumDistance&&(this.parameters.global.maximumDistance=n.vectorLength),!0===this.DEBUG&&(console.log(`[PointerInput] current speed: ${this.parameters.live.speed}px/s`),console.log(`[PointerInput] pointerdown duration: ${this.parameters.global.duration}ms`),console.log(`[PointerInput] live vector length within vectorTimespan: ${this.parameters.live.vector.vectorLength}px`))}getTimedPointerEvents(){let t=this.initialPointerEvent;const e=this.recognizedEvents[this.recognizedEvents.length-1];let i=this.recognizedEvents.length-1,n=0;const s=e.timeStamp;for(;n<this.vectorTimespan&&(i-=1,!(i<0));)t=this.recognizedEvents[i],n=s-t.timeStamp;const r=[t,e];return this.recognizedEvents=this.recognizedEvents.slice(-20),r}}const P=CustomEvent;class E{constructor(t,e){this.state=s.Inactive,this.validPointerManagerState=null,this.validPointerInputConstructor=p,this.domElement=t,this.initialPointerEvent=null,this.initialParameters=null,this.activeStateParameters=null,this.options={bubbles:!0,blocks:[],supportedDirections:[],DEBUG:!1,...e},this.DEBUG=this.options.DEBUG}getEmptyGestureParameters(){return{global:{min:{},max:{},boolean:{}},live:{min:{},max:{},boolean:{}}}}getGestureParameters(){let t;if(this.state==s.Active?(t=this.activeStateParameters,1==this.DEBUG&&(console.log(`[${this.eventBaseName}] validating using activeStateParameters`),console.log(t))):(1==this.DEBUG&&console.log(`[${this.eventBaseName}] validating using initialParameters`),t=this.initialParameters),null==t)throw new Error("[Gesture] no gesture parameters found. Do not call .getGestureParameters on abstract class Gesture");return t}validateGestureParameters(t){const e=this.getGestureParameters();let i,n=!0;for(i in e){const s=e[i],r=t.parameters[i];let o;for(o in s){const t=s[o];let e;for(e in t){const s=t[e],a=r[e];if(1==this.DEBUG&&console.log(`[${this.eventBaseName}] validating ${i} ${o}: required: ${s}, pointer: ${a}`),"boolean"==typeof s&&"boolean"==typeof a?n=this.validateBooleanParameter(s,a):"number"==typeof s&&"number"==typeof a&&(n=this.validateMinMaxParameter(s,a,o)),0==n)return 1==this.DEBUG&&console.log(`[${this.eventBaseName}] invalidated `),!1}}}return!0}validateBooleanParameter(t,e){return null==t||(t==e?(1==this.DEBUG&&console.log(`validated: required value: ${t}, current value: ${e}`),!0):(1==this.DEBUG&&console.log(`dismissing ${this.eventBaseName}: required value: ${t}, current value: ${e}`),!1))}validateMinMaxParameter(t,e,i){if("min"==i){if(e>=t)return!0}else if("max"==i&&e<=t)return!0;return!1}validateDirection(t){const e=t.getCurrentDirection();return!(this.options.supportedDirections.length&&!this.options.supportedDirections.includes(e))||(1==this.DEBUG&&console.log(`[Gestures] dismissing ${this.eventBaseName}: supported directions: ${this.options.supportedDirections}, current direction: ${e}`),!1)}validateGestureState(){return this.state!=s.Blocked}validatePointerManagerState(t){return t.state==this.validPointerManagerState||(1==this.DEBUG&&console.log(`[Gesture] PointerManagerState invalidated ${this.eventBaseName}: ${t.state}`),!1)}validatePointerInputConstructor(t){return t instanceof this.validPointerInputConstructor||(1==this.DEBUG&&console.log(`[Gesture] PointerInputConstructor invalidated ${this.eventBaseName}: ${this.validPointerInputConstructor}`),!1)}validate(t){let e=this.validateGestureState();1==e&&(e=this.validatePointerManagerState(t));const i=t.activePointerInput;return 1==e&&null!=i&&(e=this.validatePointerInputConstructor(i),1==e&&(e=this.validateDirection(i)),1==e&&(e=this.validateGestureParameters(i))),e}recognize(t){const e=this.validate(t);1==e&&this.state==s.Inactive&&this.onStart(t),1==e&&this.state==s.Active?(null==this.initialPointerEvent&&this.setInitialPointerEvent(t),this.emit(t)):this.state==s.Active&&0==e?this.onEnd(t):1==this.DEBUG&&console.log(`not firing event ${this.eventBaseName}. No SinglePointerInput found`)}getPointerInput(t){if(1==t.hasPointersOnSurface()&&t.activePointerInput instanceof this.validPointerInputConstructor)return t.activePointerInput;if(t.lastRemovedPointer instanceof g){const e=t.getlastRemovedPointerInput();if(e instanceof this.validPointerInputConstructor)return e}return null}setInitialPointerEvent(t){const e=this.getPointerInput(t);if(e instanceof this.validPointerInputConstructor){const t=e.getCurrentPointerEvent();this.initialPointerEvent=t}}emit(t,i){i=i||this.eventBaseName,!0===this.DEBUG&&console.log(`[Gestures] detected and firing event ${i}`);const n=this.getPointerInput(t);if(null!=n){const s=n.getTarget();if(s instanceof EventTarget){const r=this.getEventData(n,t),o={detail:r,bubbles:this.options.bubbles};!0===this.DEBUG&&console.log(o);const a=new P(i,o);1==o.bubbles?s.dispatchEvent(a):this.domElement.dispatchEvent(a);const l=r.live.direction;if(1==!!this.options.supportedDirections&&l!=e.None&&(i==this.eventBaseName||"swipe"==i))for(let t=0;t<this.options.supportedDirections.length;t++){const e=this.options.supportedDirections[t];if(e==l){const t=i+e;1==this.DEBUG&&console.log(`[Gestures] detected and firing event ${t}`);const n=new CustomEvent(t,o);1==o.bubbles?s.dispatchEvent(n):this.domElement.dispatchEvent(n)}}}}}onStart(t){this.blockGestures(),this.state=s.Active,this.setInitialPointerEvent(t);const e=`${this.eventBaseName}start`;this.emit(t,e)}onEnd(t){this.unblockGestures(),1==this.DEBUG&&console.log(`[${this.eventBaseName}] ended. Setting ${this.eventBaseName}.state = ${s.Inactive}`),this.state=s.Inactive;const e=`${this.eventBaseName}end`;this.emit(t,e)}onTouchStart(t){}onTouchMove(t){}onTouchEnd(t){}onTouchCancel(t){}block(t){-1==this.options.blocks.indexOf(t)&&this.options.blocks.push(t)}unblock(t){-1!=this.options.blocks.indexOf(t)&&this.options.blocks.splice(this.options.blocks.indexOf(t),1)}blockGestures(){for(let t=0;t<this.options.blocks.length;t++){const e=this.options.blocks[t];e.state==s.Inactive&&(0==this.DEBUG&&console.log(`[Gesture] blocking ${e.eventBaseName}`),e.state=s.Blocked)}}unblockGestures(){for(let t=0;t<this.options.blocks.length;t++){this.options.blocks[t].state=s.Inactive}}getEventData(t,e){throw new Error("Gesture subclasses require a getEventData method()")}}class D extends E{constructor(t,e){super(t,e),this.initialPointerEvent=null,this.validPointerManagerState=o.SinglePointer;const i=this.getEmptyGestureParameters();this.initialParameters={...i},this.activeStateParameters=JSON.parse(JSON.stringify({...i}))}getEventData(t,e){const i=t.parameters.live,n=t.parameters.live;let s=i.vector,r=i.duration;if(null!=this.initialPointerEvent){const e=new h(this.initialPointerEvent.clientX,this.initialPointerEvent.clientY),i=new h(t.pointer.currentPointerEvent.clientX,t.pointer.currentPointerEvent.clientY);s=new u(e,i),r=t.pointer.currentPointerEvent.timeStamp-this.initialPointerEvent.timeStamp}return{recognizer:this,global:{deltaX:s.x,deltaY:s.y,distance:s.vectorLength,speedX:s.x/r,speedY:s.y/r,speed:s.vectorLength/r,direction:s.direction,scale:1,rotation:0,center:{x:i.vector.endPoint.x,y:i.vector.endPoint.y},srcEvent:t.pointer.currentPointerEvent},live:{deltaX:n.vector.x,deltaY:n.vector.y,distance:n.vector.vectorLength,speedX:n.vector.x/t.pointer.vectorTimespan,speedY:n.vector.y/t.pointer.vectorTimespan,speed:n.speed,direction:n.vector.direction,scale:1,rotation:0,center:{x:n.vector.endPoint.x,y:n.vector.endPoint.y},srcEvent:t.pointer.currentPointerEvent},pointerManager:e}}}class b extends D{constructor(t,e){super(t,e),this.validPointerManagerState=o.NoPointer,this.eventBaseName="tap";let i=200,n=30,s=30;e&&("maxDuration"in e&&(i=e.maxDuration),"maxDistance"in e&&(n=e.maxDistance,s=e.maxDistance)),this.initialParameters.global.max.duration=i,this.initialParameters.live.max.distance=n,this.initialParameters.global.max.distance=s}validate(t){let e=this.validateGestureState();if(1==e&&(e=this.validatePointerManagerState(t)),!0===e){if(1!=t.lastInputSessionPointerCount)return!1;{const i=t.getlastRemovedPointerInput();e=i instanceof p&&this.validateGestureParameters(i)}}return e}onStart(t){this.setInitialPointerEvent(t),this.emit(t)}}class I extends D{static minDuration=600;constructor(t,e){super(t,e),this.eventBaseName="press";let i=600,n=10,s=20;e&&("minDuration"in e&&(i=e.minDuration),"maxDistance"in e&&(s=e.maxDistance,n=e.maxDistance)),this.initialParameters.global.min.duration=i,this.initialParameters.global.max.distance=n,this.initialParameters.global.max.maximumDistance=s,this.hasBeenEmitted=!1}recognize(t){const e=this.validate(t),i=this.getPointerInput(t),n=this.initialParameters.global.min.duration||I.minDuration;if(i instanceof p)if(1==e&&0==this.hasBeenEmitted)this.setInitialPointerEvent(t),this.emit(t),this.hasBeenEmitted=!0,this.state=s.Active,this.blockGestures();else if(0==e&&1==this.hasBeenEmitted)this.onEnd(t),this.state=s.Inactive,this.hasBeenEmitted=!1;else{const t=i.parameters.global.duration;1==this.hasBeenEmitted&&t<=n&&(this.hasBeenEmitted=!1)}null==i&&(this.hasBeenEmitted=!1)}}class f extends D{constructor(t,e){super(t,e),this.validPointerManagerState=o.SinglePointer,this.eventBaseName="pan",this.initialParameters.global.min.duration=0,this.initialParameters.live.min.distance=10,this.initialParameters.global.boolean.hasBeenMoved=!0,this.swipeFinalSpeed=600,this.isSwipe=!1,this.options.supportedDirections=e?.supportedDirections??n.All,this.initialSupportedDirections=this.options.supportedDirections}validate(t){this.state==s.Active&&(this.options.supportedDirections=n.All);return super.validate(t)}onStart(t){this.isSwipe=!1,super.onStart(t)}onEnd(t){const i=t.getlastRemovedPointerInput();i instanceof p&&(this.swipeFinalSpeed<i.parameters.global.finalSpeed&&i.parameters.live.vector.direction!=e.None?(this.isSwipe=!0,this.emit(t,"swipe")):1==this.DEBUG&&(i.parameters.global.finalSpeed<this.swipeFinalSpeed?console.log(`[Pan] dismissing swipe. Final speed: ${i.parameters.global.finalSpeed} < ${this.swipeFinalSpeed}`):console.log(`[Pan] dismissing swipe. Direction: ${i.parameters.live.vector.direction}`))),super.onEnd(t),this.options.supportedDirections=this.initialSupportedDirections}onTouchMove(t){this.state==s.Active&&(1==this.DEBUG&&console.log("[Pan] preventing touchmove default"),t.preventDefault(),t.stopPropagation())}}class G{constructor(t,e){this.pointerIds=new Set([t.pointerId,e.pointerId]),this.startTimestamp=(new Date).getTime(),this.pointerMap={},this.pointerMap[t.pointerId]=t,this.pointerMap[e.pointerId]=e,this.pointer_1=t,this.pointer_2=e,this.initialPointerEvent=t.initialPointerEvent,this.currentPointerEvent=t.initialPointerEvent;const i=this.pointer_1.parameters.global.vector,n=this.pointer_2.parameters.global.vector,s={duration:0,center:v.getCenter(i.startPoint,n.startPoint),centerHasBeenMoved:!1,centerMovementDistance:0,centerMovementVector:v.getCenterMovementVector(i,n),absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0},r=this.pointer_1.parameters.live.vector,o=this.pointer_2.parameters.live.vector,a={global:s,live:{center:v.getCenter(r.startPoint,o.startPoint),centerIsMoving:!1,centerMovementDistance:0,centerMovementVector:v.getCenterMovementVector(r,o),absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0}};this.parameters=a}removePointer(t){if(t==this.pointer_1.pointerId)return this.pointer_2;if(t==this.pointer_2.pointerId)return this.pointer_1;throw new Error(`[DualPointerInput] cannot remove Pointer #${t}. The pointer is not part of this DualPointerInput`)}getTarget(){return this.initialPointerEvent.target}update(t){t instanceof PointerEvent&&(this.currentPointerEvent=t);const e=(new Date).getTime();this.parameters.global.duration=e-this.startTimestamp;const i=this.pointer_1.parameters.global.vector,n=this.pointer_2.parameters.global.vector,s=v.getCenter(i.startPoint,n.startPoint),r=v.getCenterMovementVector(i,n),o=v.calculateAbsoluteDistanceChange(i,n),a=v.calculateRelativeDistanceChange(i,n),l=v.calculateRotationAngle(i,n),c=v.calculateVectorAngle(i,n);this.parameters.global.center=s,this.parameters.global.centerMovementVector=r,this.parameters.global.centerMovementDistance=r.vectorLength,this.parameters.global.absolutePointerDistanceChange=o,this.parameters.global.relativePointerDistanceChange=a,this.parameters.global.rotationAngle=l,this.parameters.global.absoluteRotationAngle=Math.abs(l),this.parameters.global.vectorAngle=c,this.parameters.global.absoluteVectorAngle=Math.abs(c);const h=this.pointer_1.parameters.live.vector,u=this.pointer_2.parameters.live.vector,p=v.getCenter(h.startPoint,u.startPoint),d=v.getCenterMovementVector(h,u),m=v.calculateAbsoluteDistanceChange(h,u),g=v.calculateRelativeDistanceChange(h,u),P=v.calculateRotationAngle(h,u),E=v.calculateVectorAngle(h,u);d.vectorLength>0?(this.parameters.live.centerIsMoving=!0,this.parameters.global.centerHasBeenMoved=!0):this.parameters.live.centerIsMoving=!1,this.parameters.live.center=p,this.parameters.live.centerMovementDistance=d.vectorLength,this.parameters.live.centerMovementVector=d,this.parameters.live.absolutePointerDistanceChange=m,this.parameters.live.relativePointerDistanceChange=g,this.parameters.live.rotationAngle=P,this.parameters.live.absoluteRotationAngle=Math.abs(P),this.parameters.live.vectorAngle=E,this.parameters.live.absoluteVectorAngle=Math.abs(E)}onPointerMove(t){this.update(t)}onPointerUp(t){this.update(t)}onPointerLeave(t){this.update(t)}onPointerCancel(t){this.update(t)}onIdle(){this.update()}getCurrentDirection(){return this.parameters.live.centerMovementVector.direction}getCurrentPointerEvent(){return this.currentPointerEvent}}class M extends E{constructor(t,e){super(t,e),this.initialPointerEvent_1=null,this.initialPointerEvent_2=null,this.validPointerManagerState=o.DualPointer,this.validPointerInputConstructor=G;const i=this.getEmptyGestureParameters();this.initialParameters={...i},this.activeStateParameters=JSON.parse(JSON.stringify({...i}))}getEventData(t,e){const i=t.parameters.global,n=t.parameters.live;return{recognizer:this,global:{deltaX:i.centerMovementVector.x,deltaY:i.centerMovementVector.y,distance:i.centerMovementDistance,speedX:i.centerMovementVector.x/i.duration,speedY:i.centerMovementVector.y/i.duration,speed:i.centerMovementVector.vectorLength/i.duration,direction:i.centerMovementVector.direction,scale:i.relativePointerDistanceChange,rotation:i.rotationAngle,center:i.center,srcEvent:t.currentPointerEvent},live:{deltaX:n.centerMovementVector.x,deltaY:n.centerMovementVector.y,distance:n.centerMovementDistance,speedX:n.centerMovementVector.x/i.duration,speedY:n.centerMovementVector.y/i.duration,speed:n.centerMovementVector.vectorLength/i.duration,direction:n.centerMovementVector.direction,scale:n.relativePointerDistanceChange,rotation:n.rotationAngle,center:{x:n.centerMovementVector.startPoint.x,y:n.centerMovementVector.startPoint.y},srcEvent:t.currentPointerEvent},pointerManager:e}}}class S extends M{constructor(t,e){super(t,e),this.eventBaseName="pinch",this.initialParameters.live.min.centerMovementDistance=0,this.initialParameters.live.max.centerMovementDistance=50,this.initialParameters.live.min.absolutePointerDistanceChange=5,this.initialParameters.live.max.absoluteRotationAngle=20,this.initialParameters.live.min.absoluteVectorAngle=10}}class B extends M{constructor(t,e){super(t,e),this.eventBaseName="rotate",this.initialParameters.live.min.centerMovementDistance=0,this.initialParameters.live.max.centerMovementDistance=50,this.initialParameters.live.max.absolutePointerDistanceChange=50,this.initialParameters.live.min.absoluteRotationAngle=5,this.activeStateParameters.live.min.absoluteRotationAngle=0}}class x extends M{constructor(t,e){super(t,e),this.eventBaseName="twofingerpan",this.initialParameters.live.min.centerMovementDistance=10,this.initialParameters.live.max.absolutePointerDistanceChange=50,this.initialParameters.live.max.absoluteVectorAngle=150,this.activeStateParameters.live.min.centerMovementDistance=0}}class C{constructor(t){t=t||{},this.options={DEBUG:!1,...t},this.DEBUG=this.options.DEBUG,this.state=o.NoPointer,this.activePointerInput=null,this.lastRemovedPointer=null,this.lastInputSessionPointerCount=0,this.pointerAllocation={},this.unusedPointers={},this.onSurfacePointers={}}addPointer(t){1==this.DEBUG&&console.log(`[PointerManager] adding Pointer #${t.pointerId.toString()}`);const e={DEBUG:this.DEBUG},i=new g(t,e);this.onSurfacePointers[i.pointerId]=i,null==this.activePointerInput?this.setActiveSinglePointerInput(i):this.activePointerInput instanceof p?this.setActiveDualPointerInput(this.activePointerInput.pointer,i):this.activePointerInput instanceof G&&(this.unusedPointers[i.pointerId]=i),this.lastInputSessionPointerCount=this.currentPointerCount()}removePointer(t){1==this.DEBUG&&(console.log(`[PointerManager] starting to remove Pointer #${t}`),console.log(`[PointerManager] state: ${this.state}`));const e=this.onSurfacePointers[t];if(this.lastRemovedPointer=e,delete this.onSurfacePointers[t],t in this.unusedPointers&&delete this.unusedPointers[t],this.activePointerInput instanceof G){if(this.activePointerInput.pointerIds.has(t)){1==this.DEBUG&&console.log(`[PointerManager] removing Pointer #${t} from DualPointerInput`);const e=this.activePointerInput.removePointer(t);this.activePointerInput=null;const i=this.getUnusedPointer();i instanceof g?this.setActiveDualPointerInput(e,i):this.setActiveSinglePointerInput(e)}}else if(this.activePointerInput instanceof p){if(1==this.DEBUG&&console.log(`[PointerManager] removing Pointer #${t} from SinglePointerInput`),this.activePointerInput=null,this.state=o.NoPointer,Object.keys(this.unusedPointers).length>0)throw this.unusedPointers={},new Error("[PointerManager] found unused Pointers although there should not be any");if(Object.keys(this.onSurfacePointers).length>0)throw this.onSurfacePointers={},new Error("[PointerManager] found onSurfacePointers although there should not be any")}1==this.DEBUG&&console.log(`[PointerManager] state: ${this.state}`)}setActiveSinglePointerInput(t){t.reset();const e=new p(t);this.activePointerInput=e,this.pointerAllocation[t.pointerId]=e,delete this.unusedPointers[t.pointerId],this.state=o.SinglePointer,1==this.DEBUG&&console.log(`[PointerManager] state: ${this.state}`)}setActiveDualPointerInput(t,e){t.reset(),e.reset();const i=new G(t,e);this.activePointerInput=i,this.pointerAllocation[t.pointerId]=i,this.pointerAllocation[e.pointerId]=i,delete this.unusedPointers[t.pointerId],delete this.unusedPointers[e.pointerId],this.state=o.DualPointer,1==this.DEBUG&&console.log(`[PointerManager] state: ${this.state}`)}hasPointersOnSurface(){return Object.keys(this.onSurfacePointers).length>0}currentPointerCount(){return Object.keys(this.onSurfacePointers).length}getUnusedPointer(){if(Object.keys(this.unusedPointers).length>0){return Object.values(this.unusedPointers)[0]}return null}getPointerFromId(t){return t in this.onSurfacePointers?this.onSurfacePointers[t]:null}getlastRemovedPointerInput(){return this.lastRemovedPointer instanceof g?this.pointerAllocation[this.lastRemovedPointer.pointerId]:null}onIdle(){for(const t in this.onSurfacePointers){this.onSurfacePointers[t].onIdle()}this.activePointerInput?.onIdle()}onPointerMove(t){const e=this.getPointerFromId(t.pointerId);e instanceof g&&e.onPointerMove(t),this.activePointerInput?.onPointerMove(t)}onPointerUp(t){1==this.DEBUG&&console.log("[PointerManager] pointerup detected");const e=this.getPointerFromId(t.pointerId);e instanceof g&&e.onPointerUp(t),this.activePointerInput?.onPointerUp(t),this.removePointer(t.pointerId)}onPointerCancel(t){1==this.DEBUG&&console.log("[PointerManager] pointercancel detected");const e=this.getPointerFromId(t.pointerId);e instanceof g&&e.onPointerCancel(t),this.activePointerInput?.onPointerCancel(t),this.removePointer(t.pointerId)}}const A=[b,I,f,S,B,x];class U{constructor(t,e){this.state=l.NoActiveGesture,this.activeGestures=[],this.hadActiveGestureDuringCurrentContact=!1,this.gestureEventHandlers={},this.lastRecognitionTimestamp=null,this.idleRecognitionIntervalId=null,this.pointerEventHandlers={},this.touchEventHandlers={},e=e||{},this.options={DEBUG:!1,DEBUG_GESTURES:!1,DEBUG_POINTERMANAGER:!1,bubbles:!0,handleTouchEvents:!0,consecutiveGestures:!0,simultaneousGestures:!0,supportedGestures:[],...e},this.DEBUG=this.options.DEBUG;const i=(e.supportedGestures??A).map((e=>{if("function"==typeof e){const i={bubbles:this.options.bubbles,DEBUG:this.options.DEBUG_GESTURES};return new e(t,i)}if("object"==typeof e)return e;throw new Error("unsupported gesture type: "+typeof e)}));this.supportedGestures=i,this.domElement=t;const n={DEBUG:this.options.DEBUG_POINTERMANAGER};this.pointerManager=new C(n),this.addPointerEventListeners(),this.addTouchEventListeners()}addPointerEventListeners(){const t=this.domElement,e=this.onPointerDown.bind(this),i=this.onPointerMove.bind(this),n=this.onPointerUp.bind(this),s=this.onPointerCancel.bind(this);t.addEventListener("pointerdown",e,{passive:!0}),t.addEventListener("pointermove",i,{passive:!0}),t.addEventListener("pointerup",n,{passive:!0}),t.addEventListener("pointercancel",s,{passive:!0}),this.pointerEventHandlers={pointerdown:e,pointermove:i,pointerup:n,pointercancel:s}}onPointerDown(t){1==this.DEBUG&&console.log("[PointerListener] pointerdown event detected"),this.domElement.setPointerCapture(t.pointerId),this.pointerManager.addPointer(t),this.options.pointerdown?.(t,this),null!=this.idleRecognitionIntervalId&&this.clearIdleRecognitionInterval(),this.idleRecognitionIntervalId=setInterval((()=>{this.onIdle()}),100)}onPointerMove(t){1==this.pointerManager.hasPointersOnSurface()&&(this.pointerManager.onPointerMove(t),this.recognizeGestures(),this.options.pointermove?.(t,this))}onPointerUp(t){1==this.DEBUG&&console.log("[PointerListener] pointerup event detected"),this.domElement.releasePointerCapture(t.pointerId),1==this.pointerManager.hasPointersOnSurface()&&(this.pointerManager.onPointerUp(t),this.recognizeGestures(),this.options.pointerup?.(t,this)),this.clearIdleRecognitionInterval()}onPointerCancel(t){this.domElement.releasePointerCapture(t.pointerId),1==this.DEBUG&&console.log("[PointerListener] pointercancel detected"),this.pointerManager.onPointerCancel(t),this.recognizeGestures(),this.clearIdleRecognitionInterval(),this.options.pointercancel?.(t,this)}removePointerEventListeners(){for(const t in this.pointerEventHandlers){const e=this.pointerEventHandlers[t];this.domElement.removeEventListener(t,e)}}addTouchEventListeners(){if(1==this.options.handleTouchEvents){const t=this.onTouchMove.bind(this);this.domElement.addEventListener("touchmove",t),this.touchEventHandlers.touchmove=t}}removeTouchEventListeners(){for(const t in this.touchEventHandlers){const e=this.touchEventHandlers[t];this.domElement.removeEventListener(t,e)}}onTouchMove(t){for(let e=0;e<this.supportedGestures.length;e++){this.supportedGestures[e].onTouchMove(t)}}onIdle(){if(0==this.pointerManager.hasPointersOnSurface())this.clearIdleRecognitionInterval();else{const t=(new Date).getTime();let e=null;null!=this.lastRecognitionTimestamp&&(e=t-this.lastRecognitionTimestamp),(null==e||e>100)&&(this.pointerManager.onIdle(),1==this.DEBUG&&console.log("[PointerListener] onIdle - running idle recognition"),this.recognizeGestures())}}clearIdleRecognitionInterval(){null!=this.idleRecognitionIntervalId&&(clearInterval(this.idleRecognitionIntervalId),this.idleRecognitionIntervalId=null)}recognizeGestures(){this.lastRecognitionTimestamp=(new Date).getTime();let t=this.supportedGestures;0==this.options.simultaneousGestures&&this.state==l.ActiveGesture||0==this.options.consecutiveGestures&&this.state==l.ActiveGesture?t=[this.activeGestures[0]]:0==this.options.consecutiveGestures&&this.state==l.NoActiveGesture&&1==this.hadActiveGestureDuringCurrentContact&&1==this.pointerManager.hasPointersOnSurface()&&(t=[]);for(let e=0;e<t.length;e++){const i=t[e];if(i.recognize(this.pointerManager),this.updateActiveGestures(i),0==this.options.simultaneousGestures&&this.state==l.ActiveGesture)break}1==this.DEBUG&&console.log(`[PointerListener] hadActiveGestureDuringCurrentContact: ${this.hadActiveGestureDuringCurrentContact}`),0==this.pointerManager.hasPointersOnSurface()&&(this.hadActiveGestureDuringCurrentContact=!1)}updateActiveGestures(t){if(t.state==s.Active)this.hadActiveGestureDuringCurrentContact=!0,this.activeGestures.indexOf(t)<0&&this.activeGestures.push(t);else{const e=this.activeGestures.indexOf(t);e>=0&&this.activeGestures.splice(e,1)}this.activeGestures.length>0?this.state=l.ActiveGesture:this.state=l.NoActiveGesture}parseEventsString(t){return t.trim().split(/\s+/g)}on(t,e){const i=this.parseEventsString(t);for(let t=0;t<i.length;t++){const n=i[t];n in this.gestureEventHandlers||(this.gestureEventHandlers[n]=[]),-1==this.gestureEventHandlers[n].indexOf(e)&&this.gestureEventHandlers[n].push(e),this.domElement.addEventListener(n,e,{capture:!1,passive:!0})}}off(t,e){const i=this.parseEventsString(t);1==this.DEBUG&&(console.log(`[PointerListener] turning off events: ${t}`),console.log(this.gestureEventHandlers));for(let t=0;t<i.length;t++){const n=i[t];if(n in this.gestureEventHandlers){const t=this.gestureEventHandlers[n],i=t.indexOf(e);1==this.DEBUG&&console.log(`[PointerListener] turning off ${n}. Index on handlerList: ${i}`),i>=0&&(t.splice(i,1),this.gestureEventHandlers[n]=t),this.domElement.removeEventListener(n,e,!1)}}}destroy(){for(const t in this.gestureEventHandlers){const e=this.gestureEventHandlers[t];for(let i=0;i<e.length;i++){const n=e[i];this.domElement.removeEventListener(t,n)}delete this.gestureEventHandlers[t]}this.removePointerEventListeners(),this.removeTouchEventListeners()}} | ||
function t(t,e,i,n){Object.defineProperty(t,e,{get:i,set:n,enumerable:!0,configurable:!0})}let e;var i;t(module.exports,"Direction",(()=>e)),t(module.exports,"Directions",(()=>n)),t(module.exports,"GestureState",(()=>s)),t(module.exports,"Geometry",(()=>v)),t(module.exports,"PointerListener",(()=>U)),t(module.exports,"GestureEvent",(()=>P)),t(module.exports,"Tap",(()=>b)),t(module.exports,"Press",(()=>I)),t(module.exports,"Pan",(()=>f)),t(module.exports,"TwoFingerPan",(()=>x)),t(module.exports,"Pinch",(()=>S)),t(module.exports,"Rotate",(()=>B)),(i=e||(e={})).None="0",i.Left="left",i.Right="right",i.Up="up",i.Down="down";const n=Object.freeze({Horizontal:[e.Left,e.Right],Vertical:[e.Up,e.Down],All:[e.Left,e.Right,e.Up,e.Down,e.None]});let s;var r;let o;var a;let l;var c;(r=s||(s={})).Inactive="inactive",r.Active="active",r.Blocked="blocked",(a=o||(o={})).NoPointer="nopointer",a.SinglePointer="singlepointer",a.DualPointer="dualpointer",(c=l||(l={})).NoActiveGesture="noactivegesture",c.ActiveGesture="activegesture";class h{constructor(t,e){this.x=t,this.y=e}}class u{constructor(t,i){this.startPoint=t,this.endPoint=i,this.direction=e.None,this.deltaX=this.endPoint.x-this.startPoint.x,this.deltaY=this.endPoint.y-this.startPoint.y,this.x=this.deltaX,this.y=this.deltaY,this.vectorLength=Math.sqrt(Math.pow(this.deltaX,2)+Math.pow(this.deltaY,2)),Math.abs(this.deltaX)>Math.abs(this.deltaY)?this.startPoint.x<this.endPoint.x?this.direction=e.Right:this.startPoint.x>this.endPoint.x&&(this.direction=e.Left):this.startPoint.y<this.endPoint.y?this.direction=e.Down:this.startPoint.y>this.endPoint.y&&(this.direction=e.Up)}}class v{static getVector(t,e){const i=new h(t.clientX,t.clientY),n=new h(e.clientX,e.clientY);return new u(i,n)}static getSpeed(t,e,i){let n=0;const s=(i-e)/1e3;return null!=t&&0!=s&&(n=t.vectorLength/s),n}static calculateRotationAngle(t,e){const i=new u(t.startPoint,e.startPoint),n=new u(t.endPoint,e.endPoint),s=new h(0,0),r=new u(i.startPoint,s),o=this.translatePoint(i.endPoint,r),a=new u(n.startPoint,s),l=this.translatePoint(n.endPoint,a),c=-1*this.calcAngleRad(o),v=l.x*Math.cos(c)-l.y*Math.sin(c),p=Math.round(l.x*Math.sin(c)+l.y*Math.cos(c));return 180*Math.atan2(p,v)/Math.PI}static calculateVectorAngle(t,e){let i=0;if(t.vectorLength>0&&e.vectorLength>0){const n=(t.x*e.x+t.y*e.y)/(t.vectorLength*e.vectorLength),s=Math.acos(n);i=this.rad2deg(s)}return i}static translatePoint(t,e){const i=t.x+e.x,n=t.y+e.y;return new h(i,n)}static calcAngleDegrees(t){let e=180*Math.atan2(t.y,t.x)/Math.PI;return e<0&&(e=360+e),e}static calcAngleRad(t){let e=Math.atan2(t.y,t.x);return e<0&&(e=2*Math.PI+e),e}static deg2rad(t){return Math.PI/180*t}static rad2deg(t){return t/(Math.PI/180)}static getCenter(t,e){const i=(t.x+e.x)/2,n=(t.y+e.y)/2;return new h(i,n)}static getCenterMovementVector(t,e){const i=this.getCenter(t.startPoint,e.startPoint),n=this.getCenter(t.endPoint,e.endPoint);return new u(i,n)}static calculateAbsoluteDistanceChange(t,e){const i=new u(t.startPoint,e.startPoint);return new u(t.endPoint,e.endPoint).vectorLength-i.vectorLength}static calculateRelativeDistanceChange(t,e){const i=new u(t.startPoint,e.startPoint);return new u(t.endPoint,e.endPoint).vectorLength/i.vectorLength}}class p{constructor(t){this.pointer=t,this.parameters=t.parameters}getTarget(){return this.pointer.initialPointerEvent.target}getCurrentPointerEvent(){return this.pointer.currentPointerEvent}getCurrentDirection(){return this.parameters.live.vector.direction}onIdle(){}onPointerMove(t){}onPointerUp(t){}onPointerLeave(t){}onPointerCancel(t){}}let d;var m;(m=d||(d={})).Active="active",m.Removed="removed",m.Canceled="canceled";class g{constructor(t,e){this.options={DEBUG:!1,...e},this.DEBUG=this.options.DEBUG;const i=(new Date).getTime();this.pointerId=t.pointerId,this.vectorTimespan=this.options.vectorTimespan??100,this.initialPointerEvent=t,this.currentPointerEvent=t,this.recognizedEvents=[t],this.state=d.Active;const n=v.getVector(t,t),s={global:{startX:this.initialPointerEvent.clientX,startY:this.initialPointerEvent.clientY,vector:n,deltaX:0,deltaY:0,startTimestampUTC:i,startTimestamp:this.initialPointerEvent.timeStamp,currentTimestamp:this.initialPointerEvent.timeStamp,endTimestamp:null,maximumSpeed:0,currentSpeed:0,distance:0,maximumDistance:0,averageSpeed:0,finalSpeed:0,traveledDistance:0,hasBeenMoved:!1,duration:0},live:{duration:0,speed:0,vector:n,distance:0,isMoving:!1}};this.parameters=s}getTarget(){return this.initialPointerEvent.target}reset(){}onIdle(){const t=(new Date).getTime()-this.parameters.global.startTimestampUTC;this.parameters.global.duration=t}onPointerMove(t){this.parameters.global.hasBeenMoved=!0,this.parameters.live.isMoving=!0,this.update(t)}onPointerUp(t){this.parameters.global.finalSpeed=this.parameters.live.speed,this.parameters.live.speed=0,this.parameters.live.isMoving=!1,this.state=d.Removed,this.parameters.global.endTimestamp=t.timeStamp,this.update(t),!0===this.DEBUG&&console.log(`[PointerInput] pointerdown ended. pointerdown duration: ${this.parameters.global.duration}ms`)}onPointerLeave(t){this.onPointerUp(t)}onPointerCancel(t){this.update(t),this.parameters.live.speed=0,this.state=d.Canceled,this.parameters.live.isMoving=!1,this.parameters.global.endTimestamp=t.timeStamp,!0===this.DEBUG&&console.log(`[PointerInput] canceled, pointerdown duration:${this.parameters.global.duration}ms`)}update(t){this.currentPointerEvent=t,this.recognizedEvents.push(t);const e=this.getTimedPointerEvents(),i=v.getVector(e[0],e[1]);this.parameters.live.vector=i,this.parameters.live.distance=i.vectorLength,this.parameters.live.speed=v.getSpeed(i,e[0].timeStamp,e[1].timeStamp),this.parameters.live.speed>this.parameters.global.maximumSpeed&&(this.parameters.global.maximumSpeed=this.parameters.live.speed),this.parameters.global.currentTimestamp=t.timeStamp,this.parameters.global.duration=t.timeStamp-this.parameters.global.startTimestamp,this.parameters.global.deltaX=i.endPoint.x-this.parameters.global.startX,this.parameters.global.deltaY=i.endPoint.y-this.parameters.global.startY;const n=v.getVector(this.initialPointerEvent,this.currentPointerEvent);this.parameters.global.vector=n,this.parameters.global.distance=n.vectorLength,n.vectorLength>this.parameters.global.maximumDistance&&(this.parameters.global.maximumDistance=n.vectorLength),!0===this.DEBUG&&(console.log(`[PointerInput] current speed: ${this.parameters.live.speed}px/s`),console.log(`[PointerInput] pointerdown duration: ${this.parameters.global.duration}ms`),console.log(`[PointerInput] live vector length within vectorTimespan: ${this.parameters.live.vector.vectorLength}px`))}getTimedPointerEvents(){let t=this.initialPointerEvent;const e=this.recognizedEvents[this.recognizedEvents.length-1];let i=this.recognizedEvents.length-1,n=0;const s=e.timeStamp;for(;n<this.vectorTimespan&&(i-=1,!(i<0));)t=this.recognizedEvents[i],n=s-t.timeStamp;const r=[t,e];return this.recognizedEvents=this.recognizedEvents.slice(-20),r}}class P extends CustomEvent{}class E{constructor(t,e){this.state=s.Inactive,this.validPointerManagerState=null,this.validPointerInputConstructor=p,this.domElement=t,this.initialPointerEvent=null,this.initialParameters=null,this.activeStateParameters=null,this.options={bubbles:!0,blocks:[],supportedDirections:[],DEBUG:!1,...e},this.DEBUG=this.options.DEBUG}getEmptyGestureParameters(){return{global:{min:{},max:{},boolean:{}},live:{min:{},max:{},boolean:{}}}}getGestureParameters(){let t;if(this.state==s.Active?(t=this.activeStateParameters,1==this.DEBUG&&(console.log(`[${this.eventBaseName}] validating using activeStateParameters`),console.log(t))):(1==this.DEBUG&&console.log(`[${this.eventBaseName}] validating using initialParameters`),t=this.initialParameters),null==t)throw new Error("[Gesture] no gesture parameters found. Do not call .getGestureParameters on abstract class Gesture");return t}validateGestureParameters(t){const e=this.getGestureParameters();let i,n=!0;for(i in e){const s=e[i],r=t.parameters[i];let o;for(o in s){const t=s[o];let e;for(e in t){const s=t[e],a=r[e];if(1==this.DEBUG&&console.log(`[${this.eventBaseName}] validating ${i} ${o}: required: ${s}, pointer: ${a}`),"boolean"==typeof s&&"boolean"==typeof a?n=this.validateBooleanParameter(s,a):"number"==typeof s&&"number"==typeof a&&(n=this.validateMinMaxParameter(s,a,o)),0==n)return 1==this.DEBUG&&console.log(`[${this.eventBaseName}] invalidated `),!1}}}return!0}validateBooleanParameter(t,e){return null==t||(t==e?(1==this.DEBUG&&console.log(`validated: required value: ${t}, current value: ${e}`),!0):(1==this.DEBUG&&console.log(`dismissing ${this.eventBaseName}: required value: ${t}, current value: ${e}`),!1))}validateMinMaxParameter(t,e,i){if("min"==i){if(e>=t)return!0}else if("max"==i&&e<=t)return!0;return!1}validateDirection(t){const e=t.getCurrentDirection();return!(this.options.supportedDirections.length&&!this.options.supportedDirections.includes(e))||(1==this.DEBUG&&console.log(`[Gestures] dismissing ${this.eventBaseName}: supported directions: ${this.options.supportedDirections}, current direction: ${e}`),!1)}validateGestureState(){return this.state!=s.Blocked}validatePointerManagerState(t){return t.state==this.validPointerManagerState||(1==this.DEBUG&&console.log(`[Gesture] PointerManagerState invalidated ${this.eventBaseName}: ${t.state}`),!1)}validatePointerInputConstructor(t){return t instanceof this.validPointerInputConstructor||(1==this.DEBUG&&console.log(`[Gesture] PointerInputConstructor invalidated ${this.eventBaseName}: ${this.validPointerInputConstructor}`),!1)}validate(t){let e=this.validateGestureState();1==e&&(e=this.validatePointerManagerState(t));const i=t.activePointerInput;return 1==e&&null!=i&&(e=this.validatePointerInputConstructor(i),1==e&&(e=this.validateDirection(i)),1==e&&(e=this.validateGestureParameters(i))),e}recognize(t){const e=this.validate(t);1==e&&this.state==s.Inactive&&this.onStart(t),1==e&&this.state==s.Active?(null==this.initialPointerEvent&&this.setInitialPointerEvent(t),this.emit(t)):this.state==s.Active&&0==e?this.onEnd(t):1==this.DEBUG&&console.log(`not firing event ${this.eventBaseName}. No SinglePointerInput found`)}getPointerInput(t){if(1==t.hasPointersOnSurface()&&t.activePointerInput instanceof this.validPointerInputConstructor)return t.activePointerInput;if(t.lastRemovedPointer instanceof g){const e=t.getlastRemovedPointerInput();if(e instanceof this.validPointerInputConstructor)return e}return null}setInitialPointerEvent(t){const e=this.getPointerInput(t);if(e instanceof this.validPointerInputConstructor){const t=e.getCurrentPointerEvent();this.initialPointerEvent=t}}emit(t,i){i=i||this.eventBaseName,!0===this.DEBUG&&console.log(`[Gestures] detected and firing event ${i}`);const n=this.getPointerInput(t);if(null!=n){const s=n.getTarget();if(s instanceof EventTarget){const r=this.getEventData(n,t),o={detail:r,bubbles:this.options.bubbles};!0===this.DEBUG&&console.log(o);const a=new P(i,o);1==o.bubbles?s.dispatchEvent(a):this.domElement.dispatchEvent(a);const l=r.live.direction;if(1==!!this.options.supportedDirections&&l!=e.None&&(i==this.eventBaseName||"swipe"==i))for(let t=0;t<this.options.supportedDirections.length;t++){const e=this.options.supportedDirections[t];if(e==l){const t=i+e;1==this.DEBUG&&console.log(`[Gestures] detected and firing event ${t}`);const n=new CustomEvent(t,o);1==o.bubbles?s.dispatchEvent(n):this.domElement.dispatchEvent(n)}}}}}onStart(t){this.blockGestures(),this.state=s.Active,this.setInitialPointerEvent(t);const e=`${this.eventBaseName}start`;this.emit(t,e)}onEnd(t){this.unblockGestures(),1==this.DEBUG&&console.log(`[${this.eventBaseName}] ended. Setting ${this.eventBaseName}.state = ${s.Inactive}`),this.state=s.Inactive;const e=`${this.eventBaseName}end`;this.emit(t,e)}onTouchStart(t){}onTouchMove(t){}onTouchEnd(t){}onTouchCancel(t){}block(t){-1==this.options.blocks.indexOf(t)&&this.options.blocks.push(t)}unblock(t){-1!=this.options.blocks.indexOf(t)&&this.options.blocks.splice(this.options.blocks.indexOf(t),1)}blockGestures(){for(let t=0;t<this.options.blocks.length;t++){const e=this.options.blocks[t];e.state==s.Inactive&&(0==this.DEBUG&&console.log(`[Gesture] blocking ${e.eventBaseName}`),e.state=s.Blocked)}}unblockGestures(){for(let t=0;t<this.options.blocks.length;t++){this.options.blocks[t].state=s.Inactive}}getEventData(t,e){throw new Error("Gesture subclasses require a getEventData method()")}}class D extends E{constructor(t,e){super(t,e),this.initialPointerEvent=null,this.validPointerManagerState=o.SinglePointer;const i=this.getEmptyGestureParameters();this.initialParameters={...i},this.activeStateParameters=JSON.parse(JSON.stringify({...i}))}getEventData(t,e){const i=t.parameters.live,n=t.parameters.live;let s=i.vector,r=i.duration;if(null!=this.initialPointerEvent){const e=new h(this.initialPointerEvent.clientX,this.initialPointerEvent.clientY),i=new h(t.pointer.currentPointerEvent.clientX,t.pointer.currentPointerEvent.clientY);s=new u(e,i),r=t.pointer.currentPointerEvent.timeStamp-this.initialPointerEvent.timeStamp}return{recognizer:this,global:{deltaX:s.x,deltaY:s.y,distance:s.vectorLength,speedX:s.x/r,speedY:s.y/r,speed:s.vectorLength/r,direction:s.direction,scale:1,rotation:0,center:{x:i.vector.endPoint.x,y:i.vector.endPoint.y},srcEvent:t.pointer.currentPointerEvent},live:{deltaX:n.vector.x,deltaY:n.vector.y,distance:n.vector.vectorLength,speedX:n.vector.x/t.pointer.vectorTimespan,speedY:n.vector.y/t.pointer.vectorTimespan,speed:n.speed,direction:n.vector.direction,scale:1,rotation:0,center:{x:n.vector.endPoint.x,y:n.vector.endPoint.y},srcEvent:t.pointer.currentPointerEvent},pointerManager:e}}}class b extends D{constructor(t,e){super(t,e),this.validPointerManagerState=o.NoPointer,this.eventBaseName="tap";let i=200,n=30,s=30;e&&("maxDuration"in e&&(i=e.maxDuration),"maxDistance"in e&&(n=e.maxDistance,s=e.maxDistance)),this.initialParameters.global.max.duration=i,this.initialParameters.live.max.distance=n,this.initialParameters.global.max.distance=s}validate(t){let e=this.validateGestureState();if(1==e&&(e=this.validatePointerManagerState(t)),!0===e){if(1!=t.lastInputSessionPointerCount)return!1;{const i=t.getlastRemovedPointerInput();e=i instanceof p&&this.validateGestureParameters(i)}}return e}onStart(t){this.setInitialPointerEvent(t),this.emit(t)}}class I extends D{static minDuration=600;constructor(t,e){super(t,e),this.eventBaseName="press";let i=600,n=10,s=20;e&&("minDuration"in e&&(i=e.minDuration),"maxDistance"in e&&(s=e.maxDistance,n=e.maxDistance)),this.initialParameters.global.min.duration=i,this.initialParameters.global.max.distance=n,this.initialParameters.global.max.maximumDistance=s,this.hasBeenEmitted=!1}recognize(t){const e=this.validate(t),i=this.getPointerInput(t),n=this.initialParameters.global.min.duration||I.minDuration;if(i instanceof p)if(1==e&&0==this.hasBeenEmitted)this.setInitialPointerEvent(t),this.emit(t),this.hasBeenEmitted=!0,this.state=s.Active,this.blockGestures();else if(0==e&&1==this.hasBeenEmitted)this.onEnd(t),this.state=s.Inactive,this.hasBeenEmitted=!1;else{const t=i.parameters.global.duration;1==this.hasBeenEmitted&&t<=n&&(this.hasBeenEmitted=!1)}null==i&&(this.hasBeenEmitted=!1)}}class f extends D{constructor(t,e){super(t,e),this.validPointerManagerState=o.SinglePointer,this.eventBaseName="pan",this.initialParameters.global.min.duration=0,this.initialParameters.live.min.distance=10,this.initialParameters.global.boolean.hasBeenMoved=!0,this.swipeFinalSpeed=600,this.isSwipe=!1,this.options.supportedDirections=e?.supportedDirections??n.All,this.initialSupportedDirections=this.options.supportedDirections}validate(t){this.state==s.Active&&(this.options.supportedDirections=n.All);return super.validate(t)}onStart(t){this.isSwipe=!1,super.onStart(t)}onEnd(t){const i=t.getlastRemovedPointerInput();i instanceof p&&(this.swipeFinalSpeed<i.parameters.global.finalSpeed&&i.parameters.live.vector.direction!=e.None?(this.isSwipe=!0,this.emit(t,"swipe")):1==this.DEBUG&&(i.parameters.global.finalSpeed<this.swipeFinalSpeed?console.log(`[Pan] dismissing swipe. Final speed: ${i.parameters.global.finalSpeed} < ${this.swipeFinalSpeed}`):console.log(`[Pan] dismissing swipe. Direction: ${i.parameters.live.vector.direction}`))),super.onEnd(t),this.options.supportedDirections=this.initialSupportedDirections}onTouchMove(t){this.state==s.Active&&(1==this.DEBUG&&console.log("[Pan] preventing touchmove default"),t.preventDefault(),t.stopPropagation())}}class G{constructor(t,e){this.pointerIds=new Set([t.pointerId,e.pointerId]),this.startTimestamp=(new Date).getTime(),this.pointerMap={},this.pointerMap[t.pointerId]=t,this.pointerMap[e.pointerId]=e,this.pointer_1=t,this.pointer_2=e,this.initialPointerEvent=t.initialPointerEvent,this.currentPointerEvent=t.initialPointerEvent;const i=this.pointer_1.parameters.global.vector,n=this.pointer_2.parameters.global.vector,s={duration:0,center:v.getCenter(i.startPoint,n.startPoint),centerHasBeenMoved:!1,centerMovementDistance:0,centerMovementVector:v.getCenterMovementVector(i,n),absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0},r=this.pointer_1.parameters.live.vector,o=this.pointer_2.parameters.live.vector,a={global:s,live:{center:v.getCenter(r.startPoint,o.startPoint),centerIsMoving:!1,centerMovementDistance:0,centerMovementVector:v.getCenterMovementVector(r,o),absolutePointerDistanceChange:0,relativePointerDistanceChange:0,rotationAngle:0,absoluteRotationAngle:0,vectorAngle:0,absoluteVectorAngle:0}};this.parameters=a}removePointer(t){if(t==this.pointer_1.pointerId)return this.pointer_2;if(t==this.pointer_2.pointerId)return this.pointer_1;throw new Error(`[DualPointerInput] cannot remove Pointer #${t}. The pointer is not part of this DualPointerInput`)}getTarget(){return this.initialPointerEvent.target}update(t){t instanceof PointerEvent&&(this.currentPointerEvent=t);const e=(new Date).getTime();this.parameters.global.duration=e-this.startTimestamp;const i=this.pointer_1.parameters.global.vector,n=this.pointer_2.parameters.global.vector,s=v.getCenter(i.startPoint,n.startPoint),r=v.getCenterMovementVector(i,n),o=v.calculateAbsoluteDistanceChange(i,n),a=v.calculateRelativeDistanceChange(i,n),l=v.calculateRotationAngle(i,n),c=v.calculateVectorAngle(i,n);this.parameters.global.center=s,this.parameters.global.centerMovementVector=r,this.parameters.global.centerMovementDistance=r.vectorLength,this.parameters.global.absolutePointerDistanceChange=o,this.parameters.global.relativePointerDistanceChange=a,this.parameters.global.rotationAngle=l,this.parameters.global.absoluteRotationAngle=Math.abs(l),this.parameters.global.vectorAngle=c,this.parameters.global.absoluteVectorAngle=Math.abs(c);const h=this.pointer_1.parameters.live.vector,u=this.pointer_2.parameters.live.vector,p=v.getCenter(h.startPoint,u.startPoint),d=v.getCenterMovementVector(h,u),m=v.calculateAbsoluteDistanceChange(h,u),g=v.calculateRelativeDistanceChange(h,u),P=v.calculateRotationAngle(h,u),E=v.calculateVectorAngle(h,u);d.vectorLength>0?(this.parameters.live.centerIsMoving=!0,this.parameters.global.centerHasBeenMoved=!0):this.parameters.live.centerIsMoving=!1,this.parameters.live.center=p,this.parameters.live.centerMovementDistance=d.vectorLength,this.parameters.live.centerMovementVector=d,this.parameters.live.absolutePointerDistanceChange=m,this.parameters.live.relativePointerDistanceChange=g,this.parameters.live.rotationAngle=P,this.parameters.live.absoluteRotationAngle=Math.abs(P),this.parameters.live.vectorAngle=E,this.parameters.live.absoluteVectorAngle=Math.abs(E)}onPointerMove(t){this.update(t)}onPointerUp(t){this.update(t)}onPointerLeave(t){this.update(t)}onPointerCancel(t){this.update(t)}onIdle(){this.update()}getCurrentDirection(){return this.parameters.live.centerMovementVector.direction}getCurrentPointerEvent(){return this.currentPointerEvent}}class M extends E{constructor(t,e){super(t,e),this.initialPointerEvent_1=null,this.initialPointerEvent_2=null,this.validPointerManagerState=o.DualPointer,this.validPointerInputConstructor=G;const i=this.getEmptyGestureParameters();this.initialParameters={...i},this.activeStateParameters=JSON.parse(JSON.stringify({...i}))}getEventData(t,e){const i=t.parameters.global,n=t.parameters.live;return{recognizer:this,global:{deltaX:i.centerMovementVector.x,deltaY:i.centerMovementVector.y,distance:i.centerMovementDistance,speedX:i.centerMovementVector.x/i.duration,speedY:i.centerMovementVector.y/i.duration,speed:i.centerMovementVector.vectorLength/i.duration,direction:i.centerMovementVector.direction,scale:i.relativePointerDistanceChange,rotation:i.rotationAngle,center:i.center,srcEvent:t.currentPointerEvent},live:{deltaX:n.centerMovementVector.x,deltaY:n.centerMovementVector.y,distance:n.centerMovementDistance,speedX:n.centerMovementVector.x/i.duration,speedY:n.centerMovementVector.y/i.duration,speed:n.centerMovementVector.vectorLength/i.duration,direction:n.centerMovementVector.direction,scale:n.relativePointerDistanceChange,rotation:n.rotationAngle,center:{x:n.centerMovementVector.startPoint.x,y:n.centerMovementVector.startPoint.y},srcEvent:t.currentPointerEvent},pointerManager:e}}}class S extends M{constructor(t,e){super(t,e),this.eventBaseName="pinch",this.initialParameters.live.min.centerMovementDistance=0,this.initialParameters.live.max.centerMovementDistance=50,this.initialParameters.live.min.absolutePointerDistanceChange=5,this.initialParameters.live.max.absoluteRotationAngle=20,this.initialParameters.live.min.absoluteVectorAngle=10}}class B extends M{constructor(t,e){super(t,e),this.eventBaseName="rotate",this.initialParameters.live.min.centerMovementDistance=0,this.initialParameters.live.max.centerMovementDistance=50,this.initialParameters.live.max.absolutePointerDistanceChange=50,this.initialParameters.live.min.absoluteRotationAngle=5,this.activeStateParameters.live.min.absoluteRotationAngle=0}}class x extends M{constructor(t,e){super(t,e),this.eventBaseName="twofingerpan",this.initialParameters.live.min.centerMovementDistance=10,this.initialParameters.live.max.absolutePointerDistanceChange=50,this.initialParameters.live.max.absoluteVectorAngle=150,this.activeStateParameters.live.min.centerMovementDistance=0}}class C{constructor(t){t=t||{},this.options={DEBUG:!1,...t},this.DEBUG=this.options.DEBUG,this.state=o.NoPointer,this.activePointerInput=null,this.lastRemovedPointer=null,this.lastInputSessionPointerCount=0,this.pointerAllocation={},this.unusedPointers={},this.onSurfacePointers={}}addPointer(t){1==this.DEBUG&&console.log(`[PointerManager] adding Pointer #${t.pointerId.toString()}`);const e={DEBUG:this.DEBUG},i=new g(t,e);this.onSurfacePointers[i.pointerId]=i,null==this.activePointerInput?this.setActiveSinglePointerInput(i):this.activePointerInput instanceof p?this.setActiveDualPointerInput(this.activePointerInput.pointer,i):this.activePointerInput instanceof G&&(this.unusedPointers[i.pointerId]=i),this.lastInputSessionPointerCount=this.currentPointerCount()}removePointer(t){1==this.DEBUG&&(console.log(`[PointerManager] starting to remove Pointer #${t}`),console.log(`[PointerManager] state: ${this.state}`));const e=this.onSurfacePointers[t];if(this.lastRemovedPointer=e,delete this.onSurfacePointers[t],t in this.unusedPointers&&delete this.unusedPointers[t],this.activePointerInput instanceof G){if(this.activePointerInput.pointerIds.has(t)){1==this.DEBUG&&console.log(`[PointerManager] removing Pointer #${t} from DualPointerInput`);const e=this.activePointerInput.removePointer(t);this.activePointerInput=null;const i=this.getUnusedPointer();i instanceof g?this.setActiveDualPointerInput(e,i):this.setActiveSinglePointerInput(e)}}else if(this.activePointerInput instanceof p){if(1==this.DEBUG&&console.log(`[PointerManager] removing Pointer #${t} from SinglePointerInput`),this.activePointerInput=null,this.state=o.NoPointer,Object.keys(this.unusedPointers).length>0)throw this.unusedPointers={},new Error("[PointerManager] found unused Pointers although there should not be any");if(Object.keys(this.onSurfacePointers).length>0)throw this.onSurfacePointers={},new Error("[PointerManager] found onSurfacePointers although there should not be any")}1==this.DEBUG&&console.log(`[PointerManager] state: ${this.state}`)}setActiveSinglePointerInput(t){t.reset();const e=new p(t);this.activePointerInput=e,this.pointerAllocation[t.pointerId]=e,delete this.unusedPointers[t.pointerId],this.state=o.SinglePointer,1==this.DEBUG&&console.log(`[PointerManager] state: ${this.state}`)}setActiveDualPointerInput(t,e){t.reset(),e.reset();const i=new G(t,e);this.activePointerInput=i,this.pointerAllocation[t.pointerId]=i,this.pointerAllocation[e.pointerId]=i,delete this.unusedPointers[t.pointerId],delete this.unusedPointers[e.pointerId],this.state=o.DualPointer,1==this.DEBUG&&console.log(`[PointerManager] state: ${this.state}`)}hasPointersOnSurface(){return Object.keys(this.onSurfacePointers).length>0}currentPointerCount(){return Object.keys(this.onSurfacePointers).length}getUnusedPointer(){if(Object.keys(this.unusedPointers).length>0){return Object.values(this.unusedPointers)[0]}return null}getPointerFromId(t){return t in this.onSurfacePointers?this.onSurfacePointers[t]:null}getlastRemovedPointerInput(){return this.lastRemovedPointer instanceof g?this.pointerAllocation[this.lastRemovedPointer.pointerId]:null}onIdle(){for(const t in this.onSurfacePointers){this.onSurfacePointers[t].onIdle()}this.activePointerInput?.onIdle()}onPointerMove(t){const e=this.getPointerFromId(t.pointerId);e instanceof g&&e.onPointerMove(t),this.activePointerInput?.onPointerMove(t)}onPointerUp(t){1==this.DEBUG&&console.log("[PointerManager] pointerup detected");const e=this.getPointerFromId(t.pointerId);e instanceof g&&e.onPointerUp(t),this.activePointerInput?.onPointerUp(t),this.removePointer(t.pointerId)}onPointerCancel(t){1==this.DEBUG&&console.log("[PointerManager] pointercancel detected");const e=this.getPointerFromId(t.pointerId);e instanceof g&&e.onPointerCancel(t),this.activePointerInput?.onPointerCancel(t),this.removePointer(t.pointerId)}}const A=[b,I,f,S,B,x];class U{constructor(t,e){this.state=l.NoActiveGesture,this.activeGestures=[],this.hadActiveGestureDuringCurrentContact=!1,this.gestureEventHandlers={},this.lastRecognitionTimestamp=null,this.idleRecognitionIntervalId=null,this.pointerEventHandlers={},this.touchEventHandlers={},e=e||{},this.options={DEBUG:!1,DEBUG_GESTURES:!1,DEBUG_POINTERMANAGER:!1,bubbles:!0,handleTouchEvents:!0,consecutiveGestures:!0,simultaneousGestures:!0,supportedGestures:[],...e},this.DEBUG=this.options.DEBUG;const i=(e.supportedGestures??A).map((e=>{if("function"==typeof e){const i={bubbles:this.options.bubbles,DEBUG:this.options.DEBUG_GESTURES};return new e(t,i)}if("object"==typeof e)return e;throw new Error("unsupported gesture type: "+typeof e)}));this.supportedGestures=i,this.domElement=t;const n={DEBUG:this.options.DEBUG_POINTERMANAGER};this.pointerManager=new C(n),this.addPointerEventListeners(),this.addTouchEventListeners()}addPointerEventListeners(){const t=this.domElement,e=this.onPointerDown.bind(this),i=this.onPointerMove.bind(this),n=this.onPointerUp.bind(this),s=this.onPointerCancel.bind(this);t.addEventListener("pointerdown",e,{passive:!0}),t.addEventListener("pointermove",i,{passive:!0}),t.addEventListener("pointerup",n,{passive:!0}),t.addEventListener("pointercancel",s,{passive:!0}),this.pointerEventHandlers={pointerdown:e,pointermove:i,pointerup:n,pointercancel:s}}onPointerDown(t){1==this.DEBUG&&console.log("[PointerListener] pointerdown event detected"),this.domElement.setPointerCapture(t.pointerId),this.pointerManager.addPointer(t),this.options.pointerdown?.(t,this),null!=this.idleRecognitionIntervalId&&this.clearIdleRecognitionInterval(),this.idleRecognitionIntervalId=setInterval((()=>{this.onIdle()}),100)}onPointerMove(t){1==this.pointerManager.hasPointersOnSurface()&&(this.pointerManager.onPointerMove(t),this.recognizeGestures(),this.options.pointermove?.(t,this))}onPointerUp(t){1==this.DEBUG&&console.log("[PointerListener] pointerup event detected"),this.domElement.releasePointerCapture(t.pointerId),1==this.pointerManager.hasPointersOnSurface()&&(this.pointerManager.onPointerUp(t),this.recognizeGestures(),this.options.pointerup?.(t,this)),this.clearIdleRecognitionInterval()}onPointerCancel(t){this.domElement.releasePointerCapture(t.pointerId),1==this.DEBUG&&console.log("[PointerListener] pointercancel detected"),this.pointerManager.onPointerCancel(t),this.recognizeGestures(),this.clearIdleRecognitionInterval(),this.options.pointercancel?.(t,this)}removePointerEventListeners(){for(const t in this.pointerEventHandlers){const e=this.pointerEventHandlers[t];this.domElement.removeEventListener(t,e)}}addTouchEventListeners(){if(1==this.options.handleTouchEvents){const t=this.onTouchMove.bind(this);this.domElement.addEventListener("touchmove",t),this.touchEventHandlers.touchmove=t}}removeTouchEventListeners(){for(const t in this.touchEventHandlers){const e=this.touchEventHandlers[t];this.domElement.removeEventListener(t,e)}}onTouchMove(t){for(let e=0;e<this.supportedGestures.length;e++){this.supportedGestures[e].onTouchMove(t)}}onIdle(){if(0==this.pointerManager.hasPointersOnSurface())this.clearIdleRecognitionInterval();else{const t=(new Date).getTime();let e=null;null!=this.lastRecognitionTimestamp&&(e=t-this.lastRecognitionTimestamp),(null==e||e>100)&&(this.pointerManager.onIdle(),1==this.DEBUG&&console.log("[PointerListener] onIdle - running idle recognition"),this.recognizeGestures())}}clearIdleRecognitionInterval(){null!=this.idleRecognitionIntervalId&&(clearInterval(this.idleRecognitionIntervalId),this.idleRecognitionIntervalId=null)}recognizeGestures(){this.lastRecognitionTimestamp=(new Date).getTime();let t=this.supportedGestures;0==this.options.simultaneousGestures&&this.state==l.ActiveGesture||0==this.options.consecutiveGestures&&this.state==l.ActiveGesture?t=[this.activeGestures[0]]:0==this.options.consecutiveGestures&&this.state==l.NoActiveGesture&&1==this.hadActiveGestureDuringCurrentContact&&1==this.pointerManager.hasPointersOnSurface()&&(t=[]);for(let e=0;e<t.length;e++){const i=t[e];if(i.recognize(this.pointerManager),this.updateActiveGestures(i),0==this.options.simultaneousGestures&&this.state==l.ActiveGesture)break}1==this.DEBUG&&console.log(`[PointerListener] hadActiveGestureDuringCurrentContact: ${this.hadActiveGestureDuringCurrentContact}`),0==this.pointerManager.hasPointersOnSurface()&&(this.hadActiveGestureDuringCurrentContact=!1)}updateActiveGestures(t){if(t.state==s.Active)this.hadActiveGestureDuringCurrentContact=!0,this.activeGestures.indexOf(t)<0&&this.activeGestures.push(t);else{const e=this.activeGestures.indexOf(t);e>=0&&this.activeGestures.splice(e,1)}this.activeGestures.length>0?this.state=l.ActiveGesture:this.state=l.NoActiveGesture}parseEventsString(t){return t.trim().split(/\s+/g)}on(t,e){const i=this.parseEventsString(t);for(let t=0;t<i.length;t++){const n=i[t];n in this.gestureEventHandlers||(this.gestureEventHandlers[n]=[]),-1==this.gestureEventHandlers[n].indexOf(e)&&this.gestureEventHandlers[n].push(e),this.domElement.addEventListener(n,e,{capture:!1,passive:!0})}}off(t,e){const i=this.parseEventsString(t);1==this.DEBUG&&(console.log(`[PointerListener] turning off events: ${t}`),console.log(this.gestureEventHandlers));for(let t=0;t<i.length;t++){const n=i[t];if(n in this.gestureEventHandlers){const t=this.gestureEventHandlers[n],i=t.indexOf(e);1==this.DEBUG&&console.log(`[PointerListener] turning off ${n}. Index on handlerList: ${i}`),i>=0&&(t.splice(i,1),this.gestureEventHandlers[n]=t),this.domElement.removeEventListener(n,e,!1)}}}destroy(){for(const t in this.gestureEventHandlers){const e=this.gestureEventHandlers[t];for(let i=0;i<e.length;i++){const n=e[i];this.domElement.removeEventListener(t,n)}delete this.gestureEventHandlers[t]}this.removePointerEventListeners(),this.removeTouchEventListeners()}} | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "contactjs", | ||
"version": "2.1.0", | ||
"version": "2.1.1", | ||
"description": "Pointer gestures for your webapp", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
605969
-0.01%