{"version":3,"sources":["./node_modules/@ionic/core/dist/esm/framework-delegate-c2e2e1f4.js","./node_modules/@ionic/core/dist/esm/haptic-c8f1473e.js","./node_modules/@ionic/core/dist/esm/index-1469ea79.js","./node_modules/@ionic/core/dist/esm/index-3476b023.js","./node_modules/@ionic/core/dist/esm/spinner-configs-28520d80.js","./node_modules/@ionic/core/dist/esm/theme-18cbe2cc.js","./src/app/shared/shared.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEsD;;;;;;;;;;;;;ACjCtD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEiH;;;;;;;;;;;;;AC3CjH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAoD;AAC+F;;AAEnJ,qCAAqC,2OAAsC;AAC3E,oCAAoC,uOAAqC;AACzE;AACA;AACA,QAAQ,2DAAS;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,wDAAoB;AAC7C,0BAA0B,wDAAoB;AAC9C;AACA;AACA,0BAA0B,wDAAmB;AAC7C,yBAAyB,wDAAmB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEuG;;;;;;;;;;;;;ACpMvG;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mEAAmE,mBAAmB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,mCAAmC;AAC3E;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,gCAAgC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,0BAA0B;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEkC;;;;;;;;;;;;;AC/GlC;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA,sCAAsC,4BAA4B;AAClE;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB;AAClD,+BAA+B,oBAAoB;AACnD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,sCAAsC,mBAAmB;AACzD;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB;AAClD,+BAA+B,oBAAoB;AACnD;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,gBAAgB;AAC/C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wCAAwC,sCAAsC;AAC9E,sCAAsC,4BAA4B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,wCAAwC,sCAAsC;AAC9E,sCAAsC,4BAA4B;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEyB;;;;;;;;;;;;;AC7GzB;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,MAAM;AAC5B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqF;;;;;;;;;;;;;;;;;;;;;;ACzC5C;AACI;AACA;AAC4C;AAC9C;AAW3C,IAAa,YAAY,GAAzB,MAAa,YAAY;CAAG;AAAf,YAAY;IATxB,8DAAQ,CAAC;QACN,OAAO,EAAE;YACL,4DAAY;YACZ,0DAAW;YACX,0DAAW;SACd;QACD,YAAY,EAAE,CAAC,sGAAqB,CAAC;QACrC,OAAO,EAAE,CAAC,sGAAqB,CAAC;KACnC,CAAC;GACW,YAAY,CAAG;AAAH","file":"common-es2015.js","sourcesContent":["const attachComponent = async (delegate, container, component, cssClasses, componentProps) => {\r\n if (delegate) {\r\n return delegate.attachViewToDom(container, component, componentProps, cssClasses);\r\n }\r\n if (typeof component !== 'string' && !(component instanceof HTMLElement)) {\r\n throw new Error('framework delegate is missing');\r\n }\r\n const el = (typeof component === 'string')\r\n ? container.ownerDocument && container.ownerDocument.createElement(component)\r\n : component;\r\n if (cssClasses) {\r\n cssClasses.forEach(c => el.classList.add(c));\r\n }\r\n if (componentProps) {\r\n Object.assign(el, componentProps);\r\n }\r\n container.appendChild(el);\r\n if (el.componentOnReady) {\r\n await el.componentOnReady();\r\n }\r\n return el;\r\n};\r\nconst detachComponent = (delegate, element) => {\r\n if (element) {\r\n if (delegate) {\r\n const container = element.parentElement;\r\n return delegate.removeViewFromDom(container, element);\r\n }\r\n element.remove();\r\n }\r\n return Promise.resolve();\r\n};\n\nexport { attachComponent as a, detachComponent as d };\n","/**\r\n * Check to see if the Haptic Plugin is available\r\n * @return Returns `true` or false if the plugin is available\r\n */\r\n/**\r\n * Trigger a selection changed haptic event. Good for one-time events\r\n * (not for gestures)\r\n */\r\nconst hapticSelection = () => {\r\n const engine = window.TapticEngine;\r\n if (engine) {\r\n engine.selection();\r\n }\r\n};\r\n/**\r\n * Tell the haptic engine that a gesture for a selection change is starting.\r\n */\r\nconst hapticSelectionStart = () => {\r\n const engine = window.TapticEngine;\r\n if (engine) {\r\n engine.gestureSelectionStart();\r\n }\r\n};\r\n/**\r\n * Tell the haptic engine that a selection changed during a gesture.\r\n */\r\nconst hapticSelectionChanged = () => {\r\n const engine = window.TapticEngine;\r\n if (engine) {\r\n engine.gestureSelectionChanged();\r\n }\r\n};\r\n/**\r\n * Tell the haptic engine we are done with a gesture. This needs to be\r\n * called lest resources are not properly recycled.\r\n */\r\nconst hapticSelectionEnd = () => {\r\n const engine = window.TapticEngine;\r\n if (engine) {\r\n engine.gestureSelectionEnd();\r\n }\r\n};\n\nexport { hapticSelectionStart as a, hapticSelectionChanged as b, hapticSelectionEnd as c, hapticSelection as h };\n","import { w as writeTask } from './core-0a8d4d2e.js';\nimport { b as LIFECYCLE_WILL_LEAVE, L as LIFECYCLE_WILL_ENTER, a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE } from './constants-3c3e1099.js';\n\nconst iosTransitionAnimation = () => import('./ios.transition-b4752795.js');\r\nconst mdTransitionAnimation = () => import('./md.transition-5ee3c425.js');\r\nconst transition = (opts) => {\r\n return new Promise((resolve, reject) => {\r\n writeTask(() => {\r\n beforeTransition(opts);\r\n runTransition(opts).then(result => {\r\n if (result.animation) {\r\n result.animation.destroy();\r\n }\r\n afterTransition(opts);\r\n resolve(result);\r\n }, error => {\r\n afterTransition(opts);\r\n reject(error);\r\n });\r\n });\r\n });\r\n};\r\nconst beforeTransition = (opts) => {\r\n const enteringEl = opts.enteringEl;\r\n const leavingEl = opts.leavingEl;\r\n setZIndex(enteringEl, leavingEl, opts.direction);\r\n if (opts.showGoBack) {\r\n enteringEl.classList.add('can-go-back');\r\n }\r\n else {\r\n enteringEl.classList.remove('can-go-back');\r\n }\r\n setPageHidden(enteringEl, false);\r\n if (leavingEl) {\r\n setPageHidden(leavingEl, false);\r\n }\r\n};\r\nconst runTransition = async (opts) => {\r\n const animationBuilder = await getAnimationBuilder(opts);\r\n const ani = (animationBuilder)\r\n ? animation(animationBuilder, opts)\r\n : noAnimation(opts); // fast path for no animation\r\n return ani;\r\n};\r\nconst afterTransition = (opts) => {\r\n const enteringEl = opts.enteringEl;\r\n const leavingEl = opts.leavingEl;\r\n enteringEl.classList.remove('ion-page-invisible');\r\n if (leavingEl !== undefined) {\r\n leavingEl.classList.remove('ion-page-invisible');\r\n }\r\n};\r\nconst getAnimationBuilder = async (opts) => {\r\n if (!opts.leavingEl || !opts.animated || opts.duration === 0) {\r\n return undefined;\r\n }\r\n if (opts.animationBuilder) {\r\n return opts.animationBuilder;\r\n }\r\n const getAnimation = (opts.mode === 'ios')\r\n ? (await iosTransitionAnimation()).iosTransitionAnimation\r\n : (await mdTransitionAnimation()).mdTransitionAnimation;\r\n return getAnimation;\r\n};\r\nconst animation = async (animationBuilder, opts) => {\r\n await waitForReady(opts, true);\r\n const trans = animationBuilder(opts.baseEl, opts);\r\n fireWillEvents(opts.enteringEl, opts.leavingEl);\r\n const didComplete = await playTransition(trans, opts);\r\n if (opts.progressCallback) {\r\n opts.progressCallback(undefined);\r\n }\r\n if (didComplete) {\r\n fireDidEvents(opts.enteringEl, opts.leavingEl);\r\n }\r\n return {\r\n hasCompleted: didComplete,\r\n animation: trans\r\n };\r\n};\r\nconst noAnimation = async (opts) => {\r\n const enteringEl = opts.enteringEl;\r\n const leavingEl = opts.leavingEl;\r\n await waitForReady(opts, false);\r\n fireWillEvents(enteringEl, leavingEl);\r\n fireDidEvents(enteringEl, leavingEl);\r\n return {\r\n hasCompleted: true\r\n };\r\n};\r\nconst waitForReady = async (opts, defaultDeep) => {\r\n const deep = opts.deepWait !== undefined ? opts.deepWait : defaultDeep;\r\n const promises = deep ? [\r\n deepReady(opts.enteringEl),\r\n deepReady(opts.leavingEl),\r\n ] : [\r\n shallowReady(opts.enteringEl),\r\n shallowReady(opts.leavingEl),\r\n ];\r\n await Promise.all(promises);\r\n await notifyViewReady(opts.viewIsReady, opts.enteringEl);\r\n};\r\nconst notifyViewReady = async (viewIsReady, enteringEl) => {\r\n if (viewIsReady) {\r\n await viewIsReady(enteringEl);\r\n }\r\n};\r\nconst playTransition = (trans, opts) => {\r\n const progressCallback = opts.progressCallback;\r\n const promise = new Promise(resolve => {\r\n trans.onFinish((currentStep) => resolve(currentStep === 1));\r\n });\r\n // cool, let's do this, start the transition\r\n if (progressCallback) {\r\n // this is a swipe to go back, just get the transition progress ready\r\n // kick off the swipe animation start\r\n trans.progressStart(true);\r\n progressCallback(trans);\r\n }\r\n else {\r\n // only the top level transition should actually start \"play\"\r\n // kick it off and let it play through\r\n // ******** DOM WRITE ****************\r\n trans.play();\r\n }\r\n // create a callback for when the animation is done\r\n return promise;\r\n};\r\nconst fireWillEvents = (enteringEl, leavingEl) => {\r\n lifecycle(leavingEl, LIFECYCLE_WILL_LEAVE);\r\n lifecycle(enteringEl, LIFECYCLE_WILL_ENTER);\r\n};\r\nconst fireDidEvents = (enteringEl, leavingEl) => {\r\n lifecycle(enteringEl, LIFECYCLE_DID_ENTER);\r\n lifecycle(leavingEl, LIFECYCLE_DID_LEAVE);\r\n};\r\nconst lifecycle = (el, eventName) => {\r\n if (el) {\r\n const ev = new CustomEvent(eventName, {\r\n bubbles: false,\r\n cancelable: false,\r\n });\r\n el.dispatchEvent(ev);\r\n }\r\n};\r\nconst shallowReady = (el) => {\r\n if (el && el.componentOnReady) {\r\n return el.componentOnReady();\r\n }\r\n return Promise.resolve();\r\n};\r\nconst deepReady = async (el) => {\r\n const element = el;\r\n if (element) {\r\n if (element.componentOnReady != null) {\r\n const stencilEl = await element.componentOnReady();\r\n if (stencilEl != null) {\r\n return;\r\n }\r\n }\r\n await Promise.all(Array.from(element.children).map(deepReady));\r\n }\r\n};\r\nconst setPageHidden = (el, hidden) => {\r\n if (hidden) {\r\n el.setAttribute('aria-hidden', 'true');\r\n el.classList.add('ion-page-hidden');\r\n }\r\n else {\r\n el.hidden = false;\r\n el.removeAttribute('aria-hidden');\r\n el.classList.remove('ion-page-hidden');\r\n }\r\n};\r\nconst setZIndex = (enteringEl, leavingEl, direction) => {\r\n if (enteringEl !== undefined) {\r\n enteringEl.style.zIndex = (direction === 'back')\r\n ? '99'\r\n : '101';\r\n }\r\n if (leavingEl !== undefined) {\r\n leavingEl.style.zIndex = '100';\r\n }\r\n};\r\nconst getIonPageElement = (element) => {\r\n if (element.classList.contains('ion-page')) {\r\n return element;\r\n }\r\n const ionPage = element.querySelector(':scope > .ion-page, :scope > ion-nav, :scope > ion-tabs');\r\n if (ionPage) {\r\n return ionPage;\r\n }\r\n // idk, return the original element so at least something animates and we don't have a null pointer\r\n return element;\r\n};\n\nexport { deepReady as d, getIonPageElement as g, lifecycle as l, setPageHidden as s, transition as t };\n","/**\r\n * Does a simple sanitization of all elements\r\n * in an untrusted string\r\n */\r\nconst sanitizeDOMString = (untrustedString) => {\r\n try {\r\n if (typeof untrustedString !== 'string' || untrustedString === '') {\r\n return untrustedString;\r\n }\r\n /**\r\n * Create a document fragment\r\n * separate from the main DOM,\r\n * create a div to do our work in\r\n */\r\n const documentFragment = document.createDocumentFragment();\r\n const workingDiv = document.createElement('div');\r\n documentFragment.appendChild(workingDiv);\r\n workingDiv.innerHTML = untrustedString;\r\n /**\r\n * Remove any elements\r\n * that are blocked\r\n */\r\n blockedTags.forEach(blockedTag => {\r\n const getElementsToRemove = documentFragment.querySelectorAll(blockedTag);\r\n for (let elementIndex = getElementsToRemove.length - 1; elementIndex >= 0; elementIndex--) {\r\n const element = getElementsToRemove[elementIndex];\r\n if (element.parentNode) {\r\n element.parentNode.removeChild(element);\r\n }\r\n else {\r\n documentFragment.removeChild(element);\r\n }\r\n /**\r\n * We still need to sanitize\r\n * the children of this element\r\n * as they are left behind\r\n */\r\n const childElements = getElementChildren(element);\r\n /* tslint:disable-next-line */\r\n for (let childIndex = 0; childIndex < childElements.length; childIndex++) {\r\n sanitizeElement(childElements[childIndex]);\r\n }\r\n }\r\n });\r\n /**\r\n * Go through remaining elements and remove\r\n * non-allowed attribs\r\n */\r\n // IE does not support .children on document fragments, only .childNodes\r\n const dfChildren = getElementChildren(documentFragment);\r\n /* tslint:disable-next-line */\r\n for (let childIndex = 0; childIndex < dfChildren.length; childIndex++) {\r\n sanitizeElement(dfChildren[childIndex]);\r\n }\r\n // Append document fragment to div\r\n const fragmentDiv = document.createElement('div');\r\n fragmentDiv.appendChild(documentFragment);\r\n // First child is always the div we did our work in\r\n const getInnerDiv = fragmentDiv.querySelector('div');\r\n return (getInnerDiv !== null) ? getInnerDiv.innerHTML : fragmentDiv.innerHTML;\r\n }\r\n catch (err) {\r\n console.error(err);\r\n return '';\r\n }\r\n};\r\n/**\r\n * Clean up current element based on allowed attributes\r\n * and then recursively dig down into any child elements to\r\n * clean those up as well\r\n */\r\nconst sanitizeElement = (element) => {\r\n // IE uses childNodes, so ignore nodes that are not elements\r\n if (element.nodeType && element.nodeType !== 1) {\r\n return;\r\n }\r\n for (let i = element.attributes.length - 1; i >= 0; i--) {\r\n const attribute = element.attributes.item(i);\r\n const attributeName = attribute.name;\r\n // remove non-allowed attribs\r\n if (!allowedAttributes.includes(attributeName.toLowerCase())) {\r\n element.removeAttribute(attributeName);\r\n continue;\r\n }\r\n // clean up any allowed attribs\r\n // that attempt to do any JS funny-business\r\n const attributeValue = attribute.value;\r\n /* tslint:disable-next-line */\r\n if (attributeValue != null && attributeValue.toLowerCase().includes('javascript:')) {\r\n element.removeAttribute(attributeName);\r\n }\r\n }\r\n /**\r\n * Sanitize any nested children\r\n */\r\n const childElements = getElementChildren(element);\r\n /* tslint:disable-next-line */\r\n for (let i = 0; i < childElements.length; i++) {\r\n sanitizeElement(childElements[i]);\r\n }\r\n};\r\n/**\r\n * IE doesn't always support .children\r\n * so we revert to .childNodes instead\r\n */\r\nconst getElementChildren = (el) => {\r\n return (el.children != null) ? el.children : el.childNodes;\r\n};\r\nconst allowedAttributes = ['class', 'id', 'href', 'src', 'name', 'slot'];\r\nconst blockedTags = ['script', 'style', 'iframe', 'meta', 'link', 'object', 'embed'];\n\nexport { sanitizeDOMString as s };\n","const spinners = {\r\n 'bubbles': {\r\n dur: 1000,\r\n circles: 9,\r\n fn: (dur, index, total) => {\r\n const animationDelay = `${(dur * index / total) - dur}ms`;\r\n const angle = 2 * Math.PI * index / total;\r\n return {\r\n r: 5,\r\n style: {\r\n 'top': `${9 * Math.sin(angle)}px`,\r\n 'left': `${9 * Math.cos(angle)}px`,\r\n 'animation-delay': animationDelay,\r\n }\r\n };\r\n }\r\n },\r\n 'circles': {\r\n dur: 1000,\r\n circles: 8,\r\n fn: (dur, index, total) => {\r\n const step = index / total;\r\n const animationDelay = `${(dur * step) - dur}ms`;\r\n const angle = 2 * Math.PI * step;\r\n return {\r\n r: 5,\r\n style: {\r\n 'top': `${9 * Math.sin(angle)}px`,\r\n 'left': `${9 * Math.cos(angle)}px`,\r\n 'animation-delay': animationDelay,\r\n }\r\n };\r\n }\r\n },\r\n 'circular': {\r\n dur: 1400,\r\n elmDuration: true,\r\n circles: 1,\r\n fn: () => {\r\n return {\r\n r: 20,\r\n cx: 48,\r\n cy: 48,\r\n fill: 'none',\r\n viewBox: '24 24 48 48',\r\n transform: 'translate(0,0)',\r\n style: {}\r\n };\r\n }\r\n },\r\n 'crescent': {\r\n dur: 750,\r\n circles: 1,\r\n fn: () => {\r\n return {\r\n r: 26,\r\n style: {}\r\n };\r\n }\r\n },\r\n 'dots': {\r\n dur: 750,\r\n circles: 3,\r\n fn: (_, index) => {\r\n const animationDelay = -(110 * index) + 'ms';\r\n return {\r\n r: 6,\r\n style: {\r\n 'left': `${9 - (9 * index)}px`,\r\n 'animation-delay': animationDelay,\r\n }\r\n };\r\n }\r\n },\r\n 'lines': {\r\n dur: 1000,\r\n lines: 12,\r\n fn: (dur, index, total) => {\r\n const transform = `rotate(${30 * index + (index < 6 ? 180 : -180)}deg)`;\r\n const animationDelay = `${(dur * index / total) - dur}ms`;\r\n return {\r\n y1: 17,\r\n y2: 29,\r\n style: {\r\n 'transform': transform,\r\n 'animation-delay': animationDelay,\r\n }\r\n };\r\n }\r\n },\r\n 'lines-small': {\r\n dur: 1000,\r\n lines: 12,\r\n fn: (dur, index, total) => {\r\n const transform = `rotate(${30 * index + (index < 6 ? 180 : -180)}deg)`;\r\n const animationDelay = `${(dur * index / total) - dur}ms`;\r\n return {\r\n y1: 12,\r\n y2: 20,\r\n style: {\r\n 'transform': transform,\r\n 'animation-delay': animationDelay,\r\n }\r\n };\r\n }\r\n }\r\n};\r\nconst SPINNERS = spinners;\n\nexport { SPINNERS as S };\n","const hostContext = (selector, el) => {\r\n return el.closest(selector) !== null;\r\n};\r\n/**\r\n * Create the mode and color classes for the component based on the classes passed in\r\n */\r\nconst createColorClasses = (color) => {\r\n return (typeof color === 'string' && color.length > 0) ? {\r\n 'ion-color': true,\r\n [`ion-color-${color}`]: true\r\n } : undefined;\r\n};\r\nconst getClassList = (classes) => {\r\n if (classes !== undefined) {\r\n const array = Array.isArray(classes) ? classes : classes.split(' ');\r\n return array\r\n .filter(c => c != null)\r\n .map(c => c.trim())\r\n .filter(c => c !== '');\r\n }\r\n return [];\r\n};\r\nconst getClassMap = (classes) => {\r\n const map = {};\r\n getClassList(classes).forEach(c => map[c] = true);\r\n return map;\r\n};\r\nconst SCHEME = /^[a-z][a-z0-9+\\-.]*:/;\r\nconst openURL = async (url, ev, direction) => {\r\n if (url != null && url[0] !== '#' && !SCHEME.test(url)) {\r\n const router = document.querySelector('ion-router');\r\n if (router) {\r\n if (ev != null) {\r\n ev.preventDefault();\r\n }\r\n return router.push(url, direction);\r\n }\r\n }\r\n return false;\r\n};\n\nexport { createColorClasses as c, getClassMap as g, hostContext as h, openURL as o };\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {CommonModule} from '@angular/common';\nimport {CustomHeaderComponent} from '../component/custom-header/custom-header.component';\nimport {IonicModule} from '@ionic/angular';\n\n@NgModule({\n imports: [\n CommonModule,\n IonicModule,\n FormsModule\n ],\n declarations: [CustomHeaderComponent],\n exports: [CustomHeaderComponent]\n})\nexport class SharedModule {}"],"sourceRoot":"webpack:///"}