{"version":3,"sources":["webpack:///./node_modules/@ionic/core/dist/esm/legacy/index-3a9dcfed.js"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAqD;AACxB;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,WAAW;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,+DAA+D,UAAU,2BAA2B,EAAE;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,gBAAgB;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,aAAa;AACb,2DAA2D,QAAQ,EAAE;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,uGAAuG;AAC5I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,4DAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC6C","file":"0.js","sourcesContent":["import { w as writeTask } from './chunk-09ec7fc0.js';\nimport './chunk-1074393c.js';\nvar GestureController = /** @class */ (function () {\n function GestureController() {\n this.gestureId = 0;\n this.requestedStart = new Map();\n this.disabledGestures = new Map();\n this.disabledScroll = new Set();\n }\n /**\n * Creates a gesture delegate based on the GestureConfig passed\n */\n GestureController.prototype.createGesture = function (config) {\n return new GestureDelegate(this, this.newID(), config.name, config.priority || 0, !!config.disableScroll);\n };\n /**\n * Creates a blocker that will block any other gesture events from firing. Set in the ion-gesture component.\n */\n GestureController.prototype.createBlocker = function (opts) {\n if (opts === void 0) { opts = {}; }\n return new BlockerDelegate(this, this.newID(), opts.disable, !!opts.disableScroll);\n };\n GestureController.prototype.start = function (gestureName, id, priority) {\n if (!this.canStart(gestureName)) {\n this.requestedStart.delete(id);\n return false;\n }\n this.requestedStart.set(id, priority);\n return true;\n };\n GestureController.prototype.capture = function (gestureName, id, priority) {\n if (!this.start(gestureName, id, priority)) {\n return false;\n }\n var requestedStart = this.requestedStart;\n var maxPriority = -10000;\n requestedStart.forEach(function (value) {\n maxPriority = Math.max(maxPriority, value);\n });\n if (maxPriority === priority) {\n this.capturedId = id;\n requestedStart.clear();\n var event = new CustomEvent('ionGestureCaptured', { detail: { gestureName: gestureName } });\n document.dispatchEvent(event);\n return true;\n }\n requestedStart.delete(id);\n return false;\n };\n GestureController.prototype.release = function (id) {\n this.requestedStart.delete(id);\n if (this.capturedId === id) {\n this.capturedId = undefined;\n }\n };\n GestureController.prototype.disableGesture = function (gestureName, id) {\n var set = this.disabledGestures.get(gestureName);\n if (set === undefined) {\n set = new Set();\n this.disabledGestures.set(gestureName, set);\n }\n set.add(id);\n };\n GestureController.prototype.enableGesture = function (gestureName, id) {\n var set = this.disabledGestures.get(gestureName);\n if (set !== undefined) {\n set.delete(id);\n }\n };\n GestureController.prototype.disableScroll = function (id) {\n this.disabledScroll.add(id);\n if (this.disabledScroll.size === 1) {\n document.body.classList.add(BACKDROP_NO_SCROLL);\n }\n };\n GestureController.prototype.enableScroll = function (id) {\n this.disabledScroll.delete(id);\n if (this.disabledScroll.size === 0) {\n document.body.classList.remove(BACKDROP_NO_SCROLL);\n }\n };\n GestureController.prototype.canStart = function (gestureName) {\n if (this.capturedId !== undefined) {\n // a gesture already captured\n return false;\n }\n if (this.isDisabled(gestureName)) {\n return false;\n }\n return true;\n };\n GestureController.prototype.isCaptured = function () {\n return this.capturedId !== undefined;\n };\n GestureController.prototype.isScrollDisabled = function () {\n return this.disabledScroll.size > 0;\n };\n GestureController.prototype.isDisabled = function (gestureName) {\n var disabled = this.disabledGestures.get(gestureName);\n if (disabled && disabled.size > 0) {\n return true;\n }\n return false;\n };\n GestureController.prototype.newID = function () {\n this.gestureId++;\n return this.gestureId;\n };\n return GestureController;\n}());\nvar GestureDelegate = /** @class */ (function () {\n function GestureDelegate(ctrl, id, name, priority, disableScroll) {\n this.id = id;\n this.name = name;\n this.disableScroll = disableScroll;\n this.priority = priority * 1000000 + id;\n this.ctrl = ctrl;\n }\n GestureDelegate.prototype.canStart = function () {\n if (!this.ctrl) {\n return false;\n }\n return this.ctrl.canStart(this.name);\n };\n GestureDelegate.prototype.start = function () {\n if (!this.ctrl) {\n return false;\n }\n return this.ctrl.start(this.name, this.id, this.priority);\n };\n GestureDelegate.prototype.capture = function () {\n if (!this.ctrl) {\n return false;\n }\n var captured = this.ctrl.capture(this.name, this.id, this.priority);\n if (captured && this.disableScroll) {\n this.ctrl.disableScroll(this.id);\n }\n return captured;\n };\n GestureDelegate.prototype.release = function () {\n if (this.ctrl) {\n this.ctrl.release(this.id);\n if (this.disableScroll) {\n this.ctrl.enableScroll(this.id);\n }\n }\n };\n GestureDelegate.prototype.destroy = function () {\n this.release();\n this.ctrl = undefined;\n };\n return GestureDelegate;\n}());\nvar BlockerDelegate = /** @class */ (function () {\n function BlockerDelegate(ctrl, id, disable, disableScroll) {\n this.id = id;\n this.disable = disable;\n this.disableScroll = disableScroll;\n this.ctrl = ctrl;\n }\n BlockerDelegate.prototype.block = function () {\n if (!this.ctrl) {\n return;\n }\n if (this.disable) {\n for (var _i = 0, _a = this.disable; _i < _a.length; _i++) {\n var gesture = _a[_i];\n this.ctrl.disableGesture(gesture, this.id);\n }\n }\n if (this.disableScroll) {\n this.ctrl.disableScroll(this.id);\n }\n };\n BlockerDelegate.prototype.unblock = function () {\n if (!this.ctrl) {\n return;\n }\n if (this.disable) {\n for (var _i = 0, _a = this.disable; _i < _a.length; _i++) {\n var gesture = _a[_i];\n this.ctrl.enableGesture(gesture, this.id);\n }\n }\n if (this.disableScroll) {\n this.ctrl.enableScroll(this.id);\n }\n };\n BlockerDelegate.prototype.destroy = function () {\n this.unblock();\n this.ctrl = undefined;\n };\n return BlockerDelegate;\n}());\nvar BACKDROP_NO_SCROLL = 'backdrop-no-scroll';\nvar GESTURE_CONTROLLER = new GestureController();\nvar addEventListener = function (el, eventName, callback, opts) {\n // use event listener options when supported\n // otherwise it's just a boolean for the \"capture\" arg\n var listenerOpts = supportsPassive(el) ? {\n 'capture': !!opts.capture,\n 'passive': !!opts.passive,\n } : !!opts.capture;\n var add;\n var remove;\n if (el['__zone_symbol__addEventListener']) {\n add = '__zone_symbol__addEventListener';\n remove = '__zone_symbol__removeEventListener';\n }\n else {\n add = 'addEventListener';\n remove = 'removeEventListener';\n }\n el[add](eventName, callback, listenerOpts);\n return function () {\n el[remove](eventName, callback, listenerOpts);\n };\n};\nvar supportsPassive = function (node) {\n if (_sPassive === undefined) {\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function () {\n _sPassive = true;\n }\n });\n node.addEventListener('optsTest', function () { return; }, opts);\n }\n catch (e) {\n _sPassive = false;\n }\n }\n return !!_sPassive;\n};\nvar _sPassive;\nvar MOUSE_WAIT = 2000;\nvar createPointerEvents = function (el, pointerDown, pointerMove, pointerUp, options) {\n var rmTouchStart;\n var rmTouchMove;\n var rmTouchEnd;\n var rmTouchCancel;\n var rmMouseStart;\n var rmMouseMove;\n var rmMouseUp;\n var lastTouchEvent = 0;\n var handleTouchStart = function (ev) {\n lastTouchEvent = Date.now() + MOUSE_WAIT;\n if (!pointerDown(ev)) {\n return;\n }\n if (!rmTouchMove && pointerMove) {\n rmTouchMove = addEventListener(el, 'touchmove', pointerMove, options);\n }\n if (!rmTouchEnd) {\n rmTouchEnd = addEventListener(el, 'touchend', handleTouchEnd, options);\n }\n if (!rmTouchCancel) {\n rmTouchCancel = addEventListener(el, 'touchcancel', handleTouchEnd, options);\n }\n };\n var handleMouseDown = function (ev) {\n if (lastTouchEvent > Date.now()) {\n return;\n }\n if (!pointerDown(ev)) {\n return;\n }\n if (!rmMouseMove && pointerMove) {\n rmMouseMove = addEventListener(getDocument(el), 'mousemove', pointerMove, options);\n }\n if (!rmMouseUp) {\n rmMouseUp = addEventListener(getDocument(el), 'mouseup', handleMouseUp, options);\n }\n };\n var handleTouchEnd = function (ev) {\n stopTouch();\n if (pointerUp) {\n pointerUp(ev);\n }\n };\n var handleMouseUp = function (ev) {\n stopMouse();\n if (pointerUp) {\n pointerUp(ev);\n }\n };\n var stopTouch = function () {\n if (rmTouchMove) {\n rmTouchMove();\n }\n if (rmTouchEnd) {\n rmTouchEnd();\n }\n if (rmTouchCancel) {\n rmTouchCancel();\n }\n rmTouchMove = rmTouchEnd = rmTouchCancel = undefined;\n };\n var stopMouse = function () {\n if (rmMouseMove) {\n rmMouseMove();\n }\n if (rmMouseUp) {\n rmMouseUp();\n }\n rmMouseMove = rmMouseUp = undefined;\n };\n var stop = function () {\n stopTouch();\n stopMouse();\n };\n var setDisabled = function (disabled) {\n if (disabled) {\n if (rmTouchStart) {\n rmTouchStart();\n }\n if (rmMouseStart) {\n rmMouseStart();\n }\n rmTouchStart = rmMouseStart = undefined;\n stop();\n }\n else {\n if (!rmTouchStart) {\n rmTouchStart = addEventListener(el, 'touchstart', handleTouchStart, options);\n }\n if (!rmMouseStart) {\n rmMouseStart = addEventListener(el, 'mousedown', handleMouseDown, options);\n }\n }\n };\n var destroy = function () {\n setDisabled(true);\n pointerUp = pointerMove = pointerDown = undefined;\n };\n return {\n setDisabled: setDisabled,\n stop: stop,\n destroy: destroy\n };\n};\nvar getDocument = function (node) {\n return node instanceof Document ? node : node.ownerDocument;\n};\nvar createPanRecognizer = function (direction, thresh, maxAngle) {\n var radians = maxAngle * (Math.PI / 180);\n var isDirX = direction === 'x';\n var maxCosine = Math.cos(radians);\n var threshold = thresh * thresh;\n var startX = 0;\n var startY = 0;\n var dirty = false;\n var isPan = 0;\n return {\n start: function (x, y) {\n startX = x;\n startY = y;\n isPan = 0;\n dirty = true;\n },\n detect: function (x, y) {\n if (!dirty) {\n return false;\n }\n var deltaX = (x - startX);\n var deltaY = (y - startY);\n var distance = deltaX * deltaX + deltaY * deltaY;\n if (distance < threshold) {\n return false;\n }\n var hypotenuse = Math.sqrt(distance);\n var cosine = (isDirX ? deltaX : deltaY) / hypotenuse;\n if (cosine > maxCosine) {\n isPan = 1;\n }\n else if (cosine < -maxCosine) {\n isPan = -1;\n }\n else {\n isPan = 0;\n }\n dirty = false;\n return true;\n },\n isGesture: function () {\n return isPan !== 0;\n },\n getDirection: function () {\n return isPan;\n }\n };\n};\nvar createGesture = function (config) {\n var hasCapturedPan = false;\n var hasStartedPan = false;\n var hasFiredStart = true;\n var isMoveQueued = false;\n var finalConfig = Object.assign({ disableScroll: false, direction: 'x', gesturePriority: 0, passive: true, maxAngle: 40, threshold: 10 }, config);\n var canStart = finalConfig.canStart;\n var onWillStart = finalConfig.onWillStart;\n var onStart = finalConfig.onStart;\n var onEnd = finalConfig.onEnd;\n var notCaptured = finalConfig.notCaptured;\n var onMove = finalConfig.onMove;\n var threshold = finalConfig.threshold;\n var detail = {\n type: 'pan',\n startX: 0,\n startY: 0,\n startTimeStamp: 0,\n currentX: 0,\n currentY: 0,\n velocityX: 0,\n velocityY: 0,\n deltaX: 0,\n deltaY: 0,\n timeStamp: 0,\n event: undefined,\n data: undefined\n };\n var pan = createPanRecognizer(finalConfig.direction, finalConfig.threshold, finalConfig.maxAngle);\n var gesture = GESTURE_CONTROLLER.createGesture({\n name: config.gestureName,\n priority: config.gesturePriority,\n disableScroll: config.disableScroll\n });\n var pointerDown = function (ev) {\n var timeStamp = now(ev);\n if (hasStartedPan || !hasFiredStart) {\n return false;\n }\n updateDetail(ev, detail);\n detail.startX = detail.currentX;\n detail.startY = detail.currentY;\n detail.startTimeStamp = detail.timeStamp = timeStamp;\n detail.velocityX = detail.velocityY = detail.deltaX = detail.deltaY = 0;\n detail.event = ev;\n // Check if gesture can start\n if (canStart && canStart(detail) === false) {\n return false;\n }\n // Release fallback\n gesture.release();\n // Start gesture\n if (!gesture.start()) {\n return false;\n }\n hasStartedPan = true;\n if (threshold === 0) {\n return tryToCapturePan();\n }\n pan.start(detail.startX, detail.startY);\n return true;\n };\n var pointerMove = function (ev) {\n // fast path, if gesture is currently captured\n // do minimum job to get user-land even dispatched\n if (hasCapturedPan) {\n if (!isMoveQueued && hasFiredStart) {\n isMoveQueued = true;\n calcGestureData(detail, ev);\n writeTask(fireOnMove);\n }\n return;\n }\n // gesture is currently being detected\n calcGestureData(detail, ev);\n if (pan.detect(detail.currentX, detail.currentY)) {\n if (!pan.isGesture() || !tryToCapturePan()) {\n abortGesture();\n }\n }\n };\n var fireOnMove = function () {\n // Since fireOnMove is called inside a RAF, onEnd() might be called,\n // we must double check hasCapturedPan\n if (!hasCapturedPan) {\n return;\n }\n isMoveQueued = false;\n if (onMove) {\n onMove(detail);\n }\n };\n var tryToCapturePan = function () {\n if (gesture && !gesture.capture()) {\n return false;\n }\n hasCapturedPan = true;\n hasFiredStart = false;\n // reset start position since the real user-land event starts here\n // If the pan detector threshold is big, not resetting the start position\n // will cause a jump in the animation equal to the detector threshold.\n // the array of positions used to calculate the gesture velocity does not\n // need to be cleaned, more points in the positions array always results in a\n // more accurate value of the velocity.\n detail.startX = detail.currentX;\n detail.startY = detail.currentY;\n detail.startTimeStamp = detail.timeStamp;\n if (onWillStart) {\n onWillStart(detail).then(fireOnStart);\n }\n else {\n fireOnStart();\n }\n return true;\n };\n var fireOnStart = function () {\n if (onStart) {\n onStart(detail);\n }\n hasFiredStart = true;\n };\n var reset = function () {\n hasCapturedPan = false;\n hasStartedPan = false;\n isMoveQueued = false;\n hasFiredStart = true;\n gesture.release();\n };\n // END *************************\n var pointerUp = function (ev) {\n var tmpHasCaptured = hasCapturedPan;\n var tmpHasFiredStart = hasFiredStart;\n reset();\n if (!tmpHasFiredStart) {\n return;\n }\n calcGestureData(detail, ev);\n // Try to capture press\n if (tmpHasCaptured) {\n if (onEnd) {\n onEnd(detail);\n }\n return;\n }\n // Not captured any event\n if (notCaptured) {\n notCaptured(detail);\n }\n };\n var pointerEvents = createPointerEvents(finalConfig.el, pointerDown, pointerMove, pointerUp, {\n capture: false,\n });\n var abortGesture = function () {\n reset();\n pointerEvents.stop();\n if (notCaptured) {\n notCaptured(detail);\n }\n };\n return {\n setDisabled: function (disabled) {\n if (disabled && hasCapturedPan) {\n pointerUp(undefined);\n }\n pointerEvents.setDisabled(disabled);\n },\n destroy: function () {\n gesture.destroy();\n pointerEvents.destroy();\n }\n };\n};\nvar calcGestureData = function (detail, ev) {\n if (!ev) {\n return;\n }\n var prevX = detail.currentX;\n var prevY = detail.currentY;\n var prevT = detail.timeStamp;\n updateDetail(ev, detail);\n var currentX = detail.currentX;\n var currentY = detail.currentY;\n var timestamp = detail.timeStamp = now(ev);\n var timeDelta = timestamp - prevT;\n if (timeDelta > 0 && timeDelta < 100) {\n var velocityX = (currentX - prevX) / timeDelta;\n var velocityY = (currentY - prevY) / timeDelta;\n detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3;\n detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3;\n }\n detail.deltaX = currentX - detail.startX;\n detail.deltaY = currentY - detail.startY;\n detail.event = ev;\n};\nvar updateDetail = function (ev, detail) {\n // get X coordinates for either a mouse click\n // or a touch depending on the given event\n var x = 0;\n var y = 0;\n if (ev) {\n var changedTouches = ev.changedTouches;\n if (changedTouches && changedTouches.length > 0) {\n var touch = changedTouches[0];\n x = touch.clientX;\n y = touch.clientY;\n }\n else if (ev.pageX !== undefined) {\n x = ev.pageX;\n y = ev.pageY;\n }\n }\n detail.currentX = x;\n detail.currentY = y;\n};\nvar now = function (ev) {\n return ev.timeStamp || Date.now();\n};\nexport { GESTURE_CONTROLLER, createGesture };\n"],"sourceRoot":""}