{"version":3,"sources":["webpack:///./node_modules/@ionic/core/components/index10.js"],"names":["startTapClick","config","activatableEle","activeRipple","activeDefer","lastTouch","MOUSE_WAIT","lastActivated","useRippleEffect","getBoolean","clearDefers","WeakMap","onTouchStart","ev","pointerDown","onTouchEnd","pointerUp","onMouseDown","button","t","onMouseUp","cancelActive","clearTimeout","undefined","removeActivated","setActivatedElement","getActivatableTarget","el","x","y","has","Error","classList","contains","ACTIVATED","addActivated","deferId","get","delete","remove","callback","isInstant","setTimeout","ADD_ACTIVATED_DEFERS","Date","now","add","rippleEffect","getRippleEffect","removeRipple","addRipple","then","smooth","active","time","CLEAR_STATE_DEFERS","set","doc","document","addEventListener","composedPath","target","closest","path","i","length","ShadowRoot","shadowRoot","ripple","querySelector"],"mappings":"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","file":"js/chunk-2d20732c.e8c0fc40.js","sourcesContent":["/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { u as now, p as pointerCoord } from './helpers.js';\n\nconst startTapClick = (config) => {\n let lastTouch = -MOUSE_WAIT * 10;\n let lastActivated = 0;\n let activatableEle;\n let activeRipple;\n let activeDefer;\n const useRippleEffect = config.getBoolean('animated', true) && config.getBoolean('rippleEffect', true);\n const clearDefers = new WeakMap();\n // Touch Events\n const onTouchStart = (ev) => {\n lastTouch = now(ev);\n pointerDown(ev);\n };\n const onTouchEnd = (ev) => {\n lastTouch = now(ev);\n pointerUp(ev);\n };\n const onMouseDown = (ev) => {\n // Ignore right clicks\n if (ev.button === 2) {\n return;\n }\n const t = now(ev) - MOUSE_WAIT;\n if (lastTouch < t) {\n pointerDown(ev);\n }\n };\n const onMouseUp = (ev) => {\n const t = now(ev) - MOUSE_WAIT;\n if (lastTouch < t) {\n pointerUp(ev);\n }\n };\n const cancelActive = () => {\n if (activeDefer)\n clearTimeout(activeDefer);\n activeDefer = undefined;\n if (activatableEle) {\n removeActivated(false);\n activatableEle = undefined;\n }\n };\n const pointerDown = (ev) => {\n if (activatableEle) {\n return;\n }\n setActivatedElement(getActivatableTarget(ev), ev);\n };\n const pointerUp = (ev) => {\n setActivatedElement(undefined, ev);\n };\n const setActivatedElement = (el, ev) => {\n // do nothing\n if (el && el === activatableEle) {\n return;\n }\n if (activeDefer)\n clearTimeout(activeDefer);\n activeDefer = undefined;\n const { x, y } = pointerCoord(ev);\n // deactivate selected\n if (activatableEle) {\n if (clearDefers.has(activatableEle)) {\n throw new Error('internal error');\n }\n if (!activatableEle.classList.contains(ACTIVATED)) {\n addActivated(activatableEle, x, y);\n }\n removeActivated(true);\n }\n // activate\n if (el) {\n const deferId = clearDefers.get(el);\n if (deferId) {\n clearTimeout(deferId);\n clearDefers.delete(el);\n }\n el.classList.remove(ACTIVATED);\n const callback = () => {\n addActivated(el, x, y);\n activeDefer = undefined;\n };\n if (isInstant(el)) {\n callback();\n }\n else {\n activeDefer = setTimeout(callback, ADD_ACTIVATED_DEFERS);\n }\n }\n activatableEle = el;\n };\n const addActivated = (el, x, y) => {\n lastActivated = Date.now();\n el.classList.add(ACTIVATED);\n if (!useRippleEffect)\n return;\n const rippleEffect = getRippleEffect(el);\n if (rippleEffect !== null) {\n removeRipple();\n activeRipple = rippleEffect.addRipple(x, y);\n }\n };\n const removeRipple = () => {\n if (activeRipple !== undefined) {\n activeRipple.then((remove) => remove());\n activeRipple = undefined;\n }\n };\n const removeActivated = (smooth) => {\n removeRipple();\n const active = activatableEle;\n if (!active) {\n return;\n }\n const time = CLEAR_STATE_DEFERS - Date.now() + lastActivated;\n if (smooth && time > 0 && !isInstant(active)) {\n const deferId = setTimeout(() => {\n active.classList.remove(ACTIVATED);\n clearDefers.delete(active);\n }, CLEAR_STATE_DEFERS);\n clearDefers.set(active, deferId);\n }\n else {\n active.classList.remove(ACTIVATED);\n }\n };\n const doc = document;\n doc.addEventListener('ionGestureCaptured', cancelActive);\n doc.addEventListener('touchstart', onTouchStart, true);\n doc.addEventListener('touchcancel', onTouchEnd, true);\n doc.addEventListener('touchend', onTouchEnd, true);\n /**\n * Tap click effects such as the ripple effect should\n * not happen when scrolling. For example, if a user scrolls\n * the page but also happens to do a touchstart on a button\n * as part of the scroll, the ripple effect should not\n * be dispatched. The ripple effect should only happen\n * if the button is activated and the page is not scrolling.\n *\n * pointercancel is dispatched on a gesture when scrolling\n * starts, so this lets us avoid having to listen for\n * ion-content's scroll events.\n */\n doc.addEventListener('pointercancel', cancelActive, true);\n doc.addEventListener('mousedown', onMouseDown, true);\n doc.addEventListener('mouseup', onMouseUp, true);\n};\n// TODO(FW-2832): type\nconst getActivatableTarget = (ev) => {\n if (ev.composedPath !== undefined) {\n /**\n * composedPath returns EventTarget[]. However,\n * objects other than Element can be targets too.\n * For example, AudioContext can be a target. In this\n * case, we know that the event is a UIEvent so we\n * can assume that the path will contain either Element\n * or ShadowRoot.\n */\n const path = ev.composedPath();\n for (let i = 0; i < path.length - 2; i++) {\n const el = path[i];\n if (!(el instanceof ShadowRoot) && el.classList.contains('ion-activatable')) {\n return el;\n }\n }\n }\n else {\n return ev.target.closest('.ion-activatable');\n }\n};\nconst isInstant = (el) => {\n return el.classList.contains('ion-activatable-instant');\n};\nconst getRippleEffect = (el) => {\n if (el.shadowRoot) {\n const ripple = el.shadowRoot.querySelector('ion-ripple-effect');\n if (ripple) {\n return ripple;\n }\n }\n return el.querySelector('ion-ripple-effect');\n};\nconst ACTIVATED = 'ion-activated';\nconst ADD_ACTIVATED_DEFERS = 200;\nconst CLEAR_STATE_DEFERS = 200;\nconst MOUSE_WAIT = 2500;\n\nexport { startTapClick };\n"],"sourceRoot":""}