1 line
118 KiB
JSON
1 line
118 KiB
JSON
{"ast":null,"code":"import _asyncToGenerator from \"D:/MobileDev/WRB/WrenchBoard2023a/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\n\n/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { c as writeTask, r as registerInstance, e as createEvent, f as readTask, h, i as getElement, H as Host } from './index-1a99aeb7.js';\nimport { a as isPlatform, b as getIonMode, c as config } from './ionic-global-04e268e7.js';\nimport { g as getTimeGivenProgression } from './cubic-bezier-c313947a.js';\nimport { I as ION_CONTENT_ELEMENT_SELECTOR, p as printIonContentErrorMsg, b as ION_CONTENT_CLASS_SELECTOR, g as getScrollElement } from './index-3413f7be.js';\nimport { t as transitionEndAsync, c as componentOnReady, l as clamp, g as getElementRoot, r as raf } from './helpers-4d272360.js';\nimport { d as hapticImpact } from './haptic-683b3b3c.js';\nimport { c as createAnimation } from './animation-36c1d77d.js';\nimport { h as caretBackSharp, i as arrowDown } from './index-45ecc7ca.js';\nimport { s as sanitizeDOMString } from './index-dff497fb.js';\nimport { S as SPINNERS } from './spinner-configs-5d6b6fe7.js';\nimport './index-c4b11676.js';\n\nconst getRefresherAnimationType = contentEl => {\n const previousSibling = contentEl.previousElementSibling;\n const hasHeader = previousSibling !== null && previousSibling.tagName === 'ION-HEADER';\n return hasHeader ? 'translate' : 'scale';\n};\n\nconst createPullingAnimation = (type, pullingSpinner, refresherEl) => {\n return type === 'scale' ? createScaleAnimation(pullingSpinner, refresherEl) : createTranslateAnimation(pullingSpinner, refresherEl);\n};\n\nconst createBaseAnimation = pullingRefresherIcon => {\n const spinner = pullingRefresherIcon.querySelector('ion-spinner');\n const circle = spinner.shadowRoot.querySelector('circle');\n const spinnerArrowContainer = pullingRefresherIcon.querySelector('.spinner-arrow-container');\n const arrowContainer = pullingRefresherIcon.querySelector('.arrow-container');\n const arrow = arrowContainer ? arrowContainer.querySelector('ion-icon') : null;\n const baseAnimation = createAnimation().duration(1000).easing('ease-out');\n const spinnerArrowContainerAnimation = createAnimation().addElement(spinnerArrowContainer).keyframes([{\n offset: 0,\n opacity: '0.3'\n }, {\n offset: 0.45,\n opacity: '0.3'\n }, {\n offset: 0.55,\n opacity: '1'\n }, {\n offset: 1,\n opacity: '1'\n }]);\n const circleInnerAnimation = createAnimation().addElement(circle).keyframes([{\n offset: 0,\n strokeDasharray: '1px, 200px'\n }, {\n offset: 0.2,\n strokeDasharray: '1px, 200px'\n }, {\n offset: 0.55,\n strokeDasharray: '100px, 200px'\n }, {\n offset: 1,\n strokeDasharray: '100px, 200px'\n }]);\n const circleOuterAnimation = createAnimation().addElement(spinner).keyframes([{\n offset: 0,\n transform: 'rotate(-90deg)'\n }, {\n offset: 1,\n transform: 'rotate(210deg)'\n }]);\n /**\n * Only add arrow animation if present\n * this allows users to customize the spinners\n * without errors being thrown\n */\n\n if (arrowContainer && arrow) {\n const arrowContainerAnimation = createAnimation().addElement(arrowContainer).keyframes([{\n offset: 0,\n transform: 'rotate(0deg)'\n }, {\n offset: 0.3,\n transform: 'rotate(0deg)'\n }, {\n offset: 0.55,\n transform: 'rotate(280deg)'\n }, {\n offset: 1,\n transform: 'rotate(400deg)'\n }]);\n const arrowAnimation = createAnimation().addElement(arrow).keyframes([{\n offset: 0,\n transform: 'translateX(2px) scale(0)'\n }, {\n offset: 0.3,\n transform: 'translateX(2px) scale(0)'\n }, {\n offset: 0.55,\n transform: 'translateX(-1.5px) scale(1)'\n }, {\n offset: 1,\n transform: 'translateX(-1.5px) scale(1)'\n }]);\n baseAnimation.addAnimation([arrowContainerAnimation, arrowAnimation]);\n }\n\n return baseAnimation.addAnimation([spinnerArrowContainerAnimation, circleInnerAnimation, circleOuterAnimation]);\n};\n\nconst createScaleAnimation = (pullingRefresherIcon, refresherEl) => {\n /**\n * Do not take the height of the refresher icon\n * because at this point the DOM has not updated,\n * so the refresher icon is still hidden with\n * display: none.\n * The `ion-refresher` container height\n * is roughly the amount we need to offset\n * the icon by when pulling down.\n */\n const height = refresherEl.clientHeight;\n const spinnerAnimation = createAnimation().addElement(pullingRefresherIcon).keyframes([{\n offset: 0,\n transform: `scale(0) translateY(-${height}px)`\n }, {\n offset: 1,\n transform: 'scale(1) translateY(100px)'\n }]);\n return createBaseAnimation(pullingRefresherIcon).addAnimation([spinnerAnimation]);\n};\n\nconst createTranslateAnimation = (pullingRefresherIcon, refresherEl) => {\n /**\n * Do not take the height of the refresher icon\n * because at this point the DOM has not updated,\n * so the refresher icon is still hidden with\n * display: none.\n * The `ion-refresher` container height\n * is roughly the amount we need to offset\n * the icon by when pulling down.\n */\n const height = refresherEl.clientHeight;\n const spinnerAnimation = createAnimation().addElement(pullingRefresherIcon).keyframes([{\n offset: 0,\n transform: `translateY(-${height}px)`\n }, {\n offset: 1,\n transform: 'translateY(100px)'\n }]);\n return createBaseAnimation(pullingRefresherIcon).addAnimation([spinnerAnimation]);\n};\n\nconst createSnapBackAnimation = pullingRefresherIcon => {\n return createAnimation().duration(125).addElement(pullingRefresherIcon).fromTo('transform', 'translateY(var(--ion-pulling-refresher-translate, 100px))', 'translateY(0px)');\n}; // iOS Native Refresher\n// -----------------------------\n\n\nconst setSpinnerOpacity = (spinner, opacity) => {\n spinner.style.setProperty('opacity', opacity.toString());\n};\n\nconst handleScrollWhilePulling = (ticks, numTicks, pullAmount) => {\n const max = 1;\n writeTask(() => {\n ticks.forEach((el, i) => {\n /**\n * Compute the opacity of each tick\n * mark as a percentage of the pullAmount\n * offset by max / numTicks so\n * the tick marks are shown staggered.\n */\n const min = i * (max / numTicks);\n const range = max - min;\n const start = pullAmount - min;\n const progression = clamp(0, start / range, 1);\n el.style.setProperty('opacity', progression.toString());\n });\n });\n};\n\nconst handleScrollWhileRefreshing = (spinner, lastVelocityY) => {\n writeTask(() => {\n // If user pulls down quickly, the spinner should spin faster\n spinner.style.setProperty('--refreshing-rotation-duration', lastVelocityY >= 1.0 ? '0.5s' : '2s');\n spinner.style.setProperty('opacity', '1');\n });\n};\n\nconst translateElement = (el, value, duration = 200) => {\n if (!el) {\n return Promise.resolve();\n }\n\n const trans = transitionEndAsync(el, duration);\n writeTask(() => {\n el.style.setProperty('transition', `${duration}ms all ease-out`);\n\n if (value === undefined) {\n el.style.removeProperty('transform');\n } else {\n el.style.setProperty('transform', `translate3d(0px, ${value}, 0px)`);\n }\n });\n return trans;\n}; // Utils\n// -----------------------------\n\n\nconst shouldUseNativeRefresher = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (referenceEl, mode) {\n const refresherContent = referenceEl.querySelector('ion-refresher-content');\n\n if (!refresherContent) {\n return Promise.resolve(false);\n }\n\n yield new Promise(resolve => componentOnReady(refresherContent, resolve));\n const pullingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-pulling ion-spinner');\n const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');\n return pullingSpinner !== null && refreshingSpinner !== null && (mode === 'ios' && isPlatform('mobile') && referenceEl.style.webkitOverflowScrolling !== undefined || mode === 'md');\n });\n\n return function shouldUseNativeRefresher(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n}();\n\nconst refresherIosCss = \"ion-refresher{left:0;top:0;display:none;position:absolute;width:100%;height:60px;pointer-events:none;z-index:-1}[dir=rtl] ion-refresher,:host-context([dir=rtl]) ion-refresher{left:unset;right:unset;right:0}ion-refresher.refresher-active{display:block}ion-refresher-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.refresher-pulling,.refresher-refreshing{display:none;width:100%}.refresher-pulling-icon,.refresher-refreshing-icon{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:200ms;transition:200ms;font-size:30px;text-align:center}[dir=rtl] .refresher-pulling-icon,:host-context([dir=rtl]) .refresher-pulling-icon,[dir=rtl] .refresher-refreshing-icon,:host-context([dir=rtl]) .refresher-refreshing-icon{-webkit-transform-origin:calc(100% - center);transform-origin:calc(100% - center)}.refresher-pulling-text,.refresher-refreshing-text{font-size:16px;text-align:center}ion-refresher-content .arrow-container{display:none}.refresher-pulling ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.refresher-refreshing ion-refresher-content .refresher-refreshing{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-completing ion-refresher-content .refresher-refreshing{display:block}.refresher-completing ion-refresher-content .refresher-refreshing-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-native .refresher-pulling-text,.refresher-native .refresher-refreshing-text{display:none}.refresher-ios .refresher-pulling-icon,.refresher-ios .refresher-refreshing-icon{color:var(--ion-text-color, #000)}.refresher-ios .refresher-pulling-text,.refresher-ios .refresher-refreshing-text{color:var(--ion-text-color, #000)}.refresher-ios .refresher-refreshing .spinner-lines-ios line,.refresher-ios .refresher-refreshing .spinner-lines-small-ios line,.refresher-ios .refresher-refreshing .spinner-crescent circle{stroke:var(--ion-text-color, #000)}.refresher-ios .refresher-refreshing .spinner-bubbles circle,.refresher-ios .refresher-refreshing .spinner-circles circle,.refresher-ios .refresher-refreshing .spinner-dots circle{fill:var(--ion-text-color, #000)}ion-refresher.refresher-native{display:block;z-index:1}ion-refresher.refresher-native ion-spinner{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native ion-spinner{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}.refresher-native .refresher-refreshing ion-spinner{--refreshing-rotation-duration:2s;display:none;-webkit-animation:var(--refreshing-rotation-duration) ease-out refresher-rotate forwards;animation:var(--refreshing-rotation-duration) ease-out refresher-rotate forwards}.refresher-native .refresher-refreshing{display:none;-webkit-animation:250ms linear refresher-pop forwards;animation:250ms linear refresher-pop forwards}.refresher-native ion-spinner{width:32px;height:32px;color:var(--ion-color-step-450, #747577)}.refresher-native.refresher-refreshing .refresher-pulling ion-spinner,.refresher-native.refresher-completing .refresher-pulling ion-spinner{display:none}.refresher-native.refresher-refreshing .refresher-refreshing ion-spinner,.refresher-native.refresher-completing .refresher-refreshing ion-spinner{display:block}.refresher-native.refresher-pulling .refresher-pulling ion-spinner{display:block}.refresher-native.refresher-pulling .refresher-refreshing ion-spinner{display:none}.refresher-native.refresher-completing ion-refresher-content .refresher-refreshing-icon{-webkit-transform:scale(0) rotate(180deg);transform:scale(0) rotate(180deg);-webkit-transition:300ms;transition:300ms}@-webkit-keyframes refresher-pop{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes refresher-pop{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes refresher-rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes refresher-rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}\";\nconst refresherMdCss = \"ion-refresher{left:0;top:0;display:none;position:absolute;width:100%;height:60px;pointer-events:none;z-index:-1}[dir=rtl] ion-refresher,:host-context([dir=rtl]) ion-refresher{left:unset;right:unset;right:0}ion-refresher.refresher-active{display:block}ion-refresher-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.refresher-pulling,.refresher-refreshing{display:none;width:100%}.refresher-pulling-icon,.refresher-refreshing-icon{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:200ms;transition:200ms;font-size:30px;text-align:center}[dir=rtl] .refresher-pulling-icon,:host-context([dir=rtl]) .refresher-pulling-icon,[dir=rtl] .refresher-refreshing-icon,:host-context([dir=rtl]) .refresher-refreshing-icon{-webkit-transform-origin:calc(100% - center);transform-origin:calc(100% - center)}.refresher-pulling-text,.refresher-refreshing-text{font-size:16px;text-align:center}ion-refresher-content .arrow-container{display:none}.refresher-pulling ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.refresher-refreshing ion-refresher-content .refresher-refreshing{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-completing ion-refresher-content .refresher-refreshing{display:block}.refresher-completing ion-refresher-content .refresher-refreshing-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-native .refresher-pulling-text,.refresher-native .refresher-refreshing-text{display:none}.refresher-md .refresher-pulling-icon,.refresher-md .refresher-refreshing-icon{color:var(--ion-text-color, #000)}.refresher-md .refresher-pulling-text,.refresher-md .refresher-refreshing-text{color:var(--ion-text-color, #000)}.refresher-md .refresher-refreshing .spinner-lines-md line,.refresher-md .refresher-refreshing .spinner-lines-small-md line,.refresher-md .refresher-refreshing .spinner-crescent circle{stroke:var(--ion-text-color, #000)}.refresher-md .refresher-refreshing .spinner-bubbles circle,.refresher-md .refresher-refreshing .spinner-circles circle,.refresher-md .refresher-refreshing .spinner-dots circle{fill:var(--ion-text-color, #000)}ion-refresher.refresher-native{display:block;z-index:1}ion-refresher.refresher-native ion-spinner{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;width:24px;height:24px;color:var(--ion-color-primary, #3880ff)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native ion-spinner{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}ion-refresher.refresher-native .spinner-arrow-container{display:inherit}ion-refresher.refresher-native .arrow-container{display:block;position:absolute;width:24px;height:24px}ion-refresher.refresher-native .arrow-container ion-icon{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;left:0;right:0;bottom:-4px;position:absolute;color:var(--ion-color-primary, #3880ff);font-size:12px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native .arrow-container ion-icon{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}ion-refresher.refresher-native.refresher-pulling ion-refresher-content .refresher-pulling,ion-refresher.refresher-native.refresher-ready ion-refresher-content .refresher-pulling{display:-ms-flexbox;display:flex}ion-refresher.refresher-native.refresher-refreshing ion-refresher-content .refresher-refreshing,ion-refresher.refresher-native.refresher-completing ion-refresher-content .refresher-refreshing,ion-refresher.refresher-native.refresher-cancelling ion-refresher-content .refresher-refreshing{display:-ms-flexbox;display:flex}ion-refresher.refresher-native .refresher-pulling-icon{-webkit-transform:translateY(calc(-100% - 10px));transform:translateY(calc(-100% - 10px))}ion-refresher.refresher-native .refresher-pulling-icon,ion-refresher.refresher-native .refresher-refreshing-icon{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;border-radius:100%;padding-left:8px;padding-right:8px;padding-top:8px;padding-bottom:8px;display:-ms-flexbox;display:flex;border:1px solid var(--ion-color-step-200, #ececec);background:var(--ion-color-step-250, #ffffff);-webkit-box-shadow:0px 1px 6px rgba(0, 0, 0, 0.1);box-shadow:0px 1px 6px rgba(0, 0, 0, 0.1)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native .refresher-pulling-icon,ion-refresher.refresher-native .refresher-refreshing-icon{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native .refresher-pulling-icon,ion-refresher.refresher-native .refresher-refreshing-icon{padding-left:unset;padding-right:unset;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px}}\";\nconst Refresher = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionRefresh = createEvent(this, \"ionRefresh\", 7);\n this.ionPull = createEvent(this, \"ionPull\", 7);\n this.ionStart = createEvent(this, \"ionStart\", 7);\n this.appliedStyles = false;\n this.didStart = false;\n this.progress = 0;\n this.pointerDown = false;\n this.needsCompletion = false;\n this.didRefresh = false;\n this.lastVelocityY = 0;\n this.animations = [];\n this.nativeRefresher = false;\n /**\n * The current state which the refresher is in. The refresher's states include:\n *\n * - `inactive` - The refresher is not being pulled down or refreshing and is currently hidden.\n * - `pulling` - The user is actively pulling down the refresher, but has not reached the point yet that if the user lets go, it'll refresh.\n * - `cancelling` - The user pulled down the refresher and let go, but did not pull down far enough to kick off the `refreshing` state. After letting go, the refresher is in the `cancelling` state while it is closing, and will go back to the `inactive` state once closed.\n * - `ready` - The user has pulled down the refresher far enough that if they let go, it'll begin the `refreshing` state.\n * - `refreshing` - The refresher is actively waiting on the async operation to end. Once the refresh handler calls `complete()` it will begin the `completing` state.\n * - `completing` - The `refreshing` state has finished and the refresher is in the way of closing itself. Once closed, the refresher will go back to the `inactive` state.\n */\n\n this.state = 1\n /* Inactive */\n ;\n /**\n * The minimum distance the user must pull down until the\n * refresher will go into the `refreshing` state.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n\n this.pullMin = 60;\n /**\n * The maximum distance of the pull until the refresher\n * will automatically go into the `refreshing` state.\n * Defaults to the result of `pullMin + 60`.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n\n this.pullMax = this.pullMin + 60;\n /**\n * Time it takes to close the refresher.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n\n this.closeDuration = '280ms';\n /**\n * Time it takes the refresher to snap back to the `refreshing` state.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n\n this.snapbackDuration = '280ms';\n /**\n * How much to multiply the pull speed by. To slow the pull animation down,\n * pass a number less than `1`. To speed up the pull, pass a number greater\n * than `1`. The default value is `1` which is equal to the speed of the cursor.\n * If a negative value is passed in, the factor will be `1` instead.\n *\n * For example: If the value passed is `1.2` and the content is dragged by\n * `10` pixels, instead of `10` pixels the content will be pulled by `12` pixels\n * (an increase of 20 percent). If the value passed is `0.8`, the dragged amount\n * will be `8` pixels, less than the amount the cursor has moved.\n *\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n\n this.pullFactor = 1;\n /**\n * If `true`, the refresher will be hidden.\n */\n\n this.disabled = false;\n }\n\n disabledChanged() {\n if (this.gesture) {\n this.gesture.enable(!this.disabled);\n }\n }\n\n checkNativeRefresher() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n const useNativeRefresher = yield shouldUseNativeRefresher(_this.el, getIonMode(_this));\n\n if (useNativeRefresher && !_this.nativeRefresher) {\n const contentEl = _this.el.closest('ion-content');\n\n _this.setupNativeRefresher(contentEl);\n } else if (!useNativeRefresher) {\n _this.destroyNativeRefresher();\n }\n })();\n }\n\n destroyNativeRefresher() {\n if (this.scrollEl && this.scrollListenerCallback) {\n this.scrollEl.removeEventListener('scroll', this.scrollListenerCallback);\n this.scrollListenerCallback = undefined;\n }\n\n this.nativeRefresher = false;\n }\n\n resetNativeRefresher(el, state) {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n _this2.state = state;\n\n if (getIonMode(_this2) === 'ios') {\n yield translateElement(el, undefined, 300);\n } else {\n yield transitionEndAsync(_this2.el.querySelector('.refresher-refreshing-icon'), 200);\n }\n\n _this2.didRefresh = false;\n _this2.needsCompletion = false;\n _this2.pointerDown = false;\n\n _this2.animations.forEach(ani => ani.destroy());\n\n _this2.animations = [];\n _this2.progress = 0;\n _this2.state = 1\n /* Inactive */\n ;\n })();\n }\n\n setupiOSNativeRefresher(pullingSpinner, refreshingSpinner) {\n var _this3 = this;\n\n return _asyncToGenerator(function* () {\n _this3.elementToTransform = _this3.scrollEl;\n const ticks = pullingSpinner.shadowRoot.querySelectorAll('svg');\n let MAX_PULL = _this3.scrollEl.clientHeight * 0.16;\n const NUM_TICKS = ticks.length;\n writeTask(() => ticks.forEach(el => el.style.setProperty('animation', 'none')));\n\n _this3.scrollListenerCallback = () => {\n // If pointer is not on screen or refresher is not active, ignore scroll\n if (!_this3.pointerDown && _this3.state === 1\n /* Inactive */\n ) {\n return;\n }\n\n readTask(() => {\n // PTR should only be active when overflow scrolling at the top\n const scrollTop = _this3.scrollEl.scrollTop;\n const refresherHeight = _this3.el.clientHeight;\n\n if (scrollTop > 0) {\n /**\n * If refresher is refreshing and user tries to scroll\n * progressively fade refresher out/in\n */\n if (_this3.state === 8\n /* Refreshing */\n ) {\n const ratio = clamp(0, scrollTop / (refresherHeight * 0.5), 1);\n writeTask(() => setSpinnerOpacity(refreshingSpinner, 1 - ratio));\n return;\n }\n\n return;\n }\n\n if (_this3.pointerDown) {\n if (!_this3.didStart) {\n _this3.didStart = true;\n\n _this3.ionStart.emit();\n } // emit \"pulling\" on every move\n\n\n if (_this3.pointerDown) {\n _this3.ionPull.emit();\n }\n }\n /**\n * We want to delay the start of this gesture by ~30px\n * when initially pulling down so the refresher does not\n * overlap with the content. But when letting go of the\n * gesture before the refresher completes, we want the\n * refresher tick marks to quickly fade out.\n */\n\n\n const offset = _this3.didStart ? 30 : 0;\n const pullAmount = _this3.progress = clamp(0, (Math.abs(scrollTop) - offset) / MAX_PULL, 1);\n const shouldShowRefreshingSpinner = _this3.state === 8\n /* Refreshing */\n || pullAmount === 1;\n\n if (shouldShowRefreshingSpinner) {\n if (_this3.pointerDown) {\n handleScrollWhileRefreshing(refreshingSpinner, _this3.lastVelocityY);\n }\n\n if (!_this3.didRefresh) {\n _this3.beginRefresh();\n\n _this3.didRefresh = true;\n hapticImpact({\n style: 'light'\n });\n /**\n * Translate the content element otherwise when pointer is removed\n * from screen the scroll content will bounce back over the refresher\n */\n\n if (!_this3.pointerDown) {\n translateElement(_this3.elementToTransform, `${refresherHeight}px`);\n }\n }\n } else {\n _this3.state = 2\n /* Pulling */\n ;\n handleScrollWhilePulling(ticks, NUM_TICKS, pullAmount);\n }\n });\n };\n\n _this3.scrollEl.addEventListener('scroll', _this3.scrollListenerCallback);\n\n _this3.gesture = (yield import('./index-3f1a7d95.js')).createGesture({\n el: _this3.scrollEl,\n gestureName: 'refresher',\n gesturePriority: 31,\n direction: 'y',\n threshold: 5,\n onStart: () => {\n _this3.pointerDown = true;\n\n if (!_this3.didRefresh) {\n translateElement(_this3.elementToTransform, '0px');\n }\n /**\n * If the content had `display: none` when\n * the refresher was initialized, its clientHeight\n * will be 0. When the gesture starts, the content\n * will be visible, so try to get the correct\n * client height again. This is most common when\n * using the refresher in an ion-menu.\n */\n\n\n if (MAX_PULL === 0) {\n MAX_PULL = _this3.scrollEl.clientHeight * 0.16;\n }\n },\n onMove: ev => {\n _this3.lastVelocityY = ev.velocityY;\n },\n onEnd: () => {\n _this3.pointerDown = false;\n _this3.didStart = false;\n\n if (_this3.needsCompletion) {\n _this3.resetNativeRefresher(_this3.elementToTransform, 32\n /* Completing */\n );\n\n _this3.needsCompletion = false;\n } else if (_this3.didRefresh) {\n readTask(() => translateElement(_this3.elementToTransform, `${_this3.el.clientHeight}px`));\n }\n }\n });\n\n _this3.disabledChanged();\n })();\n }\n\n setupMDNativeRefresher(contentEl, pullingSpinner, refreshingSpinner) {\n var _this4 = this;\n\n return _asyncToGenerator(function* () {\n const circle = getElementRoot(pullingSpinner).querySelector('circle');\n\n const pullingRefresherIcon = _this4.el.querySelector('ion-refresher-content .refresher-pulling-icon');\n\n const refreshingCircle = getElementRoot(refreshingSpinner).querySelector('circle');\n\n if (circle !== null && refreshingCircle !== null) {\n writeTask(() => {\n circle.style.setProperty('animation', 'none'); // This lines up the animation on the refreshing spinner with the pulling spinner\n\n refreshingSpinner.style.setProperty('animation-delay', '-655ms');\n refreshingCircle.style.setProperty('animation-delay', '-655ms');\n });\n }\n\n _this4.gesture = (yield import('./index-3f1a7d95.js')).createGesture({\n el: _this4.scrollEl,\n gestureName: 'refresher',\n gesturePriority: 31,\n direction: 'y',\n threshold: 5,\n canStart: () => _this4.state !== 8\n /* Refreshing */\n && _this4.state !== 32\n /* Completing */\n && _this4.scrollEl.scrollTop === 0,\n onStart: ev => {\n _this4.progress = 0;\n ev.data = {\n animation: undefined,\n didStart: false,\n cancelled: false\n };\n },\n onMove: ev => {\n if (ev.velocityY < 0 && _this4.progress === 0 && !ev.data.didStart || ev.data.cancelled) {\n ev.data.cancelled = true;\n return;\n }\n\n if (!ev.data.didStart) {\n ev.data.didStart = true;\n _this4.state = 2\n /* Pulling */\n ;\n writeTask(() => _this4.scrollEl.style.setProperty('--overflow', 'hidden'));\n const animationType = getRefresherAnimationType(contentEl);\n const animation = createPullingAnimation(animationType, pullingRefresherIcon, _this4.el);\n ev.data.animation = animation;\n animation.progressStart(false, 0);\n\n _this4.ionStart.emit();\n\n _this4.animations.push(animation);\n\n return;\n } // Since we are using an easing curve, slow the gesture tracking down a bit\n\n\n _this4.progress = clamp(0, ev.deltaY / 180 * 0.5, 1);\n ev.data.animation.progressStep(_this4.progress);\n\n _this4.ionPull.emit();\n },\n onEnd: ev => {\n if (!ev.data.didStart) {\n return;\n }\n\n _this4.gesture.enable(false);\n\n writeTask(() => _this4.scrollEl.style.removeProperty('--overflow'));\n\n if (_this4.progress <= 0.4) {\n ev.data.animation.progressEnd(0, _this4.progress, 500).onFinish(() => {\n _this4.animations.forEach(ani => ani.destroy());\n\n _this4.animations = [];\n\n _this4.gesture.enable(true);\n\n _this4.state = 1\n /* Inactive */\n ;\n });\n return;\n }\n\n const progress = getTimeGivenProgression([0, 0], [0, 0], [1, 1], [1, 1], _this4.progress)[0];\n const snapBackAnimation = createSnapBackAnimation(pullingRefresherIcon);\n\n _this4.animations.push(snapBackAnimation);\n\n writeTask( /*#__PURE__*/_asyncToGenerator(function* () {\n pullingRefresherIcon.style.setProperty('--ion-pulling-refresher-translate', `${progress * 100}px`);\n ev.data.animation.progressEnd();\n yield snapBackAnimation.play();\n\n _this4.beginRefresh();\n\n ev.data.animation.destroy();\n\n _this4.gesture.enable(true);\n }));\n }\n });\n\n _this4.disabledChanged();\n })();\n }\n\n setupNativeRefresher(contentEl) {\n var _this5 = this;\n\n return _asyncToGenerator(function* () {\n if (_this5.scrollListenerCallback || !contentEl || _this5.nativeRefresher || !_this5.scrollEl) {\n return;\n }\n /**\n * If using non-native refresher before make sure\n * we clean up any old CSS. This can happen when\n * a user manually calls the refresh method in a\n * component create callback before the native\n * refresher is setup.\n */\n\n\n _this5.setCss(0, '', false, '');\n\n _this5.nativeRefresher = true;\n\n const pullingSpinner = _this5.el.querySelector('ion-refresher-content .refresher-pulling ion-spinner');\n\n const refreshingSpinner = _this5.el.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');\n\n if (getIonMode(_this5) === 'ios') {\n _this5.setupiOSNativeRefresher(pullingSpinner, refreshingSpinner);\n } else {\n _this5.setupMDNativeRefresher(contentEl, pullingSpinner, refreshingSpinner);\n }\n })();\n }\n\n componentDidUpdate() {\n this.checkNativeRefresher();\n }\n\n connectedCallback() {\n var _this6 = this;\n\n return _asyncToGenerator(function* () {\n if (_this6.el.getAttribute('slot') !== 'fixed') {\n console.error('Make sure you use: <ion-refresher slot=\"fixed\">');\n return;\n }\n\n const contentEl = _this6.el.closest(ION_CONTENT_ELEMENT_SELECTOR);\n\n if (!contentEl) {\n printIonContentErrorMsg(_this6.el);\n return;\n }\n /**\n * Waits for the content to be ready before querying the scroll\n * or the background content element.\n */\n\n\n componentOnReady(contentEl, /*#__PURE__*/_asyncToGenerator(function* () {\n const customScrollTarget = contentEl.querySelector(ION_CONTENT_CLASS_SELECTOR);\n /**\n * Query the custom scroll target (if available), first. In refresher implementations,\n * the ion-refresher element will always be a direct child of ion-content (slot=\"fixed\"). By\n * querying the custom scroll target first and falling back to the ion-content element,\n * the correct scroll element will be returned by the implementation.\n */\n\n _this6.scrollEl = yield getScrollElement(customScrollTarget !== null && customScrollTarget !== void 0 ? customScrollTarget : contentEl);\n /**\n * Query the background content element from the host ion-content element directly.\n */\n\n _this6.backgroundContentEl = yield contentEl.getBackgroundElement();\n\n if (yield shouldUseNativeRefresher(_this6.el, getIonMode(_this6))) {\n _this6.setupNativeRefresher(contentEl);\n } else {\n _this6.gesture = (yield import('./index-3f1a7d95.js')).createGesture({\n el: contentEl,\n gestureName: 'refresher',\n gesturePriority: 31,\n direction: 'y',\n threshold: 20,\n passive: false,\n canStart: () => _this6.canStart(),\n onStart: () => _this6.onStart(),\n onMove: ev => _this6.onMove(ev),\n onEnd: () => _this6.onEnd()\n });\n\n _this6.disabledChanged();\n }\n }));\n })();\n }\n\n disconnectedCallback() {\n this.destroyNativeRefresher();\n this.scrollEl = undefined;\n\n if (this.gesture) {\n this.gesture.destroy();\n this.gesture = undefined;\n }\n }\n /**\n * Call `complete()` when your async operation has completed.\n * For example, the `refreshing` state is while the app is performing\n * an asynchronous operation, such as receiving more data from an\n * AJAX request. Once the data has been received, you then call this\n * method to signify that the refreshing has completed and to close\n * the refresher. This method also changes the refresher's state from\n * `refreshing` to `completing`.\n */\n\n\n complete() {\n var _this7 = this;\n\n return _asyncToGenerator(function* () {\n if (_this7.nativeRefresher) {\n _this7.needsCompletion = true; // Do not reset scroll el until user removes pointer from screen\n\n if (!_this7.pointerDown) {\n raf(() => raf(() => _this7.resetNativeRefresher(_this7.elementToTransform, 32\n /* Completing */\n )));\n }\n } else {\n _this7.close(32\n /* Completing */\n , '120ms');\n }\n })();\n }\n /**\n * Changes the refresher's state from `refreshing` to `cancelling`.\n */\n\n\n cancel() {\n var _this8 = this;\n\n return _asyncToGenerator(function* () {\n if (_this8.nativeRefresher) {\n // Do not reset scroll el until user removes pointer from screen\n if (!_this8.pointerDown) {\n raf(() => raf(() => _this8.resetNativeRefresher(_this8.elementToTransform, 16\n /* Cancelling */\n )));\n }\n } else {\n _this8.close(16\n /* Cancelling */\n , '');\n }\n })();\n }\n /**\n * A number representing how far down the user has pulled.\n * The number `0` represents the user hasn't pulled down at all. The\n * number `1`, and anything greater than `1`, represents that the user\n * has pulled far enough down that when they let go then the refresh will\n * happen. If they let go and the number is less than `1`, then the\n * refresh will not happen, and the content will return to it's original\n * position.\n */\n\n\n getProgress() {\n return Promise.resolve(this.progress);\n }\n\n canStart() {\n if (!this.scrollEl) {\n return false;\n }\n\n if (this.state !== 1\n /* Inactive */\n ) {\n return false;\n } // if the scrollTop is greater than zero then it's\n // not possible to pull the content down yet\n\n\n if (this.scrollEl.scrollTop > 0) {\n return false;\n }\n\n return true;\n }\n\n onStart() {\n this.progress = 0;\n this.state = 1\n /* Inactive */\n ;\n }\n\n onMove(detail) {\n if (!this.scrollEl) {\n return;\n } // this method can get called like a bazillion times per second,\n // so it's built to be as efficient as possible, and does its\n // best to do any DOM read/writes only when absolutely necessary\n // if multi-touch then get out immediately\n\n\n const ev = detail.event;\n\n if (ev.touches && ev.touches.length > 1) {\n return;\n } // do nothing if it's actively refreshing\n // or it's in the way of closing\n // or this was never a startY\n\n\n if ((this.state & 56\n /* _BUSY_ */\n ) !== 0) {\n return;\n }\n\n const pullFactor = Number.isNaN(this.pullFactor) || this.pullFactor < 0 ? 1 : this.pullFactor;\n const deltaY = detail.deltaY * pullFactor; // don't bother if they're scrolling up\n // and have not already started dragging\n\n if (deltaY <= 0) {\n // the current Y is higher than the starting Y\n // so they scrolled up enough to be ignored\n this.progress = 0;\n this.state = 1\n /* Inactive */\n ;\n\n if (this.appliedStyles) {\n // reset the styles only if they were applied\n this.setCss(0, '', false, '');\n return;\n }\n\n return;\n }\n\n if (this.state === 1\n /* Inactive */\n ) {\n // this refresh is not already actively pulling down\n // get the content's scrollTop\n const scrollHostScrollTop = this.scrollEl.scrollTop; // if the scrollTop is greater than zero then it's\n // not possible to pull the content down yet\n\n if (scrollHostScrollTop > 0) {\n this.progress = 0;\n return;\n } // content scrolled all the way to the top, and dragging down\n\n\n this.state = 2\n /* Pulling */\n ;\n } // prevent native scroll events\n\n\n if (ev.cancelable) {\n ev.preventDefault();\n } // the refresher is actively pulling at this point\n // move the scroll element within the content element\n\n\n this.setCss(deltaY, '0ms', true, '');\n\n if (deltaY === 0) {\n // don't continue if there's no delta yet\n this.progress = 0;\n return;\n }\n\n const pullMin = this.pullMin; // set pull progress\n\n this.progress = deltaY / pullMin; // emit \"start\" if it hasn't started yet\n\n if (!this.didStart) {\n this.didStart = true;\n this.ionStart.emit();\n } // emit \"pulling\" on every move\n\n\n this.ionPull.emit(); // do nothing if the delta is less than the pull threshold\n\n if (deltaY < pullMin) {\n // ensure it stays in the pulling state, cuz its not ready yet\n this.state = 2\n /* Pulling */\n ;\n return;\n }\n\n if (deltaY > this.pullMax) {\n // they pulled farther than the max, so kick off the refresh\n this.beginRefresh();\n return;\n } // pulled farther than the pull min!!\n // it is now in the `ready` state!!\n // if they let go then it'll refresh, kerpow!!\n\n\n this.state = 4\n /* Ready */\n ;\n return;\n }\n\n onEnd() {\n // only run in a zone when absolutely necessary\n if (this.state === 4\n /* Ready */\n ) {\n // they pulled down far enough, so it's ready to refresh\n this.beginRefresh();\n } else if (this.state === 2\n /* Pulling */\n ) {\n // they were pulling down, but didn't pull down far enough\n // set the content back to it's original location\n // and close the refresher\n // set that the refresh is actively cancelling\n this.cancel();\n }\n }\n\n beginRefresh() {\n // assumes we're already back in a zone\n // they pulled down far enough, so it's ready to refresh\n this.state = 8\n /* Refreshing */\n ; // place the content in a hangout position while it thinks\n\n this.setCss(this.pullMin, this.snapbackDuration, true, ''); // emit \"refresh\" because it was pulled down far enough\n // and they let go to begin refreshing\n\n this.ionRefresh.emit({\n complete: this.complete.bind(this)\n });\n }\n\n close(state, delay) {\n // create fallback timer incase something goes wrong with transitionEnd event\n setTimeout(() => {\n this.state = 1\n /* Inactive */\n ;\n this.progress = 0;\n this.didStart = false;\n this.setCss(0, '0ms', false, '');\n }, 600); // reset set the styles on the scroll element\n // set that the refresh is actively cancelling/completing\n\n this.state = state;\n this.setCss(0, this.closeDuration, true, delay); // TODO: stop gesture\n }\n\n setCss(y, duration, overflowVisible, delay) {\n if (this.nativeRefresher) {\n return;\n }\n\n this.appliedStyles = y > 0;\n writeTask(() => {\n if (this.scrollEl && this.backgroundContentEl) {\n const scrollStyle = this.scrollEl.style;\n const backgroundStyle = this.backgroundContentEl.style;\n scrollStyle.transform = backgroundStyle.transform = y > 0 ? `translateY(${y}px) translateZ(0px)` : '';\n scrollStyle.transitionDuration = backgroundStyle.transitionDuration = duration;\n scrollStyle.transitionDelay = backgroundStyle.transitionDelay = delay;\n scrollStyle.overflow = overflowVisible ? 'hidden' : '';\n }\n });\n }\n\n render() {\n const mode = getIonMode(this);\n return h(Host, {\n slot: \"fixed\",\n class: {\n [mode]: true,\n // Used internally for styling\n [`refresher-${mode}`]: true,\n 'refresher-native': this.nativeRefresher,\n 'refresher-active': this.state !== 1\n /* Inactive */\n ,\n 'refresher-pulling': this.state === 2\n /* Pulling */\n ,\n 'refresher-ready': this.state === 4\n /* Ready */\n ,\n 'refresher-refreshing': this.state === 8\n /* Refreshing */\n ,\n 'refresher-cancelling': this.state === 16\n /* Cancelling */\n ,\n 'refresher-completing': this.state === 32\n /* Completing */\n\n }\n });\n }\n\n get el() {\n return getElement(this);\n }\n\n static get watchers() {\n return {\n \"disabled\": [\"disabledChanged\"]\n };\n }\n\n};\nRefresher.style = {\n ios: refresherIosCss,\n md: refresherMdCss\n};\nconst RefresherContent = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n }\n\n componentWillLoad() {\n if (this.pullingIcon === undefined) {\n const mode = getIonMode(this);\n const overflowRefresher = this.el.style.webkitOverflowScrolling !== undefined ? 'lines' : arrowDown;\n this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && isPlatform('mobile') ? config.get('spinner', overflowRefresher) : 'circular');\n }\n\n if (this.refreshingSpinner === undefined) {\n const mode = getIonMode(this);\n this.refreshingSpinner = config.get('refreshingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'circular'));\n }\n }\n\n render() {\n const pullingIcon = this.pullingIcon;\n const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;\n const mode = getIonMode(this);\n return h(Host, {\n class: mode\n }, h(\"div\", {\n class: \"refresher-pulling\"\n }, this.pullingIcon && hasSpinner && h(\"div\", {\n class: \"refresher-pulling-icon\"\n }, h(\"div\", {\n class: \"spinner-arrow-container\"\n }, h(\"ion-spinner\", {\n name: this.pullingIcon,\n paused: true\n }), mode === 'md' && this.pullingIcon === 'circular' && h(\"div\", {\n class: \"arrow-container\"\n }, h(\"ion-icon\", {\n icon: caretBackSharp\n })))), this.pullingIcon && !hasSpinner && h(\"div\", {\n class: \"refresher-pulling-icon\"\n }, h(\"ion-icon\", {\n icon: this.pullingIcon,\n lazy: false\n })), this.pullingText && h(\"div\", {\n class: \"refresher-pulling-text\",\n innerHTML: sanitizeDOMString(this.pullingText)\n })), h(\"div\", {\n class: \"refresher-refreshing\"\n }, this.refreshingSpinner && h(\"div\", {\n class: \"refresher-refreshing-icon\"\n }, h(\"ion-spinner\", {\n name: this.refreshingSpinner\n })), this.refreshingText && h(\"div\", {\n class: \"refresher-refreshing-text\",\n innerHTML: sanitizeDOMString(this.refreshingText)\n })));\n }\n\n get el() {\n return getElement(this);\n }\n\n};\nexport { Refresher as ion_refresher, RefresherContent as ion_refresher_content };","map":{"version":3,"names":["c","writeTask","r","registerInstance","e","createEvent","f","readTask","h","i","getElement","H","Host","a","isPlatform","b","getIonMode","config","g","getTimeGivenProgression","I","ION_CONTENT_ELEMENT_SELECTOR","p","printIonContentErrorMsg","ION_CONTENT_CLASS_SELECTOR","getScrollElement","t","transitionEndAsync","componentOnReady","l","clamp","getElementRoot","raf","d","hapticImpact","createAnimation","caretBackSharp","arrowDown","s","sanitizeDOMString","S","SPINNERS","getRefresherAnimationType","contentEl","previousSibling","previousElementSibling","hasHeader","tagName","createPullingAnimation","type","pullingSpinner","refresherEl","createScaleAnimation","createTranslateAnimation","createBaseAnimation","pullingRefresherIcon","spinner","querySelector","circle","shadowRoot","spinnerArrowContainer","arrowContainer","arrow","baseAnimation","duration","easing","spinnerArrowContainerAnimation","addElement","keyframes","offset","opacity","circleInnerAnimation","strokeDasharray","circleOuterAnimation","transform","arrowContainerAnimation","arrowAnimation","addAnimation","height","clientHeight","spinnerAnimation","createSnapBackAnimation","fromTo","setSpinnerOpacity","style","setProperty","toString","handleScrollWhilePulling","ticks","numTicks","pullAmount","max","forEach","el","min","range","start","progression","handleScrollWhileRefreshing","lastVelocityY","translateElement","value","Promise","resolve","trans","undefined","removeProperty","shouldUseNativeRefresher","referenceEl","mode","refresherContent","refreshingSpinner","webkitOverflowScrolling","refresherIosCss","refresherMdCss","Refresher","constructor","hostRef","ionRefresh","ionPull","ionStart","appliedStyles","didStart","progress","pointerDown","needsCompletion","didRefresh","animations","nativeRefresher","state","pullMin","pullMax","closeDuration","snapbackDuration","pullFactor","disabled","disabledChanged","gesture","enable","checkNativeRefresher","useNativeRefresher","closest","setupNativeRefresher","destroyNativeRefresher","scrollEl","scrollListenerCallback","removeEventListener","resetNativeRefresher","ani","destroy","setupiOSNativeRefresher","elementToTransform","querySelectorAll","MAX_PULL","NUM_TICKS","length","scrollTop","refresherHeight","ratio","emit","Math","abs","shouldShowRefreshingSpinner","beginRefresh","addEventListener","createGesture","gestureName","gesturePriority","direction","threshold","onStart","onMove","ev","velocityY","onEnd","setupMDNativeRefresher","refreshingCircle","canStart","data","animation","cancelled","animationType","progressStart","push","deltaY","progressStep","progressEnd","onFinish","snapBackAnimation","play","setCss","componentDidUpdate","connectedCallback","getAttribute","console","error","customScrollTarget","backgroundContentEl","getBackgroundElement","passive","disconnectedCallback","complete","close","cancel","getProgress","detail","event","touches","Number","isNaN","scrollHostScrollTop","cancelable","preventDefault","bind","delay","setTimeout","y","overflowVisible","scrollStyle","backgroundStyle","transitionDuration","transitionDelay","overflow","render","slot","class","watchers","ios","md","RefresherContent","componentWillLoad","pullingIcon","overflowRefresher","get","hasSpinner","name","paused","icon","lazy","pullingText","innerHTML","refreshingText","ion_refresher","ion_refresher_content"],"sources":["D:/MobileDev/WRB/WrenchBoard2023a/node_modules/@ionic/core/dist/esm/ion-refresher_2.entry.js"],"sourcesContent":["/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { c as writeTask, r as registerInstance, e as createEvent, f as readTask, h, i as getElement, H as Host } from './index-1a99aeb7.js';\nimport { a as isPlatform, b as getIonMode, c as config } from './ionic-global-04e268e7.js';\nimport { g as getTimeGivenProgression } from './cubic-bezier-c313947a.js';\nimport { I as ION_CONTENT_ELEMENT_SELECTOR, p as printIonContentErrorMsg, b as ION_CONTENT_CLASS_SELECTOR, g as getScrollElement } from './index-3413f7be.js';\nimport { t as transitionEndAsync, c as componentOnReady, l as clamp, g as getElementRoot, r as raf } from './helpers-4d272360.js';\nimport { d as hapticImpact } from './haptic-683b3b3c.js';\nimport { c as createAnimation } from './animation-36c1d77d.js';\nimport { h as caretBackSharp, i as arrowDown } from './index-45ecc7ca.js';\nimport { s as sanitizeDOMString } from './index-dff497fb.js';\nimport { S as SPINNERS } from './spinner-configs-5d6b6fe7.js';\nimport './index-c4b11676.js';\n\nconst getRefresherAnimationType = (contentEl) => {\n const previousSibling = contentEl.previousElementSibling;\n const hasHeader = previousSibling !== null && previousSibling.tagName === 'ION-HEADER';\n return hasHeader ? 'translate' : 'scale';\n};\nconst createPullingAnimation = (type, pullingSpinner, refresherEl) => {\n return type === 'scale'\n ? createScaleAnimation(pullingSpinner, refresherEl)\n : createTranslateAnimation(pullingSpinner, refresherEl);\n};\nconst createBaseAnimation = (pullingRefresherIcon) => {\n const spinner = pullingRefresherIcon.querySelector('ion-spinner');\n const circle = spinner.shadowRoot.querySelector('circle');\n const spinnerArrowContainer = pullingRefresherIcon.querySelector('.spinner-arrow-container');\n const arrowContainer = pullingRefresherIcon.querySelector('.arrow-container');\n const arrow = arrowContainer ? arrowContainer.querySelector('ion-icon') : null;\n const baseAnimation = createAnimation().duration(1000).easing('ease-out');\n const spinnerArrowContainerAnimation = createAnimation()\n .addElement(spinnerArrowContainer)\n .keyframes([\n { offset: 0, opacity: '0.3' },\n { offset: 0.45, opacity: '0.3' },\n { offset: 0.55, opacity: '1' },\n { offset: 1, opacity: '1' },\n ]);\n const circleInnerAnimation = createAnimation()\n .addElement(circle)\n .keyframes([\n { offset: 0, strokeDasharray: '1px, 200px' },\n { offset: 0.2, strokeDasharray: '1px, 200px' },\n { offset: 0.55, strokeDasharray: '100px, 200px' },\n { offset: 1, strokeDasharray: '100px, 200px' },\n ]);\n const circleOuterAnimation = createAnimation()\n .addElement(spinner)\n .keyframes([\n { offset: 0, transform: 'rotate(-90deg)' },\n { offset: 1, transform: 'rotate(210deg)' },\n ]);\n /**\n * Only add arrow animation if present\n * this allows users to customize the spinners\n * without errors being thrown\n */\n if (arrowContainer && arrow) {\n const arrowContainerAnimation = createAnimation()\n .addElement(arrowContainer)\n .keyframes([\n { offset: 0, transform: 'rotate(0deg)' },\n { offset: 0.3, transform: 'rotate(0deg)' },\n { offset: 0.55, transform: 'rotate(280deg)' },\n { offset: 1, transform: 'rotate(400deg)' },\n ]);\n const arrowAnimation = createAnimation()\n .addElement(arrow)\n .keyframes([\n { offset: 0, transform: 'translateX(2px) scale(0)' },\n { offset: 0.3, transform: 'translateX(2px) scale(0)' },\n { offset: 0.55, transform: 'translateX(-1.5px) scale(1)' },\n { offset: 1, transform: 'translateX(-1.5px) scale(1)' },\n ]);\n baseAnimation.addAnimation([arrowContainerAnimation, arrowAnimation]);\n }\n return baseAnimation.addAnimation([spinnerArrowContainerAnimation, circleInnerAnimation, circleOuterAnimation]);\n};\nconst createScaleAnimation = (pullingRefresherIcon, refresherEl) => {\n /**\n * Do not take the height of the refresher icon\n * because at this point the DOM has not updated,\n * so the refresher icon is still hidden with\n * display: none.\n * The `ion-refresher` container height\n * is roughly the amount we need to offset\n * the icon by when pulling down.\n */\n const height = refresherEl.clientHeight;\n const spinnerAnimation = createAnimation()\n .addElement(pullingRefresherIcon)\n .keyframes([\n { offset: 0, transform: `scale(0) translateY(-${height}px)` },\n { offset: 1, transform: 'scale(1) translateY(100px)' },\n ]);\n return createBaseAnimation(pullingRefresherIcon).addAnimation([spinnerAnimation]);\n};\nconst createTranslateAnimation = (pullingRefresherIcon, refresherEl) => {\n /**\n * Do not take the height of the refresher icon\n * because at this point the DOM has not updated,\n * so the refresher icon is still hidden with\n * display: none.\n * The `ion-refresher` container height\n * is roughly the amount we need to offset\n * the icon by when pulling down.\n */\n const height = refresherEl.clientHeight;\n const spinnerAnimation = createAnimation()\n .addElement(pullingRefresherIcon)\n .keyframes([\n { offset: 0, transform: `translateY(-${height}px)` },\n { offset: 1, transform: 'translateY(100px)' },\n ]);\n return createBaseAnimation(pullingRefresherIcon).addAnimation([spinnerAnimation]);\n};\nconst createSnapBackAnimation = (pullingRefresherIcon) => {\n return createAnimation()\n .duration(125)\n .addElement(pullingRefresherIcon)\n .fromTo('transform', 'translateY(var(--ion-pulling-refresher-translate, 100px))', 'translateY(0px)');\n};\n// iOS Native Refresher\n// -----------------------------\nconst setSpinnerOpacity = (spinner, opacity) => {\n spinner.style.setProperty('opacity', opacity.toString());\n};\nconst handleScrollWhilePulling = (ticks, numTicks, pullAmount) => {\n const max = 1;\n writeTask(() => {\n ticks.forEach((el, i) => {\n /**\n * Compute the opacity of each tick\n * mark as a percentage of the pullAmount\n * offset by max / numTicks so\n * the tick marks are shown staggered.\n */\n const min = i * (max / numTicks);\n const range = max - min;\n const start = pullAmount - min;\n const progression = clamp(0, start / range, 1);\n el.style.setProperty('opacity', progression.toString());\n });\n });\n};\nconst handleScrollWhileRefreshing = (spinner, lastVelocityY) => {\n writeTask(() => {\n // If user pulls down quickly, the spinner should spin faster\n spinner.style.setProperty('--refreshing-rotation-duration', lastVelocityY >= 1.0 ? '0.5s' : '2s');\n spinner.style.setProperty('opacity', '1');\n });\n};\nconst translateElement = (el, value, duration = 200) => {\n if (!el) {\n return Promise.resolve();\n }\n const trans = transitionEndAsync(el, duration);\n writeTask(() => {\n el.style.setProperty('transition', `${duration}ms all ease-out`);\n if (value === undefined) {\n el.style.removeProperty('transform');\n }\n else {\n el.style.setProperty('transform', `translate3d(0px, ${value}, 0px)`);\n }\n });\n return trans;\n};\n// Utils\n// -----------------------------\nconst shouldUseNativeRefresher = async (referenceEl, mode) => {\n const refresherContent = referenceEl.querySelector('ion-refresher-content');\n if (!refresherContent) {\n return Promise.resolve(false);\n }\n await new Promise((resolve) => componentOnReady(refresherContent, resolve));\n const pullingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-pulling ion-spinner');\n const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');\n return (pullingSpinner !== null &&\n refreshingSpinner !== null &&\n ((mode === 'ios' && isPlatform('mobile') && referenceEl.style.webkitOverflowScrolling !== undefined) ||\n mode === 'md'));\n};\n\nconst refresherIosCss = \"ion-refresher{left:0;top:0;display:none;position:absolute;width:100%;height:60px;pointer-events:none;z-index:-1}[dir=rtl] ion-refresher,:host-context([dir=rtl]) ion-refresher{left:unset;right:unset;right:0}ion-refresher.refresher-active{display:block}ion-refresher-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.refresher-pulling,.refresher-refreshing{display:none;width:100%}.refresher-pulling-icon,.refresher-refreshing-icon{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:200ms;transition:200ms;font-size:30px;text-align:center}[dir=rtl] .refresher-pulling-icon,:host-context([dir=rtl]) .refresher-pulling-icon,[dir=rtl] .refresher-refreshing-icon,:host-context([dir=rtl]) .refresher-refreshing-icon{-webkit-transform-origin:calc(100% - center);transform-origin:calc(100% - center)}.refresher-pulling-text,.refresher-refreshing-text{font-size:16px;text-align:center}ion-refresher-content .arrow-container{display:none}.refresher-pulling ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.refresher-refreshing ion-refresher-content .refresher-refreshing{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-completing ion-refresher-content .refresher-refreshing{display:block}.refresher-completing ion-refresher-content .refresher-refreshing-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-native .refresher-pulling-text,.refresher-native .refresher-refreshing-text{display:none}.refresher-ios .refresher-pulling-icon,.refresher-ios .refresher-refreshing-icon{color:var(--ion-text-color, #000)}.refresher-ios .refresher-pulling-text,.refresher-ios .refresher-refreshing-text{color:var(--ion-text-color, #000)}.refresher-ios .refresher-refreshing .spinner-lines-ios line,.refresher-ios .refresher-refreshing .spinner-lines-small-ios line,.refresher-ios .refresher-refreshing .spinner-crescent circle{stroke:var(--ion-text-color, #000)}.refresher-ios .refresher-refreshing .spinner-bubbles circle,.refresher-ios .refresher-refreshing .spinner-circles circle,.refresher-ios .refresher-refreshing .spinner-dots circle{fill:var(--ion-text-color, #000)}ion-refresher.refresher-native{display:block;z-index:1}ion-refresher.refresher-native ion-spinner{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native ion-spinner{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}.refresher-native .refresher-refreshing ion-spinner{--refreshing-rotation-duration:2s;display:none;-webkit-animation:var(--refreshing-rotation-duration) ease-out refresher-rotate forwards;animation:var(--refreshing-rotation-duration) ease-out refresher-rotate forwards}.refresher-native .refresher-refreshing{display:none;-webkit-animation:250ms linear refresher-pop forwards;animation:250ms linear refresher-pop forwards}.refresher-native ion-spinner{width:32px;height:32px;color:var(--ion-color-step-450, #747577)}.refresher-native.refresher-refreshing .refresher-pulling ion-spinner,.refresher-native.refresher-completing .refresher-pulling ion-spinner{display:none}.refresher-native.refresher-refreshing .refresher-refreshing ion-spinner,.refresher-native.refresher-completing .refresher-refreshing ion-spinner{display:block}.refresher-native.refresher-pulling .refresher-pulling ion-spinner{display:block}.refresher-native.refresher-pulling .refresher-refreshing ion-spinner{display:none}.refresher-native.refresher-completing ion-refresher-content .refresher-refreshing-icon{-webkit-transform:scale(0) rotate(180deg);transform:scale(0) rotate(180deg);-webkit-transition:300ms;transition:300ms}@-webkit-keyframes refresher-pop{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes refresher-pop{0%{-webkit-transform:scale(1);transform:scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}50%{-webkit-transform:scale(1.2);transform:scale(1.2);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes refresher-rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}@keyframes refresher-rotate{from{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(180deg);transform:rotate(180deg)}}\";\n\nconst refresherMdCss = \"ion-refresher{left:0;top:0;display:none;position:absolute;width:100%;height:60px;pointer-events:none;z-index:-1}[dir=rtl] ion-refresher,:host-context([dir=rtl]) ion-refresher{left:unset;right:unset;right:0}ion-refresher.refresher-active{display:block}ion-refresher-content{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.refresher-pulling,.refresher-refreshing{display:none;width:100%}.refresher-pulling-icon,.refresher-refreshing-icon{-webkit-transform-origin:center;transform-origin:center;-webkit-transition:200ms;transition:200ms;font-size:30px;text-align:center}[dir=rtl] .refresher-pulling-icon,:host-context([dir=rtl]) .refresher-pulling-icon,[dir=rtl] .refresher-refreshing-icon,:host-context([dir=rtl]) .refresher-refreshing-icon{-webkit-transform-origin:calc(100% - center);transform-origin:calc(100% - center)}.refresher-pulling-text,.refresher-refreshing-text{font-size:16px;text-align:center}ion-refresher-content .arrow-container{display:none}.refresher-pulling ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling{display:block}.refresher-ready ion-refresher-content .refresher-pulling-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.refresher-refreshing ion-refresher-content .refresher-refreshing{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling{display:block}.refresher-cancelling ion-refresher-content .refresher-pulling-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-completing ion-refresher-content .refresher-refreshing{display:block}.refresher-completing ion-refresher-content .refresher-refreshing-icon{-webkit-transform:scale(0);transform:scale(0)}.refresher-native .refresher-pulling-text,.refresher-native .refresher-refreshing-text{display:none}.refresher-md .refresher-pulling-icon,.refresher-md .refresher-refreshing-icon{color:var(--ion-text-color, #000)}.refresher-md .refresher-pulling-text,.refresher-md .refresher-refreshing-text{color:var(--ion-text-color, #000)}.refresher-md .refresher-refreshing .spinner-lines-md line,.refresher-md .refresher-refreshing .spinner-lines-small-md line,.refresher-md .refresher-refreshing .spinner-crescent circle{stroke:var(--ion-text-color, #000)}.refresher-md .refresher-refreshing .spinner-bubbles circle,.refresher-md .refresher-refreshing .spinner-circles circle,.refresher-md .refresher-refreshing .spinner-dots circle{fill:var(--ion-text-color, #000)}ion-refresher.refresher-native{display:block;z-index:1}ion-refresher.refresher-native ion-spinner{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;width:24px;height:24px;color:var(--ion-color-primary, #3880ff)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native ion-spinner{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}ion-refresher.refresher-native .spinner-arrow-container{display:inherit}ion-refresher.refresher-native .arrow-container{display:block;position:absolute;width:24px;height:24px}ion-refresher.refresher-native .arrow-container ion-icon{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;left:0;right:0;bottom:-4px;position:absolute;color:var(--ion-color-primary, #3880ff);font-size:12px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native .arrow-container ion-icon{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}ion-refresher.refresher-native.refresher-pulling ion-refresher-content .refresher-pulling,ion-refresher.refresher-native.refresher-ready ion-refresher-content .refresher-pulling{display:-ms-flexbox;display:flex}ion-refresher.refresher-native.refresher-refreshing ion-refresher-content .refresher-refreshing,ion-refresher.refresher-native.refresher-completing ion-refresher-content .refresher-refreshing,ion-refresher.refresher-native.refresher-cancelling ion-refresher-content .refresher-refreshing{display:-ms-flexbox;display:flex}ion-refresher.refresher-native .refresher-pulling-icon{-webkit-transform:translateY(calc(-100% - 10px));transform:translateY(calc(-100% - 10px))}ion-refresher.refresher-native .refresher-pulling-icon,ion-refresher.refresher-native .refresher-refreshing-icon{margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;border-radius:100%;padding-left:8px;padding-right:8px;padding-top:8px;padding-bottom:8px;display:-ms-flexbox;display:flex;border:1px solid var(--ion-color-step-200, #ececec);background:var(--ion-color-step-250, #ffffff);-webkit-box-shadow:0px 1px 6px rgba(0, 0, 0, 0.1);box-shadow:0px 1px 6px rgba(0, 0, 0, 0.1)}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native .refresher-pulling-icon,ion-refresher.refresher-native .refresher-refreshing-icon{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){ion-refresher.refresher-native .refresher-pulling-icon,ion-refresher.refresher-native .refresher-refreshing-icon{padding-left:unset;padding-right:unset;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px}}\";\n\nconst Refresher = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionRefresh = createEvent(this, \"ionRefresh\", 7);\n this.ionPull = createEvent(this, \"ionPull\", 7);\n this.ionStart = createEvent(this, \"ionStart\", 7);\n this.appliedStyles = false;\n this.didStart = false;\n this.progress = 0;\n this.pointerDown = false;\n this.needsCompletion = false;\n this.didRefresh = false;\n this.lastVelocityY = 0;\n this.animations = [];\n this.nativeRefresher = false;\n /**\n * The current state which the refresher is in. The refresher's states include:\n *\n * - `inactive` - The refresher is not being pulled down or refreshing and is currently hidden.\n * - `pulling` - The user is actively pulling down the refresher, but has not reached the point yet that if the user lets go, it'll refresh.\n * - `cancelling` - The user pulled down the refresher and let go, but did not pull down far enough to kick off the `refreshing` state. After letting go, the refresher is in the `cancelling` state while it is closing, and will go back to the `inactive` state once closed.\n * - `ready` - The user has pulled down the refresher far enough that if they let go, it'll begin the `refreshing` state.\n * - `refreshing` - The refresher is actively waiting on the async operation to end. Once the refresh handler calls `complete()` it will begin the `completing` state.\n * - `completing` - The `refreshing` state has finished and the refresher is in the way of closing itself. Once closed, the refresher will go back to the `inactive` state.\n */\n this.state = 1 /* Inactive */;\n /**\n * The minimum distance the user must pull down until the\n * refresher will go into the `refreshing` state.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n this.pullMin = 60;\n /**\n * The maximum distance of the pull until the refresher\n * will automatically go into the `refreshing` state.\n * Defaults to the result of `pullMin + 60`.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n this.pullMax = this.pullMin + 60;\n /**\n * Time it takes to close the refresher.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n this.closeDuration = '280ms';\n /**\n * Time it takes the refresher to snap back to the `refreshing` state.\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n this.snapbackDuration = '280ms';\n /**\n * How much to multiply the pull speed by. To slow the pull animation down,\n * pass a number less than `1`. To speed up the pull, pass a number greater\n * than `1`. The default value is `1` which is equal to the speed of the cursor.\n * If a negative value is passed in, the factor will be `1` instead.\n *\n * For example: If the value passed is `1.2` and the content is dragged by\n * `10` pixels, instead of `10` pixels the content will be pulled by `12` pixels\n * (an increase of 20 percent). If the value passed is `0.8`, the dragged amount\n * will be `8` pixels, less than the amount the cursor has moved.\n *\n * Does not apply when the refresher content uses a spinner,\n * enabling the native refresher.\n */\n this.pullFactor = 1;\n /**\n * If `true`, the refresher will be hidden.\n */\n this.disabled = false;\n }\n disabledChanged() {\n if (this.gesture) {\n this.gesture.enable(!this.disabled);\n }\n }\n async checkNativeRefresher() {\n const useNativeRefresher = await shouldUseNativeRefresher(this.el, getIonMode(this));\n if (useNativeRefresher && !this.nativeRefresher) {\n const contentEl = this.el.closest('ion-content');\n this.setupNativeRefresher(contentEl);\n }\n else if (!useNativeRefresher) {\n this.destroyNativeRefresher();\n }\n }\n destroyNativeRefresher() {\n if (this.scrollEl && this.scrollListenerCallback) {\n this.scrollEl.removeEventListener('scroll', this.scrollListenerCallback);\n this.scrollListenerCallback = undefined;\n }\n this.nativeRefresher = false;\n }\n async resetNativeRefresher(el, state) {\n this.state = state;\n if (getIonMode(this) === 'ios') {\n await translateElement(el, undefined, 300);\n }\n else {\n await transitionEndAsync(this.el.querySelector('.refresher-refreshing-icon'), 200);\n }\n this.didRefresh = false;\n this.needsCompletion = false;\n this.pointerDown = false;\n this.animations.forEach((ani) => ani.destroy());\n this.animations = [];\n this.progress = 0;\n this.state = 1 /* Inactive */;\n }\n async setupiOSNativeRefresher(pullingSpinner, refreshingSpinner) {\n this.elementToTransform = this.scrollEl;\n const ticks = pullingSpinner.shadowRoot.querySelectorAll('svg');\n let MAX_PULL = this.scrollEl.clientHeight * 0.16;\n const NUM_TICKS = ticks.length;\n writeTask(() => ticks.forEach((el) => el.style.setProperty('animation', 'none')));\n this.scrollListenerCallback = () => {\n // If pointer is not on screen or refresher is not active, ignore scroll\n if (!this.pointerDown && this.state === 1 /* Inactive */) {\n return;\n }\n readTask(() => {\n // PTR should only be active when overflow scrolling at the top\n const scrollTop = this.scrollEl.scrollTop;\n const refresherHeight = this.el.clientHeight;\n if (scrollTop > 0) {\n /**\n * If refresher is refreshing and user tries to scroll\n * progressively fade refresher out/in\n */\n if (this.state === 8 /* Refreshing */) {\n const ratio = clamp(0, scrollTop / (refresherHeight * 0.5), 1);\n writeTask(() => setSpinnerOpacity(refreshingSpinner, 1 - ratio));\n return;\n }\n return;\n }\n if (this.pointerDown) {\n if (!this.didStart) {\n this.didStart = true;\n this.ionStart.emit();\n }\n // emit \"pulling\" on every move\n if (this.pointerDown) {\n this.ionPull.emit();\n }\n }\n /**\n * We want to delay the start of this gesture by ~30px\n * when initially pulling down so the refresher does not\n * overlap with the content. But when letting go of the\n * gesture before the refresher completes, we want the\n * refresher tick marks to quickly fade out.\n */\n const offset = this.didStart ? 30 : 0;\n const pullAmount = (this.progress = clamp(0, (Math.abs(scrollTop) - offset) / MAX_PULL, 1));\n const shouldShowRefreshingSpinner = this.state === 8 /* Refreshing */ || pullAmount === 1;\n if (shouldShowRefreshingSpinner) {\n if (this.pointerDown) {\n handleScrollWhileRefreshing(refreshingSpinner, this.lastVelocityY);\n }\n if (!this.didRefresh) {\n this.beginRefresh();\n this.didRefresh = true;\n hapticImpact({ style: 'light' });\n /**\n * Translate the content element otherwise when pointer is removed\n * from screen the scroll content will bounce back over the refresher\n */\n if (!this.pointerDown) {\n translateElement(this.elementToTransform, `${refresherHeight}px`);\n }\n }\n }\n else {\n this.state = 2 /* Pulling */;\n handleScrollWhilePulling(ticks, NUM_TICKS, pullAmount);\n }\n });\n };\n this.scrollEl.addEventListener('scroll', this.scrollListenerCallback);\n this.gesture = (await import('./index-3f1a7d95.js')).createGesture({\n el: this.scrollEl,\n gestureName: 'refresher',\n gesturePriority: 31,\n direction: 'y',\n threshold: 5,\n onStart: () => {\n this.pointerDown = true;\n if (!this.didRefresh) {\n translateElement(this.elementToTransform, '0px');\n }\n /**\n * If the content had `display: none` when\n * the refresher was initialized, its clientHeight\n * will be 0. When the gesture starts, the content\n * will be visible, so try to get the correct\n * client height again. This is most common when\n * using the refresher in an ion-menu.\n */\n if (MAX_PULL === 0) {\n MAX_PULL = this.scrollEl.clientHeight * 0.16;\n }\n },\n onMove: (ev) => {\n this.lastVelocityY = ev.velocityY;\n },\n onEnd: () => {\n this.pointerDown = false;\n this.didStart = false;\n if (this.needsCompletion) {\n this.resetNativeRefresher(this.elementToTransform, 32 /* Completing */);\n this.needsCompletion = false;\n }\n else if (this.didRefresh) {\n readTask(() => translateElement(this.elementToTransform, `${this.el.clientHeight}px`));\n }\n },\n });\n this.disabledChanged();\n }\n async setupMDNativeRefresher(contentEl, pullingSpinner, refreshingSpinner) {\n const circle = getElementRoot(pullingSpinner).querySelector('circle');\n const pullingRefresherIcon = this.el.querySelector('ion-refresher-content .refresher-pulling-icon');\n const refreshingCircle = getElementRoot(refreshingSpinner).querySelector('circle');\n if (circle !== null && refreshingCircle !== null) {\n writeTask(() => {\n circle.style.setProperty('animation', 'none');\n // This lines up the animation on the refreshing spinner with the pulling spinner\n refreshingSpinner.style.setProperty('animation-delay', '-655ms');\n refreshingCircle.style.setProperty('animation-delay', '-655ms');\n });\n }\n this.gesture = (await import('./index-3f1a7d95.js')).createGesture({\n el: this.scrollEl,\n gestureName: 'refresher',\n gesturePriority: 31,\n direction: 'y',\n threshold: 5,\n canStart: () => this.state !== 8 /* Refreshing */ &&\n this.state !== 32 /* Completing */ &&\n this.scrollEl.scrollTop === 0,\n onStart: (ev) => {\n this.progress = 0;\n ev.data = { animation: undefined, didStart: false, cancelled: false };\n },\n onMove: (ev) => {\n if ((ev.velocityY < 0 && this.progress === 0 && !ev.data.didStart) || ev.data.cancelled) {\n ev.data.cancelled = true;\n return;\n }\n if (!ev.data.didStart) {\n ev.data.didStart = true;\n this.state = 2 /* Pulling */;\n writeTask(() => this.scrollEl.style.setProperty('--overflow', 'hidden'));\n const animationType = getRefresherAnimationType(contentEl);\n const animation = createPullingAnimation(animationType, pullingRefresherIcon, this.el);\n ev.data.animation = animation;\n animation.progressStart(false, 0);\n this.ionStart.emit();\n this.animations.push(animation);\n return;\n }\n // Since we are using an easing curve, slow the gesture tracking down a bit\n this.progress = clamp(0, (ev.deltaY / 180) * 0.5, 1);\n ev.data.animation.progressStep(this.progress);\n this.ionPull.emit();\n },\n onEnd: (ev) => {\n if (!ev.data.didStart) {\n return;\n }\n this.gesture.enable(false);\n writeTask(() => this.scrollEl.style.removeProperty('--overflow'));\n if (this.progress <= 0.4) {\n ev.data.animation.progressEnd(0, this.progress, 500).onFinish(() => {\n this.animations.forEach((ani) => ani.destroy());\n this.animations = [];\n this.gesture.enable(true);\n this.state = 1 /* Inactive */;\n });\n return;\n }\n const progress = getTimeGivenProgression([0, 0], [0, 0], [1, 1], [1, 1], this.progress)[0];\n const snapBackAnimation = createSnapBackAnimation(pullingRefresherIcon);\n this.animations.push(snapBackAnimation);\n writeTask(async () => {\n pullingRefresherIcon.style.setProperty('--ion-pulling-refresher-translate', `${progress * 100}px`);\n ev.data.animation.progressEnd();\n await snapBackAnimation.play();\n this.beginRefresh();\n ev.data.animation.destroy();\n this.gesture.enable(true);\n });\n },\n });\n this.disabledChanged();\n }\n async setupNativeRefresher(contentEl) {\n if (this.scrollListenerCallback || !contentEl || this.nativeRefresher || !this.scrollEl) {\n return;\n }\n /**\n * If using non-native refresher before make sure\n * we clean up any old CSS. This can happen when\n * a user manually calls the refresh method in a\n * component create callback before the native\n * refresher is setup.\n */\n this.setCss(0, '', false, '');\n this.nativeRefresher = true;\n const pullingSpinner = this.el.querySelector('ion-refresher-content .refresher-pulling ion-spinner');\n const refreshingSpinner = this.el.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');\n if (getIonMode(this) === 'ios') {\n this.setupiOSNativeRefresher(pullingSpinner, refreshingSpinner);\n }\n else {\n this.setupMDNativeRefresher(contentEl, pullingSpinner, refreshingSpinner);\n }\n }\n componentDidUpdate() {\n this.checkNativeRefresher();\n }\n async connectedCallback() {\n if (this.el.getAttribute('slot') !== 'fixed') {\n console.error('Make sure you use: <ion-refresher slot=\"fixed\">');\n return;\n }\n const contentEl = this.el.closest(ION_CONTENT_ELEMENT_SELECTOR);\n if (!contentEl) {\n printIonContentErrorMsg(this.el);\n return;\n }\n /**\n * Waits for the content to be ready before querying the scroll\n * or the background content element.\n */\n componentOnReady(contentEl, async () => {\n const customScrollTarget = contentEl.querySelector(ION_CONTENT_CLASS_SELECTOR);\n /**\n * Query the custom scroll target (if available), first. In refresher implementations,\n * the ion-refresher element will always be a direct child of ion-content (slot=\"fixed\"). By\n * querying the custom scroll target first and falling back to the ion-content element,\n * the correct scroll element will be returned by the implementation.\n */\n this.scrollEl = await getScrollElement(customScrollTarget !== null && customScrollTarget !== void 0 ? customScrollTarget : contentEl);\n /**\n * Query the background content element from the host ion-content element directly.\n */\n this.backgroundContentEl = await contentEl.getBackgroundElement();\n if (await shouldUseNativeRefresher(this.el, getIonMode(this))) {\n this.setupNativeRefresher(contentEl);\n }\n else {\n this.gesture = (await import('./index-3f1a7d95.js')).createGesture({\n el: contentEl,\n gestureName: 'refresher',\n gesturePriority: 31,\n direction: 'y',\n threshold: 20,\n passive: false,\n canStart: () => this.canStart(),\n onStart: () => this.onStart(),\n onMove: (ev) => this.onMove(ev),\n onEnd: () => this.onEnd(),\n });\n this.disabledChanged();\n }\n });\n }\n disconnectedCallback() {\n this.destroyNativeRefresher();\n this.scrollEl = undefined;\n if (this.gesture) {\n this.gesture.destroy();\n this.gesture = undefined;\n }\n }\n /**\n * Call `complete()` when your async operation has completed.\n * For example, the `refreshing` state is while the app is performing\n * an asynchronous operation, such as receiving more data from an\n * AJAX request. Once the data has been received, you then call this\n * method to signify that the refreshing has completed and to close\n * the refresher. This method also changes the refresher's state from\n * `refreshing` to `completing`.\n */\n async complete() {\n if (this.nativeRefresher) {\n this.needsCompletion = true;\n // Do not reset scroll el until user removes pointer from screen\n if (!this.pointerDown) {\n raf(() => raf(() => this.resetNativeRefresher(this.elementToTransform, 32 /* Completing */)));\n }\n }\n else {\n this.close(32 /* Completing */, '120ms');\n }\n }\n /**\n * Changes the refresher's state from `refreshing` to `cancelling`.\n */\n async cancel() {\n if (this.nativeRefresher) {\n // Do not reset scroll el until user removes pointer from screen\n if (!this.pointerDown) {\n raf(() => raf(() => this.resetNativeRefresher(this.elementToTransform, 16 /* Cancelling */)));\n }\n }\n else {\n this.close(16 /* Cancelling */, '');\n }\n }\n /**\n * A number representing how far down the user has pulled.\n * The number `0` represents the user hasn't pulled down at all. The\n * number `1`, and anything greater than `1`, represents that the user\n * has pulled far enough down that when they let go then the refresh will\n * happen. If they let go and the number is less than `1`, then the\n * refresh will not happen, and the content will return to it's original\n * position.\n */\n getProgress() {\n return Promise.resolve(this.progress);\n }\n canStart() {\n if (!this.scrollEl) {\n return false;\n }\n if (this.state !== 1 /* Inactive */) {\n return false;\n }\n // if the scrollTop is greater than zero then it's\n // not possible to pull the content down yet\n if (this.scrollEl.scrollTop > 0) {\n return false;\n }\n return true;\n }\n onStart() {\n this.progress = 0;\n this.state = 1 /* Inactive */;\n }\n onMove(detail) {\n if (!this.scrollEl) {\n return;\n }\n // this method can get called like a bazillion times per second,\n // so it's built to be as efficient as possible, and does its\n // best to do any DOM read/writes only when absolutely necessary\n // if multi-touch then get out immediately\n const ev = detail.event;\n if (ev.touches && ev.touches.length > 1) {\n return;\n }\n // do nothing if it's actively refreshing\n // or it's in the way of closing\n // or this was never a startY\n if ((this.state & 56 /* _BUSY_ */) !== 0) {\n return;\n }\n const pullFactor = Number.isNaN(this.pullFactor) || this.pullFactor < 0 ? 1 : this.pullFactor;\n const deltaY = detail.deltaY * pullFactor;\n // don't bother if they're scrolling up\n // and have not already started dragging\n if (deltaY <= 0) {\n // the current Y is higher than the starting Y\n // so they scrolled up enough to be ignored\n this.progress = 0;\n this.state = 1 /* Inactive */;\n if (this.appliedStyles) {\n // reset the styles only if they were applied\n this.setCss(0, '', false, '');\n return;\n }\n return;\n }\n if (this.state === 1 /* Inactive */) {\n // this refresh is not already actively pulling down\n // get the content's scrollTop\n const scrollHostScrollTop = this.scrollEl.scrollTop;\n // if the scrollTop is greater than zero then it's\n // not possible to pull the content down yet\n if (scrollHostScrollTop > 0) {\n this.progress = 0;\n return;\n }\n // content scrolled all the way to the top, and dragging down\n this.state = 2 /* Pulling */;\n }\n // prevent native scroll events\n if (ev.cancelable) {\n ev.preventDefault();\n }\n // the refresher is actively pulling at this point\n // move the scroll element within the content element\n this.setCss(deltaY, '0ms', true, '');\n if (deltaY === 0) {\n // don't continue if there's no delta yet\n this.progress = 0;\n return;\n }\n const pullMin = this.pullMin;\n // set pull progress\n this.progress = deltaY / pullMin;\n // emit \"start\" if it hasn't started yet\n if (!this.didStart) {\n this.didStart = true;\n this.ionStart.emit();\n }\n // emit \"pulling\" on every move\n this.ionPull.emit();\n // do nothing if the delta is less than the pull threshold\n if (deltaY < pullMin) {\n // ensure it stays in the pulling state, cuz its not ready yet\n this.state = 2 /* Pulling */;\n return;\n }\n if (deltaY > this.pullMax) {\n // they pulled farther than the max, so kick off the refresh\n this.beginRefresh();\n return;\n }\n // pulled farther than the pull min!!\n // it is now in the `ready` state!!\n // if they let go then it'll refresh, kerpow!!\n this.state = 4 /* Ready */;\n return;\n }\n onEnd() {\n // only run in a zone when absolutely necessary\n if (this.state === 4 /* Ready */) {\n // they pulled down far enough, so it's ready to refresh\n this.beginRefresh();\n }\n else if (this.state === 2 /* Pulling */) {\n // they were pulling down, but didn't pull down far enough\n // set the content back to it's original location\n // and close the refresher\n // set that the refresh is actively cancelling\n this.cancel();\n }\n }\n beginRefresh() {\n // assumes we're already back in a zone\n // they pulled down far enough, so it's ready to refresh\n this.state = 8 /* Refreshing */;\n // place the content in a hangout position while it thinks\n this.setCss(this.pullMin, this.snapbackDuration, true, '');\n // emit \"refresh\" because it was pulled down far enough\n // and they let go to begin refreshing\n this.ionRefresh.emit({\n complete: this.complete.bind(this),\n });\n }\n close(state, delay) {\n // create fallback timer incase something goes wrong with transitionEnd event\n setTimeout(() => {\n this.state = 1 /* Inactive */;\n this.progress = 0;\n this.didStart = false;\n this.setCss(0, '0ms', false, '');\n }, 600);\n // reset set the styles on the scroll element\n // set that the refresh is actively cancelling/completing\n this.state = state;\n this.setCss(0, this.closeDuration, true, delay);\n // TODO: stop gesture\n }\n setCss(y, duration, overflowVisible, delay) {\n if (this.nativeRefresher) {\n return;\n }\n this.appliedStyles = y > 0;\n writeTask(() => {\n if (this.scrollEl && this.backgroundContentEl) {\n const scrollStyle = this.scrollEl.style;\n const backgroundStyle = this.backgroundContentEl.style;\n scrollStyle.transform = backgroundStyle.transform = y > 0 ? `translateY(${y}px) translateZ(0px)` : '';\n scrollStyle.transitionDuration = backgroundStyle.transitionDuration = duration;\n scrollStyle.transitionDelay = backgroundStyle.transitionDelay = delay;\n scrollStyle.overflow = overflowVisible ? 'hidden' : '';\n }\n });\n }\n render() {\n const mode = getIonMode(this);\n return (h(Host, { slot: \"fixed\", class: {\n [mode]: true,\n // Used internally for styling\n [`refresher-${mode}`]: true,\n 'refresher-native': this.nativeRefresher,\n 'refresher-active': this.state !== 1 /* Inactive */,\n 'refresher-pulling': this.state === 2 /* Pulling */,\n 'refresher-ready': this.state === 4 /* Ready */,\n 'refresher-refreshing': this.state === 8 /* Refreshing */,\n 'refresher-cancelling': this.state === 16 /* Cancelling */,\n 'refresher-completing': this.state === 32 /* Completing */,\n } }));\n }\n get el() { return getElement(this); }\n static get watchers() { return {\n \"disabled\": [\"disabledChanged\"]\n }; }\n};\nRefresher.style = {\n ios: refresherIosCss,\n md: refresherMdCss\n};\n\nconst RefresherContent = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n }\n componentWillLoad() {\n if (this.pullingIcon === undefined) {\n const mode = getIonMode(this);\n const overflowRefresher = this.el.style.webkitOverflowScrolling !== undefined ? 'lines' : arrowDown;\n this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && isPlatform('mobile') ? config.get('spinner', overflowRefresher) : 'circular');\n }\n if (this.refreshingSpinner === undefined) {\n const mode = getIonMode(this);\n this.refreshingSpinner = config.get('refreshingSpinner', config.get('spinner', mode === 'ios' ? 'lines' : 'circular'));\n }\n }\n render() {\n const pullingIcon = this.pullingIcon;\n const hasSpinner = pullingIcon != null && SPINNERS[pullingIcon] !== undefined;\n const mode = getIonMode(this);\n return (h(Host, { class: mode }, h(\"div\", { class: \"refresher-pulling\" }, this.pullingIcon && hasSpinner && (h(\"div\", { class: \"refresher-pulling-icon\" }, h(\"div\", { class: \"spinner-arrow-container\" }, h(\"ion-spinner\", { name: this.pullingIcon, paused: true }), mode === 'md' && this.pullingIcon === 'circular' && (h(\"div\", { class: \"arrow-container\" }, h(\"ion-icon\", { icon: caretBackSharp })))))), this.pullingIcon && !hasSpinner && (h(\"div\", { class: \"refresher-pulling-icon\" }, h(\"ion-icon\", { icon: this.pullingIcon, lazy: false }))), this.pullingText && (h(\"div\", { class: \"refresher-pulling-text\", innerHTML: sanitizeDOMString(this.pullingText) }))), h(\"div\", { class: \"refresher-refreshing\" }, this.refreshingSpinner && (h(\"div\", { class: \"refresher-refreshing-icon\" }, h(\"ion-spinner\", { name: this.refreshingSpinner }))), this.refreshingText && (h(\"div\", { class: \"refresher-refreshing-text\", innerHTML: sanitizeDOMString(this.refreshingText) })))));\n }\n get el() { return getElement(this); }\n};\n\nexport { Refresher as ion_refresher, RefresherContent as ion_refresher_content };\n"],"mappings":"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"},"metadata":{},"sourceType":"module"} |