{"version":3,"file":"node_modules_ionic_core_dist_esm_input-shims-8459e7d9_js.js","mappings":"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","sources":["./node_modules/@ionic/core/dist/esm/input-shims-8459e7d9.js"],"sourcesContent":["/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { g as getScrollElement, c as scrollByPoint, f as findClosestIonContent } from './index-e6d1a8be.js';\nimport { a as addEventListener, b as removeEventListener, r as raf, p as pointerCoord, c as componentOnReady } from './helpers-3b390e48.js';\nimport './index-c4b11676.js';\n\nconst cloneMap = new WeakMap();\nconst relocateInput = (componentEl, inputEl, shouldRelocate, inputRelativeY = 0, disabledClonedInput = false) => {\n if (cloneMap.has(componentEl) === shouldRelocate) {\n return;\n }\n if (shouldRelocate) {\n addClone(componentEl, inputEl, inputRelativeY, disabledClonedInput);\n }\n else {\n removeClone(componentEl, inputEl);\n }\n};\n// TODO(FW-2832): type\nconst isFocused = (input) => {\n return input === input.getRootNode().activeElement;\n};\nconst addClone = (componentEl, inputEl, inputRelativeY, disabledClonedInput = false) => {\n // this allows for the actual input to receive the focus from\n // the user's touch event, but before it receives focus, it\n // moves the actual input to a location that will not screw\n // up the app's layout, and does not allow the native browser\n // to attempt to scroll the input into place (messing up headers/footers)\n // the cloned input fills the area of where native input should be\n // while the native input fakes out the browser by relocating itself\n // before it receives the actual focus event\n // We hide the focused input (with the visible caret) invisible by making it scale(0),\n const parentEl = inputEl.parentNode;\n // DOM WRITES\n const clonedEl = inputEl.cloneNode(false);\n clonedEl.classList.add('cloned-input');\n clonedEl.tabIndex = -1;\n /**\n * Making the cloned input disabled prevents\n * Chrome for Android from still scrolling\n * the entire page since this cloned input\n * will briefly be hidden by the keyboard\n * even though it is not focused.\n *\n * This is not needed on iOS. While this\n * does not cause functional issues on iOS,\n * the input still appears slightly dimmed even\n * if we set opacity: 1.\n */\n if (disabledClonedInput) {\n clonedEl.disabled = true;\n }\n parentEl.appendChild(clonedEl);\n cloneMap.set(componentEl, clonedEl);\n const doc = componentEl.ownerDocument;\n const tx = doc.dir === 'rtl' ? 9999 : -9999;\n componentEl.style.pointerEvents = 'none';\n inputEl.style.transform = `translate3d(${tx}px,${inputRelativeY}px,0) scale(0)`;\n};\nconst removeClone = (componentEl, inputEl) => {\n const clone = cloneMap.get(componentEl);\n if (clone) {\n cloneMap.delete(componentEl);\n clone.remove();\n }\n componentEl.style.pointerEvents = '';\n inputEl.style.transform = '';\n};\n\nconst enableHideCaretOnScroll = (componentEl, inputEl, scrollEl) => {\n if (!scrollEl || !inputEl) {\n return () => {\n return;\n };\n }\n const scrollHideCaret = (shouldHideCaret) => {\n if (isFocused(inputEl)) {\n relocateInput(componentEl, inputEl, shouldHideCaret);\n }\n };\n const onBlur = () => relocateInput(componentEl, inputEl, false);\n const hideCaret = () => scrollHideCaret(true);\n const showCaret = () => scrollHideCaret(false);\n addEventListener(scrollEl, 'ionScrollStart', hideCaret);\n addEventListener(scrollEl, 'ionScrollEnd', showCaret);\n inputEl.addEventListener('blur', onBlur);\n return () => {\n removeEventListener(scrollEl, 'ionScrollStart', hideCaret);\n removeEventListener(scrollEl, 'ionScrollEnd', showCaret);\n inputEl.removeEventListener('blur', onBlur);\n };\n};\n\nconst SKIP_SELECTOR = 'input, textarea, [no-blur], [contenteditable]';\nconst enableInputBlurring = () => {\n let focused = true;\n let didScroll = false;\n const doc = document;\n const onScroll = () => {\n didScroll = true;\n };\n const onFocusin = () => {\n focused = true;\n };\n const onTouchend = (ev) => {\n // if app did scroll return early\n if (didScroll) {\n didScroll = false;\n return;\n }\n const active = doc.activeElement;\n if (!active) {\n return;\n }\n // only blur if the active element is a text-input or a textarea\n if (active.matches(SKIP_SELECTOR)) {\n return;\n }\n // if the selected target is the active element, do not blur\n const tapped = ev.target;\n if (tapped === active) {\n return;\n }\n if (tapped.matches(SKIP_SELECTOR) || tapped.closest(SKIP_SELECTOR)) {\n return;\n }\n focused = false;\n // TODO FW-2796: find a better way, why 50ms?\n setTimeout(() => {\n if (!focused) {\n active.blur();\n }\n }, 50);\n };\n addEventListener(doc, 'ionScrollStart', onScroll);\n doc.addEventListener('focusin', onFocusin, true);\n doc.addEventListener('touchend', onTouchend, false);\n return () => {\n removeEventListener(doc, 'ionScrollStart', onScroll, true);\n doc.removeEventListener('focusin', onFocusin, true);\n doc.removeEventListener('touchend', onTouchend, false);\n };\n};\n\nconst SCROLL_ASSIST_SPEED = 0.3;\nconst getScrollData = (componentEl, contentEl, keyboardHeight) => {\n var _a;\n const itemEl = (_a = componentEl.closest('ion-item,[ion-item]')) !== null && _a !== void 0 ? _a : componentEl;\n return calcScrollData(itemEl.getBoundingClientRect(), contentEl.getBoundingClientRect(), keyboardHeight, componentEl.ownerDocument.defaultView.innerHeight // TODO(FW-2832): type\n );\n};\nconst calcScrollData = (inputRect, contentRect, keyboardHeight, platformHeight) => {\n // compute input's Y values relative to the body\n const inputTop = inputRect.top;\n const inputBottom = inputRect.bottom;\n // compute visible area\n const visibleAreaTop = contentRect.top;\n const visibleAreaBottom = Math.min(contentRect.bottom, platformHeight - keyboardHeight);\n // compute safe area\n const safeAreaTop = visibleAreaTop + 15;\n const safeAreaBottom = visibleAreaBottom * 0.75;\n // figure out if each edge of the input is within the safe area\n const distanceToBottom = safeAreaBottom - inputBottom;\n const distanceToTop = safeAreaTop - inputTop;\n // desiredScrollAmount is the negated distance to the safe area according to our calculations.\n const desiredScrollAmount = Math.round(distanceToBottom < 0 ? -distanceToBottom : distanceToTop > 0 ? -distanceToTop : 0);\n // our calculations make some assumptions that aren't always true, like the keyboard being closed when an input\n // gets focus, so make sure we don't scroll the input above the visible area\n const scrollAmount = Math.min(desiredScrollAmount, inputTop - visibleAreaTop);\n const distance = Math.abs(scrollAmount);\n const duration = distance / SCROLL_ASSIST_SPEED;\n const scrollDuration = Math.min(400, Math.max(150, duration));\n return {\n scrollAmount,\n scrollDuration,\n scrollPadding: keyboardHeight,\n inputSafeY: -(inputTop - safeAreaTop) + 4,\n };\n};\n\nconst enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, keyboardHeight, disableClonedInput = false) => {\n let coord;\n const touchStart = (ev) => {\n coord = pointerCoord(ev);\n };\n const touchEnd = (ev) => {\n // input cover touchend/mouseup\n if (!coord) {\n return;\n }\n // get where the touchend/mouseup ended\n const endCoord = pointerCoord(ev);\n // focus this input if the pointer hasn't moved XX pixels\n // and the input doesn't already have focus\n if (!hasPointerMoved(6, coord, endCoord) && !isFocused(inputEl)) {\n // begin the input focus process\n jsSetFocus(componentEl, inputEl, contentEl, footerEl, keyboardHeight, disableClonedInput);\n }\n };\n componentEl.addEventListener('touchstart', touchStart, { capture: true, passive: true });\n componentEl.addEventListener('touchend', touchEnd, true);\n return () => {\n componentEl.removeEventListener('touchstart', touchStart, true);\n componentEl.removeEventListener('touchend', touchEnd, true);\n };\n};\nconst jsSetFocus = async (componentEl, inputEl, contentEl, footerEl, keyboardHeight, disableClonedInput = false) => {\n if (!contentEl && !footerEl) {\n return;\n }\n const scrollData = getScrollData(componentEl, (contentEl || footerEl), keyboardHeight);\n if (contentEl && Math.abs(scrollData.scrollAmount) < 4) {\n // the text input is in a safe position that doesn't\n // require it to be scrolled into view, just set focus now\n inputEl.focus();\n return;\n }\n // temporarily move the focus to the focus holder so the browser\n // doesn't freak out while it's trying to get the input in place\n // at this point the native text input still does not have focus\n relocateInput(componentEl, inputEl, true, scrollData.inputSafeY, disableClonedInput);\n inputEl.focus();\n /**\n * Relocating/Focusing input causes the\n * click event to be cancelled, so\n * manually fire one here.\n */\n raf(() => componentEl.click());\n if (typeof window !== 'undefined') {\n let scrollContentTimeout;\n const scrollContent = async () => {\n // clean up listeners and timeouts\n if (scrollContentTimeout !== undefined) {\n clearTimeout(scrollContentTimeout);\n }\n window.removeEventListener('ionKeyboardDidShow', doubleKeyboardEventListener);\n window.removeEventListener('ionKeyboardDidShow', scrollContent);\n // scroll the input into place\n if (contentEl) {\n await scrollByPoint(contentEl, 0, scrollData.scrollAmount, scrollData.scrollDuration);\n }\n // the scroll view is in the correct position now\n // give the native text input focus\n relocateInput(componentEl, inputEl, false, scrollData.inputSafeY);\n // ensure this is the focused input\n inputEl.focus();\n };\n const doubleKeyboardEventListener = () => {\n window.removeEventListener('ionKeyboardDidShow', doubleKeyboardEventListener);\n window.addEventListener('ionKeyboardDidShow', scrollContent);\n };\n if (contentEl) {\n const scrollEl = await getScrollElement(contentEl);\n /**\n * scrollData will only consider the amount we need\n * to scroll in order to properly bring the input\n * into view. It will not consider the amount\n * we can scroll in the content element.\n * As a result, scrollData may request a greater\n * scroll position than is currently available\n * in the DOM. If this is the case, we need to\n * wait for the webview to resize/the keyboard\n * to show in order for additional scroll\n * bandwidth to become available.\n */\n const totalScrollAmount = scrollEl.scrollHeight - scrollEl.clientHeight;\n if (scrollData.scrollAmount > totalScrollAmount - scrollEl.scrollTop) {\n /**\n * On iOS devices, the system will show a \"Passwords\" bar above the keyboard\n * after the initial keyboard is shown. This prevents the webview from resizing\n * until the \"Passwords\" bar is shown, so we need to wait for that to happen first.\n */\n if (inputEl.type === 'password') {\n // Add 50px to account for the \"Passwords\" bar\n scrollData.scrollAmount += 50;\n window.addEventListener('ionKeyboardDidShow', doubleKeyboardEventListener);\n }\n else {\n window.addEventListener('ionKeyboardDidShow', scrollContent);\n }\n /**\n * This should only fire in 2 instances:\n * 1. The app is very slow.\n * 2. The app is running in a browser on an old OS\n * that does not support Ionic Keyboard Events\n */\n scrollContentTimeout = setTimeout(scrollContent, 1000);\n return;\n }\n }\n scrollContent();\n }\n};\nconst hasPointerMoved = (threshold, startCoord, endCoord) => {\n if (startCoord && endCoord) {\n const deltaX = startCoord.x - endCoord.x;\n const deltaY = startCoord.y - endCoord.y;\n const distance = deltaX * deltaX + deltaY * deltaY;\n return distance > threshold * threshold;\n }\n return false;\n};\n\nconst PADDING_TIMER_KEY = '$ionPaddingTimer';\nconst enableScrollPadding = (keyboardHeight) => {\n const doc = document;\n // TODO(FW-2832): types\n const onFocusin = (ev) => {\n setScrollPadding(ev.target, keyboardHeight);\n };\n const onFocusout = (ev) => {\n setScrollPadding(ev.target, 0);\n };\n doc.addEventListener('focusin', onFocusin);\n doc.addEventListener('focusout', onFocusout);\n return () => {\n doc.removeEventListener('focusin', onFocusin);\n doc.removeEventListener('focusout', onFocusout);\n };\n};\nconst setScrollPadding = (input, keyboardHeight) => {\n var _a, _b;\n if (input.tagName !== 'INPUT') {\n return;\n }\n if (input.parentElement && input.parentElement.tagName === 'ION-INPUT') {\n return;\n }\n if (((_b = (_a = input.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.tagName) === 'ION-SEARCHBAR') {\n return;\n }\n const el = findClosestIonContent(input);\n if (el === null) {\n return;\n }\n const timer = el[PADDING_TIMER_KEY];\n if (timer) {\n clearTimeout(timer);\n }\n if (keyboardHeight > 0) {\n el.style.setProperty('--keyboard-offset', `${keyboardHeight}px`);\n }\n else {\n el[PADDING_TIMER_KEY] = setTimeout(() => {\n el.style.setProperty('--keyboard-offset', '0px');\n }, 120);\n }\n};\n\nconst INPUT_BLURRING = true;\nconst SCROLL_PADDING = true;\nconst startInputShims = (config, platform) => {\n const doc = document;\n const isIOS = platform === 'ios';\n const isAndroid = platform === 'android';\n /**\n * Hide Caret and Input Blurring are needed on iOS.\n * Scroll Assist and Scroll Padding are needed on iOS and Android\n * with Chrome web browser (not Chrome webview).\n */\n const keyboardHeight = config.getNumber('keyboardHeight', 290);\n const scrollAssist = config.getBoolean('scrollAssist', true);\n const hideCaret = config.getBoolean('hideCaretOnScroll', isIOS);\n const inputBlurring = config.getBoolean('inputBlurring', isIOS);\n const scrollPadding = config.getBoolean('scrollPadding', true);\n const inputs = Array.from(doc.querySelectorAll('ion-input, ion-textarea'));\n const hideCaretMap = new WeakMap();\n const scrollAssistMap = new WeakMap();\n const registerInput = async (componentEl) => {\n await new Promise((resolve) => componentOnReady(componentEl, resolve));\n const inputRoot = componentEl.shadowRoot || componentEl;\n const inputEl = inputRoot.querySelector('input') || inputRoot.querySelector('textarea');\n const scrollEl = findClosestIonContent(componentEl);\n const footerEl = !scrollEl ? componentEl.closest('ion-footer') : null;\n if (!inputEl) {\n return;\n }\n if (!!scrollEl && hideCaret && !hideCaretMap.has(componentEl)) {\n const rmFn = enableHideCaretOnScroll(componentEl, inputEl, scrollEl);\n hideCaretMap.set(componentEl, rmFn);\n }\n /**\n * date/datetime-locale inputs on mobile devices show date picker\n * overlays instead of keyboards. As a result, scroll assist is\n * not needed. This also works around a bug in iOS <16 where\n * scroll assist causes the browser to lock up. See FW-1997.\n */\n const isDateInput = inputEl.type === 'date' || inputEl.type === 'datetime-local';\n if (!isDateInput &&\n (!!scrollEl || !!footerEl) &&\n scrollAssist &&\n !scrollAssistMap.has(componentEl)) {\n const rmFn = enableScrollAssist(componentEl, inputEl, scrollEl, footerEl, keyboardHeight, isAndroid);\n scrollAssistMap.set(componentEl, rmFn);\n }\n };\n const unregisterInput = (componentEl) => {\n if (hideCaret) {\n const fn = hideCaretMap.get(componentEl);\n if (fn) {\n fn();\n }\n hideCaretMap.delete(componentEl);\n }\n if (scrollAssist) {\n const fn = scrollAssistMap.get(componentEl);\n if (fn) {\n fn();\n }\n scrollAssistMap.delete(componentEl);\n }\n };\n if (inputBlurring && INPUT_BLURRING) {\n enableInputBlurring();\n }\n if (scrollPadding && SCROLL_PADDING) {\n enableScrollPadding(keyboardHeight);\n }\n // Input might be already loaded in the DOM before ion-device-hacks did.\n // At this point we need to look for all of the inputs not registered yet\n // and register them.\n for (const input of inputs) {\n registerInput(input);\n }\n // TODO(FW-2832): types\n doc.addEventListener('ionInputDidLoad', ((ev) => {\n registerInput(ev.detail);\n }));\n doc.addEventListener('ionInputDidUnload', ((ev) => {\n unregisterInput(ev.detail);\n }));\n};\n\nexport { startInputShims };\n"],"names":["g","getScrollElement","c","scrollByPoint","f","findClosestIonContent","a","addEventListener","b","removeEventListener","r","raf","p","pointerCoord","componentOnReady","cloneMap","WeakMap","relocateInput","componentEl","inputEl","shouldRelocate","inputRelativeY","disabledClonedInput","has","addClone","removeClone","isFocused","input","getRootNode","activeElement","parentEl","parentNode","clonedEl","cloneNode","classList","add","tabIndex","disabled","appendChild","set","doc","ownerDocument","tx","dir","style","pointerEvents","transform","clone","get","delete","remove","enableHideCaretOnScroll","scrollEl","scrollHideCaret","shouldHideCaret","onBlur","hideCaret","showCaret","SKIP_SELECTOR","enableInputBlurring","focused","didScroll","document","onScroll","onFocusin","onTouchend","ev","active","matches","tapped","target","closest","setTimeout","blur","SCROLL_ASSIST_SPEED","getScrollData","contentEl","keyboardHeight","_a","itemEl","calcScrollData","getBoundingClientRect","defaultView","innerHeight","inputRect","contentRect","platformHeight","inputTop","top","inputBottom","bottom","visibleAreaTop","visibleAreaBottom","Math","min","safeAreaTop","safeAreaBottom","distanceToBottom","distanceToTop","desiredScrollAmount","round","scrollAmount","distance","abs","duration","scrollDuration","max","scrollPadding","inputSafeY","enableScrollAssist","footerEl","disableClonedInput","coord","touchStart","touchEnd","endCoord","hasPointerMoved","jsSetFocus","capture","passive","_ref","_asyncToGenerator","scrollData","focus","click","window","scrollContentTimeout","scrollContent","_ref2","undefined","clearTimeout","doubleKeyboardEventListener","apply","arguments","totalScrollAmount","scrollHeight","clientHeight","scrollTop","type","_x","_x2","_x3","_x4","_x5","threshold","startCoord","deltaX","x","deltaY","y","PADDING_TIMER_KEY","enableScrollPadding","setScrollPadding","onFocusout","_b","tagName","parentElement","el","timer","setProperty","INPUT_BLURRING","SCROLL_PADDING","startInputShims","config","platform","isIOS","isAndroid","getNumber","scrollAssist","getBoolean","inputBlurring","inputs","Array","from","querySelectorAll","hideCaretMap","scrollAssistMap","registerInput","_ref3","Promise","resolve","inputRoot","shadowRoot","querySelector","rmFn","isDateInput","_x6","unregisterInput","fn","detail"],"sourceRoot":"webpack:///","x_google_ignoreList":[0]}