1"use strict"; 2(self["webpackChunkapp"] = self["webpackChunkapp"] || []).push([["node_modules_ionic_core_dist_esm_tap-click-a895802b_js"],{ 3 4/***/ 4747: 5/*!*****************************************************************!*\ 6 !*** ./node_modules/@ionic/core/dist/esm/tap-click-a895802b.js ***! 7 \*****************************************************************/ 8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { 9 10__webpack_require__.r(__webpack_exports__); 11/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12/* harmony export */ "startTapClick": () => (/* binding */ startTapClick) 13/* harmony export */ }); 14/* harmony import */ var _helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers-6e1e5b65.js */ 8345); 15/*! 16 * (C) Ionic http://ionicframework.com - MIT License 17 */ 18 19 20const startTapClick = (config) => { 21 let lastTouch = -MOUSE_WAIT * 10; 22 let lastActivated = 0; 23 let scrollingEl; 24 let activatableEle; 25 let activeRipple; 26 let activeDefer; 27 const useRippleEffect = config.getBoolean('animated', true) && config.getBoolean('rippleEffect', true); 28 const clearDefers = new WeakMap(); 29 const isScrolling = () => { 30 return scrollingEl !== undefined && scrollingEl.parentElement !== null; 31 }; 32 // Touch Events 33 const onTouchStart = (ev) => { 34 lastTouch = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_0__.q)(ev); 35 pointerDown(ev); 36 }; 37 const onTouchEnd = (ev) => { 38 lastTouch = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_0__.q)(ev); 39 pointerUp(ev); 40 }; 41 const onMouseDown = (ev) => { 42 const t = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_0__.q)(ev) - MOUSE_WAIT; 43 if (lastTouch < t) { 44 pointerDown(ev); 45 } 46 }; 47 const onMouseUp = (ev) => { 48 const t = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_0__.q)(ev) - MOUSE_WAIT; 49 if (lastTouch < t) { 50 pointerUp(ev); 51 } 52 }; 53 const onContextMenu = (ev) => { 54 pointerUp(ev); 55 }; 56 const cancelActive = () => { 57 clearTimeout(activeDefer); 58 activeDefer = undefined; 59 if (activatableEle) { 60 removeActivated(false); 61 activatableEle = undefined; 62 } 63 }; 64 const pointerDown = (ev) => { 65 if (activatableEle || isScrolling()) { 66 return; 67 } 68 scrollingEl = undefined; 69 setActivatedElement(getActivatableTarget(ev), ev); 70 }; 71 const pointerUp = (ev) => { 72 setActivatedElement(undefined, ev); 73 }; 74 const setActivatedElement = (el, ev) => { 75 // do nothing 76 if (el && el === activatableEle) { 77 return; 78 } 79 clearTimeout(activeDefer); 80 activeDefer = undefined; 81 const { x, y } = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_0__.p)(ev); 82 // deactivate selected 83 if (activatableEle) { 84 if (clearDefers.has(activatableEle)) { 85 throw new Error('internal error'); 86 } 87 if (!activatableEle.classList.contains(ACTIVATED)) { 88 addActivated(activatableEle, x, y); 89 } 90 removeActivated(true); 91 } 92 // activate 93 if (el) { 94 const deferId = clearDefers.get(el); 95 if (deferId) { 96 clearTimeout(deferId); 97 clearDefers.delete(el); 98 } 99 const delay = isInstant(el) ? 0 : ADD_ACTIVATED_DEFERS; 100 el.classList.remove(ACTIVATED); 101 activeDefer = setTimeout(() => { 102 addActivated(el, x, y); 103 activeDefer = undefined; 104 }, delay); 105 } 106 activatableEle = el; 107 }; 108 const addActivated = (el, x, y) => { 109 lastActivated = Date.now(); 110 el.classList.add(ACTIVATED); 111 const rippleEffect = useRippleEffect && getRippleEffect(el); 112 if (rippleEffect && rippleEffect.addRipple) { 113 removeRipple(); 114 activeRipple = rippleEffect.addRipple(x, y); 115 } 116 }; 117 const removeRipple = () => { 118 if (activeRipple !== undefined) { 119 activeRipple.then(remove => remove()); 120 activeRipple = undefined; 121 } 122 }; 123 const removeActivated = (smooth) => { 124 removeRipple(); 125 const active = activatableEle; 126 if (!active) { 127 return; 128 } 129 const time = CLEAR_STATE_DEFERS - Date.now() + lastActivated; 130 if (smooth && time > 0 && !isInstant(active)) { 131 const deferId = setTimeout(() => { 132 active.classList.remove(ACTIVATED); 133 clearDefers.delete(active); 134 }, CLEAR_STATE_DEFERS); 135 clearDefers.set(active, deferId); 136 } 137 else { 138 active.classList.remove(ACTIVATED); 139 } 140 }; 141 const doc = document; 142 doc.addEventListener('ionScrollStart', ev => { 143 scrollingEl = ev.target; 144 cancelActive(); 145 }); 146 doc.addEventListener('ionScrollEnd', () => { 147 scrollingEl = undefined; 148 }); 149 doc.addEventListener('ionGestureCaptured', cancelActive); 150 doc.addEventListener('touchstart', onTouchStart, true); 151 doc.addEventListener('touchcancel', onTouchEnd, true); 152 doc.addEventListener('touchend', onTouchEnd, true); 153 doc.addEventListener('mousedown', onMouseDown, true); 154 doc.addEventListener('mouseup', onMouseUp, true); 155 doc.addEventListener('contextmenu', onContextMenu, true); 156}; 157const getActivatableTarget = (ev) => { 158 if (ev.composedPath) { 159 const path = ev.composedPath(); 160 for (let i = 0; i < path.length - 2; i++) { 161 const el = path[i]; 162 if (el.classList && el.classList.contains('ion-activatable')) { 163 return el; 164 } 165 } 166 } 167 else { 168 return ev.target.closest('.ion-activatable'); 169 } 170}; 171const isInstant = (el) => { 172 return el.classList.contains('ion-activatable-instant'); 173}; 174const getRippleEffect = (el) => { 175 if (el.shadowRoot) { 176 const ripple = el.shadowRoot.querySelector('ion-ripple-effect'); 177 if (ripple) { 178 return ripple; 179 } 180 } 181 return el.querySelector('ion-ripple-effect'); 182}; 183const ACTIVATED = 'ion-activated'; 184const ADD_ACTIVATED_DEFERS = 200; 185const CLEAR_STATE_DEFERS = 200; 186const MOUSE_WAIT = 2500; 187 188 189 190 191/***/ }) 192 193}]); 194//# sourceMappingURL=node_modules_ionic_core_dist_esm_tap-click-a895802b_js.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.