{"version":3,"file":"9865.0e281cf29b101b30e623.js","mappings":"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","sources":["webpack:///../node_modules/@ionic/core/components/index2.js","webpack:///../node_modules/@ionic/core/components/index3.js","webpack:///../node_modules/@ionic/core/components/index5.js","webpack:///../node_modules/@ionic/core/components/index6.js","webpack:///../node_modules/@ionic/core/components/index7.js","webpack:///../node_modules/@ionic/core/components/index8.js"],"sourcesContent":["/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { G as GESTURE_CONTROLLER } from './gesture-controller.js';\nexport { G as GESTURE_CONTROLLER } from './gesture-controller.js';\n\nconst addEventListener = (el, // TODO(FW-2832): type\neventName, callback, opts) => {\n // use event listener options when supported\n // otherwise it's just a boolean for the \"capture\" arg\n const listenerOpts = supportsPassive(el)\n ? {\n capture: !!opts.capture,\n passive: !!opts.passive,\n }\n : !!opts.capture;\n let add;\n let 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 () => {\n el[remove](eventName, callback, listenerOpts);\n };\n};\nconst supportsPassive = (node) => {\n if (_sPassive === undefined) {\n try {\n const opts = Object.defineProperty({}, 'passive', {\n get: () => {\n _sPassive = true;\n },\n });\n node.addEventListener('optsTest', () => {\n return;\n }, opts);\n }\n catch (e) {\n _sPassive = false;\n }\n }\n return !!_sPassive;\n};\nlet _sPassive;\n\nconst MOUSE_WAIT = 2000;\n// TODO(FW-2832): types\nconst createPointerEvents = (el, pointerDown, pointerMove, pointerUp, options) => {\n let rmTouchStart;\n let rmTouchMove;\n let rmTouchEnd;\n let rmTouchCancel;\n let rmMouseStart;\n let rmMouseMove;\n let rmMouseUp;\n let lastTouchEvent = 0;\n const handleTouchStart = (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 /**\n * Events are dispatched on the element that is tapped and bubble up to\n * the reference element in the gesture. In the event that the element this\n * event was first dispatched on is removed from the DOM, the event will no\n * longer bubble up to our reference element. This leaves the gesture in an\n * unusable state. To account for this, the touchend and touchcancel listeners\n * should be added to the event target so that they still fire even if the target\n * is removed from the DOM.\n */\n if (!rmTouchEnd) {\n rmTouchEnd = addEventListener(ev.target, 'touchend', handleTouchEnd, options);\n }\n if (!rmTouchCancel) {\n rmTouchCancel = addEventListener(ev.target, 'touchcancel', handleTouchEnd, options);\n }\n };\n const handleMouseDown = (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 const handleTouchEnd = (ev) => {\n stopTouch();\n if (pointerUp) {\n pointerUp(ev);\n }\n };\n const handleMouseUp = (ev) => {\n stopMouse();\n if (pointerUp) {\n pointerUp(ev);\n }\n };\n const stopTouch = () => {\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 const stopMouse = () => {\n if (rmMouseMove) {\n rmMouseMove();\n }\n if (rmMouseUp) {\n rmMouseUp();\n }\n rmMouseMove = rmMouseUp = undefined;\n };\n const stop = () => {\n stopTouch();\n stopMouse();\n };\n const enable = (isEnabled = true) => {\n if (!isEnabled) {\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 const destroy = () => {\n enable(false);\n pointerUp = pointerMove = pointerDown = undefined;\n };\n return {\n enable,\n stop,\n destroy,\n };\n};\nconst getDocument = (node) => {\n return node instanceof Document ? node : node.ownerDocument;\n};\n\nconst createPanRecognizer = (direction, thresh, maxAngle) => {\n const radians = maxAngle * (Math.PI / 180);\n const isDirX = direction === 'x';\n const maxCosine = Math.cos(radians);\n const threshold = thresh * thresh;\n let startX = 0;\n let startY = 0;\n let dirty = false;\n let isPan = 0;\n return {\n start(x, y) {\n startX = x;\n startY = y;\n isPan = 0;\n dirty = true;\n },\n detect(x, y) {\n if (!dirty) {\n return false;\n }\n const deltaX = x - startX;\n const deltaY = y - startY;\n const distance = deltaX * deltaX + deltaY * deltaY;\n if (distance < threshold) {\n return false;\n }\n const hypotenuse = Math.sqrt(distance);\n const 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() {\n return isPan !== 0;\n },\n getDirection() {\n return isPan;\n },\n };\n};\n\n// TODO(FW-2832): types\nconst createGesture = (config) => {\n let hasCapturedPan = false;\n let hasStartedPan = false;\n let hasFiredStart = true;\n let isMoveQueued = false;\n const finalConfig = Object.assign({ disableScroll: false, direction: 'x', gesturePriority: 0, passive: true, maxAngle: 40, threshold: 10 }, config);\n const canStart = finalConfig.canStart;\n const onWillStart = finalConfig.onWillStart;\n const onStart = finalConfig.onStart;\n const onEnd = finalConfig.onEnd;\n const notCaptured = finalConfig.notCaptured;\n const onMove = finalConfig.onMove;\n const threshold = finalConfig.threshold;\n const passive = finalConfig.passive;\n const blurOnStart = finalConfig.blurOnStart;\n const detail = {\n type: 'pan',\n startX: 0,\n startY: 0,\n startTime: 0,\n currentX: 0,\n currentY: 0,\n velocityX: 0,\n velocityY: 0,\n deltaX: 0,\n deltaY: 0,\n currentTime: 0,\n event: undefined,\n data: undefined,\n };\n const pan = createPanRecognizer(finalConfig.direction, finalConfig.threshold, finalConfig.maxAngle);\n const gesture = GESTURE_CONTROLLER.createGesture({\n name: config.gestureName,\n priority: config.gesturePriority,\n disableScroll: config.disableScroll,\n });\n const pointerDown = (ev) => {\n const 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.startTime = detail.currentTime = 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 const pointerMove = (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 requestAnimationFrame(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 const fireOnMove = () => {\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 const tryToCapturePan = () => {\n if (!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.startTime = detail.currentTime;\n if (onWillStart) {\n onWillStart(detail).then(fireOnStart);\n }\n else {\n fireOnStart();\n }\n return true;\n };\n const blurActiveElement = () => {\n if (typeof document !== 'undefined') {\n const activeElement = document.activeElement;\n if (activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur) {\n activeElement.blur();\n }\n }\n };\n const fireOnStart = () => {\n if (blurOnStart) {\n blurActiveElement();\n }\n if (onStart) {\n onStart(detail);\n }\n hasFiredStart = true;\n };\n const reset = () => {\n hasCapturedPan = false;\n hasStartedPan = false;\n isMoveQueued = false;\n hasFiredStart = true;\n gesture.release();\n };\n // END *************************\n const pointerUp = (ev) => {\n const tmpHasCaptured = hasCapturedPan;\n const 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 const pointerEvents = createPointerEvents(finalConfig.el, pointerDown, pointerMove, pointerUp, {\n capture: false,\n passive,\n });\n const abortGesture = () => {\n reset();\n pointerEvents.stop();\n if (notCaptured) {\n notCaptured(detail);\n }\n };\n return {\n enable(enable = true) {\n if (!enable) {\n if (hasCapturedPan) {\n pointerUp(undefined);\n }\n reset();\n }\n pointerEvents.enable(enable);\n },\n destroy() {\n gesture.destroy();\n pointerEvents.destroy();\n },\n };\n};\nconst calcGestureData = (detail, ev) => {\n if (!ev) {\n return;\n }\n const prevX = detail.currentX;\n const prevY = detail.currentY;\n const prevT = detail.currentTime;\n updateDetail(ev, detail);\n const currentX = detail.currentX;\n const currentY = detail.currentY;\n const timestamp = (detail.currentTime = now(ev));\n const timeDelta = timestamp - prevT;\n if (timeDelta > 0 && timeDelta < 100) {\n const velocityX = (currentX - prevX) / timeDelta;\n const 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};\nconst updateDetail = (ev, detail) => {\n // get X coordinates for either a mouse click\n // or a touch depending on the given event\n let x = 0;\n let y = 0;\n if (ev) {\n const changedTouches = ev.changedTouches;\n if (changedTouches && changedTouches.length > 0) {\n const 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};\nconst now = (ev) => {\n return ev.timeStamp || Date.now();\n};\n\nexport { createGesture };\n","/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { writeTask, Build } from '@stencil/core/internal/client';\nimport { c as componentOnReady, r as raf } from './helpers.js';\n\nconst LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';\nconst LIFECYCLE_DID_ENTER = 'ionViewDidEnter';\nconst LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';\nconst LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';\nconst LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';\n\nconst iosTransitionAnimation = () => import('./ios.transition.js');\nconst mdTransitionAnimation = () => import('./md.transition.js');\n// TODO(FW-2832): types\nconst transition = (opts) => {\n return new Promise((resolve, reject) => {\n writeTask(() => {\n beforeTransition(opts);\n runTransition(opts).then((result) => {\n if (result.animation) {\n result.animation.destroy();\n }\n afterTransition(opts);\n resolve(result);\n }, (error) => {\n afterTransition(opts);\n reject(error);\n });\n });\n });\n};\nconst beforeTransition = (opts) => {\n const enteringEl = opts.enteringEl;\n const leavingEl = opts.leavingEl;\n setZIndex(enteringEl, leavingEl, opts.direction);\n if (opts.showGoBack) {\n enteringEl.classList.add('can-go-back');\n }\n else {\n enteringEl.classList.remove('can-go-back');\n }\n setPageHidden(enteringEl, false);\n /**\n * When transitioning, the page should not\n * respond to click events. This resolves small\n * issues like users double tapping the ion-back-button.\n * These pointer events are removed in `afterTransition`.\n */\n enteringEl.style.setProperty('pointer-events', 'none');\n if (leavingEl) {\n setPageHidden(leavingEl, false);\n leavingEl.style.setProperty('pointer-events', 'none');\n }\n};\nconst runTransition = async (opts) => {\n const animationBuilder = await getAnimationBuilder(opts);\n const ani = animationBuilder && Build.isBrowser ? animation(animationBuilder, opts) : noAnimation(opts); // fast path for no animation\n return ani;\n};\nconst afterTransition = (opts) => {\n const enteringEl = opts.enteringEl;\n const leavingEl = opts.leavingEl;\n enteringEl.classList.remove('ion-page-invisible');\n enteringEl.style.removeProperty('pointer-events');\n if (leavingEl !== undefined) {\n leavingEl.classList.remove('ion-page-invisible');\n leavingEl.style.removeProperty('pointer-events');\n }\n};\nconst getAnimationBuilder = async (opts) => {\n if (!opts.leavingEl || !opts.animated || opts.duration === 0) {\n return undefined;\n }\n if (opts.animationBuilder) {\n return opts.animationBuilder;\n }\n const getAnimation = opts.mode === 'ios'\n ? (await iosTransitionAnimation()).iosTransitionAnimation\n : (await mdTransitionAnimation()).mdTransitionAnimation;\n return getAnimation;\n};\nconst animation = async (animationBuilder, opts) => {\n await waitForReady(opts, true);\n const trans = animationBuilder(opts.baseEl, opts);\n fireWillEvents(opts.enteringEl, opts.leavingEl);\n const didComplete = await playTransition(trans, opts);\n if (opts.progressCallback) {\n opts.progressCallback(undefined);\n }\n if (didComplete) {\n fireDidEvents(opts.enteringEl, opts.leavingEl);\n }\n return {\n hasCompleted: didComplete,\n animation: trans,\n };\n};\nconst noAnimation = async (opts) => {\n const enteringEl = opts.enteringEl;\n const leavingEl = opts.leavingEl;\n await waitForReady(opts, false);\n fireWillEvents(enteringEl, leavingEl);\n fireDidEvents(enteringEl, leavingEl);\n return {\n hasCompleted: true,\n };\n};\nconst waitForReady = async (opts, defaultDeep) => {\n const deep = opts.deepWait !== undefined ? opts.deepWait : defaultDeep;\n const promises = deep\n ? [deepReady(opts.enteringEl), deepReady(opts.leavingEl)]\n : [shallowReady(opts.enteringEl), shallowReady(opts.leavingEl)];\n await Promise.all(promises);\n await notifyViewReady(opts.viewIsReady, opts.enteringEl);\n};\nconst notifyViewReady = async (viewIsReady, enteringEl) => {\n if (viewIsReady) {\n await viewIsReady(enteringEl);\n }\n};\nconst playTransition = (trans, opts) => {\n const progressCallback = opts.progressCallback;\n const promise = new Promise((resolve) => {\n trans.onFinish((currentStep) => resolve(currentStep === 1));\n });\n // cool, let's do this, start the transition\n if (progressCallback) {\n // this is a swipe to go back, just get the transition progress ready\n // kick off the swipe animation start\n trans.progressStart(true);\n progressCallback(trans);\n }\n else {\n // only the top level transition should actually start \"play\"\n // kick it off and let it play through\n // ******** DOM WRITE ****************\n trans.play();\n }\n // create a callback for when the animation is done\n return promise;\n};\nconst fireWillEvents = (enteringEl, leavingEl) => {\n lifecycle(leavingEl, LIFECYCLE_WILL_LEAVE);\n lifecycle(enteringEl, LIFECYCLE_WILL_ENTER);\n};\nconst fireDidEvents = (enteringEl, leavingEl) => {\n lifecycle(enteringEl, LIFECYCLE_DID_ENTER);\n lifecycle(leavingEl, LIFECYCLE_DID_LEAVE);\n};\nconst lifecycle = (el, eventName) => {\n if (el) {\n const ev = new CustomEvent(eventName, {\n bubbles: false,\n cancelable: false,\n });\n el.dispatchEvent(ev);\n }\n};\nconst shallowReady = (el) => {\n if (el) {\n return new Promise((resolve) => componentOnReady(el, resolve));\n }\n return Promise.resolve();\n};\nconst deepReady = async (el) => {\n const element = el;\n if (element) {\n if (element.componentOnReady != null) {\n // eslint-disable-next-line custom-rules/no-component-on-ready-method\n const stencilEl = await element.componentOnReady();\n if (stencilEl != null) {\n return;\n }\n /**\n * Custom elements in Stencil will have __registerHost.\n */\n }\n else if (element.__registerHost != null) {\n /**\n * Non-lazy loaded custom elements need to wait\n * one frame for component to be loaded.\n */\n const waitForCustomElement = new Promise((resolve) => raf(resolve));\n await waitForCustomElement;\n return;\n }\n await Promise.all(Array.from(element.children).map(deepReady));\n }\n};\nconst setPageHidden = (el, hidden) => {\n if (hidden) {\n el.setAttribute('aria-hidden', 'true');\n el.classList.add('ion-page-hidden');\n }\n else {\n el.hidden = false;\n el.removeAttribute('aria-hidden');\n el.classList.remove('ion-page-hidden');\n }\n};\nconst setZIndex = (enteringEl, leavingEl, direction) => {\n if (enteringEl !== undefined) {\n enteringEl.style.zIndex = direction === 'back' ? '99' : '101';\n }\n if (leavingEl !== undefined) {\n leavingEl.style.zIndex = '100';\n }\n};\nconst getIonPageElement = (element) => {\n if (element.classList.contains('ion-page')) {\n return element;\n }\n const ionPage = element.querySelector(':scope > .ion-page, :scope > ion-nav, :scope > ion-tabs');\n if (ionPage) {\n return ionPage;\n }\n // idk, return the original element so at least something animates and we don't have a null pointer\n return element;\n};\n\nexport { LIFECYCLE_WILL_ENTER as L, LIFECYCLE_DID_ENTER as a, LIFECYCLE_WILL_LEAVE as b, LIFECYCLE_DID_LEAVE as c, LIFECYCLE_WILL_UNLOAD as d, deepReady as e, getIonPageElement as g, lifecycle as l, setPageHidden as s, transition as t };\n","/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\n/**\n * When accessing the window, it is important\n * to account for SSR applications where the\n * window is not available. Code that accesses\n * window when it is not available will crash.\n * Even checking if `window === undefined` will cause\n * apps to crash in SSR.\n *\n * Use win below to access an SSR-safe version\n * of the window.\n *\n * Example 1:\n * Before:\n * if (window.innerWidth > 768) { ... }\n *\n * After:\n * import { win } from 'path/to/this/file';\n * if (win?.innerWidth > 768) { ... }\n *\n * Note: Code inside of this if-block will\n * not run in an SSR environment.\n */\nconst win = typeof window !== 'undefined' ? window : undefined;\n\nexport { win as w };\n","/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\n/* Ionicons v6.1.3, ES Modules */\nconst arrowBackSharp = \"data:image/svg+xml;utf8,\";\nconst arrowDown = \"data:image/svg+xml;utf8,\";\nconst caretBackSharp = \"data:image/svg+xml;utf8,\";\nconst caretDownSharp = \"data:image/svg+xml;utf8,\";\nconst caretUpSharp = \"data:image/svg+xml;utf8,\";\nconst checkmarkOutline = \"data:image/svg+xml;utf8,\";\nconst chevronBack = \"data:image/svg+xml;utf8,\";\nconst chevronDown = \"data:image/svg+xml;utf8,\";\nconst chevronForward = \"data:image/svg+xml;utf8,\";\nconst chevronForwardOutline = \"data:image/svg+xml;utf8,\";\nconst close = \"data:image/svg+xml;utf8,\";\nconst closeCircle = \"data:image/svg+xml;utf8,\";\nconst closeSharp = \"data:image/svg+xml;utf8,\";\nconst ellipseOutline = \"data:image/svg+xml;utf8,\";\nconst ellipsisHorizontal = \"data:image/svg+xml;utf8,\";\nconst menuOutline = \"data:image/svg+xml;utf8,\";\nconst menuSharp = \"data:image/svg+xml;utf8,\";\nconst removeOutline = \"data:image/svg+xml;utf8,\";\nconst reorderThreeOutline = \"data:image/svg+xml;utf8,\";\nconst reorderTwoSharp = \"data:image/svg+xml;utf8,\";\nconst searchOutline = \"data:image/svg+xml;utf8,\";\nconst searchSharp = \"data:image/svg+xml;utf8,\";\n\nexport { chevronBack as a, arrowBackSharp as b, chevronDown as c, chevronForwardOutline as d, ellipsisHorizontal as e, chevronForward as f, caretUpSharp as g, caretDownSharp as h, close as i, closeCircle as j, closeSharp as k, menuSharp as l, menuOutline as m, caretBackSharp as n, arrowDown as o, reorderTwoSharp as p, searchSharp as q, reorderThreeOutline as r, searchOutline as s, checkmarkOutline as t, removeOutline as u, ellipseOutline as v };\n","/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\n/**\n * Logs a warning to the console with an Ionic prefix\n * to indicate the library that is warning the developer.\n *\n * @param message - The string message to be logged to the console.\n */\nconst printIonWarning = (message, ...params) => {\n return console.warn(`[Ionic Warning]: ${message}`, ...params);\n};\n/*\n * Logs an error to the console with an Ionic prefix\n * to indicate the library that is warning the developer.\n *\n * @param message - The string message to be logged to the console.\n * @param params - Additional arguments to supply to the console.error.\n */\nconst printIonError = (message, ...params) => {\n return console.error(`[Ionic Error]: ${message}`, ...params);\n};\n/**\n * Prints an error informing developers that an implementation requires an element to be used\n * within a specific selector.\n *\n * @param el The web component element this is requiring the element.\n * @param targetSelectors The selector or selectors that were not found.\n */\nconst printRequiredElementError = (el, ...targetSelectors) => {\n return console.error(`<${el.tagName.toLowerCase()}> must be used inside ${targetSelectors.join(' or ')}.`);\n};\n\nexport { printIonWarning as a, printRequiredElementError as b, printIonError as p };\n","/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { c as componentOnReady } from './helpers.js';\nimport { b as printRequiredElementError } from './index7.js';\n\nconst ION_CONTENT_TAG_NAME = 'ION-CONTENT';\nconst ION_CONTENT_ELEMENT_SELECTOR = 'ion-content';\nconst ION_CONTENT_CLASS_SELECTOR = '.ion-content-scroll-host';\n/**\n * Selector used for implementations reliant on `` for scroll event changes.\n *\n * Developers should use the `.ion-content-scroll-host` selector to target the element emitting\n * scroll events. With virtual scroll implementations this will be the host element for\n * the scroll viewport.\n */\nconst ION_CONTENT_SELECTOR = `${ION_CONTENT_ELEMENT_SELECTOR}, ${ION_CONTENT_CLASS_SELECTOR}`;\nconst isIonContent = (el) => el.tagName === ION_CONTENT_TAG_NAME;\n/**\n * Waits for the element host fully initialize before\n * returning the inner scroll element.\n *\n * For `ion-content` the scroll target will be the result\n * of the `getScrollElement` function.\n *\n * For custom implementations it will be the element host\n * or a selector within the host, if supplied through `scrollTarget`.\n */\nconst getScrollElement = async (el) => {\n if (isIonContent(el)) {\n await new Promise((resolve) => componentOnReady(el, resolve));\n return el.getScrollElement();\n }\n return el;\n};\n/**\n * Queries the element matching the selector for IonContent.\n * See ION_CONTENT_SELECTOR for the selector used.\n */\nconst findIonContent = (el) => {\n /**\n * First we try to query the custom scroll host selector in cases where\n * the implementation is using an outer `ion-content` with an inner custom\n * scroll container.\n */\n const customContentHost = el.querySelector(ION_CONTENT_CLASS_SELECTOR);\n if (customContentHost) {\n return customContentHost;\n }\n return el.querySelector(ION_CONTENT_SELECTOR);\n};\n/**\n * Queries the closest element matching the selector for IonContent.\n */\nconst findClosestIonContent = (el) => {\n return el.closest(ION_CONTENT_SELECTOR);\n};\n/**\n * Scrolls to the top of the element. If an `ion-content` is found, it will scroll\n * using the public API `scrollToTop` with a duration.\n */\n// TODO(FW-2832): type\nconst scrollToTop = (el, durationMs) => {\n if (isIonContent(el)) {\n const content = el;\n return content.scrollToTop(durationMs);\n }\n return Promise.resolve(el.scrollTo({\n top: 0,\n left: 0,\n behavior: durationMs > 0 ? 'smooth' : 'auto',\n }));\n};\n/**\n * Scrolls by a specified X/Y distance in the component. If an `ion-content` is found, it will scroll\n * using the public API `scrollByPoint` with a duration.\n */\nconst scrollByPoint = (el, x, y, durationMs) => {\n if (isIonContent(el)) {\n const content = el;\n return content.scrollByPoint(x, y, durationMs);\n }\n return Promise.resolve(el.scrollBy({\n top: y,\n left: x,\n behavior: durationMs > 0 ? 'smooth' : 'auto',\n }));\n};\n/**\n * Prints an error informing developers that an implementation requires an element to be used\n * within either the `ion-content` selector or the `.ion-content-scroll-host` class.\n */\nconst printIonContentErrorMsg = (el) => {\n return printRequiredElementError(el, ION_CONTENT_ELEMENT_SELECTOR);\n};\n/**\n * Several components in Ionic need to prevent scrolling\n * during a gesture (card modal, range, item sliding, etc).\n * Use this utility to account for ion-content and custom content hosts.\n */\nconst disableContentScrollY = (contentEl) => {\n if (isIonContent(contentEl)) {\n const ionContent = contentEl;\n const initialScrollY = ionContent.scrollY;\n ionContent.scrollY = false;\n /**\n * This should be passed into resetContentScrollY\n * so that we can revert ion-content's scrollY to the\n * correct state. For example, if scrollY = false\n * initially, we do not want to enable scrolling\n * when we call resetContentScrollY.\n */\n return initialScrollY;\n }\n else {\n contentEl.style.setProperty('overflow', 'hidden');\n return true;\n }\n};\nconst resetContentScrollY = (contentEl, initialScrollY) => {\n if (isIonContent(contentEl)) {\n contentEl.scrollY = initialScrollY;\n }\n else {\n contentEl.style.removeProperty('overflow');\n }\n};\n\nexport { ION_CONTENT_ELEMENT_SELECTOR as I, findClosestIonContent as a, ION_CONTENT_CLASS_SELECTOR as b, scrollByPoint as c, disableContentScrollY as d, findIonContent as f, getScrollElement as g, isIonContent as i, printIonContentErrorMsg as p, resetContentScrollY as r, scrollToTop as s };\n"],"names":["addEventListener","el","eventName","callback","opts","listenerOpts","supportsPassive","capture","passive","add","remove","node","undefined","_sPassive","Object","defineProperty","get","e","getDocument","Document","ownerDocument","createGesture","config","hasCapturedPan","hasStartedPan","hasFiredStart","isMoveQueued","finalConfig","assign","disableScroll","direction","gesturePriority","maxAngle","threshold","canStart","onWillStart","onStart","onEnd","notCaptured","onMove","blurOnStart","detail","type","startX","startY","startTime","currentX","currentY","velocityX","velocityY","deltaX","deltaY","currentTime","event","data","pan","thresh","radians","Math","PI","isDirX","maxCosine","cos","dirty","isPan","start","x","y","detect","distance","hypotenuse","sqrt","cosine","isGesture","getDirection","createPanRecognizer","gesture","G","name","gestureName","priority","fireOnMove","tryToCapturePan","then","fireOnStart","document","activeElement","blur","blurActiveElement","reset","release","pointerUp","ev","tmpHasCaptured","tmpHasFiredStart","calcGestureData","pointerEvents","pointerDown","pointerMove","options","rmTouchStart","rmTouchMove","rmTouchEnd","rmTouchCancel","rmMouseStart","rmMouseMove","rmMouseUp","lastTouchEvent","handleTouchStart","Date","now","target","handleTouchEnd","handleMouseDown","handleMouseUp","stopTouch","stopMouse","stop","enable","isEnabled","destroy","createPointerEvents","timeStamp","updateDetail","requestAnimationFrame","abortGesture","prevX","prevY","prevT","timeDelta","changedTouches","length","touch","clientX","clientY","pageX","pageY","LIFECYCLE_WILL_LEAVE","LIFECYCLE_DID_LEAVE","LIFECYCLE_WILL_UNLOAD","transition","Promise","resolve","reject","beforeTransition","runTransition","result","animation","afterTransition","error","enteringEl","leavingEl","setZIndex","showGoBack","classList","setPageHidden","style","setProperty","async","animationBuilder","getAnimationBuilder","noAnimation","removeProperty","animated","duration","mode","iosTransitionAnimation","mdTransitionAnimation","waitForReady","trans","baseEl","fireWillEvents","didComplete","playTransition","progressCallback","fireDidEvents","hasCompleted","defaultDeep","promises","deepWait","deepReady","shallowReady","all","notifyViewReady","viewIsReady","promise","onFinish","currentStep","progressStart","play","lifecycle","CustomEvent","bubbles","cancelable","dispatchEvent","c","element","componentOnReady","__registerHost","waitForCustomElement","r","Array","from","children","map","hidden","setAttribute","removeAttribute","zIndex","getIonPageElement","contains","ionPage","querySelector","win","window","chevronForward","closeCircle","closeSharp","printIonWarning","message","params","console","warn","printIonError","printRequiredElementError","targetSelectors","tagName","toLowerCase","join","ION_CONTENT_ELEMENT_SELECTOR","ION_CONTENT_CLASS_SELECTOR","ION_CONTENT_SELECTOR","isIonContent","getScrollElement","findIonContent","customContentHost","findClosestIonContent","closest","scrollToTop","durationMs","scrollTo","top","left","behavior","scrollByPoint","scrollBy","printIonContentErrorMsg","disableContentScrollY","contentEl","ionContent","initialScrollY","scrollY","resetContentScrollY"],"sourceRoot":""}