{"version":3,"mappings":"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","names":["App","constructor","hostRef","registerInstance","this","componentDidLoad","rIC","p","isHybrid","isPlatform","window","config","c","then","module","startTapClick","startStatusTap","needInputShims","startInputShims","hardwareBackButtonModule","Promise","startHardwareBackButton","blockHardwareBackButton","startKeyboardAssist","t","focusVisible","startFocusVisible","setFocus","elements","o","render","mode","getIonMode","h","Host","class","el","getElement","callback","requestIdleCallback","setTimeout","style","Buttons","collapse","ios","md","Content","ionScrollStart","createEvent","ionScroll","ionScrollEnd","isScrolling","lastScroll","queued","cTop","cBottom","isMainContent","detail","scrollTop","scrollLeft","type","event","undefined","startX","startY","startTime","currentX","currentY","velocityX","velocityY","deltaX","deltaY","currentTime","data","fullscreen","scrollX","scrollY","scrollEvents","connectedCallback","closest","disconnectedCallback","onScrollEnd","onAppLoad","resize","shouldForceOverscroll","forceOverscroll","readTask","readDimensions","forceUpdate","page","getPageElement","top","Math","max","offsetTop","bottom","offsetHeight","onScroll","ev","timeStamp","Date","now","shouldStart","onScrollStart","ts","updateScrollDetail","scrollEl","emit","getScrollElement","resolve","componentOnReady","scrollToTop","duration","scrollToPoint","scrollToBottom","scrollHeight","clientHeight","scrollByPoint","x","y","n","promise","r","fromY","fromX","step","linearTime","min","easedT","pow","floor","w","requestAnimationFrame","watchDog","clearInterval","setInterval","transitionShadow","TagType","createColorClasses","color","hostContext","overscroll","id","part","ref","name","tabs","parentElement","parentNode","host","getParentElement","timestamp","prevX","prevY","timeDelta","handleFooterFade","baseEl","scale","clamp","writeTask","setProperty","toString","Footer","translucent","checkCollapsibleFooter","hasFade","destroyCollapsibleFooter","pageEl","contentEl","querySelector","setupFadeFooter","console","error","contentScrollCallback","addEventListener","componentDidUpdate","removeEventListener","role","cloneElement","tagName","getCachedEl","document","clonedEl","createElement","classList","add","body","appendChild","createHeaderIndex","headerEl","toolbars","querySelectorAll","Array","from","map","toolbar","ionTitleEl","background","shadowRoot","innerTitleEl","ionButtonsEl","setToolbarBackgroundOpacity","opacity","removeProperty","setHeaderActive","headerIndex","active","remove","handleHeaderFade","condenseHeader","baseElHeight","fadeStart","Header","inheritedAttributes","setupFadeHeader","componentWillLoad","inheritAttributes","checkCollapsibleHeader","destroyCollapsibleHeader","hasCondense","size","setupCondenseHeader","intersectionObserver","disconnect","collapsibleMainHeader","IntersectionObserver","e","headers","find","header","mainHeaderIndex","scrollHeaderIndex","isIntersecting","intersectionRatio","handleToolbarBorderIntersection","intersection","intersectionRect","intersectionArea","width","height","isPageHidden","rootBounds","leftDiff","abs","left","boundingClientRect","rightDiff","right","handleToolbarIntersection","root","threshold","observe","length","transition","forEach","ionTitle","titleDiv","transform","scaleLargeTitles","handleContentScroll","roleType","Object","assign","RouterOutlet","ionNavWillLoad","ionNavWillChange","ionNavDidChange","gestureOrAnimationInProgress","animated","swipeHandlerChanged","gesture","enable","swipeHandler","createSwipeBackGesture","canStart","onStart","ani","progressStep","shouldComplete","dur","onFinish","onEnd","oneTimeCallback","newStepValue","getTimeGivenProgression","easing","progressEnd","destroy","commit","enteringEl","leavingEl","opts","unlock","lock","changed","setRouteId","params","direction","animation","setRoot","animationBuilder","element","activeEl","getRouteId","component","activeComponent","attachComponent","delegate","detachComponent","progressCallback","progressAnimation","waitPromise","watchers","ToolbarTitle","ionStyle","sizeChanged","emitStyle","getSize","dir","Toolbar","childrenStyles","Map","buttons","firstButtons","button","slot","buttonsReversed","reverse","lastButtons","childrenStyle","stopPropagation","target","updatedStyles","newStyles","childStyles","get","hasStyleChange","keys","key","childKey","newValue","set","value"],"sources":["./node_modules/@ionic/core/dist/esm/ion-app_8.entry.js"],"sourcesContent":["/*!\n * (C) Ionic http://ionicframework.com - MIT License\n */\nimport { r as registerInstance, h, H as Host, i as getElement, e as createEvent, f as readTask, j as forceUpdate, c as writeTask } from './index-06cd27b1.js';\nimport { b as getIonMode, c as config, a as isPlatform } from './ionic-global-a049bcbf.js';\nimport { c as componentOnReady, d as clamp, i as inheritAttributes } from './helpers-eed79a2b.js';\nimport { c as createColorClasses, h as hostContext } from './theme-a24ff1ad.js';\nimport { g as getTimeGivenProgression } from './cubic-bezier-154a53a5.js';\nimport { a as attachComponent, d as detachComponent } from './framework-delegate-a922018c.js';\nimport { t as transition } from './index-c8ef55b5.js';\n\nconst appCss = \"html.plt-mobile ion-app{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.plt-mobile ion-app [contenteditable]{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}ion-app.force-statusbar-padding{--ion-safe-area-top:20px}\";\n\nlet App = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n }\n componentDidLoad() {\n {\n rIC(async () => {\n const isHybrid = isPlatform(window, 'hybrid');\n if (!config.getBoolean('_testing')) {\n import('./tap-click-c0be8677.js').then(module => module.startTapClick(config));\n }\n if (config.getBoolean('statusTap', isHybrid)) {\n import('./status-tap-4087b8c4.js').then(module => module.startStatusTap());\n }\n if (config.getBoolean('inputShims', needInputShims())) {\n import('./input-shims-fef4a5fa.js').then(module => module.startInputShims(config));\n }\n const hardwareBackButtonModule = await import('./hardware-back-button-ace6a71b.js');\n if (config.getBoolean('hardwareBackButton', isHybrid)) {\n hardwareBackButtonModule.startHardwareBackButton();\n }\n else {\n hardwareBackButtonModule.blockHardwareBackButton();\n }\n if (typeof window !== 'undefined') {\n import('./keyboard-808e4e15.js').then(module => module.startKeyboardAssist(window));\n }\n import('./focus-visible-02bf7a99.js').then(module => this.focusVisible = module.startFocusVisible());\n });\n }\n }\n /**\n * @internal\n * Used to set focus on an element that uses `ion-focusable`.\n * Do not use this if focusing the element as a result of a keyboard\n * event as the focus utility should handle this for us. This method\n * should be used when we want to programmatically focus an element as\n * a result of another user action. (Ex: We focus the first element\n * inside of a popover when the user presents it, but the popover is not always\n * presented as a result of keyboard action.)\n */\n async setFocus(elements) {\n if (this.focusVisible) {\n this.focusVisible.setFocus(elements);\n }\n }\n render() {\n const mode = getIonMode(this);\n return (h(Host, { class: {\n [mode]: true,\n 'ion-page': true,\n 'force-statusbar-padding': config.getBoolean('_forceStatusbarPadding'),\n } }));\n }\n get el() { return getElement(this); }\n};\nconst needInputShims = () => {\n return isPlatform(window, 'ios') && isPlatform(window, 'mobile');\n};\nconst rIC = (callback) => {\n if ('requestIdleCallback' in window) {\n window.requestIdleCallback(callback);\n }\n else {\n setTimeout(callback, 32);\n }\n};\nApp.style = appCss;\n\nconst buttonsIosCss = \".sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-start:5px;--padding-end:5px;margin-left:2px;margin-right:2px;height:32px;font-size:17px;font-weight:400}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-ios-s ion-button{margin-left:unset;margin-right:unset;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px}}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-right:0.3em;font-size:24px;line-height:0.67}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-right:unset;-webkit-margin-end:0.3em;margin-inline-end:0.3em}}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-left:0.4em;font-size:24px;line-height:0.67}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:unset;-webkit-margin-start:0.4em;margin-inline-start:0.4em}}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:28px;line-height:0.67}\";\n\nconst buttonsMdCss = \".sc-ion-buttons-md-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;--padding-start:8px;--padding-end:8px;--box-shadow:none;margin-left:2px;margin-right:2px;height:32px;font-size:14px;font-weight:500}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-md-s ion-button{margin-left:unset;margin-right:unset;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px}}.sc-ion-buttons-md-s ion-button:not(.button-round){--border-radius:2px}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button{--color:initial;--color-focused:var(--ion-color-contrast);--color-hover:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-contrast);--background-hover:var(--ion-color-contrast)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-solid,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-solid{--background:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-shade);--background-hover:var(--ion-color-base);--color:var(--ion-color-base);--color-focused:var(--ion-color-base);--color-hover:var(--ion-color-base)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-outline,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-outline{--border-color:var(--ion-color-contrast)}.sc-ion-buttons-md-s .button-has-icon-only.button-clear{--padding-top:12px;--padding-end:12px;--padding-bottom:12px;--padding-start:12px;--border-radius:50%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:48px;height:48px}.sc-ion-buttons-md-s .button{--background-hover:currentColor}.sc-ion-buttons-md-s .button-solid{--color:var(--ion-toolbar-background, var(--ion-background-color, #fff));--background:var(--ion-toolbar-color, var(--ion-text-color, #424242));--background-activated:transparent;--background-focused:currentColor}.sc-ion-buttons-md-s .button-outline{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor;--border-color:currentColor}.sc-ion-buttons-md-s .button-clear{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor}.sc-ion-buttons-md-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-right:0.3em;font-size:1.4em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-md-s ion-icon[slot=start]{margin-right:unset;-webkit-margin-end:0.3em;margin-inline-end:0.3em}}.sc-ion-buttons-md-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-left:0.4em;font-size:1.4em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-md-s ion-icon[slot=end]{margin-left:unset;-webkit-margin-start:0.4em;margin-inline-start:0.4em}}.sc-ion-buttons-md-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.8em}\";\n\nlet Buttons = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n /**\n * If true, buttons will disappear when its\n * parent toolbar has fully collapsed if the toolbar\n * is not the first toolbar. If the toolbar is the\n * first toolbar, the buttons will be hidden and will\n * only be shown once all toolbars have fully collapsed.\n *\n * Only applies in `ios` mode with `collapse` set to\n * `true` on `ion-header`.\n *\n * Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)\n */\n this.collapse = false;\n }\n render() {\n const mode = getIonMode(this);\n return (h(Host, { class: {\n [mode]: true,\n ['buttons-collapse']: this.collapse\n } }));\n }\n};\nButtons.style = {\n ios: buttonsIosCss,\n md: buttonsMdCss\n};\n\nconst contentCss = \":host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}:host(.outer-content){--background:var(--ion-color-step-50, #f2f2f2)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;-ms-touch-action:manipulation;touch-action:manipulation}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.inner-scroll{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;z-index:0;will-change:scroll-position}.scroll-y{overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{overflow-x:var(--overflow);overscroll-behavior-x:contain}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:\\\"\\\"}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:0;contain:none}:host(.content-sizing) .inner-scroll{position:relative;top:0;bottom:0;margin-top:calc(var(--offset-top) * -1);margin-bottom:calc(var(--offset-bottom) * -1)}.transition-effect{display:none;position:absolute;left:-100%;width:100%;height:100vh;opacity:0;pointer-events:none}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;right:0;width:10px;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAgCAYAAAAIXrg4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTE3MDgzRkQ5QTkyMTFFOUEwNzQ5MkJFREE1NUY2MjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTE3MDgzRkU5QTkyMTFFOUEwNzQ5MkJFREE1NUY2MjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMTcwODNGQjlBOTIxMUU5QTA3NDkyQkVEQTU1RjYyNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMTcwODNGQzlBOTIxMUU5QTA3NDkyQkVEQTU1RjYyNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmePEuQAAABNSURBVHjaYvz//z8DIxAwMDAwATGMhmFmPDQuOSZks0AMmoJBaQHjkPfB0Lfg/2gQjVow+HPy/yHvg9GiYjQfjMbBqAWjFgy/4hogwADYqwdzxy5BuwAAAABJRU5ErkJggg==);background-repeat:repeat-y;background-size:10px 16px}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}\";\n\nlet Content = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionScrollStart = createEvent(this, \"ionScrollStart\", 7);\n this.ionScroll = createEvent(this, \"ionScroll\", 7);\n this.ionScrollEnd = createEvent(this, \"ionScrollEnd\", 7);\n this.isScrolling = false;\n this.lastScroll = 0;\n this.queued = false;\n this.cTop = -1;\n this.cBottom = -1;\n this.isMainContent = true;\n // Detail is used in a hot loop in the scroll event, by allocating it here\n // V8 will be able to inline any read/write to it since it's a monomorphic class.\n // https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html\n this.detail = {\n scrollTop: 0,\n scrollLeft: 0,\n type: 'scroll',\n event: undefined,\n startX: 0,\n startY: 0,\n startTime: 0,\n currentX: 0,\n currentY: 0,\n velocityX: 0,\n velocityY: 0,\n deltaX: 0,\n deltaY: 0,\n currentTime: 0,\n data: undefined,\n isScrolling: true,\n };\n /**\n * If `true`, the content will scroll behind the headers\n * and footers. This effect can easily be seen by setting the toolbar\n * to transparent.\n */\n this.fullscreen = false;\n /**\n * If you want to enable the content scrolling in the X axis, set this property to `true`.\n */\n this.scrollX = false;\n /**\n * If you want to disable the content scrolling in the Y axis, set this property to `false`.\n */\n this.scrollY = true;\n /**\n * Because of performance reasons, ionScroll events are disabled by default, in order to enable them\n * and start listening from (ionScroll), set this property to `true`.\n */\n this.scrollEvents = false;\n }\n connectedCallback() {\n this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;\n }\n disconnectedCallback() {\n this.onScrollEnd();\n }\n onAppLoad() {\n this.resize();\n }\n shouldForceOverscroll() {\n const { forceOverscroll } = this;\n const mode = getIonMode(this);\n return forceOverscroll === undefined\n ? mode === 'ios' && isPlatform('ios')\n : forceOverscroll;\n }\n resize() {\n if (this.fullscreen) {\n readTask(() => this.readDimensions());\n }\n else if (this.cTop !== 0 || this.cBottom !== 0) {\n this.cTop = this.cBottom = 0;\n forceUpdate(this);\n }\n }\n readDimensions() {\n const page = getPageElement(this.el);\n const top = Math.max(this.el.offsetTop, 0);\n const bottom = Math.max(page.offsetHeight - top - this.el.offsetHeight, 0);\n const dirty = top !== this.cTop || bottom !== this.cBottom;\n if (dirty) {\n this.cTop = top;\n this.cBottom = bottom;\n forceUpdate(this);\n }\n }\n onScroll(ev) {\n const timeStamp = Date.now();\n const shouldStart = !this.isScrolling;\n this.lastScroll = timeStamp;\n if (shouldStart) {\n this.onScrollStart();\n }\n if (!this.queued && this.scrollEvents) {\n this.queued = true;\n readTask(ts => {\n this.queued = false;\n this.detail.event = ev;\n updateScrollDetail(this.detail, this.scrollEl, ts, shouldStart);\n this.ionScroll.emit(this.detail);\n });\n }\n }\n /**\n * Get the element where the actual scrolling takes place.\n * This element can be used to subscribe to `scroll` events or manually modify\n * `scrollTop`. However, it's recommended to use the API provided by `ion-content`:\n *\n * i.e. Using `ionScroll`, `ionScrollStart`, `ionScrollEnd` for scrolling events\n * and `scrollToPoint()` to scroll the content into a certain point.\n */\n async getScrollElement() {\n /**\n * If this gets called in certain early lifecycle hooks (ex: Vue onMounted),\n * scrollEl won't be defined yet with the custom elements build, so wait for it to load in.\n */\n if (!this.scrollEl) {\n await new Promise(resolve => componentOnReady(this.el, resolve));\n }\n return Promise.resolve(this.scrollEl);\n }\n /**\n * Scroll to the top of the component.\n *\n * @param duration The amount of time to take scrolling to the top. Defaults to `0`.\n */\n scrollToTop(duration = 0) {\n return this.scrollToPoint(undefined, 0, duration);\n }\n /**\n * Scroll to the bottom of the component.\n *\n * @param duration The amount of time to take scrolling to the bottom. Defaults to `0`.\n */\n async scrollToBottom(duration = 0) {\n const scrollEl = await this.getScrollElement();\n const y = scrollEl.scrollHeight - scrollEl.clientHeight;\n return this.scrollToPoint(undefined, y, duration);\n }\n /**\n * Scroll by a specified X/Y distance in the component.\n *\n * @param x The amount to scroll by on the horizontal axis.\n * @param y The amount to scroll by on the vertical axis.\n * @param duration The amount of time to take scrolling by that amount.\n */\n async scrollByPoint(x, y, duration) {\n const scrollEl = await this.getScrollElement();\n return this.scrollToPoint(x + scrollEl.scrollLeft, y + scrollEl.scrollTop, duration);\n }\n /**\n * Scroll to a specified X/Y location in the component.\n *\n * @param x The point to scroll to on the horizontal axis.\n * @param y The point to scroll to on the vertical axis.\n * @param duration The amount of time to take scrolling to that point. Defaults to `0`.\n */\n async scrollToPoint(x, y, duration = 0) {\n const el = await this.getScrollElement();\n if (duration < 32) {\n if (y != null) {\n el.scrollTop = y;\n }\n if (x != null) {\n el.scrollLeft = x;\n }\n return;\n }\n let resolve;\n let startTime = 0;\n const promise = new Promise(r => resolve = r);\n const fromY = el.scrollTop;\n const fromX = el.scrollLeft;\n const deltaY = y != null ? y - fromY : 0;\n const deltaX = x != null ? x - fromX : 0;\n // scroll loop\n const step = (timeStamp) => {\n const linearTime = Math.min(1, ((timeStamp - startTime) / duration)) - 1;\n const easedT = Math.pow(linearTime, 3) + 1;\n if (deltaY !== 0) {\n el.scrollTop = Math.floor((easedT * deltaY) + fromY);\n }\n if (deltaX !== 0) {\n el.scrollLeft = Math.floor((easedT * deltaX) + fromX);\n }\n if (easedT < 1) {\n // do not use DomController here\n // must use nativeRaf in order to fire in the next frame\n // TODO: remove as any\n requestAnimationFrame(step);\n }\n else {\n resolve();\n }\n };\n // chill out for a frame first\n requestAnimationFrame(ts => {\n startTime = ts;\n step(ts);\n });\n return promise;\n }\n onScrollStart() {\n this.isScrolling = true;\n this.ionScrollStart.emit({\n isScrolling: true\n });\n if (this.watchDog) {\n clearInterval(this.watchDog);\n }\n // watchdog\n this.watchDog = setInterval(() => {\n if (this.lastScroll < Date.now() - 120) {\n this.onScrollEnd();\n }\n }, 100);\n }\n onScrollEnd() {\n clearInterval(this.watchDog);\n this.watchDog = null;\n if (this.isScrolling) {\n this.isScrolling = false;\n this.ionScrollEnd.emit({\n isScrolling: false\n });\n }\n }\n render() {\n const { isMainContent, scrollX, scrollY } = this;\n const mode = getIonMode(this);\n const forceOverscroll = this.shouldForceOverscroll();\n const transitionShadow = mode === 'ios';\n const TagType = isMainContent ? 'main' : 'div';\n this.resize();\n return (h(Host, { class: createColorClasses(this.color, {\n [mode]: true,\n 'content-sizing': hostContext('ion-popover', this.el),\n 'overscroll': forceOverscroll,\n }), style: {\n '--offset-top': `${this.cTop}px`,\n '--offset-bottom': `${this.cBottom}px`,\n } }, h(\"div\", { id: \"background-content\", part: \"background\" }), h(TagType, { class: {\n 'inner-scroll': true,\n 'scroll-x': scrollX,\n 'scroll-y': scrollY,\n 'overscroll': (scrollX || scrollY) && forceOverscroll\n }, ref: (el) => this.scrollEl = el, onScroll: (this.scrollEvents) ? (ev) => this.onScroll(ev) : undefined, part: \"scroll\" }, h(\"slot\", null)), transitionShadow ? (h(\"div\", { class: \"transition-effect\" }, h(\"div\", { class: \"transition-cover\" }), h(\"div\", { class: \"transition-shadow\" }))) : null, h(\"slot\", { name: \"fixed\" })));\n }\n get el() { return getElement(this); }\n};\nconst getParentElement = (el) => {\n if (el.parentElement) {\n // normal element with a parent element\n return el.parentElement;\n }\n if (el.parentNode && el.parentNode.host) {\n // shadow dom's document fragment\n return el.parentNode.host;\n }\n return null;\n};\nconst getPageElement = (el) => {\n const tabs = el.closest('ion-tabs');\n if (tabs) {\n return tabs;\n }\n /**\n * If we're in a popover, we need to use its wrapper so we can account for space\n * between the popover and the edges of the screen. But if the popover contains\n * its own page element, we should use that instead.\n */\n const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');\n if (page) {\n return page;\n }\n return getParentElement(el);\n};\n// ******** DOM READ ****************\nconst updateScrollDetail = (detail, el, timestamp, shouldStart) => {\n const prevX = detail.currentX;\n const prevY = detail.currentY;\n const prevT = detail.currentTime;\n const currentX = el.scrollLeft;\n const currentY = el.scrollTop;\n const timeDelta = timestamp - prevT;\n if (shouldStart) {\n // remember the start positions\n detail.startTime = timestamp;\n detail.startX = currentX;\n detail.startY = currentY;\n detail.velocityX = detail.velocityY = 0;\n }\n detail.currentTime = timestamp;\n detail.currentX = detail.scrollLeft = currentX;\n detail.currentY = detail.scrollTop = currentY;\n detail.deltaX = currentX - detail.startX;\n detail.deltaY = currentY - detail.startY;\n if (timeDelta > 0 && timeDelta < 100) {\n const velocityX = (currentX - prevX) / timeDelta;\n const velocityY = (currentY - prevY) / timeDelta;\n detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3;\n detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3;\n }\n};\nContent.style = contentCss;\n\nconst handleFooterFade = (scrollEl, baseEl) => {\n readTask(() => {\n const scrollTop = scrollEl.scrollTop;\n const maxScroll = scrollEl.scrollHeight - scrollEl.clientHeight;\n /**\n * Toolbar background will fade\n * out over fadeDuration in pixels.\n */\n const fadeDuration = 10;\n /**\n * Begin fading out maxScroll - 30px\n * from the bottom of the content.\n * Also determine how close we are\n * to starting the fade. If we are\n * before the starting point, the\n * scale value will get clamped to 0.\n * If we are after the maxScroll (rubber\n * band scrolling), the scale value will\n * get clamped to 1.\n */\n const fadeStart = maxScroll - fadeDuration;\n const distanceToStart = scrollTop - fadeStart;\n const scale = clamp(0, 1 - (distanceToStart / fadeDuration), 1);\n writeTask(() => {\n baseEl.style.setProperty('--opacity-scale', scale.toString());\n });\n });\n};\n\nconst footerIosCss = \"ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-ios ion-toolbar:first-of-type{--border-width:0.55px 0 0}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.footer-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.footer-translucent-ios ion-toolbar{--opacity:.8}}.footer-ios.ion-no-border ion-toolbar:first-of-type{--border-width:0}.footer-collapse-fade ion-toolbar{--opacity-scale:inherit}\";\n\nconst footerMdCss = \"ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-md::before{left:0;top:-2px;bottom:auto;background-position:left 0 top 0;position:absolute;width:100%;height:2px;background-image:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==\\\");background-repeat:repeat-x;content:\\\"\\\"}[dir=rtl] .footer-md::before,:host-context([dir=rtl]) .footer-md::before{left:unset;right:unset;right:0}[dir=rtl] .footer-md::before,:host-context([dir=rtl]) .footer-md::before{background-position:right 0 top 0}.footer-md.ion-no-border::before{display:none}\";\n\nlet Footer = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n /**\n * If `true`, the footer will be translucent.\n * Only applies when the mode is `\"ios\"` and the device supports\n * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).\n *\n * Note: In order to scroll content behind the footer, the `fullscreen`\n * attribute needs to be set on the content.\n */\n this.translucent = false;\n this.checkCollapsibleFooter = () => {\n const mode = getIonMode(this);\n if (mode !== 'ios') {\n return;\n }\n const { collapse } = this;\n const hasFade = collapse === 'fade';\n this.destroyCollapsibleFooter();\n if (hasFade) {\n const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');\n const contentEl = (pageEl) ? pageEl.querySelector('ion-content') : null;\n this.setupFadeFooter(contentEl);\n }\n };\n this.setupFadeFooter = async (contentEl) => {\n if (!contentEl) {\n console.error('ion-footer requires a content to collapse. Make sure there is an ion-content.');\n return;\n }\n await new Promise(resolve => componentOnReady(contentEl, resolve));\n const scrollEl = this.scrollEl = await contentEl.getScrollElement();\n /**\n * Handle fading of toolbars on scroll\n */\n this.contentScrollCallback = () => { handleFooterFade(scrollEl, this.el); };\n scrollEl.addEventListener('scroll', this.contentScrollCallback);\n handleFooterFade(scrollEl, this.el);\n };\n }\n componentDidLoad() {\n this.checkCollapsibleFooter();\n }\n componentDidUpdate() {\n this.checkCollapsibleFooter();\n }\n destroyCollapsibleFooter() {\n if (this.scrollEl && this.contentScrollCallback) {\n this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);\n this.contentScrollCallback = undefined;\n }\n }\n render() {\n const { translucent, collapse } = this;\n const mode = getIonMode(this);\n return (h(Host, { role: \"contentinfo\", class: {\n [mode]: true,\n // Used internally for styling\n [`footer-${mode}`]: true,\n [`footer-translucent`]: translucent,\n [`footer-translucent-${mode}`]: translucent,\n [`footer-collapse-${collapse}`]: collapse !== undefined,\n } }, mode === 'ios' && translucent &&\n h(\"div\", { class: \"footer-background\" }), h(\"slot\", null)));\n }\n get el() { return getElement(this); }\n};\nFooter.style = {\n ios: footerIosCss,\n md: footerMdCss\n};\n\nconst TRANSITION = 'all 0.2s ease-in-out';\nconst cloneElement = (tagName) => {\n const getCachedEl = document.querySelector(`${tagName}.ion-cloned-element`);\n if (getCachedEl !== null) {\n return getCachedEl;\n }\n const clonedEl = document.createElement(tagName);\n clonedEl.classList.add('ion-cloned-element');\n clonedEl.style.setProperty('display', 'none');\n document.body.appendChild(clonedEl);\n return clonedEl;\n};\nconst createHeaderIndex = (headerEl) => {\n if (!headerEl) {\n return;\n }\n const toolbars = headerEl.querySelectorAll('ion-toolbar');\n return {\n el: headerEl,\n toolbars: Array.from(toolbars).map((toolbar) => {\n const ionTitleEl = toolbar.querySelector('ion-title');\n return {\n el: toolbar,\n background: toolbar.shadowRoot.querySelector('.toolbar-background'),\n ionTitleEl,\n innerTitleEl: (ionTitleEl) ? ionTitleEl.shadowRoot.querySelector('.toolbar-title') : null,\n ionButtonsEl: Array.from(toolbar.querySelectorAll('ion-buttons')) || []\n };\n }) || []\n };\n};\nconst handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {\n readTask(() => {\n const scrollTop = scrollEl.scrollTop;\n const scale = clamp(1, 1 + (-scrollTop / 500), 1.1);\n // Native refresher should not cause titles to scale\n const nativeRefresher = contentEl.querySelector('ion-refresher.refresher-native');\n if (nativeRefresher === null) {\n writeTask(() => {\n scaleLargeTitles(scrollHeaderIndex.toolbars, scale);\n });\n }\n });\n};\nconst setToolbarBackgroundOpacity = (headerEl, opacity) => {\n /**\n * Fading in the backdrop opacity\n * should happen after the large title\n * has collapsed, so it is handled\n * by handleHeaderFade()\n */\n if (headerEl.collapse === 'fade') {\n return;\n }\n if (opacity === undefined) {\n headerEl.style.removeProperty('--opacity-scale');\n }\n else {\n headerEl.style.setProperty('--opacity-scale', opacity.toString());\n }\n};\nconst handleToolbarBorderIntersection = (ev, mainHeaderIndex, scrollTop) => {\n if (!ev[0].isIntersecting) {\n return;\n }\n /**\n * There is a bug in Safari where overflow scrolling on a non-body element\n * does not always reset the scrollTop position to 0 when letting go. It will\n * set to 1 once the rubber band effect has ended. This causes the background to\n * appear slightly on certain app setups.\n *\n * Additionally, we check if user is rubber banding (scrolling is negative)\n * as this can mean they are using pull to refresh. Once the refresher starts,\n * the content is transformed which can cause the intersection observer to erroneously\n * fire here as well.\n */\n const scale = (ev[0].intersectionRatio > 0.9 || scrollTop <= 0) ? 0 : ((1 - ev[0].intersectionRatio) * 100) / 75;\n setToolbarBackgroundOpacity(mainHeaderIndex.el, (scale === 1) ? undefined : scale);\n};\n/**\n * If toolbars are intersecting, hide the scrollable toolbar content\n * and show the primary toolbar content. If the toolbars are not intersecting,\n * hide the primary toolbar content and show the scrollable toolbar content\n */\nconst handleToolbarIntersection = (ev, mainHeaderIndex, scrollHeaderIndex, scrollEl) => {\n writeTask(() => {\n const scrollTop = scrollEl.scrollTop;\n handleToolbarBorderIntersection(ev, mainHeaderIndex, scrollTop);\n const event = ev[0];\n const intersection = event.intersectionRect;\n const intersectionArea = intersection.width * intersection.height;\n const rootArea = event.rootBounds.width * event.rootBounds.height;\n const isPageHidden = intersectionArea === 0 && rootArea === 0;\n const leftDiff = Math.abs(intersection.left - event.boundingClientRect.left);\n const rightDiff = Math.abs(intersection.right - event.boundingClientRect.right);\n const isPageTransitioning = intersectionArea > 0 && (leftDiff >= 5 || rightDiff >= 5);\n if (isPageHidden || isPageTransitioning) {\n return;\n }\n if (event.isIntersecting) {\n setHeaderActive(mainHeaderIndex, false);\n setHeaderActive(scrollHeaderIndex);\n }\n else {\n /**\n * There is a bug with IntersectionObserver on Safari\n * where `event.isIntersecting === false` when cancelling\n * a swipe to go back gesture. Checking the intersection\n * x, y, width, and height provides a workaround. This bug\n * does not happen when using Safari + Web Animations,\n * only Safari + CSS Animations.\n */\n const hasValidIntersection = (intersection.x === 0 && intersection.y === 0) || (intersection.width !== 0 && intersection.height !== 0);\n if (hasValidIntersection && scrollTop > 0) {\n setHeaderActive(mainHeaderIndex);\n setHeaderActive(scrollHeaderIndex, false);\n setToolbarBackgroundOpacity(mainHeaderIndex.el);\n }\n }\n });\n};\nconst setHeaderActive = (headerIndex, active = true) => {\n if (active) {\n headerIndex.el.classList.remove('header-collapse-condense-inactive');\n }\n else {\n headerIndex.el.classList.add('header-collapse-condense-inactive');\n }\n};\nconst scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => {\n toolbars.forEach(toolbar => {\n const ionTitle = toolbar.ionTitleEl;\n const titleDiv = toolbar.innerTitleEl;\n if (!ionTitle || ionTitle.size !== 'large') {\n return;\n }\n titleDiv.style.transition = (transition) ? TRANSITION : '';\n titleDiv.style.transform = `scale3d(${scale}, ${scale}, 1)`;\n });\n};\nconst handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {\n readTask(() => {\n const scrollTop = scrollEl.scrollTop;\n const baseElHeight = baseEl.clientHeight;\n const fadeStart = (condenseHeader) ? condenseHeader.clientHeight : 0;\n /**\n * If we are using fade header with a condense\n * header, then the toolbar backgrounds should\n * not begin to fade in until the condense\n * header has fully collapsed.\n *\n * Additionally, the main content should not\n * overflow out of the container until the\n * condense header has fully collapsed. When\n * using just the condense header the content\n * should overflow out of the container.\n */\n if ((condenseHeader !== null) && (scrollTop < fadeStart)) {\n baseEl.style.setProperty('--opacity-scale', '0');\n scrollEl.style.setProperty('clip-path', `inset(${baseElHeight}px 0px 0px 0px)`);\n return;\n }\n const distanceToStart = scrollTop - fadeStart;\n const fadeDuration = 10;\n const scale = clamp(0, (distanceToStart / fadeDuration), 1);\n writeTask(() => {\n scrollEl.style.removeProperty('clip-path');\n baseEl.style.setProperty('--opacity-scale', scale.toString());\n });\n });\n};\n\nconst headerIosCss = \"ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-ios ion-toolbar:last-of-type{--border-width:0 0 0.55px}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.header-translucent-ios ion-toolbar{--opacity:.8}.header-collapse-condense-inactive .header-background{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}}.header-ios.ion-no-border ion-toolbar:last-of-type{--border-width:0}.header-collapse-fade ion-toolbar{--opacity-scale:inherit}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:7px;z-index:1}.header-collapse-condense ion-toolbar{--background:var(--ion-background-color, #fff);z-index:0}.header-collapse-condense ion-toolbar:last-of-type{--border-width:0px}.header-collapse-condense ion-toolbar ion-searchbar{height:48px;padding-top:0px;padding-bottom:13px}.header-collapse-main{--opacity-scale:1}.header-collapse-main ion-toolbar{--opacity-scale:inherit}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}\";\n\nconst headerMdCss = \"ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-md::after{left:0;bottom:-5px;background-position:left 0 top -2px;position:absolute;width:100%;height:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==);background-repeat:repeat-x;content:\\\"\\\"}[dir=rtl] .header-md::after,:host-context([dir=rtl]) .header-md::after{left:unset;right:unset;right:0}[dir=rtl] .header-md::after,:host-context([dir=rtl]) .header-md::after{background-position:right 0 top -2px}.header-collapse-condense{display:none}.header-md.ion-no-border::after{display:none}\";\n\nlet Header = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.inheritedAttributes = {};\n /**\n * If `true`, the header will be translucent.\n * Only applies when the mode is `\"ios\"` and the device supports\n * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).\n *\n * Note: In order to scroll content behind the header, the `fullscreen`\n * attribute needs to be set on the content.\n */\n this.translucent = false;\n this.setupFadeHeader = async (contentEl, condenseHeader) => {\n if (!contentEl) {\n console.error('ion-header requires a content to collapse. Make sure there is an ion-content.');\n return;\n }\n await new Promise(resolve => componentOnReady(contentEl, resolve));\n const scrollEl = this.scrollEl = await contentEl.getScrollElement();\n /**\n * Handle fading of toolbars on scroll\n */\n this.contentScrollCallback = () => { handleHeaderFade(this.scrollEl, this.el, condenseHeader); };\n scrollEl.addEventListener('scroll', this.contentScrollCallback);\n handleHeaderFade(this.scrollEl, this.el, condenseHeader);\n };\n }\n componentWillLoad() {\n this.inheritedAttributes = inheritAttributes(this.el, ['role']);\n }\n componentDidLoad() {\n this.checkCollapsibleHeader();\n }\n componentDidUpdate() {\n this.checkCollapsibleHeader();\n }\n disconnectedCallback() {\n this.destroyCollapsibleHeader();\n }\n async checkCollapsibleHeader() {\n const mode = getIonMode(this);\n if (mode !== 'ios') {\n return;\n }\n const { collapse } = this;\n const hasCondense = collapse === 'condense';\n const hasFade = collapse === 'fade';\n this.destroyCollapsibleHeader();\n if (hasCondense) {\n const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');\n const contentEl = (pageEl) ? pageEl.querySelector('ion-content') : null;\n // Cloned elements are always needed in iOS transition\n writeTask(() => {\n const title = cloneElement('ion-title');\n title.size = 'large';\n cloneElement('ion-back-button');\n });\n await this.setupCondenseHeader(contentEl, pageEl);\n }\n else if (hasFade) {\n const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');\n const contentEl = (pageEl) ? pageEl.querySelector('ion-content') : null;\n const condenseHeader = (contentEl) ? contentEl.querySelector('ion-header[collapse=\"condense\"]') : null;\n await this.setupFadeHeader(contentEl, condenseHeader);\n }\n }\n destroyCollapsibleHeader() {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n if (this.scrollEl && this.contentScrollCallback) {\n this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);\n this.contentScrollCallback = undefined;\n }\n if (this.collapsibleMainHeader) {\n this.collapsibleMainHeader.classList.remove('header-collapse-main');\n this.collapsibleMainHeader = undefined;\n }\n }\n async setupCondenseHeader(contentEl, pageEl) {\n if (!contentEl || !pageEl) {\n console.error('ion-header requires a content to collapse, make sure there is an ion-content.');\n return;\n }\n if (typeof IntersectionObserver === 'undefined') {\n return;\n }\n await new Promise(resolve => componentOnReady(contentEl, resolve));\n this.scrollEl = await contentEl.getScrollElement();\n const headers = pageEl.querySelectorAll('ion-header');\n this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense');\n if (!this.collapsibleMainHeader) {\n return;\n }\n const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader);\n const scrollHeaderIndex = createHeaderIndex(this.el);\n if (!mainHeaderIndex || !scrollHeaderIndex) {\n return;\n }\n setHeaderActive(mainHeaderIndex, false);\n setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);\n /**\n * Handle interaction between toolbar collapse and\n * showing/hiding content in the primary ion-header\n * as well as progressively showing/hiding the main header\n * border as the top-most toolbar collapses or expands.\n */\n const toolbarIntersection = (ev) => { handleToolbarIntersection(ev, mainHeaderIndex, scrollHeaderIndex, this.scrollEl); };\n this.intersectionObserver = new IntersectionObserver(toolbarIntersection, { root: contentEl, threshold: [0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] });\n this.intersectionObserver.observe(scrollHeaderIndex.toolbars[scrollHeaderIndex.toolbars.length - 1].el);\n /**\n * Handle scaling of large iOS titles and\n * showing/hiding border on last toolbar\n * in primary header\n */\n this.contentScrollCallback = () => { handleContentScroll(this.scrollEl, scrollHeaderIndex, contentEl); };\n this.scrollEl.addEventListener('scroll', this.contentScrollCallback);\n writeTask(() => {\n if (this.collapsibleMainHeader !== undefined) {\n this.collapsibleMainHeader.classList.add('header-collapse-main');\n }\n });\n }\n render() {\n const { translucent, inheritedAttributes } = this;\n const mode = getIonMode(this);\n const collapse = this.collapse || 'none';\n // banner role must be at top level, so remove role if inside a menu\n const roleType = hostContext('ion-menu', this.el) ? 'none' : 'banner';\n return (h(Host, Object.assign({ role: roleType, class: {\n [mode]: true,\n // Used internally for styling\n [`header-${mode}`]: true,\n [`header-translucent`]: this.translucent,\n [`header-collapse-${collapse}`]: true,\n [`header-translucent-${mode}`]: this.translucent,\n } }, inheritedAttributes), mode === 'ios' && translucent &&\n h(\"div\", { class: \"header-background\" }), h(\"slot\", null)));\n }\n get el() { return getElement(this); }\n};\nHeader.style = {\n ios: headerIosCss,\n md: headerMdCss\n};\n\nconst routeOutletCss = \":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;overflow:hidden;z-index:0}\";\n\nlet RouterOutlet = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionNavWillLoad = createEvent(this, \"ionNavWillLoad\", 7);\n this.ionNavWillChange = createEvent(this, \"ionNavWillChange\", 3);\n this.ionNavDidChange = createEvent(this, \"ionNavDidChange\", 3);\n this.gestureOrAnimationInProgress = false;\n /**\n * The mode determines which platform styles to use.\n */\n this.mode = getIonMode(this);\n /**\n * If `true`, the router-outlet should animate the transition of components.\n */\n this.animated = true;\n }\n swipeHandlerChanged() {\n if (this.gesture) {\n this.gesture.enable(this.swipeHandler !== undefined);\n }\n }\n async connectedCallback() {\n const onStart = () => {\n this.gestureOrAnimationInProgress = true;\n if (this.swipeHandler) {\n this.swipeHandler.onStart();\n }\n };\n this.gesture = (await import('./swipe-back-edc455e2.js')).createSwipeBackGesture(this.el, () => !this.gestureOrAnimationInProgress && !!this.swipeHandler && this.swipeHandler.canStart(), () => onStart(), step => this.ani && this.ani.progressStep(step), (shouldComplete, step, dur) => {\n if (this.ani) {\n this.ani.onFinish(() => {\n this.gestureOrAnimationInProgress = false;\n if (this.swipeHandler) {\n this.swipeHandler.onEnd(shouldComplete);\n }\n }, { oneTimeCallback: true });\n // Account for rounding errors in JS\n let newStepValue = (shouldComplete) ? -0.001 : 0.001;\n /**\n * Animation will be reversed here, so need to\n * reverse the easing curve as well\n *\n * Additionally, we need to account for the time relative\n * to the new easing curve, as `stepValue` is going to be given\n * in terms of a linear curve.\n */\n if (!shouldComplete) {\n this.ani.easing('cubic-bezier(1, 0, 0.68, 0.28)');\n newStepValue += getTimeGivenProgression([0, 0], [1, 0], [0.68, 0.28], [1, 1], step)[0];\n }\n else {\n newStepValue += getTimeGivenProgression([0, 0], [0.32, 0.72], [0, 1], [1, 1], step)[0];\n }\n this.ani.progressEnd(shouldComplete ? 1 : 0, newStepValue, dur);\n }\n else {\n this.gestureOrAnimationInProgress = false;\n }\n });\n this.swipeHandlerChanged();\n }\n componentWillLoad() {\n this.ionNavWillLoad.emit();\n }\n disconnectedCallback() {\n if (this.gesture) {\n this.gesture.destroy();\n this.gesture = undefined;\n }\n }\n /** @internal */\n async commit(enteringEl, leavingEl, opts) {\n const unlock = await this.lock();\n let changed = false;\n try {\n changed = await this.transition(enteringEl, leavingEl, opts);\n }\n catch (e) {\n console.error(e);\n }\n unlock();\n return changed;\n }\n /** @internal */\n async setRouteId(id, params, direction, animation) {\n const changed = await this.setRoot(id, params, {\n duration: direction === 'root' ? 0 : undefined,\n direction: direction === 'back' ? 'back' : 'forward',\n animationBuilder: animation\n });\n return {\n changed,\n element: this.activeEl\n };\n }\n /** @internal */\n async getRouteId() {\n const active = this.activeEl;\n return active ? {\n id: active.tagName,\n element: active,\n } : undefined;\n }\n async setRoot(component, params, opts) {\n if (this.activeComponent === component) {\n return false;\n }\n // attach entering view to DOM\n const leavingEl = this.activeEl;\n const enteringEl = await attachComponent(this.delegate, this.el, component, ['ion-page', 'ion-page-invisible'], params);\n this.activeComponent = component;\n this.activeEl = enteringEl;\n // commit animation\n await this.commit(enteringEl, leavingEl, opts);\n await detachComponent(this.delegate, leavingEl);\n return true;\n }\n async transition(enteringEl, leavingEl, opts = {}) {\n if (leavingEl === enteringEl) {\n return false;\n }\n // emit nav will change event\n this.ionNavWillChange.emit();\n const { el, mode } = this;\n const animated = this.animated && config.getBoolean('animated', true);\n const animationBuilder = opts.animationBuilder || this.animation || config.get('navAnimation');\n await transition(Object.assign(Object.assign({ mode,\n animated,\n enteringEl,\n leavingEl, baseEl: el, progressCallback: (opts.progressAnimation\n ? ani => {\n /**\n * Because this progress callback is called asynchronously\n * it is possible for the gesture to start and end before\n * the animation is ever set. In that scenario, we should\n * immediately call progressEnd so that the transition promise\n * resolves and the gesture does not get locked up.\n */\n if (ani !== undefined && !this.gestureOrAnimationInProgress) {\n this.gestureOrAnimationInProgress = true;\n ani.onFinish(() => {\n this.gestureOrAnimationInProgress = false;\n if (this.swipeHandler) {\n this.swipeHandler.onEnd(false);\n }\n }, { oneTimeCallback: true });\n /**\n * Playing animation to beginning\n * with a duration of 0 prevents\n * any flickering when the animation\n * is later cleaned up.\n */\n ani.progressEnd(0, 0, 0);\n }\n else {\n this.ani = ani;\n }\n }\n : undefined) }, opts), { animationBuilder }));\n // emit nav changed event\n this.ionNavDidChange.emit();\n return true;\n }\n async lock() {\n const p = this.waitPromise;\n let resolve;\n this.waitPromise = new Promise(r => resolve = r);\n if (p !== undefined) {\n await p;\n }\n return resolve;\n }\n render() {\n return (h(\"slot\", null));\n }\n get el() { return getElement(this); }\n static get watchers() { return {\n \"swipeHandler\": [\"swipeHandlerChanged\"]\n }; }\n};\nRouterOutlet.style = routeOutletCss;\n\nconst titleIosCss = \":host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{left:0;top:0;padding-left:90px;padding-right:90px;padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);font-size:17px;font-weight:600;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:90px;padding-inline-start:90px;-webkit-padding-end:90px;padding-inline-end:90px}}:host(.title-small){padding-left:9px;padding-right:9px;padding-top:6px;padding-bottom:16px;position:relative;font-size:13px;font-weight:normal}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(.title-small){padding-left:unset;padding-right:unset;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px}}:host(.title-large){padding-left:16px;padding-right:16px;padding-top:0;padding-bottom:0;-webkit-transform-origin:left center;transform-origin:left center;bottom:0;-ms-flex-align:end;align-items:flex-end;min-width:100%;padding-bottom:6px;font-size:34px;font-weight:700;text-align:start}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(.title-large){padding-left:unset;padding-right:unset;-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px}}:host(.title-large.title-rtl){-webkit-transform-origin:right center;transform-origin:right center}:host(.title-large.ion-cloned-element){--color:var(--ion-text-color, #000)}:host(.title-large) .toolbar-title{-webkit-transform-origin:inherit;transform-origin:inherit}:host-context([dir=rtl]):host(.title-large) .toolbar-title,:host-context([dir=rtl]).title-large .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}\";\n\nconst titleMdCss = \":host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{padding-left:20px;padding-right:20px;padding-top:0;padding-bottom:0;font-size:20px;font-weight:500;letter-spacing:0.0125em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px}}:host(.title-small){width:100%;height:100%;font-size:15px;font-weight:normal}\";\n\nlet ToolbarTitle = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.ionStyle = createEvent(this, \"ionStyle\", 7);\n }\n sizeChanged() {\n this.emitStyle();\n }\n connectedCallback() {\n this.emitStyle();\n }\n emitStyle() {\n const size = this.getSize();\n this.ionStyle.emit({\n [`title-${size}`]: true\n });\n }\n getSize() {\n return (this.size !== undefined) ? this.size : 'default';\n }\n render() {\n const mode = getIonMode(this);\n const size = this.getSize();\n return (h(Host, { class: createColorClasses(this.color, {\n [mode]: true,\n [`title-${size}`]: true,\n 'title-rtl': document.dir === 'rtl'\n }) }, h(\"div\", { class: \"toolbar-title\" }, h(\"slot\", null))));\n }\n get el() { return getElement(this); }\n static get watchers() { return {\n \"size\": [\"sizeChanged\"]\n }; }\n};\nToolbarTitle.style = {\n ios: titleIosCss,\n md: titleMdCss\n};\n\nconst toolbarIosCss = \":host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:var(--ion-safe-area-left);padding-right:var(--ion-safe-area-right);display:block;position:relative;width:100%;color:var(--color);font-family:var(--ion-font-family, inherit);contain:content;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--ion-safe-area-left);padding-inline-start:var(--ion-safe-area-left);-webkit-padding-end:var(--ion-safe-area-right);padding-inline-end:var(--ion-safe-area-right)}}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.toolbar-container{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.toolbar-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));z-index:-1;pointer-events:none}::slotted(ion-progress-bar){left:0;right:0;bottom:0;position:absolute}:host{--background:var(--ion-toolbar-background, var(--ion-color-step-50, #f7f7f7));--color:var(--ion-toolbar-color, var(--ion-text-color, #000));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.2))));--padding-top:3px;--padding-bottom:3px;--padding-start:4px;--padding-end:4px;--min-height:44px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:4;order:4;min-width:0}:host(.toolbar-segment) .toolbar-content{display:-ms-inline-flexbox;display:inline-flex}:host(.toolbar-searchbar) .toolbar-container{padding-top:0;padding-bottom:0}:host(.toolbar-searchbar) ::slotted(*){-ms-flex-item-align:start;align-self:start}:host(.toolbar-searchbar) ::slotted(ion-chip){margin-top:3px}:host(.toolbar-searchbar) ::slotted(ion-back-button){height:38px}::slotted(ion-buttons){min-height:38px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:3;order:3}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}:host(.toolbar-title-large) .toolbar-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:start;align-items:flex-start}:host(.toolbar-title-large) .toolbar-content ion-title{-ms-flex:1;flex:1;-ms-flex-order:8;order:8;min-width:100%}\";\n\nconst toolbarMdCss = \":host{--border-width:0;--border-style:solid;--opacity:1;--opacity-scale:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:var(--ion-safe-area-left);padding-right:var(--ion-safe-area-right);display:block;position:relative;width:100%;color:var(--color);font-family:var(--ion-font-family, inherit);contain:content;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--ion-safe-area-left);padding-inline-start:var(--ion-safe-area-left);-webkit-padding-end:var(--ion-safe-area-right);padding-inline-end:var(--ion-safe-area-right)}}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.toolbar-container{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.toolbar-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:calc(var(--opacity) * var(--opacity-scale));z-index:-1;pointer-events:none}::slotted(ion-progress-bar){left:0;right:0;bottom:0;position:absolute}:host{--background:var(--ion-toolbar-background, var(--ion-background-color, #fff));--color:var(--ion-toolbar-color, var(--ion-text-color, #424242));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, #c1c4cd)));--padding-top:0;--padding-bottom:0;--padding-start:0;--padding-end:0;--min-height:56px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:3;order:3;min-width:0;max-width:100%}::slotted(ion-segment){min-height:var(--min-height)}::slotted(.buttons-first-slot){margin-left:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){::slotted(.buttons-first-slot){margin-left:unset;-webkit-margin-start:4px;margin-inline-start:4px}}::slotted(.buttons-last-slot){margin-right:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){::slotted(.buttons-last-slot){margin-right:unset;-webkit-margin-end:4px;margin-inline-end:4px}}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:4;order:4}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}\";\n\nlet Toolbar = class {\n constructor(hostRef) {\n registerInstance(this, hostRef);\n this.childrenStyles = new Map();\n }\n componentWillLoad() {\n const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));\n const firstButtons = buttons.find(button => {\n return button.slot === 'start';\n });\n if (firstButtons) {\n firstButtons.classList.add('buttons-first-slot');\n }\n const buttonsReversed = buttons.reverse();\n const lastButtons = buttonsReversed.find(button => button.slot === 'end') ||\n buttonsReversed.find(button => button.slot === 'primary') ||\n buttonsReversed.find(button => button.slot === 'secondary');\n if (lastButtons) {\n lastButtons.classList.add('buttons-last-slot');\n }\n }\n childrenStyle(ev) {\n ev.stopPropagation();\n const tagName = ev.target.tagName;\n const updatedStyles = ev.detail;\n const newStyles = {};\n const childStyles = this.childrenStyles.get(tagName) || {};\n let hasStyleChange = false;\n Object.keys(updatedStyles).forEach(key => {\n const childKey = `toolbar-${key}`;\n const newValue = updatedStyles[key];\n if (newValue !== childStyles[childKey]) {\n hasStyleChange = true;\n }\n if (newValue) {\n newStyles[childKey] = true;\n }\n });\n if (hasStyleChange) {\n this.childrenStyles.set(tagName, newStyles);\n forceUpdate(this);\n }\n }\n render() {\n const mode = getIonMode(this);\n const childStyles = {};\n this.childrenStyles.forEach(value => {\n Object.assign(childStyles, value);\n });\n return (h(Host, { class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {\n [mode]: true,\n 'in-toolbar': hostContext('ion-toolbar', this.el),\n })) }, h(\"div\", { class: \"toolbar-background\" }), h(\"div\", { class: \"toolbar-container\" }, h(\"slot\", { name: \"start\" }), h(\"slot\", { name: \"secondary\" }), h(\"div\", { class: \"toolbar-content\" }, h(\"slot\", null)), h(\"slot\", { name: \"primary\" }), h(\"slot\", { name: \"end\" }))));\n }\n get el() { return getElement(this); }\n};\nToolbar.style = {\n ios: toolbarIosCss,\n md: toolbarMdCss\n};\n\nexport { App as ion_app, Buttons as ion_buttons, Content as ion_content, Footer as ion_footer, Header as ion_header, RouterOutlet as ion_router_outlet, ToolbarTitle as ion_title, Toolbar as ion_toolbar };\n"],"sourceRoot":"webpack:///","file":"5017.ceffb0887021e3ef.js"}