PageSourceSearch

https://tru-x.com/node_modules_ionic_core_dist_esm_ion-app_8_entry_js.js

js tru-x.com collected 2026-10-04 13:34:40 UTC 78,089 bytes, 1,543 lines download raw bytes

1"use strict";
2(self["webpackChunkapp"] = self["webpackChunkapp"] || []).push([["node_modules_ionic_core_dist_esm_ion-app_8_entry_js"],{
3
4/***/ 4812:
5/*!**************************************************************!*\
6  !*** ./node_modules/@ionic/core/dist/esm/ion-app_8.entry.js ***!
7  \**************************************************************/
8/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
9
10__webpack_require__.r(__webpack_exports__);
11/* harmony export */ __webpack_require__.d(__webpack_exports__, {
12/* harmony export */   "ion_app": () => (/* binding */ App),
13/* harmony export */   "ion_buttons": () => (/* binding */ Buttons),
14/* harmony export */   "ion_content": () => (/* binding */ Content),
15/* harmony export */   "ion_footer": () => (/* binding */ Footer),
16/* harmony export */   "ion_header": () => (/* binding */ Header),
17/* harmony export */   "ion_router_outlet": () => (/* binding */ RouterOutlet),
18/* harmony export */   "ion_title": () => (/* binding */ ToolbarTitle),
19/* harmony export */   "ion_toolbar": () => (/* binding */ Toolbar)
20/* harmony export */ });
21/* harmony import */ var C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js */ 1670);
22/* harmony import */ var _index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index-b3eecb14.js */ 1049);
23/* harmony import */ var _ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ionic-global-0ebe321c.js */ 1584);
24/* harmony import */ var _helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers-6e1e5b65.js */ 8345);
25/* harmony import */ var _dir_e8b767a8_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dir-e8b767a8.js */ 7481);
26/* harmony import */ var _theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./theme-a24ff1ad.js */ 4596);
27/* harmony import */ var _cubic_bezier_154a53a5_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./cubic-bezier-154a53a5.js */ 4585);
28/* harmony import */ var _framework_delegate_0e9f0224_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./framework-delegate-0e9f0224.js */ 2673);
29/* harmony import */ var _index_e6c2c822_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./index-e6c2c822.js */ 7582);
30
31
32/*!
33 * (C) Ionic http://ionicframework.com - MIT License
34 */
35
36
37
38
39
40
41
42
43const 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}";
44const App = class {
45  constructor(hostRef) {
46    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
47  }
48
49  componentDidLoad() {
50    var _this = this;
51
52    {
53      rIC( /*#__PURE__*/(0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
54        const isHybrid = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.a)(window, 'hybrid');
55
56        if (!_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.getBoolean('_testing')) {
57          __webpack_require__.e(/*! import() */ "node_modules_ionic_core_dist_esm_tap-click-a895802b_js").then(__webpack_require__.bind(__webpack_require__, /*! ./tap-click-a895802b.js */ 4747)).then(module => module.startTapClick(_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c));
58        }
59
60        if (_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.getBoolean('statusTap', isHybrid)) {
61          __webpack_require__.e(/*! import() */ "node_modules_ionic_core_dist_esm_status-tap-3ed8ecec_js").then(__webpack_require__.bind(__webpack_require__, /*! ./status-tap-3ed8ecec.js */ 8386)).then(module => module.startStatusTap());
62        }
63
64        if (_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.getBoolean('inputShims', needInputShims())) {
65          __webpack_require__.e(/*! import() */ "node_modules_ionic_core_dist_esm_input-shims-61232da0_js").then(__webpack_require__.bind(__webpack_require__, /*! ./input-shims-61232da0.js */ 6810)).then(module => module.startInputShims(_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c));
66        }
67
68        const hardwareBackButtonModule = yield Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./hardware-back-button-ace6a71b.js */ 6826));
69
70        if (_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.getBoolean('hardwareBackButton', isHybrid)) {
71          hardwareBackButtonModule.startHardwareBackButton();
72        } else {
73          hardwareBackButtonModule.blockHardwareBackButton();
74        }
75
76        if (typeof window !== 'undefined') {
77          __webpack_require__.e(/*! import() */ "common").then(__webpack_require__.bind(__webpack_require__, /*! ./keyboard-808e4e15.js */ 8022)).then(module => module.startKeyboardAssist(window));
78        }
79
80        __webpack_require__.e(/*! import() */ "common").then(__webpack_require__.bind(__webpack_require__, /*! ./focus-visible-02bf7a99.js */ 1550)).then(module => _this.focusVisible = module.startFocusVisible());
81      }));
82    }
83  }
84  /**
85   * @internal
86   * Used to set focus on an element that uses `ion-focusable`.
87   * Do not use this if focusing the element as a result of a keyboard
88   * event as the focus utility should handle this for us. This method
89   * should be used when we want to programmatically focus an element as
90   * a result of another user action. (Ex: We focus the first element
91   * inside of a popover when the user presents it, but the popover is not always
92   * presented as a result of keyboard action.)
93   */
94
95
96  setFocus(elements) {
97    var _this2 = this;
98
99    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
100      if (_this2.focusVisible) {
101        _this2.focusVisible.setFocus(elements);
102      }
103    })();
104  }
105
106  render() {
107    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
108    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, {
109      class: {
110        [mode]: true,
111        'ion-page': true,
112        'force-statusbar-padding': _ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.getBoolean('_forceStatusbarPadding')
113      }
114    });
115  }
116
117  get el() {
118    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
119  }
120
121};
122
123const needInputShims = () => {
124  return (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.a)(window, 'ios') && (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.a)(window, 'mobile');
125};
126
127const rIC = callback => {
128  if ('requestIdleCallback' in window) {
129    window.requestIdleCallback(callback);
130  } else {
131    setTimeout(callback, 32);
132  }
133};
134
135App.style = appCss;
136const 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;
136height: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}";
137const 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)}
137.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}";
138const Buttons = class {
139  constructor(hostRef) {
140    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
141    /**
142     * If true, buttons will disappear when its
143     * parent toolbar has fully collapsed if the toolbar
144     * is not the first toolbar. If the toolbar is the
145     * first toolbar, the buttons will be hidden and will
146     * only be shown once all toolbars have fully collapsed.
147     *
148     * Only applies in `ios` mode with `collapse` set to
149     * `true` on `ion-header`.
150     *
151     * Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles)
152     */
153
154    this.collapse = false;
155  }
156
157  render() {
158    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
159    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, {
160      class: {
161        [mode]: true,
162        ['buttons-collapse']: this.collapse
163      }
164    });
165  }
166
167};
168Buttons.style = {
169  ios: buttonsIosCss,
170  md: buttonsMdCss
171};
172const 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;width:100%;height:100vh;opacity:0;pointer-events:none}:host(.content-ltr) .transition-effect{left:-100%;}:host(.content-rtl) .transition-effect{right:-100%;}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}
172.transition-shadow{display:block;position:absolute;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}:host(.content-ltr) .transition-shadow{right:0;}:host(.content-rtl) .transition-shadow{left:0;-webkit-transform:scaleX(-1);transform:scaleX(-1)}::slotted([slot=fixed]){position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0)}";
173const Content = class {
174  constructor(hostRef) {
175    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
176    this.ionScrollStart = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionScrollStart", 7);
177    this.ionScroll = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionScroll", 7);
178    this.ionScrollEnd = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionScrollEnd", 7);
179    this.isScrolling = false;
180    this.lastScroll = 0;
181    this.queued = false;
182    this.cTop = -1;
183    this.cBottom = -1;
184    this.isMainContent = true; // Detail is used in a hot loop in the scroll event, by allocating it here
185    // V8 will be able to inline any read/write to it since it's a monomorphic class.
186    // https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html
187
188    this.detail = {
189      scrollTop: 0,
190      scrollLeft: 0,
191      type: 'scroll',
192      event: undefined,
193      startX: 0,
194      startY: 0,
195      startTime: 0,
196      currentX: 0,
197      currentY: 0,
198      velocityX: 0,
199      velocityY: 0,
200      deltaX: 0,
201      deltaY: 0,
202      currentTime: 0,
203      data: undefined,
204      isScrolling: true
205    };
206    /**
207     * If `true`, the content will scroll behind the headers
208     * and footers. This effect can easily be seen by setting the toolbar
209     * to transparent.
210     */
211
212    this.fullscreen = false;
213    /**
214     * If you want to enable the content scrolling in the X axis, set this property to `true`.
215     */
216
217    this.scrollX = false;
218    /**
219     * If you want to disable the content scrolling in the Y axis, set this property to `false`.
220     */
221
222    this.scrollY = true;
223    /**
224     * Because of performance reasons, ionScroll events are disabled by default, in order to enable them
225     * and start listening from (ionScroll), set this property to `true`.
226     */
227
228    this.scrollEvents = false;
229  }
230
231  connectedCallback() {
232    this.isMainContent = this.el.closest('ion-menu, ion-popover, ion-modal') === null;
233  }
234
235  disconnectedCallback() {
236    this.onScrollEnd();
237  }
238
239  onAppLoad() {
240    this.resize();
241  }
242
243  shouldForceOverscroll() {
244    const {
245      forceOverscroll
246    } = this;
247    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
248    return forceOverscroll === undefined ? mode === 'ios' && (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.a)('ios') : forceOverscroll;
249  }
250
251  resize() {
252    if (this.fullscreen) {
253      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.f)(() => this.readDimensions());
254    } else if (this.cTop !== 0 || this.cBottom !== 0) {
255      this.cTop = this.cBottom = 0;
256      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.j)(this);
257    }
258  }
259
260  readDimensions() {
261    const page = getPageElement(this.el);
262    const top = Math.max(this.el.offsetTop, 0);
263    const bottom = Math.max(page.offsetHeight - top - this.el.offsetHeight, 0);
264    const dirty = top !== this.cTop || bottom !== this.cBottom;
265
266    if (dirty) {
267      this.cTop = top;
268      this.cBottom = bottom;
269      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.j)(this);
270    }
271  }
272
273  onScroll(ev) {
274    const timeStamp = Date.now();
275    const shouldStart = !this.isScrolling;
276    this.lastScroll = timeStamp;
277
278    if (shouldStart) {
279      this.onScrollStart();
280    }
281
282    if (!this.queued && this.scrollEvents) {
283      this.queued = true;
284      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.f)(ts => {
285        this.queued = false;
286        this.detail.event = ev;
287        updateScrollDetail(this.detail, this.scrollEl, ts, shouldStart);
288        this.ionScroll.emit(this.detail);
289      });
290    }
291  }
292  /**
293   * Get the element where the actual scrolling takes place.
294   * This element can be used to subscribe to `scroll` events or manually modify
295   * `scrollTop`. However, it's recommended to use the API provided by `ion-content`:
296   *
297   * i.e. Using `ionScroll`, `ionScrollStart`, `ionScrollEnd` for scrolling events
298   * and `scrollToPoint()` to scroll the content into a certain point.
299   */
300
301
302  getScrollElement() {
303    var _this3 = this;
304
305    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
306      /**
307       * If this gets called in certain early lifecycle hooks (ex: Vue onMounted),
308       * scrollEl won't be defined yet with the custom elements build, so wait for it to load in.
309       */
310      if (!_this3.scrollEl) {
311        yield new Promise(resolve => (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.c)(_this3.el, resolve));
312      }
313
314      return Promise.resolve(_this3.scrollEl);
315    })();
316  }
317  /**
318   * Scroll to the top of the component.
319   *
320   * @param duration The amount of time to take scrolling to the top. Defaults to `0`.
321   */
322
323
324  scrollToTop(duration = 0) {
325    return this.scrollToPoint(undefined, 0, duration);
326  }
327  /**
328   * Scroll to the bottom of the component.
329   *
330   * @param duration The amount of time to take scrolling to the bottom. Defaults to `0`.
331   */
332
333
334  scrollToBottom(duration = 0) {
335    var _this4 = this;
336
337    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
338      const scrollEl = yield _this4.getScrollElement();
339      const y = scrollEl.scrollHeight - scrollEl.clientHeight;
340      return _this4.scrollToPoint(undefined, y, duration);
341    })();
342  }
343  /**
344   * Scroll by a specified X/Y distance in the component.
345   *
346   * @param x The amount to scroll by on the horizontal axis.
347   * @param y The amount to scroll by on the vertical axis.
348   * @param duration The amount of time to take scrolling by that amount.
349   */
350
351
352  scrollByPoint(x, y, duration) {
353    var _this5 = this;
354
355    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
356      const scrollEl = yield _this5.getScrollElement();
357      return _this5.scrollToPoint(x + scrollEl.scrollLeft, y + scrollEl.scrollTop, duration);
358    })();
359  }
360  /**
361   * Scroll to a specified X/Y location in the component.
362   *
363   * @param x The point to scroll to on the horizontal axis.
364   * @param y The point to scroll to on the vertical axis.
365   * @param duration The amount of time to take scrolling to that point. Defaults to `0`.
366   */
367
368
369  scrollToPoint(x, y, duration = 0) {
370    var _this6 = this;
371
372    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
373      const el = yield _this6.getScrollElement();
374
375      if (duration < 32) {
376        if (y != null) {
377          el.scrollTop = y;
378        }
379
380        if (x != null) {
381          el.scrollLeft = x;
382        }
383
384        return;
385      }
386
387      let resolve;
388      let startTime = 0;
389      const promise = new Promise(r => resolve = r);
390      const fromY = el.scrollTop;
391      const fromX = el.scrollLeft;
392      const deltaY = y != null ? y - fromY : 0;
393      const deltaX = x != null ? x - fromX : 0; // scroll loop
394
395      const step = timeStamp => {
396        const linearTime = Math.min(1, (timeStamp - startTime) / duration) - 1;
397        const easedT = Math.pow(linearTime, 3) + 1;
398
399        if (deltaY !== 0) {
400          el.scrollTop = Math.floor(easedT * deltaY + fromY);
401        }
402
403        if (deltaX !== 0) {
404          el.scrollLeft = Math.floor(easedT * deltaX + fromX);
405        }
406
407        if (easedT < 1) {
408          // do not use DomController here
409          // must use nativeRaf in order to fire in the next frame
410          // TODO: remove as any
411          requestAnimationFrame(step);
412        } else {
413          resolve();
414        }
415      }; // chill out for a frame first
416
417
418      requestAnimationFrame(ts => {
419        startTime = ts;
420        step(ts);
421      });
422      return promise;
423    })();
424  }
425
426  onScrollStart() {
427    this.isScrolling = true;
428    this.ionScrollStart.emit({
429      isScrolling: true
430    });
431
432    if (this.watchDog) {
433      clearInterval(this.watchDog);
434    } // watchdog
435
436
437    this.watchDog = setInterval(() => {
438      if (this.lastScroll < Date.now() - 120) {
439        this.onScrollEnd();
440      }
441    }, 100);
442  }
443
444  onScrollEnd() {
445    clearInterval(this.watchDog);
446    this.watchDog = null;
447
448    if (this.isScrolling) {
449      this.isScrolling = false;
450      this.ionScrollEnd.emit({
451        isScrolling: false
452      });
453    }
454  }
455
456  render() {
457    const {
458      isMainContent,
459      scrollX,
460      scrollY,
461      el
462    } = this;
463    const rtl = (0,_dir_e8b767a8_js__WEBPACK_IMPORTED_MODULE_4__.i)(el) ? 'rtl' : 'ltr';
464    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
465    const forceOverscroll = this.shouldForceOverscroll();
466    const transitionShadow = mode === 'ios';
467    const TagType = isMainContent ? 'main' : 'div';
468    this.resize();
469    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, {
470      class: (0,_theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__.c)(this.color, {
471        [mode]: true,
472        'content-sizing': (0,_theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__.h)('ion-popover', this.el),
473        'overscroll': forceOverscroll,
474        [`content-${rtl}`]: true
475      }),
476      style: {
477        '--offset-top': `${this.cTop}px`,
478        '--offset-bottom': `${this.cBottom}px`
479      }
480    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
481      id: "background-content",
482      part: "background"
483    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(TagType, {
484      class: {
485        'inner-scroll': true,
486        'scroll-x': scrollX,
487        'scroll-y': scrollY,
488        'overscroll': (scrollX || scrollY) && forceOverscroll
489      },
490      ref: scrollEl => this.scrollEl = scrollEl,
491      onScroll: this.scrollEvents ? ev => this.onScroll(ev) : undefined,
492      part: "scroll"
493    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", null)), transitionShadow ? (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
494      class: "transition-effect"
495    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
496      class: "transition-cover"
497    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
498      class: "transition-shadow"
499    })) : null, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", {
500      name: "fixed"
501    }));
502  }
503
504  get el() {
505    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
506  }
507
508};
509
510const getParentElement = el => {
511  if (el.parentElement) {
512    // normal element with a parent element
513    return el.parentElement;
514  }
515
516  if (el.parentNode && el.parentNode.host) {
517    // shadow dom's document fragment
518    return el.parentNode.host;
519  }
520
521  return null;
522};
523
524const getPageElement = el => {
525  const tabs = el.closest('ion-tabs');
526
527  if (tabs) {
528    return tabs;
529  }
530  /**
531   * If we're in a popover, we need to use its wrapper so we can account for space
532   * between the popover and the edges of the screen. But if the popover contains
533   * its own page element, we should use that instead.
534   */
535
536
537  const page = el.closest('ion-app, ion-page, .ion-page, page-inner, .popover-content');
538
539  if (page) {
540    return page;
541  }
542
543  return getParentElement(el);
544}; // ******** DOM READ ****************
545
546
547const updateScrollDetail = (detail, el, timestamp, shouldStart) => {
548  const prevX = detail.currentX;
549  const prevY = detail.currentY;
550  const prevT = detail.currentTime;
551  const currentX = el.scrollLeft;
552  const currentY = el.scrollTop;
553  const timeDelta = timestamp - prevT;
554
555  if (shouldStart) {
556    // remember the start positions
557    detail.startTime = timestamp;
558    detail.startX = currentX;
559    detail.startY = currentY;
560    detail.velocityX = detail.velocityY = 0;
561  }
562
563  detail.currentTime = timestamp;
564  detail.currentX = detail.scrollLeft = currentX;
565  detail.currentY = detail.scrollTop = currentY;
566  detail.deltaX = currentX - detail.startX;
567  detail.deltaY = currentY - detail.startY;
568
569  if (timeDelta > 0 && timeDelta < 100) {
570    const velocityX = (currentX - prevX) / timeDelta;
571    const velocityY = (currentY - prevY) / timeDelta;
572    detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3;
573    detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3;
574  }
575};
576
577Content.style = contentCss;
578
579const handleFooterFade = (scrollEl, baseEl) => {
580  (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.f)(() => {
581    const scrollTop = scrollEl.scrollTop;
582    const maxScroll = scrollEl.scrollHeight - scrollEl.clientHeight;
583    /**
584     * Toolbar background will fade
585     * out over fadeDuration in pixels.
586     */
587
588    const fadeDuration = 10;
589    /**
590     * Begin fading out maxScroll - 30px
591     * from the bottom of the content.
592     * Also determine how close we are
593     * to starting the fade. If we are
594     * before the starting point, the
595     * scale value will get clamped to 0.
596     * If we are after the maxScroll (rubber
597     * band scrolling), the scale value will
598     * get clamped to 1.
599     */
600
601    const fadeStart = maxScroll - fadeDuration;
602    const distanceToStart = scrollTop - fadeStart;
603    const scale = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.k)(0, 1 - distanceToStart / fadeDuration, 1);
604    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.c)(() => {
605      baseEl.style.setProperty('--opacity-scale', scale.toString());
606    });
607  });
608};
609
610const 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}";
611const 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}";
612const Footer = class {
613  constructor(hostRef) {
614    var _this7 = this;
615
616    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
617    /**
618     * If `true`, the footer will be translucent.
619     * Only applies when the mode is `"ios"` and the device supports
620     * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
621     *
622     * Note: In order to scroll content behind the footer, the `fullscreen`
623     * attribute needs to be set on the content.
624     */
625
626    this.translucent = false;
627
628    this.checkCollapsibleFooter = () => {
629      const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
630
631      if (mode !== 'ios') {
632        return;
633      }
634
635      const {
636        collapse
637      } = this;
638      const hasFade = collapse === 'fade';
639      this.destroyCollapsibleFooter();
640
641      if (hasFade) {
642        const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner');
643        const contentEl = pageEl ? pageEl.querySelector('ion-content') : null;
644        this.setupFadeFooter(contentEl);
645      }
646    };
647
648    this.setupFadeFooter = /*#__PURE__*/function () {
649      var _ref2 = (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* (contentEl) {
650        if (!contentEl) {
651          console.error('ion-footer requires a content to collapse. Make sure there is an ion-content.');
652          return;
653        }
654
655        yield new Promise(resolve => (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.c)(contentEl, resolve));
656        const scrollEl = _this7.scrollEl = yield contentEl.getScrollElement();
657        /**
658         * Handle fading of toolbars on scroll
659         */
660
661        _this7.contentScrollCallback = () => {
662          handleFooterFade(scrollEl, _this7.el);
663        };
664
665        scrollEl.addEventListener('scroll', _this7.contentScrollCallback);
666        handleFooterFade(scrollEl, _this7.el);
667      });
668
669      return function (_x) {
670        return _ref2.apply(this, arguments);
671      };
672    }();
673  }
674
675  componentDidLoad() {
676    this.checkCollapsibleFooter();
677  }
678
679  componentDidUpdate() {
680    this.checkCollapsibleFooter();
681  }
682
683  destroyCollapsibleFooter() {
684    if (this.scrollEl && this.contentScrollCallback) {
685      this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
686      this.contentScrollCallback = undefined;
687    }
688  }
689
690  render() {
691    const {
692      translucent,
693      collapse
694    } = this;
695    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
696    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, {
697      role: "contentinfo",
698      class: {
699        [mode]: true,
700        // Used internally for styling
701        [`footer-${mode}`]: true,
702        [`footer-translucent`]: translucent,
703        [`footer-translucent-${mode}`]: translucent,
704        [`footer-collapse-${collapse}`]: collapse !== undefined
705      }
706    }, mode === 'ios' && translucent && (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
707      class: "footer-background"
708    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", null));
709  }
710
711  get el() {
712    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
713  }
714
715};
716Footer.style = {
717  ios: footerIosCss,
718  md: footerMdCss
719};
720const TRANSITION = 'all 0.2s ease-in-out';
721
722const cloneElement = tagName => {
723  const getCachedEl = document.querySelector(`${tagName}.ion-cloned-element`);
724
725  if (getCachedEl !== null) {
726    return getCachedEl;
727  }
728
729  const clonedEl = document.createElement(tagName);
730  clonedEl.classList.add('ion-cloned-element');
731  clonedEl.style.setProperty('display', 'none');
732  document.body.appendChild(clonedEl);
733  return clonedEl;
734};
735
736const createHeaderIndex = headerEl => {
737  if (!headerEl) {
738    return;
739  }
740
741  const toolbars = headerEl.querySelectorAll('ion-toolbar');
742  return {
743    el: headerEl,
744    toolbars: Array.from(toolbars).map(toolbar => {
745      const ionTitleEl = toolbar.querySelector('ion-title');
746      return {
747        el: toolbar,
748        background: toolbar.shadowRoot.querySelector('.toolbar-background'),
749        ionTitleEl,
750        innerTitleEl: ionTitleEl ? ionTitleEl.shadowRoot.querySelector('.toolbar-title') : null,
751        ionButtonsEl: Array.from(toolbar.querySelectorAll('ion-buttons')) || []
752      };
753    }) || []
754  };
755};
756
757const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => {
758  (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.f)(() => {
759    const scrollTop = scrollEl.scrollTop;
760    const scale = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.k)(1, 1 + -scrollTop / 500, 1.1); // Native refresher should not cause titles to scale
761
762    const nativeRefresher = contentEl.querySelector('ion-refresher.refresher-native');
763
764    if (nativeRefresher === null) {
765      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.c)(() => {
766        scaleLargeTitles(scrollHeaderIndex.toolbars, scale);
767      });
768    }
769  });
770};
771
772const setToolbarBackgroundOpacity = (headerEl, opacity) => {
773  /**
774   * Fading in the backdrop opacity
775   * should happen after the large title
776   * has collapsed, so it is handled
777   * by handleHeaderFade()
778   */
779  if (headerEl.collapse === 'fade') {
780    return;
781  }
782
783  if (opacity === undefined) {
784    headerEl.style.removeProperty('--opacity-scale');
785  } else {
786    headerEl.style.setProperty('--opacity-scale', opacity.toString());
787  }
788};
789
790const handleToolbarBorderIntersection = (ev, mainHeaderIndex, scrollTop) => {
791  if (!ev[0].isIntersecting) {
792    return;
793  }
794  /**
795   * There is a bug in Safari where overflow scrolling on a non-body element
796   * does not always reset the scrollTop position to 0 when letting go. It will
797   * set to 1 once the rubber band effect has ended. This causes the background to
798   * appear slightly on certain app setups.
799   *
800   * Additionally, we check if user is rubber banding (scrolling is negative)
801   * as this can mean they are using pull to refresh. Once the refresher starts,
802   * the content is transformed which can cause the intersection observer to erroneously
803   * fire here as well.
804   */
805
806
807  const scale = ev[0].intersectionRatio > 0.9 || scrollTop <= 0 ? 0 : (1 - ev[0].intersectionRatio) * 100 / 75;
808  setToolbarBackgroundOpacity(mainHeaderIndex.el, scale === 1 ? undefined : scale);
809};
810/**
811 * If toolbars are intersecting, hide the scrollable toolbar content
812 * and show the primary toolbar content. If the toolbars are not intersecting,
813 * hide the primary toolbar content and show the scrollable toolbar content
814 */
815
816
817const handleToolbarIntersection = (ev, mainHeaderIndex, scrollHeaderIndex, scrollEl) => {
818  (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.c)(() => {
819    const scrollTop = scrollEl.scrollTop;
820    handleToolbarBorderIntersection(ev, mainHeaderIndex, scrollTop);
821    const event = ev[0];
822    const intersection = event.intersectionRect;
823    const intersectionArea = intersection.width * intersection.height;
824    const rootArea = event.rootBounds.width * event.rootBounds.height;
825    const isPageHidden = intersectionArea === 0 && rootArea === 0;
826    const leftDiff = Math.abs(intersection.left - event.boundingClientRect.left);
827    const rightDiff = Math.abs(intersection.right - event.boundingClientRect.right);
828    const isPageTransitioning = intersectionArea > 0 && (leftDiff >= 5 || rightDiff >= 5);
829
830    if (isPageHidden || isPageTransitioning) {
831      return;
832    }
833
834    if (event.isIntersecting) {
835      setHeaderActive(mainHeaderIndex, false);
836      setHeaderActive(scrollHeaderIndex);
837    } else {
838      /**
839       * There is a bug with IntersectionObserver on Safari
840       * where `event.isIntersecting === false` when cancelling
841       * a swipe to go back gesture. Checking the intersection
842       * x, y, width, and height provides a workaround. This bug
843       * does not happen when using Safari + Web Animations,
844       * only Safari + CSS Animations.
845       */
846      const hasValidIntersection = intersection.x === 0 && intersection.y === 0 || intersection.width !== 0 && intersection.height !== 0;
847
848      if (hasValidIntersection && scrollTop > 0) {
849        setHeaderActive(mainHeaderIndex);
850        setHeaderActive(scrollHeaderIndex, false);
851        setToolbarBackgroundOpacity(mainHeaderIndex.el);
852      }
853    }
854  });
855};
856
857const setHeaderActive = (headerIndex, active = true) => {
858  if (active) {
859    headerIndex.el.classList.remove('header-collapse-condense-inactive');
860  } else {
861    headerIndex.el.classList.add('header-collapse-condense-inactive');
862  }
863};
864
865const scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => {
866  toolbars.forEach(toolbar => {
867    const ionTitle = toolbar.ionTitleEl;
868    const titleDiv = toolbar.innerTitleEl;
869
870    if (!ionTitle || ionTitle.size !== 'large') {
871      return;
872    }
873
874    titleDiv.style.transition = transition ? TRANSITION : '';
875    titleDiv.style.transform = `scale3d(${scale}, ${scale}, 1)`;
876  });
877};
878
879const handleHeaderFade = (scrollEl, baseEl, condenseHeader) => {
880  (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.f)(() => {
881    const scrollTop = scrollEl.scrollTop;
882    const baseElHeight = baseEl.clientHeight;
883    const fadeStart = condenseHeader ? condenseHeader.clientHeight : 0;
884    /**
885     * If we are using fade header with a condense
886     * header, then the toolbar backgrounds should
887     * not begin to fade in until the condense
888     * header has fully collapsed.
889     *
890     * Additionally, the main content should not
891     * overflow out of the container until the
892     * condense header has fully collapsed. When
893     * using just the condense header the content
894     * should overflow out of the container.
895     */
896
897    if (condenseHeader !== null && scrollTop < fadeStart) {
898      baseEl.style.setProperty('--opacity-scale', '0');
899      scrollEl.style.setProperty('clip-path', `inset(${baseElHeight}px 0px 0px 0px)`);
900      return;
901    }
902
903    const distanceToStart = scrollTop - fadeStart;
904    const fadeDuration = 10;
905    const scale = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.k)(0, distanceToStart / fadeDuration, 1);
906    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.c)(() => {
907      scrollEl.style.removeProperty('clip-path');
908      baseEl.style.setProperty('--opacity-scale', scale.toString());
909    });
910  });
911};
912
913const 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}";
914const 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}";
915const Header = class {
916  constructor(hostRef) {
917    var _this8 = this;
918
919    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
920    this.inheritedAttributes = {};
921    /**
922     * If `true`, the header will be translucent.
923     * Only applies when the mode is `"ios"` and the device supports
924     * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility).
925     *
926     * Note: In order to scroll content behind the header, the `fullscreen`
927     * attribute needs to be set on the content.
928     */
929
930    this.translucent = false;
931
932    this.setupFadeHeader = /*#__PURE__*/function () {
933      var _ref3 = (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* (contentEl, condenseHeader) {
934        if (!contentEl) {
935          console.error('ion-header requires a content to collapse. Make sure there is an ion-content.');
936          return;
937        }
938
939        yield new Promise(resolve => (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.c)(contentEl, resolve));
940        const scrollEl = _this8.scrollEl = yield contentEl.getScrollElement();
941        /**
942         * Handle fading of toolbars on scroll
943         */
944
945        _this8.contentScrollCallback = () => {
946          handleHeaderFade(_this8.scrollEl, _this8.el, condenseHeader);
947        };
948
949        scrollEl.addEventListener('scroll', _this8.contentScrollCallback);
950        handleHeaderFade(_this8.scrollEl, _this8.el, condenseHeader);
951      });
952
953      return function (_x2, _x3) {
954        return _ref3.apply(this, arguments);
955      };
956    }();
957  }
958
959  componentWillLoad() {
960    this.inheritedAttributes = (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.i)(this.el, ['role']);
961  }
962
963  componentDidLoad() {
964    this.checkCollapsibleHeader();
965  }
966
967  componentDidUpdate() {
968    this.checkCollapsibleHeader();
969  }
970
971  disconnectedCallback() {
972    this.destroyCollapsibleHeader();
973  }
974
975  checkCollapsibleHeader() {
976    var _this9 = this;
977
978    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
979      const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(_this9);
980
981      if (mode !== 'ios') {
982        return;
983      }
984
985      const {
986        collapse
987      } = _this9;
988      const hasCondense = collapse === 'condense';
989      const hasFade = collapse === 'fade';
990
991      _this9.destroyCollapsibleHeader();
992
993      if (hasCondense) {
994        const pageEl = _this9.el.closest('ion-app,ion-page,.ion-page,page-inner');
995
996        const contentEl = pageEl ? pageEl.querySelector('ion-content') : null; // Cloned elements are always needed in iOS transition
997
998        (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.c)(() => {
999          const title = cloneElement('ion-title');
1000          title.size = 'large';
1001          cloneElement('ion-back-button');
1002        });
1003        yield _this9.setupCondenseHeader(contentEl, pageEl);
1004      } else if (hasFade) {
1005        const pageEl = _this9.el.closest('ion-app,ion-page,.ion-page,page-inner');
1006
1007        const contentEl = pageEl ? pageEl.querySelector('ion-content') : null;
1008        const condenseHeader = contentEl ? contentEl.querySelector('ion-header[collapse="condense"]') : null;
1009        yield _this9.setupFadeHeader(contentEl, condenseHeader);
1010      }
1011    })();
1012  }
1013
1014  destroyCollapsibleHeader() {
1015    if (this.intersectionObserver) {
1016      this.intersectionObserver.disconnect();
1017      this.intersectionObserver = undefined;
1018    }
1019
1020    if (this.scrollEl && this.contentScrollCallback) {
1021      this.scrollEl.removeEventListener('scroll', this.contentScrollCallback);
1022      this.contentScrollCallback = undefined;
1023    }
1024
1025    if (this.collapsibleMainHeader) {
1026      this.collapsibleMainHeader.classList.remove('header-collapse-main');
1027      this.collapsibleMainHeader = undefined;
1028    }
1029  }
1030
1031  setupCondenseHeader(contentEl, pageEl) {
1032    var _this0 = this;
1033
1034    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1035      if (!contentEl || !pageEl) {
1036        console.error('ion-header requires a content to collapse, make sure there is an ion-content.');
1037        return;
1038      }
1039
1040      if (typeof IntersectionObserver === 'undefined') {
1041        return;
1042      }
1043
1044      yield new Promise(resolve => (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.c)(contentEl, resolve));
1045      _this0.scrollEl = yield contentEl.getScrollElement();
1046      const headers = pageEl.querySelectorAll('ion-header');
1047      _this0.collapsibleMainHeader = Array.from(headers).find(header => header.collapse !== 'condense');
1048
1049      if (!_this0.collapsibleMainHeader) {
1050        return;
1051      }
1052
1053      const mainHeaderIndex = createHeaderIndex(_this0.collapsibleMainHeader);
1054      const scrollHeaderIndex = createHeaderIndex(_this0.el);
1055
1056      if (!mainHeaderIndex || !scrollHeaderIndex) {
1057        return;
1058      }
1059
1060      setHeaderActive(mainHeaderIndex, false);
1061      setToolbarBackgroundOpacity(mainHeaderIndex.el, 0);
1062      /**
1063       * Handle interaction between toolbar collapse and
1064       * showing/hiding content in the primary ion-header
1065       * as well as progressively showing/hiding the main header
1066       * border as the top-most toolbar collapses or expands.
1067       */
1068
1069      const toolbarIntersection = ev => {
1070        handleToolbarIntersection(ev, mainHeaderIndex, scrollHeaderIndex, _this0.scrollEl);
1071      };
1072
1073      _this0.intersectionObserver = new IntersectionObserver(toolbarIntersection, {
1074        root: contentEl,
1075        threshold: [0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
1076      });
1077
1078      _this0.intersectionObserver.observe(scrollHeaderIndex.toolbars[scrollHeaderIndex.toolbars.length - 1].el);
1079      /**
1080       * Handle scaling of large iOS titles and
1081       * showing/hiding border on last toolbar
1082       * in primary header
1083       */
1084
1085
1086      _this0.contentScrollCallback = () => {
1087        handleContentScroll(_this0.scrollEl, scrollHeaderIndex, contentEl);
1088      };
1089
1090      _this0.scrollEl.addEventListener('scroll', _this0.contentScrollCallback);
1091
1092      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.c)(() => {
1093        if (_this0.collapsibleMainHeader !== undefined) {
1094          _this0.collapsibleMainHeader.classList.add('header-collapse-main');
1095        }
1096      });
1097    })();
1098  }
1099
1100  render() {
1101    const {
1102      translucent,
1103      inheritedAttributes
1104    } = this;
1105    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
1106    const collapse = this.collapse || 'none'; // banner role must be at top level, so remove role if inside a menu
1107
1108    const roleType = (0,_theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__.h)('ion-menu', this.el) ? 'none' : 'banner';
1109    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, Object.assign({
1110      role: roleType,
1111      class: {
1112        [mode]: true,
1113        // Used internally for styling
1114        [`header-${mode}`]: true,
1115        [`header-translucent`]: this.translucent,
1116        [`header-collapse-${collapse}`]: true,
1117        [`header-translucent-${mode}`]: this.translucent
1118      }
1119    }, inheritedAttributes), mode === 'ios' && translucent && (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
1120      class: "header-background"
1121    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", null));
1122  }
1123
1124  get el() {
1125    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
1126  }
1127
1128};
1129Header.style = {
1130  ios: headerIosCss,
1131  md: headerMdCss
1132};
1133const routeOutletCss = ":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;overflow:hidden;z-index:0}";
1134const RouterOutlet = class {
1135  constructor(hostRef) {
1136    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
1137    this.ionNavWillLoad = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionNavWillLoad", 7);
1138    this.ionNavWillChange = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionNavWillChange", 3);
1139    this.ionNavDidChange = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionNavDidChange", 3);
1140    this.gestureOrAnimationInProgress = false;
1141    /**
1142     * The mode determines which platform styles to use.
1143     */
1144
1145    this.mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
1146    /**
1147     * If `true`, the router-outlet should animate the transition of components.
1148     */
1149
1150    this.animated = true;
1151  }
1152
1153  swipeHandlerChanged() {
1154    if (this.gesture) {
1155      this.gesture.enable(this.swipeHandler !== undefined);
1156    }
1157  }
1158
1159  connectedCallback() {
1160    var _this1 = this;
1161
1162    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1163      const onStart = () => {
1164        _this1.gestureOrAnimationInProgress = true;
1165
1166        if (_this1.swipeHandler) {
1167          _this1.swipeHandler.onStart();
1168        }
1169      };
1170
1171      _this1.gesture = (yield __webpack_require__.e(/*! import() */ "common").then(__webpack_require__.bind(__webpack_require__, /*! ./swipe-back-f65c5686.js */ 6718))).createSwipeBackGesture(_this1.el, () => !_this1.gestureOrAnimationInProgress && !!_this1.swipeHandler && _this1.swipeHandler.canStart(), () => onStart(), step => _this1.ani && _this1.ani.progressStep(step), (shouldComplete, step, dur) => {
1172        if (_this1.ani) {
1173          _this1.ani.onFinish(() => {
1174            _this1.gestureOrAnimationInProgress = false;
1175
1176            if (_this1.swipeHandler) {
1177              _this1.swipeHandler.onEnd(shouldComplete);
1178            }
1179          }, {
1180            oneTimeCallback: true
1181          }); // Account for rounding errors in JS
1182
1183
1184          let newStepValue = shouldComplete ? -0.001 : 0.001;
1185          /**
1186           * Animation will be reversed here, so need to
1187           * reverse the easing curve as well
1188           *
1189           * Additionally, we need to account for the time relative
1190           * to the new easing curve, as `stepValue` is going to be given
1191           * in terms of a linear curve.
1192           */
1193
1194          if (!shouldComplete) {
1195            _this1.ani.easing('cubic-bezier(1, 0, 0.68, 0.28)');
1196
1197            newStepValue += (0,_cubic_bezier_154a53a5_js__WEBPACK_IMPORTED_MODULE_6__.g)([0, 0], [1, 0], [0.68, 0.28], [1, 1], step)[0];
1198          } else {
1199            newStepValue += (0,_cubic_bezier_154a53a5_js__WEBPACK_IMPORTED_MODULE_6__.g)([0, 0], [0.32, 0.72], [0, 1], [1, 1], step)[0];
1200          }
1201
1202          _this1.ani.progressEnd(shouldComplete ? 1 : 0, newStepValue, dur);
1203        } else {
1204          _this1.gestureOrAnimationInProgress = false;
1205        }
1206      });
1207
1208      _this1.swipeHandlerChanged();
1209    })();
1210  }
1211
1212  componentWillLoad() {
1213    this.ionNavWillLoad.emit();
1214  }
1215
1216  disconnectedCallback() {
1217    if (this.gesture) {
1218      this.gesture.destroy();
1219      this.gesture = undefined;
1220    }
1221  }
1222  /** @internal */
1223
1224
1225  commit(enteringEl, leavingEl, opts) {
1226    var _this10 = this;
1227
1228    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1229      const unlock = yield _this10.lock();
1230      let changed = false;
1231
1232      try {
1233        changed = yield _this10.transition(enteringEl, leavingEl, opts);
1234      } catch (e) {
1235        console.error(e);
1236      }
1237
1238      unlock();
1239      return changed;
1240    })();
1241  }
1242  /** @internal */
1243
1244
1245  setRouteId(id, params, direction, animation) {
1246    var _this11 = this;
1247
1248    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1249      const changed = yield _this11.setRoot(id, params, {
1250        duration: direction === 'root' ? 0 : undefined,
1251        direction: direction === 'back' ? 'back' : 'forward',
1252        animationBuilder: animation
1253      });
1254      return {
1255        changed,
1256        element: _this11.activeEl
1257      };
1258    })();
1259  }
1260  /** @internal */
1261
1262
1263  getRouteId() {
1264    var _this12 = this;
1265
1266    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1267      const active = _this12.activeEl;
1268      return active ? {
1269        id: active.tagName,
1270        element: active,
1271        params: _this12.activeParams
1272      } : undefined;
1273    })();
1274  }
1275
1276  setRoot(component, params, opts) {
1277    var _this13 = this;
1278
1279    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1280      if (_this13.activeComponent === component && (0,_helpers_6e1e5b65_js__WEBPACK_IMPORTED_MODULE_3__.s)(params, _this13.activeParams)) {
1281        return false;
1282      } // attach entering view to DOM
1283
1284
1285      const leavingEl = _this13.activeEl;
1286      const enteringEl = yield (0,_framework_delegate_0e9f0224_js__WEBPACK_IMPORTED_MODULE_7__.a)(_this13.delegate, _this13.el, component, ['ion-page', 'ion-page-invisible'], params);
1287      _this13.activeComponent = component;
1288      _this13.activeEl = enteringEl;
1289      _this13.activeParams = params; // commit animation
1290
1291      yield _this13.commit(enteringEl, leavingEl, opts);
1292      yield (0,_framework_delegate_0e9f0224_js__WEBPACK_IMPORTED_MODULE_7__.d)(_this13.delegate, leavingEl);
1293      return true;
1294    })();
1295  }
1296
1297  transition(enteringEl, leavingEl, opts = {}) {
1298    var _this14 = this;
1299
1300    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1301      if (leavingEl === enteringEl) {
1302        return false;
1303      } // emit nav will change event
1304
1305
1306      _this14.ionNavWillChange.emit();
1307
1308      const {
1309        el,
1310        mode
1311      } = _this14;
1312      const animated = _this14.animated && _ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.getBoolean('animated', true);
1313      const animationBuilder = opts.animationBuilder || _this14.animation || _ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.c.get('navAnimation');
1314      yield (0,_index_e6c2c822_js__WEBPACK_IMPORTED_MODULE_8__.t)(Object.assign(Object.assign({
1315        mode,
1316        animated,
1317        enteringEl,
1318        leavingEl,
1319        baseEl: el,
1320        progressCallback: opts.progressAnimation ? ani => {
1321          /**
1322           * Because this progress callback is called asynchronously
1323           * it is possible for the gesture to start and end before
1324           * the animation is ever set. In that scenario, we should
1325           * immediately call progressEnd so that the transition promise
1326           * resolves and the gesture does not get locked up.
1327           */
1328          if (ani !== undefined && !_this14.gestureOrAnimationInProgress) {
1329            _this14.gestureOrAnimationInProgress = true;
1330            ani.onFinish(() => {
1331              _this14.gestureOrAnimationInProgress = false;
1332
1333              if (_this14.swipeHandler) {
1334                _this14.swipeHandler.onEnd(false);
1335              }
1336            }, {
1337              oneTimeCallback: true
1338            });
1339            /**
1340             * Playing animation to beginning
1341             * with a duration of 0 prevents
1342             * any flickering when the animation
1343             * is later cleaned up.
1344             */
1345
1346            ani.progressEnd(0, 0, 0);
1347          } else {
1348            _this14.ani = ani;
1349          }
1350        } : undefined
1351      }, opts), {
1352        animationBuilder
1353      })); // emit nav changed event
1354
1355      _this14.ionNavDidChange.emit();
1356
1357      return true;
1358    })();
1359  }
1360
1361  lock() {
1362    var _this15 = this;
1363
1364    return (0,C_Visual_TRUV2_node_modules_babel_runtime_helpers_esm_asyncToGenerator_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function* () {
1365      const p = _this15.waitPromise;
1366      let resolve;
1367      _this15.waitPromise = new Promise(r => resolve = r);
1368
1369      if (p !== undefined) {
1370        yield p;
1371      }
1372
1373      return resolve;
1374    })();
1375  }
1376
1377  render() {
1378    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", null);
1379  }
1380
1381  get el() {
1382    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
1383  }
1384
1385  static get watchers() {
1386    return {
1387      "swipeHandler": ["swipeHandlerChanged"]
1388    };
1389  }
1390
1391};
1392RouterOutlet.style = routeOutletCss;
1393const 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}
1393: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)}";
1394const 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}";
1395const ToolbarTitle = class {
1396  constructor(hostRef) {
1397    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
1398    this.ionStyle = (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.e)(this, "ionStyle", 7);
1399  }
1400
1401  sizeChanged() {
1402    this.emitStyle();
1403  }
1404
1405  connectedCallback() {
1406    this.emitStyle();
1407  }
1408
1409  emitStyle() {
1410    const size = this.getSize();
1411    this.ionStyle.emit({
1412      [`title-${size}`]: true
1413    });
1414  }
1415
1416  getSize() {
1417    return this.size !== undefined ? this.size : 'default';
1418  }
1419
1420  render() {
1421    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
1422    const size = this.getSize();
1423    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, {
1424      class: (0,_theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__.c)(this.color, {
1425        [mode]: true,
1426        [`title-${size}`]: true,
1427        'title-rtl': document.dir === 'rtl'
1428      })
1429    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
1430      class: "toolbar-title"
1431    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", null)));
1432  }
1433
1434  get el() {
1435    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
1436  }
1437
1438  static get watchers() {
1439    return {
1440      "size": ["sizeChanged"]
1441    };
1442  }
1443
1444};
1445ToolbarTitle.style = {
1446  ios: titleIosCss,
1447  md: titleMdCss
1448};
1449const 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));
1449--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%}";
1450const 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}";
1451const Toolbar = class {
1452  constructor(hostRef) {
1453    (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.r)(this, hostRef);
1454    this.childrenStyles = new Map();
1455  }
1456
1457  componentWillLoad() {
1458    const buttons = Array.from(this.el.querySelectorAll('ion-buttons'));
1459    const firstButtons = buttons.find(button => {
1460      return button.slot === 'start';
1461    });
1462
1463    if (firstButtons) {
1464      firstButtons.classList.add('buttons-first-slot');
1465    }
1466
1467    const buttonsReversed = buttons.reverse();
1468    const lastButtons = buttonsReversed.find(button => button.slot === 'end') || buttonsReversed.find(button => button.slot === 'primary') || buttonsReversed.find(button => button.slot === 'secondary');
1469
1470    if (lastButtons) {
1471      lastButtons.classList.add('buttons-last-slot');
1472    }
1473  }
1474
1475  childrenStyle(ev) {
1476    ev.stopPropagation();
1477    const tagName = ev.target.tagName;
1478    const updatedStyles = ev.detail;
1479    const newStyles = {};
1480    const childStyles = this.childrenStyles.get(tagName) || {};
1481    let hasStyleChange = false;
1482    Object.keys(updatedStyles).forEach(key => {
1483      const childKey = `toolbar-${key}`;
1484      const newValue = updatedStyles[key];
1485
1486      if (newValue !== childStyles[childKey]) {
1487        hasStyleChange = true;
1488      }
1489
1490      if (newValue) {
1491        newStyles[childKey] = true;
1492      }
1493    });
1494
1495    if (hasStyleChange) {
1496      this.childrenStyles.set(tagName, newStyles);
1497      (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.j)(this);
1498    }
1499  }
1500
1501  render() {
1502    const mode = (0,_ionic_global_0ebe321c_js__WEBPACK_IMPORTED_MODULE_2__.b)(this);
1503    const childStyles = {};
1504    this.childrenStyles.forEach(value => {
1505      Object.assign(childStyles, value);
1506    });
1507    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)(_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.H, {
1508      class: Object.assign(Object.assign({}, childStyles), (0,_theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__.c)(this.color, {
1509        [mode]: true,
1510        'in-toolbar': (0,_theme_a24ff1ad_js__WEBPACK_IMPORTED_MODULE_5__.h)('ion-toolbar', this.el)
1511      }))
1512    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
1513      class: "toolbar-background"
1514    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
1515      class: "toolbar-container"
1516    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", {
1517      name: "start"
1518    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", {
1519      name: "secondary"
1520    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("div", {
1521      class: "toolbar-content"
1522    }, (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", null)), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", {
1523      name: "primary"
1524    }), (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.h)("slot", {
1525      name: "end"
1526    })));
1527  }
1528
1529  get el() {
1530    return (0,_index_b3eecb14_js__WEBPACK_IMPORTED_MODULE_1__.i)(this);
1531  }
1532
1533};
1534Toolbar.style = {
1535  ios: toolbarIosCss,
1536  md: toolbarMdCss
1537};
1538
1539
1540/***/ })
1541
1542}]);
1543//# sourceMappingURL=node_modules_ionic_core_dist_esm_ion-app_8_entry_js.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.