{"ast":null,"code":"import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _get from \"@babel/runtime/helpers/get\";\nimport _inherits from \"@babel/runtime/helpers/inherits\";\nimport _possibleConstructorReturn from \"@babel/runtime/helpers/possibleConstructorReturn\";\nimport _getPrototypeOf from \"@babel/runtime/helpers/getPrototypeOf\";\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nimport { EventTypes, MouseButtons, PointerType } from \"../interfaces\";\nimport EventManager from \"./EventManager\";\nimport { isPointerInBounds } from \"../utils\";\nvar PointerEventManager = function (_EventManager) {\n  _inherits(PointerEventManager, _EventManager);\n  var _super = _createSuper(PointerEventManager);\n  function PointerEventManager() {\n    var _this;\n    _classCallCheck(this, PointerEventManager);\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    _this = _super.call.apply(_super, [this].concat(args));\n    _defineProperty(_assertThisInitialized(_this), \"trackedPointers\", new Set());\n    return _this;\n  }\n  _createClass(PointerEventManager, [{\n    key: \"setListeners\",\n    value: function setListeners() {\n      var _this2 = this;\n      this.view.addEventListener('pointerdown', function (event) {\n        if (event.pointerType === PointerType.TOUCH) {\n          return;\n        }\n        if (!isPointerInBounds(_this2.view, {\n          x: event.clientX,\n          y: event.clientY\n        })) {\n          return;\n        }\n        var adaptedEvent = _this2.mapEvent(event, EventTypes.DOWN);\n        var target = event.target;\n        target.setPointerCapture(adaptedEvent.pointerId);\n        _this2.markAsInBounds(adaptedEvent.pointerId);\n        _this2.trackedPointers.add(adaptedEvent.pointerId);\n        if (++_this2.activePointersCounter > 1) {\n          adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n          _this2.onPointerAdd(adaptedEvent);\n        } else {\n          _this2.onPointerDown(adaptedEvent);\n        }\n      });\n      this.view.addEventListener('pointerup', function (event) {\n        if (event.pointerType === PointerType.TOUCH) {\n          return;\n        }\n        if (_this2.activePointersCounter === 0) {\n          return;\n        }\n        var adaptedEvent = _this2.mapEvent(event, EventTypes.UP);\n        var target = event.target;\n        target.releasePointerCapture(adaptedEvent.pointerId);\n        _this2.markAsOutOfBounds(adaptedEvent.pointerId);\n        _this2.trackedPointers.delete(adaptedEvent.pointerId);\n        if (--_this2.activePointersCounter > 0) {\n          adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n          _this2.onPointerRemove(adaptedEvent);\n        } else {\n          _this2.onPointerUp(adaptedEvent);\n        }\n      });\n      this.view.addEventListener('pointermove', function (event) {\n        if (event.pointerType === PointerType.TOUCH) {\n          return;\n        }\n        if (event.pointerType === PointerType.MOUSE && event.buttons !== MouseButtons.LEFT) {\n          return;\n        }\n        var adaptedEvent = _this2.mapEvent(event, EventTypes.MOVE);\n        var inBounds = isPointerInBounds(_this2.view, {\n          x: adaptedEvent.x,\n          y: adaptedEvent.y\n        });\n        var pointerIndex = _this2.pointersInBounds.indexOf(adaptedEvent.pointerId);\n        if (inBounds) {\n          if (pointerIndex < 0) {\n            adaptedEvent.eventType = EventTypes.ENTER;\n            _this2.onPointerEnter(adaptedEvent);\n            _this2.markAsInBounds(adaptedEvent.pointerId);\n          } else {\n            _this2.onPointerMove(adaptedEvent);\n          }\n        } else {\n          if (pointerIndex >= 0) {\n            adaptedEvent.eventType = EventTypes.OUT;\n            _this2.onPointerOut(adaptedEvent);\n            _this2.markAsOutOfBounds(adaptedEvent.pointerId);\n          } else {\n            _this2.onPointerOutOfBounds(adaptedEvent);\n          }\n        }\n      });\n      this.view.addEventListener('pointercancel', function (event) {\n        if (event.pointerType === PointerType.TOUCH) {\n          return;\n        }\n        var adaptedEvent = _this2.mapEvent(event, EventTypes.CANCEL);\n        _this2.onPointerCancel(adaptedEvent);\n        _this2.markAsOutOfBounds(adaptedEvent.pointerId);\n        _this2.activePointersCounter = 0;\n        _this2.trackedPointers.clear();\n      });\n      this.view.addEventListener('lostpointercapture', function (event) {\n        var adaptedEvent = _this2.mapEvent(event, EventTypes.CANCEL);\n        if (_this2.trackedPointers.has(adaptedEvent.pointerId)) {\n          _this2.onPointerCancel(adaptedEvent);\n          _this2.activePointersCounter = 0;\n          _this2.trackedPointers.clear();\n        }\n      });\n    }\n  }, {\n    key: \"mapEvent\",\n    value: function mapEvent(event, eventType) {\n      return {\n        x: event.clientX,\n        y: event.clientY,\n        offsetX: event.offsetX,\n        offsetY: event.offsetY,\n        pointerId: event.pointerId,\n        eventType: eventType,\n        pointerType: event.pointerType,\n        buttons: event.buttons,\n        time: event.timeStamp\n      };\n    }\n  }, {\n    key: \"resetManager\",\n    value: function resetManager() {\n      _get(_getPrototypeOf(PointerEventManager.prototype), \"resetManager\", this).call(this);\n      this.trackedPointers.clear();\n    }\n  }]);\n  return PointerEventManager;\n}(EventManager);\nexport { PointerEventManager as default };","map":{"version":3,"sources":["PointerEventManager.ts"],"names":["EventTypes","MouseButtons","PointerType","EventManager","isPointerInBounds","PointerEventManager","Set","setListeners","view","addEventListener","event","pointerType","TOUCH","x","clientX","y","clientY","adaptedEvent","mapEvent","DOWN","target","setPointerCapture","pointerId","markAsInBounds","trackedPointers","add","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","UP","releasePointerCapture","markAsOutOfBounds","delete","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","MOUSE","buttons","LEFT","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","OUT","onPointerOut","onPointerOutOfBounds","CANCEL","onPointerCancel","clear","has","offsetX","offsetY","time","timeStamp","resetManager"],"mappings":"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","sourcesContent":["import {\n  AdaptedEvent,\n  EventTypes,\n  MouseButtons,\n  PointerType,\n} from '../interfaces';\nimport EventManager from './EventManager';\nimport { isPointerInBounds } from '../utils';\n\nexport default class PointerEventManager extends EventManager {\n  private trackedPointers = new Set<number>();\n\n  public setListeners(): void {\n    this.view.addEventListener('pointerdown', (event: PointerEvent): void => {\n      if (event.pointerType === PointerType.TOUCH) {\n        return;\n      }\n      if (\n        !isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })\n      ) {\n        return;\n      }\n\n      const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);\n      const target = event.target as HTMLElement;\n\n      target.setPointerCapture(adaptedEvent.pointerId);\n      this.markAsInBounds(adaptedEvent.pointerId);\n      this.trackedPointers.add(adaptedEvent.pointerId);\n\n      if (++this.activePointersCounter > 1) {\n        adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n        this.onPointerAdd(adaptedEvent);\n      } else {\n        this.onPointerDown(adaptedEvent);\n      }\n    });\n\n    this.view.addEventListener('pointerup', (event: PointerEvent): void => {\n      if (event.pointerType === PointerType.TOUCH) {\n        return;\n      }\n\n      // When we call reset on gesture handlers, it also resets their event managers\n      // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n      // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n      // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n      if (this.activePointersCounter === 0) {\n        return;\n      }\n\n      const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);\n      const target = event.target as HTMLElement;\n\n      target.releasePointerCapture(adaptedEvent.pointerId);\n      this.markAsOutOfBounds(adaptedEvent.pointerId);\n      this.trackedPointers.delete(adaptedEvent.pointerId);\n\n      if (--this.activePointersCounter > 0) {\n        adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n        this.onPointerRemove(adaptedEvent);\n      } else {\n        this.onPointerUp(adaptedEvent);\n      }\n    });\n\n    this.view.addEventListener('pointermove', (event: PointerEvent): void => {\n      if (event.pointerType === PointerType.TOUCH) {\n        return;\n      }\n\n      if (\n        event.pointerType === PointerType.MOUSE &&\n        event.buttons !== MouseButtons.LEFT\n      ) {\n        return;\n      }\n\n      const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.MOVE);\n\n      const inBounds: boolean = isPointerInBounds(this.view, {\n        x: adaptedEvent.x,\n        y: adaptedEvent.y,\n      });\n\n      const pointerIndex: number = this.pointersInBounds.indexOf(\n        adaptedEvent.pointerId\n      );\n\n      if (inBounds) {\n        if (pointerIndex < 0) {\n          adaptedEvent.eventType = EventTypes.ENTER;\n          this.onPointerEnter(adaptedEvent);\n          this.markAsInBounds(adaptedEvent.pointerId);\n        } else {\n          this.onPointerMove(adaptedEvent);\n        }\n      } else {\n        if (pointerIndex >= 0) {\n          adaptedEvent.eventType = EventTypes.OUT;\n          this.onPointerOut(adaptedEvent);\n          this.markAsOutOfBounds(adaptedEvent.pointerId);\n        } else {\n          this.onPointerOutOfBounds(adaptedEvent);\n        }\n      }\n    });\n\n    this.view.addEventListener('pointercancel', (event: PointerEvent): void => {\n      if (event.pointerType === PointerType.TOUCH) {\n        return;\n      }\n\n      const adaptedEvent: AdaptedEvent = this.mapEvent(\n        event,\n        EventTypes.CANCEL\n      );\n\n      this.onPointerCancel(adaptedEvent);\n      this.markAsOutOfBounds(adaptedEvent.pointerId);\n      this.activePointersCounter = 0;\n      this.trackedPointers.clear();\n    });\n\n    this.view.addEventListener(\n      'lostpointercapture',\n      (event: PointerEvent): void => {\n        const adaptedEvent: AdaptedEvent = this.mapEvent(\n          event,\n          EventTypes.CANCEL\n        );\n\n        if (this.trackedPointers.has(adaptedEvent.pointerId)) {\n          // in some cases the `pointerup` event is not fired, but `lostpointercapture` is\n          // we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it\n          this.onPointerCancel(adaptedEvent);\n\n          this.activePointersCounter = 0;\n          this.trackedPointers.clear();\n        }\n      }\n    );\n  }\n\n  protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {\n    return {\n      x: event.clientX,\n      y: event.clientY,\n      offsetX: event.offsetX,\n      offsetY: event.offsetY,\n      pointerId: event.pointerId,\n      eventType: eventType,\n      pointerType: event.pointerType as PointerType,\n      buttons: event.buttons,\n      time: event.timeStamp,\n    };\n  }\n\n  public resetManager(): void {\n    super.resetManager();\n    this.trackedPointers.clear();\n  }\n}\n"]},"metadata":{},"sourceType":"module"}