UNPKG

216 kBJavaScriptView Raw
1import { __extends, __awaiter, __generator, __assign } from 'tslib';
2import { HostListener, Directive, ElementRef, Injectable, Inject, NgZone, defineInjectable, inject, Optional, Component, ChangeDetectionStrategy, ChangeDetectorRef, InjectionToken, ApplicationRef, Injector, ViewContainerRef, ComponentFactoryResolver, Attribute, SkipSelf, Output, EventEmitter, ViewChild, ContentChild, TemplateRef, IterableDiffers, APP_INITIALIZER, NgModule } from '@angular/core';
3import { NG_VALUE_ACCESSOR } from '@angular/forms';
4import { DOCUMENT, Location, LocationStrategy, CommonModule } from '@angular/common';
5import { UrlSerializer, Router, NavigationStart, ActivatedRoute, ChildrenOutletContexts, PRIMARY_OUTLET, RouterLink } from '@angular/router';
6import { isPlatform, getPlatforms, LIFECYCLE_WILL_ENTER, LIFECYCLE_DID_ENTER, LIFECYCLE_WILL_LEAVE, LIFECYCLE_DID_LEAVE, LIFECYCLE_WILL_UNLOAD, actionSheetController, alertController, loadingController, menuController, pickerController, modalController, popoverController, toastController } from '@ionic/core';
7import { Subject, fromEvent, BehaviorSubject } from 'rxjs';
8import { filter, switchMap, distinctUntilChanged } from 'rxjs/operators';
9import { applyPolyfills, defineCustomElements } from '@ionic/core/loader';
10
11/**
12 * @fileoverview added by tsickle
13 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
14 */
15/** @type {?} */
16var raf = (/**
17 * @param {?} h
18 * @return {?}
19 */
20function (h) {
21 if (typeof __zone_symbol__requestAnimationFrame === 'function') {
22 return __zone_symbol__requestAnimationFrame(h);
23 }
24 if (typeof requestAnimationFrame === 'function') {
25 return requestAnimationFrame(h);
26 }
27 return setTimeout(h);
28});
29
30/**
31 * @fileoverview added by tsickle
32 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
33 */
34var ValueAccessor = /** @class */ (function () {
35 function ValueAccessor(el) {
36 this.el = el;
37 this.onChange = (/**
38 * @return {?}
39 */
40 function () { });
41 this.onTouched = (/**
42 * @return {?}
43 */
44 function () { });
45 }
46 /**
47 * @param {?} value
48 * @return {?}
49 */
50 ValueAccessor.prototype.writeValue = /**
51 * @param {?} value
52 * @return {?}
53 */
54 function (value) {
55 this.el.nativeElement.value = this.lastValue = value == null ? '' : value;
56 setIonicClasses(this.el);
57 };
58 /**
59 * @param {?} el
60 * @param {?} value
61 * @return {?}
62 */
63 ValueAccessor.prototype.handleChangeEvent = /**
64 * @param {?} el
65 * @param {?} value
66 * @return {?}
67 */
68 function (el, value) {
69 if (el === this.el.nativeElement) {
70 if (value !== this.lastValue) {
71 this.lastValue = value;
72 this.onChange(value);
73 }
74 setIonicClasses(this.el);
75 }
76 };
77 /**
78 * @param {?} el
79 * @return {?}
80 */
81 ValueAccessor.prototype._handleBlurEvent = /**
82 * @param {?} el
83 * @return {?}
84 */
85 function (el) {
86 if (el === this.el.nativeElement) {
87 this.onTouched();
88 setIonicClasses(this.el);
89 }
90 };
91 /**
92 * @param {?} fn
93 * @return {?}
94 */
95 ValueAccessor.prototype.registerOnChange = /**
96 * @param {?} fn
97 * @return {?}
98 */
99 function (fn) {
100 this.onChange = fn;
101 };
102 /**
103 * @param {?} fn
104 * @return {?}
105 */
106 ValueAccessor.prototype.registerOnTouched = /**
107 * @param {?} fn
108 * @return {?}
109 */
110 function (fn) {
111 this.onTouched = fn;
112 };
113 /**
114 * @param {?} isDisabled
115 * @return {?}
116 */
117 ValueAccessor.prototype.setDisabledState = /**
118 * @param {?} isDisabled
119 * @return {?}
120 */
121 function (isDisabled) {
122 this.el.nativeElement.disabled = isDisabled;
123 };
124 ValueAccessor.propDecorators = {
125 _handleBlurEvent: [{ type: HostListener, args: ['ionBlur', ['$event.target'],] }]
126 };
127 return ValueAccessor;
128}());
129/** @type {?} */
130var setIonicClasses = (/**
131 * @param {?} element
132 * @return {?}
133 */
134function (element) {
135 raf((/**
136 * @return {?}
137 */
138 function () {
139 /** @type {?} */
140 var input = (/** @type {?} */ (element.nativeElement));
141 /** @type {?} */
142 var classes = getClasses(input);
143 setClasses(input, classes);
144 /** @type {?} */
145 var item = input.closest('ion-item');
146 if (item) {
147 setClasses(item, classes);
148 }
149 }));
150});
151/** @type {?} */
152var getClasses = (/**
153 * @param {?} element
154 * @return {?}
155 */
156function (element) {
157 /** @type {?} */
158 var classList = element.classList;
159 /** @type {?} */
160 var classes = [];
161 for (var i = 0; i < classList.length; i++) {
162 /** @type {?} */
163 var item = classList.item(i);
164 if (item !== null && startsWith(item, 'ng-')) {
165 classes.push("ion-" + item.substr(3));
166 }
167 }
168 return classes;
169});
170/** @type {?} */
171var setClasses = (/**
172 * @param {?} element
173 * @param {?} classes
174 * @return {?}
175 */
176function (element, classes) {
177 /** @type {?} */
178 var classList = element.classList;
179 [
180 'ion-valid',
181 'ion-invalid',
182 'ion-touched',
183 'ion-untouched',
184 'ion-dirty',
185 'ion-pristine'
186 ].forEach((/**
187 * @param {?} c
188 * @return {?}
189 */
190 function (c) { return classList.remove(c); }));
191 classes.forEach((/**
192 * @param {?} c
193 * @return {?}
194 */
195 function (c) { return classList.add(c); }));
196});
197/** @type {?} */
198var startsWith = (/**
199 * @param {?} input
200 * @param {?} search
201 * @return {?}
202 */
203function (input, search) {
204 return input.substr(0, search.length) === search;
205});
206
207/**
208 * @fileoverview added by tsickle
209 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
210 */
211var BooleanValueAccessor = /** @class */ (function (_super) {
212 __extends(BooleanValueAccessor, _super);
213 function BooleanValueAccessor(el) {
214 return _super.call(this, el) || this;
215 }
216 /**
217 * @param {?} value
218 * @return {?}
219 */
220 BooleanValueAccessor.prototype.writeValue = /**
221 * @param {?} value
222 * @return {?}
223 */
224 function (value) {
225 this.el.nativeElement.checked = this.lastValue = value == null ? false : value;
226 setIonicClasses(this.el);
227 };
228 /**
229 * @param {?} el
230 * @return {?}
231 */
232 BooleanValueAccessor.prototype._handleIonChange = /**
233 * @param {?} el
234 * @return {?}
235 */
236 function (el) {
237 this.handleChangeEvent(el, el.checked);
238 };
239 BooleanValueAccessor.decorators = [
240 { type: Directive, args: [{
241 /* tslint:disable-next-line:directive-selector */
242 selector: 'ion-checkbox,ion-toggle',
243 providers: [
244 {
245 provide: NG_VALUE_ACCESSOR,
246 useExisting: BooleanValueAccessor,
247 multi: true
248 }
249 ]
250 },] },
251 ];
252 /** @nocollapse */
253 BooleanValueAccessor.ctorParameters = function () { return [
254 { type: ElementRef }
255 ]; };
256 BooleanValueAccessor.propDecorators = {
257 _handleIonChange: [{ type: HostListener, args: ['ionChange', ['$event.target'],] }]
258 };
259 return BooleanValueAccessor;
260}(ValueAccessor));
261
262/**
263 * @fileoverview added by tsickle
264 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
265 */
266var NumericValueAccessor = /** @class */ (function (_super) {
267 __extends(NumericValueAccessor, _super);
268 function NumericValueAccessor(el) {
269 return _super.call(this, el) || this;
270 }
271 /**
272 * @param {?} el
273 * @return {?}
274 */
275 NumericValueAccessor.prototype._handleIonChange = /**
276 * @param {?} el
277 * @return {?}
278 */
279 function (el) {
280 this.handleChangeEvent(el, el.value);
281 };
282 /**
283 * @param {?} fn
284 * @return {?}
285 */
286 NumericValueAccessor.prototype.registerOnChange = /**
287 * @param {?} fn
288 * @return {?}
289 */
290 function (fn) {
291 _super.prototype.registerOnChange.call(this, (/**
292 * @param {?} value
293 * @return {?}
294 */
295 function (value) {
296 fn(value === '' ? null : parseFloat(value));
297 }));
298 };
299 NumericValueAccessor.decorators = [
300 { type: Directive, args: [{
301 /* tslint:disable-next-line:directive-selector */
302 selector: 'ion-input[type=number]',
303 providers: [
304 {
305 provide: NG_VALUE_ACCESSOR,
306 useExisting: NumericValueAccessor,
307 multi: true
308 }
309 ]
310 },] },
311 ];
312 /** @nocollapse */
313 NumericValueAccessor.ctorParameters = function () { return [
314 { type: ElementRef }
315 ]; };
316 NumericValueAccessor.propDecorators = {
317 _handleIonChange: [{ type: HostListener, args: ['ionChange', ['$event.target'],] }]
318 };
319 return NumericValueAccessor;
320}(ValueAccessor));
321
322/**
323 * @fileoverview added by tsickle
324 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
325 */
326var RadioValueAccessor = /** @class */ (function (_super) {
327 __extends(RadioValueAccessor, _super);
328 function RadioValueAccessor(el) {
329 return _super.call(this, el) || this;
330 }
331 /**
332 * @param {?} el
333 * @return {?}
334 */
335 RadioValueAccessor.prototype._handleIonSelect = /**
336 * @param {?} el
337 * @return {?}
338 */
339 function (el) {
340 this.handleChangeEvent(el, el.checked);
341 };
342 RadioValueAccessor.decorators = [
343 { type: Directive, args: [{
344 /* tslint:disable-next-line:directive-selector */
345 selector: 'ion-radio',
346 providers: [
347 {
348 provide: NG_VALUE_ACCESSOR,
349 useExisting: RadioValueAccessor,
350 multi: true
351 }
352 ]
353 },] },
354 ];
355 /** @nocollapse */
356 RadioValueAccessor.ctorParameters = function () { return [
357 { type: ElementRef }
358 ]; };
359 RadioValueAccessor.propDecorators = {
360 _handleIonSelect: [{ type: HostListener, args: ['ionSelect', ['$event.target'],] }]
361 };
362 return RadioValueAccessor;
363}(ValueAccessor));
364
365/**
366 * @fileoverview added by tsickle
367 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
368 */
369var SelectValueAccessor = /** @class */ (function (_super) {
370 __extends(SelectValueAccessor, _super);
371 function SelectValueAccessor(el) {
372 return _super.call(this, el) || this;
373 }
374 /**
375 * @param {?} el
376 * @return {?}
377 */
378 SelectValueAccessor.prototype._handleChangeEvent = /**
379 * @param {?} el
380 * @return {?}
381 */
382 function (el) {
383 this.handleChangeEvent(el, el.value);
384 };
385 SelectValueAccessor.decorators = [
386 { type: Directive, args: [{
387 /* tslint:disable-next-line:directive-selector */
388 selector: 'ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime',
389 providers: [
390 {
391 provide: NG_VALUE_ACCESSOR,
392 useExisting: SelectValueAccessor,
393 multi: true
394 }
395 ]
396 },] },
397 ];
398 /** @nocollapse */
399 SelectValueAccessor.ctorParameters = function () { return [
400 { type: ElementRef }
401 ]; };
402 SelectValueAccessor.propDecorators = {
403 _handleChangeEvent: [{ type: HostListener, args: ['ionChange', ['$event.target'],] }]
404 };
405 return SelectValueAccessor;
406}(ValueAccessor));
407
408/**
409 * @fileoverview added by tsickle
410 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
411 */
412var TextValueAccessor = /** @class */ (function (_super) {
413 __extends(TextValueAccessor, _super);
414 function TextValueAccessor(el) {
415 return _super.call(this, el) || this;
416 }
417 /**
418 * @param {?} el
419 * @return {?}
420 */
421 TextValueAccessor.prototype._handleInputEvent = /**
422 * @param {?} el
423 * @return {?}
424 */
425 function (el) {
426 this.handleChangeEvent(el, el.value);
427 };
428 TextValueAccessor.decorators = [
429 { type: Directive, args: [{
430 /* tslint:disable-next-line:directive-selector */
431 selector: 'ion-input:not([type=number]),ion-textarea,ion-searchbar',
432 providers: [
433 {
434 provide: NG_VALUE_ACCESSOR,
435 useExisting: TextValueAccessor,
436 multi: true
437 }
438 ]
439 },] },
440 ];
441 /** @nocollapse */
442 TextValueAccessor.ctorParameters = function () { return [
443 { type: ElementRef }
444 ]; };
445 TextValueAccessor.propDecorators = {
446 _handleInputEvent: [{ type: HostListener, args: ['ionChange', ['$event.target'],] }]
447 };
448 return TextValueAccessor;
449}(ValueAccessor));
450
451/**
452 * @fileoverview added by tsickle
453 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
454 */
455var Platform = /** @class */ (function () {
456 function Platform(doc, zone) {
457 var _this = this;
458 this.doc = doc;
459 /**
460 * @hidden
461 */
462 this.backButton = (/** @type {?} */ (new Subject()));
463 /**
464 * The pause event emits when the native platform puts the application
465 * into the background, typically when the user switches to a different
466 * application. This event would emit when a Cordova app is put into
467 * the background, however, it would not fire on a standard web browser.
468 */
469 this.pause = new Subject();
470 /**
471 * The resume event emits when the native platform pulls the application
472 * out from the background. This event would emit when a Cordova app comes
473 * out from the background, however, it would not fire on a standard web browser.
474 */
475 this.resume = new Subject();
476 /**
477 * The resize event emits when the browser window has changed dimensions. This
478 * could be from a browser window being physically resized, or from a device
479 * changing orientation.
480 */
481 this.resize = new Subject();
482 zone.run((/**
483 * @return {?}
484 */
485 function () {
486 _this.win = doc.defaultView;
487 _this.backButton.subscribeWithPriority = (/**
488 * @param {?} priority
489 * @param {?} callback
490 * @return {?}
491 */
492 function (priority, callback) {
493 return this.subscribe((/**
494 * @param {?} ev
495 * @return {?}
496 */
497 function (ev) { return (ev.register(priority, (/**
498 * @return {?}
499 */
500 function () { return zone.run(callback); }))); }));
501 });
502 proxyEvent(_this.pause, doc, 'pause');
503 proxyEvent(_this.resume, doc, 'resume');
504 proxyEvent(_this.backButton, doc, 'ionBackButton');
505 proxyEvent(_this.resize, _this.win, 'resize');
506 /** @type {?} */
507 var readyResolve;
508 _this._readyPromise = new Promise((/**
509 * @param {?} res
510 * @return {?}
511 */
512 function (res) { readyResolve = res; }));
513 if (_this.win && _this.win['cordova']) {
514 doc.addEventListener('deviceready', (/**
515 * @return {?}
516 */
517 function () {
518 readyResolve('cordova');
519 }), { once: true });
520 }
521 else {
522 (/** @type {?} */ (readyResolve))('dom');
523 }
524 }));
525 }
526 /**
527 * @returns returns true/false based on platform.
528 * @description
529 * Depending on the platform the user is on, `is(platformName)` will
530 * return `true` or `false`. Note that the same app can return `true`
531 * for more than one platform name. For example, an app running from
532 * an iPad would return `true` for the platform names: `mobile`,
533 * `ios`, `ipad`, and `tablet`. Additionally, if the app was running
534 * from Cordova then `cordova` would be true, and if it was running
535 * from a web browser on the iPad then `mobileweb` would be `true`.
536 *
537 * ```
538 * import { Platform } from 'ionic-angular';
539 *
540 * @Component({...})
541 * export MyPage {
542 * constructor(public platform: Platform) {
543 * if (this.platform.is('ios')) {
544 * // This will only print when on iOS
545 * console.log('I am an iOS device!');
546 * }
547 * }
548 * }
549 * ```
550 *
551 * | Platform Name | Description |
552 * |-----------------|------------------------------------|
553 * | android | on a device running Android. |
554 * | cordova | on a device running Cordova. |
555 * | ios | on a device running iOS. |
556 * | ipad | on an iPad device. |
557 * | iphone | on an iPhone device. |
558 * | phablet | on a phablet device. |
559 * | tablet | on a tablet device. |
560 * | electron | in Electron on a desktop device. |
561 * | pwa | as a PWA app. |
562 * | mobile | on a mobile device. |
563 * | mobileweb | on a mobile device in a browser. |
564 * | desktop | on a desktop device. |
565 * | hybrid | is a cordova or capacitor app. |
566 *
567 */
568 /**
569 * \@description
570 * Depending on the platform the user is on, `is(platformName)` will
571 * return `true` or `false`. Note that the same app can return `true`
572 * for more than one platform name. For example, an app running from
573 * an iPad would return `true` for the platform names: `mobile`,
574 * `ios`, `ipad`, and `tablet`. Additionally, if the app was running
575 * from Cordova then `cordova` would be true, and if it was running
576 * from a web browser on the iPad then `mobileweb` would be `true`.
577 *
578 * ```
579 * import { Platform } from 'ionic-angular';
580 *
581 * \@Component({...})
582 * export MyPage {
583 * constructor(public platform: Platform) {
584 * if (this.platform.is('ios')) {
585 * // This will only print when on iOS
586 * console.log('I am an iOS device!');
587 * }
588 * }
589 * }
590 * ```
591 *
592 * | Platform Name | Description |
593 * |-----------------|------------------------------------|
594 * | android | on a device running Android. |
595 * | cordova | on a device running Cordova. |
596 * | ios | on a device running iOS. |
597 * | ipad | on an iPad device. |
598 * | iphone | on an iPhone device. |
599 * | phablet | on a phablet device. |
600 * | tablet | on a tablet device. |
601 * | electron | in Electron on a desktop device. |
602 * | pwa | as a PWA app. |
603 * | mobile | on a mobile device. |
604 * | mobileweb | on a mobile device in a browser. |
605 * | desktop | on a desktop device. |
606 * | hybrid | is a cordova or capacitor app. |
607 *
608 * @param {?} platformName
609 * @return {?} returns true/false based on platform.
610 */
611 Platform.prototype.is = /**
612 * \@description
613 * Depending on the platform the user is on, `is(platformName)` will
614 * return `true` or `false`. Note that the same app can return `true`
615 * for more than one platform name. For example, an app running from
616 * an iPad would return `true` for the platform names: `mobile`,
617 * `ios`, `ipad`, and `tablet`. Additionally, if the app was running
618 * from Cordova then `cordova` would be true, and if it was running
619 * from a web browser on the iPad then `mobileweb` would be `true`.
620 *
621 * ```
622 * import { Platform } from 'ionic-angular';
623 *
624 * \@Component({...})
625 * export MyPage {
626 * constructor(public platform: Platform) {
627 * if (this.platform.is('ios')) {
628 * // This will only print when on iOS
629 * console.log('I am an iOS device!');
630 * }
631 * }
632 * }
633 * ```
634 *
635 * | Platform Name | Description |
636 * |-----------------|------------------------------------|
637 * | android | on a device running Android. |
638 * | cordova | on a device running Cordova. |
639 * | ios | on a device running iOS. |
640 * | ipad | on an iPad device. |
641 * | iphone | on an iPhone device. |
642 * | phablet | on a phablet device. |
643 * | tablet | on a tablet device. |
644 * | electron | in Electron on a desktop device. |
645 * | pwa | as a PWA app. |
646 * | mobile | on a mobile device. |
647 * | mobileweb | on a mobile device in a browser. |
648 * | desktop | on a desktop device. |
649 * | hybrid | is a cordova or capacitor app. |
650 *
651 * @param {?} platformName
652 * @return {?} returns true/false based on platform.
653 */
654 function (platformName) {
655 return isPlatform(this.win, platformName);
656 };
657 /**
658 * @returns the array of platforms
659 * @description
660 * Depending on what device you are on, `platforms` can return multiple values.
661 * Each possible value is a hierarchy of platforms. For example, on an iPhone,
662 * it would return `mobile`, `ios`, and `iphone`.
663 *
664 * ```
665 * import { Platform } from 'ionic-angular';
666 *
667 * @Component({...})
668 * export MyPage {
669 * constructor(public platform: Platform) {
670 * // This will print an array of the current platforms
671 * console.log(this.platform.platforms());
672 * }
673 * }
674 * ```
675 */
676 /**
677 * \@description
678 * Depending on what device you are on, `platforms` can return multiple values.
679 * Each possible value is a hierarchy of platforms. For example, on an iPhone,
680 * it would return `mobile`, `ios`, and `iphone`.
681 *
682 * ```
683 * import { Platform } from 'ionic-angular';
684 *
685 * \@Component({...})
686 * export MyPage {
687 * constructor(public platform: Platform) {
688 * // This will print an array of the current platforms
689 * console.log(this.platform.platforms());
690 * }
691 * }
692 * ```
693 * @return {?} the array of platforms
694 */
695 Platform.prototype.platforms = /**
696 * \@description
697 * Depending on what device you are on, `platforms` can return multiple values.
698 * Each possible value is a hierarchy of platforms. For example, on an iPhone,
699 * it would return `mobile`, `ios`, and `iphone`.
700 *
701 * ```
702 * import { Platform } from 'ionic-angular';
703 *
704 * \@Component({...})
705 * export MyPage {
706 * constructor(public platform: Platform) {
707 * // This will print an array of the current platforms
708 * console.log(this.platform.platforms());
709 * }
710 * }
711 * ```
712 * @return {?} the array of platforms
713 */
714 function () {
715 return getPlatforms(this.win);
716 };
717 /**
718 * Returns a promise when the platform is ready and native functionality
719 * can be called. If the app is running from within a web browser, then
720 * the promise will resolve when the DOM is ready. When the app is running
721 * from an application engine such as Cordova, then the promise will
722 * resolve when Cordova triggers the `deviceready` event.
723 *
724 * The resolved value is the `readySource`, which states which platform
725 * ready was used. For example, when Cordova is ready, the resolved ready
726 * source is `cordova`. The default ready source value will be `dom`. The
727 * `readySource` is useful if different logic should run depending on the
728 * platform the app is running from. For example, only Cordova can execute
729 * the status bar plugin, so the web should not run status bar plugin logic.
730 *
731 * ```
732 * import { Component } from '@angular/core';
733 * import { Platform } from 'ionic-angular';
734 *
735 * @Component({...})
736 * export MyApp {
737 * constructor(public platform: Platform) {
738 * this.platform.ready().then((readySource) => {
739 * console.log('Platform ready from', readySource);
740 * // Platform now ready, execute any required native code
741 * });
742 * }
743 * }
744 * ```
745 */
746 /**
747 * Returns a promise when the platform is ready and native functionality
748 * can be called. If the app is running from within a web browser, then
749 * the promise will resolve when the DOM is ready. When the app is running
750 * from an application engine such as Cordova, then the promise will
751 * resolve when Cordova triggers the `deviceready` event.
752 *
753 * The resolved value is the `readySource`, which states which platform
754 * ready was used. For example, when Cordova is ready, the resolved ready
755 * source is `cordova`. The default ready source value will be `dom`. The
756 * `readySource` is useful if different logic should run depending on the
757 * platform the app is running from. For example, only Cordova can execute
758 * the status bar plugin, so the web should not run status bar plugin logic.
759 *
760 * ```
761 * import { Component } from '\@angular/core';
762 * import { Platform } from 'ionic-angular';
763 *
764 * \@Component({...})
765 * export MyApp {
766 * constructor(public platform: Platform) {
767 * this.platform.ready().then((readySource) => {
768 * console.log('Platform ready from', readySource);
769 * // Platform now ready, execute any required native code
770 * });
771 * }
772 * }
773 * ```
774 * @return {?}
775 */
776 Platform.prototype.ready = /**
777 * Returns a promise when the platform is ready and native functionality
778 * can be called. If the app is running from within a web browser, then
779 * the promise will resolve when the DOM is ready. When the app is running
780 * from an application engine such as Cordova, then the promise will
781 * resolve when Cordova triggers the `deviceready` event.
782 *
783 * The resolved value is the `readySource`, which states which platform
784 * ready was used. For example, when Cordova is ready, the resolved ready
785 * source is `cordova`. The default ready source value will be `dom`. The
786 * `readySource` is useful if different logic should run depending on the
787 * platform the app is running from. For example, only Cordova can execute
788 * the status bar plugin, so the web should not run status bar plugin logic.
789 *
790 * ```
791 * import { Component } from '\@angular/core';
792 * import { Platform } from 'ionic-angular';
793 *
794 * \@Component({...})
795 * export MyApp {
796 * constructor(public platform: Platform) {
797 * this.platform.ready().then((readySource) => {
798 * console.log('Platform ready from', readySource);
799 * // Platform now ready, execute any required native code
800 * });
801 * }
802 * }
803 * ```
804 * @return {?}
805 */
806 function () {
807 return this._readyPromise;
808 };
809 Object.defineProperty(Platform.prototype, "isRTL", {
810 /**
811 * Returns if this app is using right-to-left language direction or not.
812 * We recommend the app's `index.html` file already has the correct `dir`
813 * attribute value set, such as `<html dir="ltr">` or `<html dir="rtl">`.
814 * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)
815 */
816 get: /**
817 * Returns if this app is using right-to-left language direction or not.
818 * We recommend the app's `index.html` file already has the correct `dir`
819 * attribute value set, such as `<html dir="ltr">` or `<html dir="rtl">`.
820 * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)
821 * @return {?}
822 */
823 function () {
824 return this.doc.dir === 'rtl';
825 },
826 enumerable: true,
827 configurable: true
828 });
829 /**
830 * Get the query string parameter
831 */
832 /**
833 * Get the query string parameter
834 * @param {?} key
835 * @return {?}
836 */
837 Platform.prototype.getQueryParam = /**
838 * Get the query string parameter
839 * @param {?} key
840 * @return {?}
841 */
842 function (key) {
843 return readQueryParam(this.win.location.href, key);
844 };
845 /**
846 * Returns `true` if the app is in landscape mode.
847 */
848 /**
849 * Returns `true` if the app is in landscape mode.
850 * @return {?}
851 */
852 Platform.prototype.isLandscape = /**
853 * Returns `true` if the app is in landscape mode.
854 * @return {?}
855 */
856 function () {
857 return !this.isPortrait();
858 };
859 /**
860 * Returns `true` if the app is in portait mode.
861 */
862 /**
863 * Returns `true` if the app is in portait mode.
864 * @return {?}
865 */
866 Platform.prototype.isPortrait = /**
867 * Returns `true` if the app is in portait mode.
868 * @return {?}
869 */
870 function () {
871 return this.win.matchMedia && this.win.matchMedia('(orientation: portrait)').matches;
872 };
873 /**
874 * @param {?} expression
875 * @return {?}
876 */
877 Platform.prototype.testUserAgent = /**
878 * @param {?} expression
879 * @return {?}
880 */
881 function (expression) {
882 /** @type {?} */
883 var nav = this.win.navigator;
884 return !!(nav && nav.userAgent && nav.userAgent.indexOf(expression) >= 0);
885 };
886 /**
887 * Get the current url.
888 */
889 /**
890 * Get the current url.
891 * @return {?}
892 */
893 Platform.prototype.url = /**
894 * Get the current url.
895 * @return {?}
896 */
897 function () {
898 return this.win.location.href;
899 };
900 /**
901 * Gets the width of the platform's viewport using `window.innerWidth`.
902 */
903 /**
904 * Gets the width of the platform's viewport using `window.innerWidth`.
905 * @return {?}
906 */
907 Platform.prototype.width = /**
908 * Gets the width of the platform's viewport using `window.innerWidth`.
909 * @return {?}
910 */
911 function () {
912 return this.win.innerWidth;
913 };
914 /**
915 * Gets the height of the platform's viewport using `window.innerHeight`.
916 */
917 /**
918 * Gets the height of the platform's viewport using `window.innerHeight`.
919 * @return {?}
920 */
921 Platform.prototype.height = /**
922 * Gets the height of the platform's viewport using `window.innerHeight`.
923 * @return {?}
924 */
925 function () {
926 return this.win.innerHeight;
927 };
928 Platform.decorators = [
929 { type: Injectable, args: [{
930 providedIn: 'root',
931 },] },
932 ];
933 /** @nocollapse */
934 Platform.ctorParameters = function () { return [
935 { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
936 { type: NgZone }
937 ]; };
938 /** @nocollapse */ Platform.ngInjectableDef = defineInjectable({ factory: function Platform_Factory() { return new Platform(inject(DOCUMENT), inject(NgZone)); }, token: Platform, providedIn: "root" });
939 return Platform;
940}());
941/** @type {?} */
942var readQueryParam = (/**
943 * @param {?} url
944 * @param {?} key
945 * @return {?}
946 */
947function (url, key) {
948 key = key.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
949 /** @type {?} */
950 var regex = new RegExp('[\\?&]' + key + '=([^&#]*)');
951 /** @type {?} */
952 var results = regex.exec(url);
953 return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null;
954});
955/** @type {?} */
956var proxyEvent = (/**
957 * @template T
958 * @param {?} emitter
959 * @param {?} el
960 * @param {?} eventName
961 * @return {?}
962 */
963function (emitter, el, eventName) {
964 if (((/** @type {?} */ (el)))) {
965 el.addEventListener(eventName, (/**
966 * @param {?} ev
967 * @return {?}
968 */
969 function (ev) {
970 // ?? cordova might emit "null" events
971 emitter.next(ev != null ? (/** @type {?} */ (((/** @type {?} */ (ev))).detail)) : undefined);
972 }));
973 }
974});
975
976/**
977 * @fileoverview added by tsickle
978 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
979 */
980var NavController = /** @class */ (function () {
981 function NavController(platform, location, serializer, router) {
982 var _this = this;
983 this.location = location;
984 this.serializer = serializer;
985 this.router = router;
986 this.direction = DEFAULT_DIRECTION;
987 this.animated = DEFAULT_ANIMATED;
988 this.guessDirection = 'forward';
989 this.lastNavId = -1;
990 // Subscribe to router events to detect direction
991 if (router) {
992 router.events.subscribe((/**
993 * @param {?} ev
994 * @return {?}
995 */
996 function (ev) {
997 if (ev instanceof NavigationStart) {
998 /** @type {?} */
999 var id = (ev.restoredState) ? ev.restoredState.navigationId : ev.id;
1000 _this.guessDirection = id < _this.lastNavId ? 'back' : 'forward';
1001 _this.guessAnimation = !ev.restoredState ? _this.guessDirection : undefined;
1002 _this.lastNavId = _this.guessDirection === 'forward' ? ev.id : id;
1003 }
1004 }));
1005 }
1006 // Subscribe to backButton events
1007 platform.backButton.subscribeWithPriority(0, (/**
1008 * @return {?}
1009 */
1010 function () { return _this.pop(); }));
1011 }
1012 /**
1013 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1014 * it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.
1015 *
1016 * Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),
1017 * and that it will show a "forward" animation by default.
1018 *
1019 * Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1020 *
1021 * ```html
1022 * <a routerLink="/path/to/page" routerDirection="forward">Link</a>
1023 * ```
1024 */
1025 /**
1026 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1027 * it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.
1028 *
1029 * Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),
1030 * and that it will show a "forward" animation by default.
1031 *
1032 * Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1033 *
1034 * ```html
1035 * <a routerLink="/path/to/page" routerDirection="forward">Link</a>
1036 * ```
1037 * @param {?} url
1038 * @param {?=} options
1039 * @return {?}
1040 */
1041 NavController.prototype.navigateForward = /**
1042 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1043 * it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.
1044 *
1045 * Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),
1046 * and that it will show a "forward" animation by default.
1047 *
1048 * Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1049 *
1050 * ```html
1051 * <a routerLink="/path/to/page" routerDirection="forward">Link</a>
1052 * ```
1053 * @param {?} url
1054 * @param {?=} options
1055 * @return {?}
1056 */
1057 function (url, options) {
1058 if (options === void 0) { options = {}; }
1059 this.setDirection('forward', options.animated, options.animationDirection);
1060 return this.navigate(url, options);
1061 };
1062 /**
1063 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1064 * it's equivalent to calling:
1065 *
1066 * ```ts
1067 * this.navController.setDirection('back');
1068 * this.router.navigateByUrl(path);
1069 * ```
1070 *
1071 * Going **back** means that all the pages in the stack until the navigated page is found will be popped,
1072 * and that it will show a "back" animation by default.
1073 *
1074 * Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1075 *
1076 * ```html
1077 * <a routerLink="/path/to/page" routerDirection="back">Link</a>
1078 * ```
1079 */
1080 /**
1081 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1082 * it's equivalent to calling:
1083 *
1084 * ```ts
1085 * this.navController.setDirection('back');
1086 * this.router.navigateByUrl(path);
1087 * ```
1088 *
1089 * Going **back** means that all the pages in the stack until the navigated page is found will be popped,
1090 * and that it will show a "back" animation by default.
1091 *
1092 * Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1093 *
1094 * ```html
1095 * <a routerLink="/path/to/page" routerDirection="back">Link</a>
1096 * ```
1097 * @param {?} url
1098 * @param {?=} options
1099 * @return {?}
1100 */
1101 NavController.prototype.navigateBack = /**
1102 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1103 * it's equivalent to calling:
1104 *
1105 * ```ts
1106 * this.navController.setDirection('back');
1107 * this.router.navigateByUrl(path);
1108 * ```
1109 *
1110 * Going **back** means that all the pages in the stack until the navigated page is found will be popped,
1111 * and that it will show a "back" animation by default.
1112 *
1113 * Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1114 *
1115 * ```html
1116 * <a routerLink="/path/to/page" routerDirection="back">Link</a>
1117 * ```
1118 * @param {?} url
1119 * @param {?=} options
1120 * @return {?}
1121 */
1122 function (url, options) {
1123 if (options === void 0) { options = {}; }
1124 this.setDirection('back', options.animated, options.animationDirection);
1125 return this.navigate(url, options);
1126 };
1127 /**
1128 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1129 * it's equivalent to calling:
1130 *
1131 * ```ts
1132 * this.navController.setDirection('root');
1133 * this.router.navigateByUrl(path);
1134 * ```
1135 *
1136 * Going **root** means that all existing pages in the stack will be removed,
1137 * and the navigated page will become the single page in the stack.
1138 *
1139 * Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1140 *
1141 * ```html
1142 * <a routerLink="/path/to/page" routerDirection="root">Link</a>
1143 * ```
1144 */
1145 /**
1146 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1147 * it's equivalent to calling:
1148 *
1149 * ```ts
1150 * this.navController.setDirection('root');
1151 * this.router.navigateByUrl(path);
1152 * ```
1153 *
1154 * Going **root** means that all existing pages in the stack will be removed,
1155 * and the navigated page will become the single page in the stack.
1156 *
1157 * Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1158 *
1159 * ```html
1160 * <a routerLink="/path/to/page" routerDirection="root">Link</a>
1161 * ```
1162 * @param {?} url
1163 * @param {?=} options
1164 * @return {?}
1165 */
1166 NavController.prototype.navigateRoot = /**
1167 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
1168 * it's equivalent to calling:
1169 *
1170 * ```ts
1171 * this.navController.setDirection('root');
1172 * this.router.navigateByUrl(path);
1173 * ```
1174 *
1175 * Going **root** means that all existing pages in the stack will be removed,
1176 * and the navigated page will become the single page in the stack.
1177 *
1178 * Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:
1179 *
1180 * ```html
1181 * <a routerLink="/path/to/page" routerDirection="root">Link</a>
1182 * ```
1183 * @param {?} url
1184 * @param {?=} options
1185 * @return {?}
1186 */
1187 function (url, options) {
1188 if (options === void 0) { options = {}; }
1189 this.setDirection('root', options.animated, options.animationDirection);
1190 return this.navigate(url, options);
1191 };
1192 /**
1193 * Same as [Location](https://angular.io/api/common/Location)'s back() method.
1194 * It will use the standard `window.history.back()` under the hood, but featuring a `back` animation
1195 * by default.
1196 */
1197 /**
1198 * Same as [Location](https://angular.io/api/common/Location)'s back() method.
1199 * It will use the standard `window.history.back()` under the hood, but featuring a `back` animation
1200 * by default.
1201 * @param {?=} options
1202 * @return {?}
1203 */
1204 NavController.prototype.back = /**
1205 * Same as [Location](https://angular.io/api/common/Location)'s back() method.
1206 * It will use the standard `window.history.back()` under the hood, but featuring a `back` animation
1207 * by default.
1208 * @param {?=} options
1209 * @return {?}
1210 */
1211 function (options) {
1212 if (options === void 0) { options = { animated: true, animationDirection: 'back' }; }
1213 this.setDirection('back', options.animated, options.animationDirection);
1214 return this.location.back();
1215 };
1216 /**
1217 * This methods goes back in the context of Ionic's stack navigation.
1218 *
1219 * It recursively finds the top active `ion-router-outlet` and calls `pop()`.
1220 * This is the recommended way to go back when you are using `ion-router-outlet`.
1221 */
1222 /**
1223 * This methods goes back in the context of Ionic's stack navigation.
1224 *
1225 * It recursively finds the top active `ion-router-outlet` and calls `pop()`.
1226 * This is the recommended way to go back when you are using `ion-router-outlet`.
1227 * @return {?}
1228 */
1229 NavController.prototype.pop = /**
1230 * This methods goes back in the context of Ionic's stack navigation.
1231 *
1232 * It recursively finds the top active `ion-router-outlet` and calls `pop()`.
1233 * This is the recommended way to go back when you are using `ion-router-outlet`.
1234 * @return {?}
1235 */
1236 function () {
1237 return __awaiter(this, void 0, void 0, function () {
1238 var outlet;
1239 return __generator(this, function (_a) {
1240 switch (_a.label) {
1241 case 0:
1242 outlet = this.topOutlet;
1243 _a.label = 1;
1244 case 1:
1245 if (!outlet) return [3 /*break*/, 3];
1246 return [4 /*yield*/, outlet.pop()];
1247 case 2:
1248 if (_a.sent()) {
1249 return [3 /*break*/, 3];
1250 }
1251 else {
1252 outlet = outlet.parentOutlet;
1253 }
1254 return [3 /*break*/, 1];
1255 case 3: return [2 /*return*/];
1256 }
1257 });
1258 });
1259 };
1260 /**
1261 * This methods specifies the direction of the next navigation performed by the Angular router.
1262 *
1263 * `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.
1264 *
1265 * It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.
1266 */
1267 /**
1268 * This methods specifies the direction of the next navigation performed by the Angular router.
1269 *
1270 * `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.
1271 *
1272 * It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.
1273 * @param {?} direction
1274 * @param {?=} animated
1275 * @param {?=} animationDirection
1276 * @return {?}
1277 */
1278 NavController.prototype.setDirection = /**
1279 * This methods specifies the direction of the next navigation performed by the Angular router.
1280 *
1281 * `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.
1282 *
1283 * It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.
1284 * @param {?} direction
1285 * @param {?=} animated
1286 * @param {?=} animationDirection
1287 * @return {?}
1288 */
1289 function (direction, animated, animationDirection) {
1290 this.direction = direction;
1291 this.animated = getAnimation(direction, animated, animationDirection);
1292 };
1293 /**
1294 * @internal
1295 */
1296 /**
1297 * \@internal
1298 * @param {?} outlet
1299 * @return {?}
1300 */
1301 NavController.prototype.setTopOutlet = /**
1302 * \@internal
1303 * @param {?} outlet
1304 * @return {?}
1305 */
1306 function (outlet) {
1307 this.topOutlet = outlet;
1308 };
1309 /**
1310 * @internal
1311 */
1312 /**
1313 * \@internal
1314 * @return {?}
1315 */
1316 NavController.prototype.consumeTransition = /**
1317 * \@internal
1318 * @return {?}
1319 */
1320 function () {
1321 /** @type {?} */
1322 var direction = 'root';
1323 /** @type {?} */
1324 var animation;
1325 if (this.direction === 'auto') {
1326 direction = this.guessDirection;
1327 animation = this.guessAnimation;
1328 }
1329 else {
1330 animation = this.animated;
1331 direction = this.direction;
1332 }
1333 this.direction = DEFAULT_DIRECTION;
1334 this.animated = DEFAULT_ANIMATED;
1335 return {
1336 direction: direction,
1337 animation: animation
1338 };
1339 };
1340 /**
1341 * @private
1342 * @param {?} url
1343 * @param {?} options
1344 * @return {?}
1345 */
1346 NavController.prototype.navigate = /**
1347 * @private
1348 * @param {?} url
1349 * @param {?} options
1350 * @return {?}
1351 */
1352 function (url, options) {
1353 if (Array.isArray(url)) {
1354 return (/** @type {?} */ (this.router)).navigate(url, options);
1355 }
1356 else {
1357 /**
1358 * navigateByUrl ignores any properties that
1359 * would change the url, so things like queryParams
1360 * would be ignored unless we create a url tree
1361 * More Info: https://github.com/angular/angular/issues/18798
1362 * @type {?}
1363 */
1364 var urlTree = this.serializer.parse(url.toString());
1365 if (options.queryParams !== undefined) {
1366 urlTree.queryParams = __assign({}, options.queryParams);
1367 }
1368 if (options.fragment !== undefined) {
1369 urlTree.fragment = options.fragment;
1370 }
1371 /**
1372 * `navigateByUrl` will still apply `NavigationExtras` properties
1373 * that do not modify the url, such as `replaceUrl` which is why
1374 * `options` is passed in here.
1375 */
1376 return (/** @type {?} */ (this.router)).navigateByUrl(urlTree, options);
1377 }
1378 };
1379 NavController.decorators = [
1380 { type: Injectable, args: [{
1381 providedIn: 'root',
1382 },] },
1383 ];
1384 /** @nocollapse */
1385 NavController.ctorParameters = function () { return [
1386 { type: Platform },
1387 { type: Location },
1388 { type: UrlSerializer },
1389 { type: Router, decorators: [{ type: Optional }] }
1390 ]; };
1391 /** @nocollapse */ NavController.ngInjectableDef = defineInjectable({ factory: function NavController_Factory() { return new NavController(inject(Platform), inject(Location), inject(UrlSerializer), inject(Router, 8)); }, token: NavController, providedIn: "root" });
1392 return NavController;
1393}());
1394/** @type {?} */
1395var getAnimation = (/**
1396 * @param {?} direction
1397 * @param {?} animated
1398 * @param {?} animationDirection
1399 * @return {?}
1400 */
1401function (direction, animated, animationDirection) {
1402 if (animated === false) {
1403 return undefined;
1404 }
1405 if (animationDirection !== undefined) {
1406 return animationDirection;
1407 }
1408 if (direction === 'forward' || direction === 'back') {
1409 return direction;
1410 }
1411 else if (direction === 'root' && animated === true) {
1412 return 'forward';
1413 }
1414 return undefined;
1415});
1416/** @type {?} */
1417var DEFAULT_DIRECTION = 'auto';
1418/** @type {?} */
1419var DEFAULT_ANIMATED = undefined;
1420
1421/**
1422 * @fileoverview added by tsickle
1423 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1424 */
1425/** @type {?} */
1426var proxyInputs = (/**
1427 * @param {?} Cmp
1428 * @param {?} inputs
1429 * @return {?}
1430 */
1431function (Cmp, inputs) {
1432 /** @type {?} */
1433 var Prototype = Cmp.prototype;
1434 inputs.forEach((/**
1435 * @param {?} item
1436 * @return {?}
1437 */
1438 function (item) {
1439 Object.defineProperty(Prototype, item, {
1440 get: /**
1441 * @return {?}
1442 */
1443 function () { return this.el[item]; },
1444 set: /**
1445 * @param {?} val
1446 * @return {?}
1447 */
1448 function (val) {
1449 var _this = this;
1450 this.z.runOutsideAngular((/**
1451 * @return {?}
1452 */
1453 function () { return _this.el[item] = val; }));
1454 },
1455 });
1456 }));
1457});
1458/** @type {?} */
1459var proxyMethods = (/**
1460 * @param {?} Cmp
1461 * @param {?} methods
1462 * @return {?}
1463 */
1464function (Cmp, methods) {
1465 /** @type {?} */
1466 var Prototype = Cmp.prototype;
1467 methods.forEach((/**
1468 * @param {?} methodName
1469 * @return {?}
1470 */
1471 function (methodName) {
1472 Prototype[methodName] = (/**
1473 * @return {?}
1474 */
1475 function () {
1476 var _this = this;
1477 /** @type {?} */
1478 var args = arguments;
1479 return this.z.runOutsideAngular((/**
1480 * @return {?}
1481 */
1482 function () { return _this.el[methodName].apply(_this.el, args); }));
1483 });
1484 }));
1485});
1486/** @type {?} */
1487var proxyOutputs = (/**
1488 * @param {?} instance
1489 * @param {?} el
1490 * @param {?} events
1491 * @return {?}
1492 */
1493function (instance, el, events) {
1494 events.forEach((/**
1495 * @param {?} eventName
1496 * @return {?}
1497 */
1498 function (eventName) { return instance[eventName] = fromEvent(el, eventName); }));
1499});
1500
1501/**
1502 * @fileoverview added by tsickle
1503 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
1504 */
1505var IonApp = /** @class */ (function () {
1506 function IonApp(c, r, z) {
1507 this.z = z;
1508 c.detach();
1509 this.el = r.nativeElement;
1510 }
1511 IonApp.decorators = [
1512 { type: Component, args: [{ selector: 'ion-app', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
1513 ];
1514 /** @nocollapse */
1515 IonApp.ctorParameters = function () { return [
1516 { type: ChangeDetectorRef },
1517 { type: ElementRef },
1518 { type: NgZone }
1519 ]; };
1520 return IonApp;
1521}());
1522var IonAvatar = /** @class */ (function () {
1523 function IonAvatar(c, r, z) {
1524 this.z = z;
1525 c.detach();
1526 this.el = r.nativeElement;
1527 }
1528 IonAvatar.decorators = [
1529 { type: Component, args: [{ selector: 'ion-avatar', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
1530 ];
1531 /** @nocollapse */
1532 IonAvatar.ctorParameters = function () { return [
1533 { type: ChangeDetectorRef },
1534 { type: ElementRef },
1535 { type: NgZone }
1536 ]; };
1537 return IonAvatar;
1538}());
1539var IonBackButton = /** @class */ (function () {
1540 function IonBackButton(c, r, z) {
1541 this.z = z;
1542 c.detach();
1543 this.el = r.nativeElement;
1544 }
1545 IonBackButton.decorators = [
1546 { type: Component, args: [{ selector: 'ion-back-button', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'defaultHref', 'disabled', 'icon', 'mode', 'text', 'type'] },] },
1547 ];
1548 /** @nocollapse */
1549 IonBackButton.ctorParameters = function () { return [
1550 { type: ChangeDetectorRef },
1551 { type: ElementRef },
1552 { type: NgZone }
1553 ]; };
1554 return IonBackButton;
1555}());
1556proxyInputs(IonBackButton, ['color', 'defaultHref', 'disabled', 'icon', 'mode', 'text', 'type']);
1557var IonBackdrop = /** @class */ (function () {
1558 function IonBackdrop(c, r, z) {
1559 this.z = z;
1560 c.detach();
1561 this.el = r.nativeElement;
1562 proxyOutputs(this, this.el, ['ionBackdropTap']);
1563 }
1564 IonBackdrop.decorators = [
1565 { type: Component, args: [{ selector: 'ion-backdrop', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['stopPropagation', 'tappable', 'visible'] },] },
1566 ];
1567 /** @nocollapse */
1568 IonBackdrop.ctorParameters = function () { return [
1569 { type: ChangeDetectorRef },
1570 { type: ElementRef },
1571 { type: NgZone }
1572 ]; };
1573 return IonBackdrop;
1574}());
1575proxyInputs(IonBackdrop, ['stopPropagation', 'tappable', 'visible']);
1576var IonBadge = /** @class */ (function () {
1577 function IonBadge(c, r, z) {
1578 this.z = z;
1579 c.detach();
1580 this.el = r.nativeElement;
1581 }
1582 IonBadge.decorators = [
1583 { type: Component, args: [{ selector: 'ion-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
1584 ];
1585 /** @nocollapse */
1586 IonBadge.ctorParameters = function () { return [
1587 { type: ChangeDetectorRef },
1588 { type: ElementRef },
1589 { type: NgZone }
1590 ]; };
1591 return IonBadge;
1592}());
1593proxyInputs(IonBadge, ['color', 'mode']);
1594var IonButton = /** @class */ (function () {
1595 function IonButton(c, r, z) {
1596 this.z = z;
1597 c.detach();
1598 this.el = r.nativeElement;
1599 proxyOutputs(this, this.el, ['ionFocus', 'ionBlur']);
1600 }
1601 IonButton.decorators = [
1602 { type: Component, args: [{ selector: 'ion-button', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['buttonType', 'color', 'disabled', 'download', 'expand', 'fill', 'href', 'mode', 'rel', 'routerDirection', 'shape', 'size', 'strong', 'target', 'type'] },] },
1603 ];
1604 /** @nocollapse */
1605 IonButton.ctorParameters = function () { return [
1606 { type: ChangeDetectorRef },
1607 { type: ElementRef },
1608 { type: NgZone }
1609 ]; };
1610 return IonButton;
1611}());
1612proxyInputs(IonButton, ['buttonType', 'color', 'disabled', 'download', 'expand', 'fill', 'href', 'mode', 'rel', 'routerDirection', 'shape', 'size', 'strong', 'target', 'type']);
1613var IonButtons = /** @class */ (function () {
1614 function IonButtons(c, r, z) {
1615 this.z = z;
1616 c.detach();
1617 this.el = r.nativeElement;
1618 }
1619 IonButtons.decorators = [
1620 { type: Component, args: [{ selector: 'ion-buttons', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['collapse'] },] },
1621 ];
1622 /** @nocollapse */
1623 IonButtons.ctorParameters = function () { return [
1624 { type: ChangeDetectorRef },
1625 { type: ElementRef },
1626 { type: NgZone }
1627 ]; };
1628 return IonButtons;
1629}());
1630proxyInputs(IonButtons, ['collapse']);
1631var IonCard = /** @class */ (function () {
1632 function IonCard(c, r, z) {
1633 this.z = z;
1634 c.detach();
1635 this.el = r.nativeElement;
1636 }
1637 IonCard.decorators = [
1638 { type: Component, args: [{ selector: 'ion-card', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['button', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'target', 'type'] },] },
1639 ];
1640 /** @nocollapse */
1641 IonCard.ctorParameters = function () { return [
1642 { type: ChangeDetectorRef },
1643 { type: ElementRef },
1644 { type: NgZone }
1645 ]; };
1646 return IonCard;
1647}());
1648proxyInputs(IonCard, ['button', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'target', 'type']);
1649var IonCardContent = /** @class */ (function () {
1650 function IonCardContent(c, r, z) {
1651 this.z = z;
1652 c.detach();
1653 this.el = r.nativeElement;
1654 }
1655 IonCardContent.decorators = [
1656 { type: Component, args: [{ selector: 'ion-card-content', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['mode'] },] },
1657 ];
1658 /** @nocollapse */
1659 IonCardContent.ctorParameters = function () { return [
1660 { type: ChangeDetectorRef },
1661 { type: ElementRef },
1662 { type: NgZone }
1663 ]; };
1664 return IonCardContent;
1665}());
1666proxyInputs(IonCardContent, ['mode']);
1667var IonCardHeader = /** @class */ (function () {
1668 function IonCardHeader(c, r, z) {
1669 this.z = z;
1670 c.detach();
1671 this.el = r.nativeElement;
1672 }
1673 IonCardHeader.decorators = [
1674 { type: Component, args: [{ selector: 'ion-card-header', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'translucent'] },] },
1675 ];
1676 /** @nocollapse */
1677 IonCardHeader.ctorParameters = function () { return [
1678 { type: ChangeDetectorRef },
1679 { type: ElementRef },
1680 { type: NgZone }
1681 ]; };
1682 return IonCardHeader;
1683}());
1684proxyInputs(IonCardHeader, ['color', 'mode', 'translucent']);
1685var IonCardSubtitle = /** @class */ (function () {
1686 function IonCardSubtitle(c, r, z) {
1687 this.z = z;
1688 c.detach();
1689 this.el = r.nativeElement;
1690 }
1691 IonCardSubtitle.decorators = [
1692 { type: Component, args: [{ selector: 'ion-card-subtitle', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
1693 ];
1694 /** @nocollapse */
1695 IonCardSubtitle.ctorParameters = function () { return [
1696 { type: ChangeDetectorRef },
1697 { type: ElementRef },
1698 { type: NgZone }
1699 ]; };
1700 return IonCardSubtitle;
1701}());
1702proxyInputs(IonCardSubtitle, ['color', 'mode']);
1703var IonCardTitle = /** @class */ (function () {
1704 function IonCardTitle(c, r, z) {
1705 this.z = z;
1706 c.detach();
1707 this.el = r.nativeElement;
1708 }
1709 IonCardTitle.decorators = [
1710 { type: Component, args: [{ selector: 'ion-card-title', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
1711 ];
1712 /** @nocollapse */
1713 IonCardTitle.ctorParameters = function () { return [
1714 { type: ChangeDetectorRef },
1715 { type: ElementRef },
1716 { type: NgZone }
1717 ]; };
1718 return IonCardTitle;
1719}());
1720proxyInputs(IonCardTitle, ['color', 'mode']);
1721var IonCheckbox = /** @class */ (function () {
1722 function IonCheckbox(c, r, z) {
1723 this.z = z;
1724 c.detach();
1725 this.el = r.nativeElement;
1726 proxyOutputs(this, this.el, ['ionChange', 'ionFocus', 'ionBlur']);
1727 }
1728 IonCheckbox.decorators = [
1729 { type: Component, args: [{ selector: 'ion-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['checked', 'color', 'disabled', 'indeterminate', 'mode', 'name', 'value'] },] },
1730 ];
1731 /** @nocollapse */
1732 IonCheckbox.ctorParameters = function () { return [
1733 { type: ChangeDetectorRef },
1734 { type: ElementRef },
1735 { type: NgZone }
1736 ]; };
1737 return IonCheckbox;
1738}());
1739proxyInputs(IonCheckbox, ['checked', 'color', 'disabled', 'indeterminate', 'mode', 'name', 'value']);
1740var IonChip = /** @class */ (function () {
1741 function IonChip(c, r, z) {
1742 this.z = z;
1743 c.detach();
1744 this.el = r.nativeElement;
1745 }
1746 IonChip.decorators = [
1747 { type: Component, args: [{ selector: 'ion-chip', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'outline'] },] },
1748 ];
1749 /** @nocollapse */
1750 IonChip.ctorParameters = function () { return [
1751 { type: ChangeDetectorRef },
1752 { type: ElementRef },
1753 { type: NgZone }
1754 ]; };
1755 return IonChip;
1756}());
1757proxyInputs(IonChip, ['color', 'mode', 'outline']);
1758var IonCol = /** @class */ (function () {
1759 function IonCol(c, r, z) {
1760 this.z = z;
1761 c.detach();
1762 this.el = r.nativeElement;
1763 }
1764 IonCol.decorators = [
1765 { type: Component, args: [{ selector: 'ion-col', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['offset', 'offsetLg', 'offsetMd', 'offsetSm', 'offsetXl', 'offsetXs', 'pull', 'pullLg', 'pullMd', 'pullSm', 'pullXl', 'pullXs', 'push', 'pushLg', 'pushMd', 'pushSm', 'pushXl', 'pushXs', 'size', 'sizeLg', 'sizeMd', 'sizeSm', 'sizeXl', 'sizeXs'] },] },
1766 ];
1767 /** @nocollapse */
1768 IonCol.ctorParameters = function () { return [
1769 { type: ChangeDetectorRef },
1770 { type: ElementRef },
1771 { type: NgZone }
1772 ]; };
1773 return IonCol;
1774}());
1775proxyInputs(IonCol, ['offset', 'offsetLg', 'offsetMd', 'offsetSm', 'offsetXl', 'offsetXs', 'pull', 'pullLg', 'pullMd', 'pullSm', 'pullXl', 'pullXs', 'push', 'pushLg', 'pushMd', 'pushSm', 'pushXl', 'pushXs', 'size', 'sizeLg', 'sizeMd', 'sizeSm', 'sizeXl', 'sizeXs']);
1776var IonContent = /** @class */ (function () {
1777 function IonContent(c, r, z) {
1778 this.z = z;
1779 c.detach();
1780 this.el = r.nativeElement;
1781 proxyOutputs(this, this.el, ['ionScrollStart', 'ionScroll', 'ionScrollEnd']);
1782 }
1783 IonContent.decorators = [
1784 { type: Component, args: [{ selector: 'ion-content', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'forceOverscroll', 'fullscreen', 'scrollEvents', 'scrollX', 'scrollY'] },] },
1785 ];
1786 /** @nocollapse */
1787 IonContent.ctorParameters = function () { return [
1788 { type: ChangeDetectorRef },
1789 { type: ElementRef },
1790 { type: NgZone }
1791 ]; };
1792 return IonContent;
1793}());
1794proxyMethods(IonContent, ['getScrollElement', 'scrollToTop', 'scrollToBottom', 'scrollByPoint', 'scrollToPoint']);
1795proxyInputs(IonContent, ['color', 'forceOverscroll', 'fullscreen', 'scrollEvents', 'scrollX', 'scrollY']);
1796var IonDatetime = /** @class */ (function () {
1797 function IonDatetime(c, r, z) {
1798 this.z = z;
1799 c.detach();
1800 this.el = r.nativeElement;
1801 proxyOutputs(this, this.el, ['ionCancel', 'ionChange', 'ionFocus', 'ionBlur']);
1802 }
1803 IonDatetime.decorators = [
1804 { type: Component, args: [{ selector: 'ion-datetime', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['cancelText', 'dayNames', 'dayShortNames', 'dayValues', 'disabled', 'displayFormat', 'doneText', 'hourValues', 'max', 'min', 'minuteValues', 'mode', 'monthNames', 'monthShortNames', 'monthValues', 'name', 'pickerFormat', 'pickerOptions', 'placeholder', 'readonly', 'value', 'yearValues'] },] },
1805 ];
1806 /** @nocollapse */
1807 IonDatetime.ctorParameters = function () { return [
1808 { type: ChangeDetectorRef },
1809 { type: ElementRef },
1810 { type: NgZone }
1811 ]; };
1812 return IonDatetime;
1813}());
1814proxyMethods(IonDatetime, ['open']);
1815proxyInputs(IonDatetime, ['cancelText', 'dayNames', 'dayShortNames', 'dayValues', 'disabled', 'displayFormat', 'doneText', 'hourValues', 'max', 'min', 'minuteValues', 'mode', 'monthNames', 'monthShortNames', 'monthValues', 'name', 'pickerFormat', 'pickerOptions', 'placeholder', 'readonly', 'value', 'yearValues']);
1816var IonFab = /** @class */ (function () {
1817 function IonFab(c, r, z) {
1818 this.z = z;
1819 c.detach();
1820 this.el = r.nativeElement;
1821 }
1822 IonFab.decorators = [
1823 { type: Component, args: [{ selector: 'ion-fab', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['activated', 'edge', 'horizontal', 'vertical'] },] },
1824 ];
1825 /** @nocollapse */
1826 IonFab.ctorParameters = function () { return [
1827 { type: ChangeDetectorRef },
1828 { type: ElementRef },
1829 { type: NgZone }
1830 ]; };
1831 return IonFab;
1832}());
1833proxyMethods(IonFab, ['close']);
1834proxyInputs(IonFab, ['activated', 'edge', 'horizontal', 'vertical']);
1835var IonFabButton = /** @class */ (function () {
1836 function IonFabButton(c, r, z) {
1837 this.z = z;
1838 c.detach();
1839 this.el = r.nativeElement;
1840 proxyOutputs(this, this.el, ['ionFocus', 'ionBlur']);
1841 }
1842 IonFabButton.decorators = [
1843 { type: Component, args: [{ selector: 'ion-fab-button', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['activated', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'show', 'size', 'target', 'translucent', 'type'] },] },
1844 ];
1845 /** @nocollapse */
1846 IonFabButton.ctorParameters = function () { return [
1847 { type: ChangeDetectorRef },
1848 { type: ElementRef },
1849 { type: NgZone }
1850 ]; };
1851 return IonFabButton;
1852}());
1853proxyInputs(IonFabButton, ['activated', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'show', 'size', 'target', 'translucent', 'type']);
1854var IonFabList = /** @class */ (function () {
1855 function IonFabList(c, r, z) {
1856 this.z = z;
1857 c.detach();
1858 this.el = r.nativeElement;
1859 }
1860 IonFabList.decorators = [
1861 { type: Component, args: [{ selector: 'ion-fab-list', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['activated', 'side'] },] },
1862 ];
1863 /** @nocollapse */
1864 IonFabList.ctorParameters = function () { return [
1865 { type: ChangeDetectorRef },
1866 { type: ElementRef },
1867 { type: NgZone }
1868 ]; };
1869 return IonFabList;
1870}());
1871proxyInputs(IonFabList, ['activated', 'side']);
1872var IonFooter = /** @class */ (function () {
1873 function IonFooter(c, r, z) {
1874 this.z = z;
1875 c.detach();
1876 this.el = r.nativeElement;
1877 }
1878 IonFooter.decorators = [
1879 { type: Component, args: [{ selector: 'ion-footer', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['mode', 'translucent'] },] },
1880 ];
1881 /** @nocollapse */
1882 IonFooter.ctorParameters = function () { return [
1883 { type: ChangeDetectorRef },
1884 { type: ElementRef },
1885 { type: NgZone }
1886 ]; };
1887 return IonFooter;
1888}());
1889proxyInputs(IonFooter, ['mode', 'translucent']);
1890var IonGrid = /** @class */ (function () {
1891 function IonGrid(c, r, z) {
1892 this.z = z;
1893 c.detach();
1894 this.el = r.nativeElement;
1895 }
1896 IonGrid.decorators = [
1897 { type: Component, args: [{ selector: 'ion-grid', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['fixed'] },] },
1898 ];
1899 /** @nocollapse */
1900 IonGrid.ctorParameters = function () { return [
1901 { type: ChangeDetectorRef },
1902 { type: ElementRef },
1903 { type: NgZone }
1904 ]; };
1905 return IonGrid;
1906}());
1907proxyInputs(IonGrid, ['fixed']);
1908var IonHeader = /** @class */ (function () {
1909 function IonHeader(c, r, z) {
1910 this.z = z;
1911 c.detach();
1912 this.el = r.nativeElement;
1913 }
1914 IonHeader.decorators = [
1915 { type: Component, args: [{ selector: 'ion-header', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['collapse', 'mode', 'translucent'] },] },
1916 ];
1917 /** @nocollapse */
1918 IonHeader.ctorParameters = function () { return [
1919 { type: ChangeDetectorRef },
1920 { type: ElementRef },
1921 { type: NgZone }
1922 ]; };
1923 return IonHeader;
1924}());
1925proxyInputs(IonHeader, ['collapse', 'mode', 'translucent']);
1926var IonIcon = /** @class */ (function () {
1927 function IonIcon(c, r, z) {
1928 this.z = z;
1929 c.detach();
1930 this.el = r.nativeElement;
1931 }
1932 IonIcon.decorators = [
1933 { type: Component, args: [{ selector: 'ion-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['ariaLabel', 'color', 'flipRtl', 'icon', 'ios', 'lazy', 'md', 'mode', 'name', 'size', 'src'] },] },
1934 ];
1935 /** @nocollapse */
1936 IonIcon.ctorParameters = function () { return [
1937 { type: ChangeDetectorRef },
1938 { type: ElementRef },
1939 { type: NgZone }
1940 ]; };
1941 return IonIcon;
1942}());
1943proxyInputs(IonIcon, ['ariaLabel', 'color', 'flipRtl', 'icon', 'ios', 'lazy', 'md', 'mode', 'name', 'size', 'src']);
1944var IonImg = /** @class */ (function () {
1945 function IonImg(c, r, z) {
1946 this.z = z;
1947 c.detach();
1948 this.el = r.nativeElement;
1949 proxyOutputs(this, this.el, ['ionImgWillLoad', 'ionImgDidLoad', 'ionError']);
1950 }
1951 IonImg.decorators = [
1952 { type: Component, args: [{ selector: 'ion-img', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['alt', 'src'] },] },
1953 ];
1954 /** @nocollapse */
1955 IonImg.ctorParameters = function () { return [
1956 { type: ChangeDetectorRef },
1957 { type: ElementRef },
1958 { type: NgZone }
1959 ]; };
1960 return IonImg;
1961}());
1962proxyInputs(IonImg, ['alt', 'src']);
1963var IonInfiniteScroll = /** @class */ (function () {
1964 function IonInfiniteScroll(c, r, z) {
1965 this.z = z;
1966 c.detach();
1967 this.el = r.nativeElement;
1968 proxyOutputs(this, this.el, ['ionInfinite']);
1969 }
1970 IonInfiniteScroll.decorators = [
1971 { type: Component, args: [{ selector: 'ion-infinite-scroll', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'position', 'threshold'] },] },
1972 ];
1973 /** @nocollapse */
1974 IonInfiniteScroll.ctorParameters = function () { return [
1975 { type: ChangeDetectorRef },
1976 { type: ElementRef },
1977 { type: NgZone }
1978 ]; };
1979 return IonInfiniteScroll;
1980}());
1981proxyMethods(IonInfiniteScroll, ['complete']);
1982proxyInputs(IonInfiniteScroll, ['disabled', 'position', 'threshold']);
1983var IonInfiniteScrollContent = /** @class */ (function () {
1984 function IonInfiniteScrollContent(c, r, z) {
1985 this.z = z;
1986 c.detach();
1987 this.el = r.nativeElement;
1988 }
1989 IonInfiniteScrollContent.decorators = [
1990 { type: Component, args: [{ selector: 'ion-infinite-scroll-content', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['loadingSpinner', 'loadingText'] },] },
1991 ];
1992 /** @nocollapse */
1993 IonInfiniteScrollContent.ctorParameters = function () { return [
1994 { type: ChangeDetectorRef },
1995 { type: ElementRef },
1996 { type: NgZone }
1997 ]; };
1998 return IonInfiniteScrollContent;
1999}());
2000proxyInputs(IonInfiniteScrollContent, ['loadingSpinner', 'loadingText']);
2001var IonInput = /** @class */ (function () {
2002 function IonInput(c, r, z) {
2003 this.z = z;
2004 c.detach();
2005 this.el = r.nativeElement;
2006 proxyOutputs(this, this.el, ['ionInput', 'ionChange', 'ionBlur', 'ionFocus']);
2007 }
2008 IonInput.decorators = [
2009 { type: Component, args: [{ selector: 'ion-input', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['accept', 'autocapitalize', 'autocomplete', 'autocorrect', 'autofocus', 'clearInput', 'clearOnEdit', 'color', 'debounce', 'disabled', 'inputmode', 'max', 'maxlength', 'min', 'minlength', 'mode', 'multiple', 'name', 'pattern', 'placeholder', 'readonly', 'required', 'size', 'spellcheck', 'step', 'type', 'value'] },] },
2010 ];
2011 /** @nocollapse */
2012 IonInput.ctorParameters = function () { return [
2013 { type: ChangeDetectorRef },
2014 { type: ElementRef },
2015 { type: NgZone }
2016 ]; };
2017 return IonInput;
2018}());
2019proxyMethods(IonInput, ['setFocus', 'getInputElement']);
2020proxyInputs(IonInput, ['accept', 'autocapitalize', 'autocomplete', 'autocorrect', 'autofocus', 'clearInput', 'clearOnEdit', 'color', 'debounce', 'disabled', 'inputmode', 'max', 'maxlength', 'min', 'minlength', 'mode', 'multiple', 'name', 'pattern', 'placeholder', 'readonly', 'required', 'size', 'spellcheck', 'step', 'type', 'value']);
2021var IonItem = /** @class */ (function () {
2022 function IonItem(c, r, z) {
2023 this.z = z;
2024 c.detach();
2025 this.el = r.nativeElement;
2026 }
2027 IonItem.decorators = [
2028 { type: Component, args: [{ selector: 'ion-item', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['button', 'color', 'detail', 'detailIcon', 'disabled', 'download', 'href', 'lines', 'mode', 'rel', 'routerDirection', 'target', 'type'] },] },
2029 ];
2030 /** @nocollapse */
2031 IonItem.ctorParameters = function () { return [
2032 { type: ChangeDetectorRef },
2033 { type: ElementRef },
2034 { type: NgZone }
2035 ]; };
2036 return IonItem;
2037}());
2038proxyInputs(IonItem, ['button', 'color', 'detail', 'detailIcon', 'disabled', 'download', 'href', 'lines', 'mode', 'rel', 'routerDirection', 'target', 'type']);
2039var IonItemDivider = /** @class */ (function () {
2040 function IonItemDivider(c, r, z) {
2041 this.z = z;
2042 c.detach();
2043 this.el = r.nativeElement;
2044 }
2045 IonItemDivider.decorators = [
2046 { type: Component, args: [{ selector: 'ion-item-divider', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'sticky'] },] },
2047 ];
2048 /** @nocollapse */
2049 IonItemDivider.ctorParameters = function () { return [
2050 { type: ChangeDetectorRef },
2051 { type: ElementRef },
2052 { type: NgZone }
2053 ]; };
2054 return IonItemDivider;
2055}());
2056proxyInputs(IonItemDivider, ['color', 'mode', 'sticky']);
2057var IonItemGroup = /** @class */ (function () {
2058 function IonItemGroup(c, r, z) {
2059 this.z = z;
2060 c.detach();
2061 this.el = r.nativeElement;
2062 }
2063 IonItemGroup.decorators = [
2064 { type: Component, args: [{ selector: 'ion-item-group', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
2065 ];
2066 /** @nocollapse */
2067 IonItemGroup.ctorParameters = function () { return [
2068 { type: ChangeDetectorRef },
2069 { type: ElementRef },
2070 { type: NgZone }
2071 ]; };
2072 return IonItemGroup;
2073}());
2074var IonItemOption = /** @class */ (function () {
2075 function IonItemOption(c, r, z) {
2076 this.z = z;
2077 c.detach();
2078 this.el = r.nativeElement;
2079 }
2080 IonItemOption.decorators = [
2081 { type: Component, args: [{ selector: 'ion-item-option', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'target', 'type'] },] },
2082 ];
2083 /** @nocollapse */
2084 IonItemOption.ctorParameters = function () { return [
2085 { type: ChangeDetectorRef },
2086 { type: ElementRef },
2087 { type: NgZone }
2088 ]; };
2089 return IonItemOption;
2090}());
2091proxyInputs(IonItemOption, ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'target', 'type']);
2092var IonItemOptions = /** @class */ (function () {
2093 function IonItemOptions(c, r, z) {
2094 this.z = z;
2095 c.detach();
2096 this.el = r.nativeElement;
2097 proxyOutputs(this, this.el, ['ionSwipe']);
2098 }
2099 IonItemOptions.decorators = [
2100 { type: Component, args: [{ selector: 'ion-item-options', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['side'] },] },
2101 ];
2102 /** @nocollapse */
2103 IonItemOptions.ctorParameters = function () { return [
2104 { type: ChangeDetectorRef },
2105 { type: ElementRef },
2106 { type: NgZone }
2107 ]; };
2108 return IonItemOptions;
2109}());
2110proxyInputs(IonItemOptions, ['side']);
2111var IonItemSliding = /** @class */ (function () {
2112 function IonItemSliding(c, r, z) {
2113 this.z = z;
2114 c.detach();
2115 this.el = r.nativeElement;
2116 proxyOutputs(this, this.el, ['ionDrag']);
2117 }
2118 IonItemSliding.decorators = [
2119 { type: Component, args: [{ selector: 'ion-item-sliding', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled'] },] },
2120 ];
2121 /** @nocollapse */
2122 IonItemSliding.ctorParameters = function () { return [
2123 { type: ChangeDetectorRef },
2124 { type: ElementRef },
2125 { type: NgZone }
2126 ]; };
2127 return IonItemSliding;
2128}());
2129proxyMethods(IonItemSliding, ['getOpenAmount', 'getSlidingRatio', 'open', 'close', 'closeOpened']);
2130proxyInputs(IonItemSliding, ['disabled']);
2131var IonLabel = /** @class */ (function () {
2132 function IonLabel(c, r, z) {
2133 this.z = z;
2134 c.detach();
2135 this.el = r.nativeElement;
2136 }
2137 IonLabel.decorators = [
2138 { type: Component, args: [{ selector: 'ion-label', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'position'] },] },
2139 ];
2140 /** @nocollapse */
2141 IonLabel.ctorParameters = function () { return [
2142 { type: ChangeDetectorRef },
2143 { type: ElementRef },
2144 { type: NgZone }
2145 ]; };
2146 return IonLabel;
2147}());
2148proxyInputs(IonLabel, ['color', 'mode', 'position']);
2149var IonList = /** @class */ (function () {
2150 function IonList(c, r, z) {
2151 this.z = z;
2152 c.detach();
2153 this.el = r.nativeElement;
2154 }
2155 IonList.decorators = [
2156 { type: Component, args: [{ selector: 'ion-list', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['inset', 'lines', 'mode'] },] },
2157 ];
2158 /** @nocollapse */
2159 IonList.ctorParameters = function () { return [
2160 { type: ChangeDetectorRef },
2161 { type: ElementRef },
2162 { type: NgZone }
2163 ]; };
2164 return IonList;
2165}());
2166proxyMethods(IonList, ['closeSlidingItems']);
2167proxyInputs(IonList, ['inset', 'lines', 'mode']);
2168var IonListHeader = /** @class */ (function () {
2169 function IonListHeader(c, r, z) {
2170 this.z = z;
2171 c.detach();
2172 this.el = r.nativeElement;
2173 }
2174 IonListHeader.decorators = [
2175 { type: Component, args: [{ selector: 'ion-list-header', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
2176 ];
2177 /** @nocollapse */
2178 IonListHeader.ctorParameters = function () { return [
2179 { type: ChangeDetectorRef },
2180 { type: ElementRef },
2181 { type: NgZone }
2182 ]; };
2183 return IonListHeader;
2184}());
2185proxyInputs(IonListHeader, ['color', 'mode']);
2186var IonMenu = /** @class */ (function () {
2187 function IonMenu(c, r, z) {
2188 this.z = z;
2189 c.detach();
2190 this.el = r.nativeElement;
2191 proxyOutputs(this, this.el, ['ionWillOpen', 'ionWillClose', 'ionDidOpen', 'ionDidClose']);
2192 }
2193 IonMenu.decorators = [
2194 { type: Component, args: [{ selector: 'ion-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['contentId', 'disabled', 'maxEdgeStart', 'menuId', 'side', 'swipeGesture', 'type'] },] },
2195 ];
2196 /** @nocollapse */
2197 IonMenu.ctorParameters = function () { return [
2198 { type: ChangeDetectorRef },
2199 { type: ElementRef },
2200 { type: NgZone }
2201 ]; };
2202 return IonMenu;
2203}());
2204proxyMethods(IonMenu, ['isOpen', 'isActive', 'open', 'close', 'toggle', 'setOpen']);
2205proxyInputs(IonMenu, ['contentId', 'disabled', 'maxEdgeStart', 'menuId', 'side', 'swipeGesture', 'type']);
2206var IonMenuButton = /** @class */ (function () {
2207 function IonMenuButton(c, r, z) {
2208 this.z = z;
2209 c.detach();
2210 this.el = r.nativeElement;
2211 }
2212 IonMenuButton.decorators = [
2213 { type: Component, args: [{ selector: 'ion-menu-button', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['autoHide', 'color', 'disabled', 'menu', 'type'] },] },
2214 ];
2215 /** @nocollapse */
2216 IonMenuButton.ctorParameters = function () { return [
2217 { type: ChangeDetectorRef },
2218 { type: ElementRef },
2219 { type: NgZone }
2220 ]; };
2221 return IonMenuButton;
2222}());
2223proxyInputs(IonMenuButton, ['autoHide', 'color', 'disabled', 'menu', 'type']);
2224var IonMenuToggle = /** @class */ (function () {
2225 function IonMenuToggle(c, r, z) {
2226 this.z = z;
2227 c.detach();
2228 this.el = r.nativeElement;
2229 }
2230 IonMenuToggle.decorators = [
2231 { type: Component, args: [{ selector: 'ion-menu-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['autoHide', 'menu'] },] },
2232 ];
2233 /** @nocollapse */
2234 IonMenuToggle.ctorParameters = function () { return [
2235 { type: ChangeDetectorRef },
2236 { type: ElementRef },
2237 { type: NgZone }
2238 ]; };
2239 return IonMenuToggle;
2240}());
2241proxyInputs(IonMenuToggle, ['autoHide', 'menu']);
2242var IonNav = /** @class */ (function () {
2243 function IonNav(c, r, z) {
2244 this.z = z;
2245 c.detach();
2246 this.el = r.nativeElement;
2247 proxyOutputs(this, this.el, ['ionNavWillChange', 'ionNavDidChange']);
2248 }
2249 IonNav.decorators = [
2250 { type: Component, args: [{ selector: 'ion-nav', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['animated', 'animation', 'root', 'rootParams', 'swipeGesture'] },] },
2251 ];
2252 /** @nocollapse */
2253 IonNav.ctorParameters = function () { return [
2254 { type: ChangeDetectorRef },
2255 { type: ElementRef },
2256 { type: NgZone }
2257 ]; };
2258 return IonNav;
2259}());
2260proxyMethods(IonNav, ['push', 'insert', 'insertPages', 'pop', 'popTo', 'popToRoot', 'removeIndex', 'setRoot', 'setPages', 'getActive', 'getByIndex', 'canGoBack', 'getPrevious']);
2261proxyInputs(IonNav, ['animated', 'animation', 'root', 'rootParams', 'swipeGesture']);
2262var IonNavLink = /** @class */ (function () {
2263 function IonNavLink(c, r, z) {
2264 this.z = z;
2265 c.detach();
2266 this.el = r.nativeElement;
2267 }
2268 IonNavLink.decorators = [
2269 { type: Component, args: [{ selector: 'ion-nav-link', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['component', 'componentProps', 'routerDirection'] },] },
2270 ];
2271 /** @nocollapse */
2272 IonNavLink.ctorParameters = function () { return [
2273 { type: ChangeDetectorRef },
2274 { type: ElementRef },
2275 { type: NgZone }
2276 ]; };
2277 return IonNavLink;
2278}());
2279proxyInputs(IonNavLink, ['component', 'componentProps', 'routerDirection']);
2280var IonNavPop = /** @class */ (function () {
2281 function IonNavPop(c, r, z) {
2282 this.z = z;
2283 c.detach();
2284 this.el = r.nativeElement;
2285 }
2286 IonNavPop.decorators = [
2287 { type: Component, args: [{ selector: 'ion-nav-pop', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
2288 ];
2289 /** @nocollapse */
2290 IonNavPop.ctorParameters = function () { return [
2291 { type: ChangeDetectorRef },
2292 { type: ElementRef },
2293 { type: NgZone }
2294 ]; };
2295 return IonNavPop;
2296}());
2297var IonNavPush = /** @class */ (function () {
2298 function IonNavPush(c, r, z) {
2299 this.z = z;
2300 c.detach();
2301 this.el = r.nativeElement;
2302 }
2303 IonNavPush.decorators = [
2304 { type: Component, args: [{ selector: 'ion-nav-push', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['component', 'componentProps'] },] },
2305 ];
2306 /** @nocollapse */
2307 IonNavPush.ctorParameters = function () { return [
2308 { type: ChangeDetectorRef },
2309 { type: ElementRef },
2310 { type: NgZone }
2311 ]; };
2312 return IonNavPush;
2313}());
2314proxyInputs(IonNavPush, ['component', 'componentProps']);
2315var IonNavSetRoot = /** @class */ (function () {
2316 function IonNavSetRoot(c, r, z) {
2317 this.z = z;
2318 c.detach();
2319 this.el = r.nativeElement;
2320 }
2321 IonNavSetRoot.decorators = [
2322 { type: Component, args: [{ selector: 'ion-nav-set-root', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['component', 'componentProps'] },] },
2323 ];
2324 /** @nocollapse */
2325 IonNavSetRoot.ctorParameters = function () { return [
2326 { type: ChangeDetectorRef },
2327 { type: ElementRef },
2328 { type: NgZone }
2329 ]; };
2330 return IonNavSetRoot;
2331}());
2332proxyInputs(IonNavSetRoot, ['component', 'componentProps']);
2333var IonNote = /** @class */ (function () {
2334 function IonNote(c, r, z) {
2335 this.z = z;
2336 c.detach();
2337 this.el = r.nativeElement;
2338 }
2339 IonNote.decorators = [
2340 { type: Component, args: [{ selector: 'ion-note', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
2341 ];
2342 /** @nocollapse */
2343 IonNote.ctorParameters = function () { return [
2344 { type: ChangeDetectorRef },
2345 { type: ElementRef },
2346 { type: NgZone }
2347 ]; };
2348 return IonNote;
2349}());
2350proxyInputs(IonNote, ['color', 'mode']);
2351var IonProgressBar = /** @class */ (function () {
2352 function IonProgressBar(c, r, z) {
2353 this.z = z;
2354 c.detach();
2355 this.el = r.nativeElement;
2356 }
2357 IonProgressBar.decorators = [
2358 { type: Component, args: [{ selector: 'ion-progress-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['buffer', 'color', 'mode', 'reversed', 'type', 'value'] },] },
2359 ];
2360 /** @nocollapse */
2361 IonProgressBar.ctorParameters = function () { return [
2362 { type: ChangeDetectorRef },
2363 { type: ElementRef },
2364 { type: NgZone }
2365 ]; };
2366 return IonProgressBar;
2367}());
2368proxyInputs(IonProgressBar, ['buffer', 'color', 'mode', 'reversed', 'type', 'value']);
2369var IonRadio = /** @class */ (function () {
2370 function IonRadio(c, r, z) {
2371 this.z = z;
2372 c.detach();
2373 this.el = r.nativeElement;
2374 proxyOutputs(this, this.el, ['ionSelect', 'ionFocus', 'ionBlur']);
2375 }
2376 IonRadio.decorators = [
2377 { type: Component, args: [{ selector: 'ion-radio', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['checked', 'color', 'disabled', 'mode', 'name', 'value'] },] },
2378 ];
2379 /** @nocollapse */
2380 IonRadio.ctorParameters = function () { return [
2381 { type: ChangeDetectorRef },
2382 { type: ElementRef },
2383 { type: NgZone }
2384 ]; };
2385 return IonRadio;
2386}());
2387proxyInputs(IonRadio, ['checked', 'color', 'disabled', 'mode', 'name', 'value']);
2388var IonRadioGroup = /** @class */ (function () {
2389 function IonRadioGroup(c, r, z) {
2390 this.z = z;
2391 c.detach();
2392 this.el = r.nativeElement;
2393 proxyOutputs(this, this.el, ['ionChange']);
2394 }
2395 IonRadioGroup.decorators = [
2396 { type: Component, args: [{ selector: 'ion-radio-group', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['allowEmptySelection', 'name', 'value'] },] },
2397 ];
2398 /** @nocollapse */
2399 IonRadioGroup.ctorParameters = function () { return [
2400 { type: ChangeDetectorRef },
2401 { type: ElementRef },
2402 { type: NgZone }
2403 ]; };
2404 return IonRadioGroup;
2405}());
2406proxyInputs(IonRadioGroup, ['allowEmptySelection', 'name', 'value']);
2407var IonRange = /** @class */ (function () {
2408 function IonRange(c, r, z) {
2409 this.z = z;
2410 c.detach();
2411 this.el = r.nativeElement;
2412 proxyOutputs(this, this.el, ['ionChange', 'ionFocus', 'ionBlur']);
2413 }
2414 IonRange.decorators = [
2415 { type: Component, args: [{ selector: 'ion-range', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'debounce', 'disabled', 'dualKnobs', 'max', 'min', 'mode', 'name', 'pin', 'snaps', 'step', 'ticks', 'value'] },] },
2416 ];
2417 /** @nocollapse */
2418 IonRange.ctorParameters = function () { return [
2419 { type: ChangeDetectorRef },
2420 { type: ElementRef },
2421 { type: NgZone }
2422 ]; };
2423 return IonRange;
2424}());
2425proxyInputs(IonRange, ['color', 'debounce', 'disabled', 'dualKnobs', 'max', 'min', 'mode', 'name', 'pin', 'snaps', 'step', 'ticks', 'value']);
2426var IonRefresher = /** @class */ (function () {
2427 function IonRefresher(c, r, z) {
2428 this.z = z;
2429 c.detach();
2430 this.el = r.nativeElement;
2431 proxyOutputs(this, this.el, ['ionRefresh', 'ionPull', 'ionStart']);
2432 }
2433 IonRefresher.decorators = [
2434 { type: Component, args: [{ selector: 'ion-refresher', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['closeDuration', 'disabled', 'pullFactor', 'pullMax', 'pullMin', 'snapbackDuration'] },] },
2435 ];
2436 /** @nocollapse */
2437 IonRefresher.ctorParameters = function () { return [
2438 { type: ChangeDetectorRef },
2439 { type: ElementRef },
2440 { type: NgZone }
2441 ]; };
2442 return IonRefresher;
2443}());
2444proxyMethods(IonRefresher, ['complete', 'cancel', 'getProgress']);
2445proxyInputs(IonRefresher, ['closeDuration', 'disabled', 'pullFactor', 'pullMax', 'pullMin', 'snapbackDuration']);
2446var IonRefresherContent = /** @class */ (function () {
2447 function IonRefresherContent(c, r, z) {
2448 this.z = z;
2449 c.detach();
2450 this.el = r.nativeElement;
2451 }
2452 IonRefresherContent.decorators = [
2453 { type: Component, args: [{ selector: 'ion-refresher-content', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['pullingIcon', 'pullingText', 'refreshingSpinner', 'refreshingText'] },] },
2454 ];
2455 /** @nocollapse */
2456 IonRefresherContent.ctorParameters = function () { return [
2457 { type: ChangeDetectorRef },
2458 { type: ElementRef },
2459 { type: NgZone }
2460 ]; };
2461 return IonRefresherContent;
2462}());
2463proxyInputs(IonRefresherContent, ['pullingIcon', 'pullingText', 'refreshingSpinner', 'refreshingText']);
2464var IonReorder = /** @class */ (function () {
2465 function IonReorder(c, r, z) {
2466 this.z = z;
2467 c.detach();
2468 this.el = r.nativeElement;
2469 }
2470 IonReorder.decorators = [
2471 { type: Component, args: [{ selector: 'ion-reorder', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
2472 ];
2473 /** @nocollapse */
2474 IonReorder.ctorParameters = function () { return [
2475 { type: ChangeDetectorRef },
2476 { type: ElementRef },
2477 { type: NgZone }
2478 ]; };
2479 return IonReorder;
2480}());
2481var IonReorderGroup = /** @class */ (function () {
2482 function IonReorderGroup(c, r, z) {
2483 this.z = z;
2484 c.detach();
2485 this.el = r.nativeElement;
2486 proxyOutputs(this, this.el, ['ionItemReorder']);
2487 }
2488 IonReorderGroup.decorators = [
2489 { type: Component, args: [{ selector: 'ion-reorder-group', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled'] },] },
2490 ];
2491 /** @nocollapse */
2492 IonReorderGroup.ctorParameters = function () { return [
2493 { type: ChangeDetectorRef },
2494 { type: ElementRef },
2495 { type: NgZone }
2496 ]; };
2497 return IonReorderGroup;
2498}());
2499proxyMethods(IonReorderGroup, ['complete']);
2500proxyInputs(IonReorderGroup, ['disabled']);
2501var IonRippleEffect = /** @class */ (function () {
2502 function IonRippleEffect(c, r, z) {
2503 this.z = z;
2504 c.detach();
2505 this.el = r.nativeElement;
2506 }
2507 IonRippleEffect.decorators = [
2508 { type: Component, args: [{ selector: 'ion-ripple-effect', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['type'] },] },
2509 ];
2510 /** @nocollapse */
2511 IonRippleEffect.ctorParameters = function () { return [
2512 { type: ChangeDetectorRef },
2513 { type: ElementRef },
2514 { type: NgZone }
2515 ]; };
2516 return IonRippleEffect;
2517}());
2518proxyMethods(IonRippleEffect, ['addRipple']);
2519proxyInputs(IonRippleEffect, ['type']);
2520var IonRow = /** @class */ (function () {
2521 function IonRow(c, r, z) {
2522 this.z = z;
2523 c.detach();
2524 this.el = r.nativeElement;
2525 }
2526 IonRow.decorators = [
2527 { type: Component, args: [{ selector: 'ion-row', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
2528 ];
2529 /** @nocollapse */
2530 IonRow.ctorParameters = function () { return [
2531 { type: ChangeDetectorRef },
2532 { type: ElementRef },
2533 { type: NgZone }
2534 ]; };
2535 return IonRow;
2536}());
2537var IonSearchbar = /** @class */ (function () {
2538 function IonSearchbar(c, r, z) {
2539 this.z = z;
2540 c.detach();
2541 this.el = r.nativeElement;
2542 proxyOutputs(this, this.el, ['ionInput', 'ionChange', 'ionCancel', 'ionClear', 'ionBlur', 'ionFocus']);
2543 }
2544 IonSearchbar.decorators = [
2545 { type: Component, args: [{ selector: 'ion-searchbar', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['animated', 'autocomplete', 'autocorrect', 'cancelButtonIcon', 'cancelButtonText', 'clearIcon', 'color', 'debounce', 'disabled', 'inputmode', 'mode', 'placeholder', 'searchIcon', 'showCancelButton', 'spellcheck', 'type', 'value'] },] },
2546 ];
2547 /** @nocollapse */
2548 IonSearchbar.ctorParameters = function () { return [
2549 { type: ChangeDetectorRef },
2550 { type: ElementRef },
2551 { type: NgZone }
2552 ]; };
2553 return IonSearchbar;
2554}());
2555proxyMethods(IonSearchbar, ['setFocus', 'getInputElement']);
2556proxyInputs(IonSearchbar, ['animated', 'autocomplete', 'autocorrect', 'cancelButtonIcon', 'cancelButtonText', 'clearIcon', 'color', 'debounce', 'disabled', 'inputmode', 'mode', 'placeholder', 'searchIcon', 'showCancelButton', 'spellcheck', 'type', 'value']);
2557var IonSegment = /** @class */ (function () {
2558 function IonSegment(c, r, z) {
2559 this.z = z;
2560 c.detach();
2561 this.el = r.nativeElement;
2562 proxyOutputs(this, this.el, ['ionChange']);
2563 }
2564 IonSegment.decorators = [
2565 { type: Component, args: [{ selector: 'ion-segment', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'disabled', 'mode', 'scrollable', 'value'] },] },
2566 ];
2567 /** @nocollapse */
2568 IonSegment.ctorParameters = function () { return [
2569 { type: ChangeDetectorRef },
2570 { type: ElementRef },
2571 { type: NgZone }
2572 ]; };
2573 return IonSegment;
2574}());
2575proxyInputs(IonSegment, ['color', 'disabled', 'mode', 'scrollable', 'value']);
2576var IonSegmentButton = /** @class */ (function () {
2577 function IonSegmentButton(c, r, z) {
2578 this.z = z;
2579 c.detach();
2580 this.el = r.nativeElement;
2581 proxyOutputs(this, this.el, ['ionSelect']);
2582 }
2583 IonSegmentButton.decorators = [
2584 { type: Component, args: [{ selector: 'ion-segment-button', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['checked', 'disabled', 'layout', 'mode', 'type', 'value'] },] },
2585 ];
2586 /** @nocollapse */
2587 IonSegmentButton.ctorParameters = function () { return [
2588 { type: ChangeDetectorRef },
2589 { type: ElementRef },
2590 { type: NgZone }
2591 ]; };
2592 return IonSegmentButton;
2593}());
2594proxyInputs(IonSegmentButton, ['checked', 'disabled', 'layout', 'mode', 'type', 'value']);
2595var IonSelect = /** @class */ (function () {
2596 function IonSelect(c, r, z) {
2597 this.z = z;
2598 c.detach();
2599 this.el = r.nativeElement;
2600 proxyOutputs(this, this.el, ['ionChange', 'ionCancel', 'ionFocus', 'ionBlur']);
2601 }
2602 IonSelect.decorators = [
2603 { type: Component, args: [{ selector: 'ion-select', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['cancelText', 'compareWith', 'disabled', 'interface', 'interfaceOptions', 'mode', 'multiple', 'name', 'okText', 'placeholder', 'selectedText', 'value'] },] },
2604 ];
2605 /** @nocollapse */
2606 IonSelect.ctorParameters = function () { return [
2607 { type: ChangeDetectorRef },
2608 { type: ElementRef },
2609 { type: NgZone }
2610 ]; };
2611 return IonSelect;
2612}());
2613proxyMethods(IonSelect, ['open']);
2614proxyInputs(IonSelect, ['cancelText', 'compareWith', 'disabled', 'interface', 'interfaceOptions', 'mode', 'multiple', 'name', 'okText', 'placeholder', 'selectedText', 'value']);
2615var IonSelectOption = /** @class */ (function () {
2616 function IonSelectOption(c, r, z) {
2617 this.z = z;
2618 c.detach();
2619 this.el = r.nativeElement;
2620 }
2621 IonSelectOption.decorators = [
2622 { type: Component, args: [{ selector: 'ion-select-option', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'selected', 'value'] },] },
2623 ];
2624 /** @nocollapse */
2625 IonSelectOption.ctorParameters = function () { return [
2626 { type: ChangeDetectorRef },
2627 { type: ElementRef },
2628 { type: NgZone }
2629 ]; };
2630 return IonSelectOption;
2631}());
2632proxyInputs(IonSelectOption, ['disabled', 'selected', 'value']);
2633var IonSkeletonText = /** @class */ (function () {
2634 function IonSkeletonText(c, r, z) {
2635 this.z = z;
2636 c.detach();
2637 this.el = r.nativeElement;
2638 }
2639 IonSkeletonText.decorators = [
2640 { type: Component, args: [{ selector: 'ion-skeleton-text', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['animated', 'width'] },] },
2641 ];
2642 /** @nocollapse */
2643 IonSkeletonText.ctorParameters = function () { return [
2644 { type: ChangeDetectorRef },
2645 { type: ElementRef },
2646 { type: NgZone }
2647 ]; };
2648 return IonSkeletonText;
2649}());
2650proxyInputs(IonSkeletonText, ['animated', 'width']);
2651var IonSlide = /** @class */ (function () {
2652 function IonSlide(c, r, z) {
2653 this.z = z;
2654 c.detach();
2655 this.el = r.nativeElement;
2656 }
2657 IonSlide.decorators = [
2658 { type: Component, args: [{ selector: 'ion-slide', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
2659 ];
2660 /** @nocollapse */
2661 IonSlide.ctorParameters = function () { return [
2662 { type: ChangeDetectorRef },
2663 { type: ElementRef },
2664 { type: NgZone }
2665 ]; };
2666 return IonSlide;
2667}());
2668var IonSlides = /** @class */ (function () {
2669 function IonSlides(c, r, z) {
2670 this.z = z;
2671 c.detach();
2672 this.el = r.nativeElement;
2673 proxyOutputs(this, this.el, ['ionSlidesDidLoad', 'ionSlideTap', 'ionSlideDoubleTap', 'ionSlideWillChange', 'ionSlideDidChange', 'ionSlideNextStart', 'ionSlidePrevStart', 'ionSlideNextEnd', 'ionSlidePrevEnd', 'ionSlideTransitionStart', 'ionSlideTransitionEnd', 'ionSlideDrag', 'ionSlideReachStart', 'ionSlideReachEnd', 'ionSlideTouchStart', 'ionSlideTouchEnd']);
2674 }
2675 IonSlides.decorators = [
2676 { type: Component, args: [{ selector: 'ion-slides', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['mode', 'options', 'pager', 'scrollbar'] },] },
2677 ];
2678 /** @nocollapse */
2679 IonSlides.ctorParameters = function () { return [
2680 { type: ChangeDetectorRef },
2681 { type: ElementRef },
2682 { type: NgZone }
2683 ]; };
2684 return IonSlides;
2685}());
2686proxyMethods(IonSlides, ['update', 'updateAutoHeight', 'slideTo', 'slideNext', 'slidePrev', 'getActiveIndex', 'getPreviousIndex', 'length', 'isEnd', 'isBeginning', 'startAutoplay', 'stopAutoplay', 'lockSwipeToNext', 'lockSwipeToPrev', 'lockSwipes', 'getSwiper']);
2687proxyInputs(IonSlides, ['mode', 'options', 'pager', 'scrollbar']);
2688var IonSpinner = /** @class */ (function () {
2689 function IonSpinner(c, r, z) {
2690 this.z = z;
2691 c.detach();
2692 this.el = r.nativeElement;
2693 }
2694 IonSpinner.decorators = [
2695 { type: Component, args: [{ selector: 'ion-spinner', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'duration', 'name', 'paused'] },] },
2696 ];
2697 /** @nocollapse */
2698 IonSpinner.ctorParameters = function () { return [
2699 { type: ChangeDetectorRef },
2700 { type: ElementRef },
2701 { type: NgZone }
2702 ]; };
2703 return IonSpinner;
2704}());
2705proxyInputs(IonSpinner, ['color', 'duration', 'name', 'paused']);
2706var IonSplitPane = /** @class */ (function () {
2707 function IonSplitPane(c, r, z) {
2708 this.z = z;
2709 c.detach();
2710 this.el = r.nativeElement;
2711 proxyOutputs(this, this.el, ['ionSplitPaneVisible']);
2712 }
2713 IonSplitPane.decorators = [
2714 { type: Component, args: [{ selector: 'ion-split-pane', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['contentId', 'disabled', 'when'] },] },
2715 ];
2716 /** @nocollapse */
2717 IonSplitPane.ctorParameters = function () { return [
2718 { type: ChangeDetectorRef },
2719 { type: ElementRef },
2720 { type: NgZone }
2721 ]; };
2722 return IonSplitPane;
2723}());
2724proxyInputs(IonSplitPane, ['contentId', 'disabled', 'when']);
2725var IonTabBar = /** @class */ (function () {
2726 function IonTabBar(c, r, z) {
2727 this.z = z;
2728 c.detach();
2729 this.el = r.nativeElement;
2730 }
2731 IonTabBar.decorators = [
2732 { type: Component, args: [{ selector: 'ion-tab-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'selectedTab', 'translucent'] },] },
2733 ];
2734 /** @nocollapse */
2735 IonTabBar.ctorParameters = function () { return [
2736 { type: ChangeDetectorRef },
2737 { type: ElementRef },
2738 { type: NgZone }
2739 ]; };
2740 return IonTabBar;
2741}());
2742proxyInputs(IonTabBar, ['color', 'mode', 'selectedTab', 'translucent']);
2743var IonTabButton = /** @class */ (function () {
2744 function IonTabButton(c, r, z) {
2745 this.z = z;
2746 c.detach();
2747 this.el = r.nativeElement;
2748 }
2749 IonTabButton.decorators = [
2750 { type: Component, args: [{ selector: 'ion-tab-button', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'download', 'href', 'layout', 'mode', 'rel', 'selected', 'tab', 'target'] },] },
2751 ];
2752 /** @nocollapse */
2753 IonTabButton.ctorParameters = function () { return [
2754 { type: ChangeDetectorRef },
2755 { type: ElementRef },
2756 { type: NgZone }
2757 ]; };
2758 return IonTabButton;
2759}());
2760proxyInputs(IonTabButton, ['disabled', 'download', 'href', 'layout', 'mode', 'rel', 'selected', 'tab', 'target']);
2761var IonText = /** @class */ (function () {
2762 function IonText(c, r, z) {
2763 this.z = z;
2764 c.detach();
2765 this.el = r.nativeElement;
2766 }
2767 IonText.decorators = [
2768 { type: Component, args: [{ selector: 'ion-text', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
2769 ];
2770 /** @nocollapse */
2771 IonText.ctorParameters = function () { return [
2772 { type: ChangeDetectorRef },
2773 { type: ElementRef },
2774 { type: NgZone }
2775 ]; };
2776 return IonText;
2777}());
2778proxyInputs(IonText, ['color', 'mode']);
2779var IonTextarea = /** @class */ (function () {
2780 function IonTextarea(c, r, z) {
2781 this.z = z;
2782 c.detach();
2783 this.el = r.nativeElement;
2784 proxyOutputs(this, this.el, ['ionChange', 'ionInput', 'ionBlur', 'ionFocus']);
2785 }
2786 IonTextarea.decorators = [
2787 { type: Component, args: [{ selector: 'ion-textarea', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['autoGrow', 'autocapitalize', 'autofocus', 'clearOnEdit', 'color', 'cols', 'debounce', 'disabled', 'maxlength', 'minlength', 'mode', 'name', 'placeholder', 'readonly', 'required', 'rows', 'spellcheck', 'value', 'wrap'] },] },
2788 ];
2789 /** @nocollapse */
2790 IonTextarea.ctorParameters = function () { return [
2791 { type: ChangeDetectorRef },
2792 { type: ElementRef },
2793 { type: NgZone }
2794 ]; };
2795 return IonTextarea;
2796}());
2797proxyMethods(IonTextarea, ['setFocus', 'getInputElement']);
2798proxyInputs(IonTextarea, ['autoGrow', 'autocapitalize', 'autofocus', 'clearOnEdit', 'color', 'cols', 'debounce', 'disabled', 'maxlength', 'minlength', 'mode', 'name', 'placeholder', 'readonly', 'required', 'rows', 'spellcheck', 'value', 'wrap']);
2799var IonThumbnail = /** @class */ (function () {
2800 function IonThumbnail(c, r, z) {
2801 this.z = z;
2802 c.detach();
2803 this.el = r.nativeElement;
2804 }
2805 IonThumbnail.decorators = [
2806 { type: Component, args: [{ selector: 'ion-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' },] },
2807 ];
2808 /** @nocollapse */
2809 IonThumbnail.ctorParameters = function () { return [
2810 { type: ChangeDetectorRef },
2811 { type: ElementRef },
2812 { type: NgZone }
2813 ]; };
2814 return IonThumbnail;
2815}());
2816var IonTitle = /** @class */ (function () {
2817 function IonTitle(c, r, z) {
2818 this.z = z;
2819 c.detach();
2820 this.el = r.nativeElement;
2821 }
2822 IonTitle.decorators = [
2823 { type: Component, args: [{ selector: 'ion-title', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'size'] },] },
2824 ];
2825 /** @nocollapse */
2826 IonTitle.ctorParameters = function () { return [
2827 { type: ChangeDetectorRef },
2828 { type: ElementRef },
2829 { type: NgZone }
2830 ]; };
2831 return IonTitle;
2832}());
2833proxyInputs(IonTitle, ['color', 'size']);
2834var IonToggle = /** @class */ (function () {
2835 function IonToggle(c, r, z) {
2836 this.z = z;
2837 c.detach();
2838 this.el = r.nativeElement;
2839 proxyOutputs(this, this.el, ['ionChange', 'ionFocus', 'ionBlur']);
2840 }
2841 IonToggle.decorators = [
2842 { type: Component, args: [{ selector: 'ion-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['checked', 'color', 'disabled', 'mode', 'name', 'value'] },] },
2843 ];
2844 /** @nocollapse */
2845 IonToggle.ctorParameters = function () { return [
2846 { type: ChangeDetectorRef },
2847 { type: ElementRef },
2848 { type: NgZone }
2849 ]; };
2850 return IonToggle;
2851}());
2852proxyInputs(IonToggle, ['checked', 'color', 'disabled', 'mode', 'name', 'value']);
2853var IonToolbar = /** @class */ (function () {
2854 function IonToolbar(c, r, z) {
2855 this.z = z;
2856 c.detach();
2857 this.el = r.nativeElement;
2858 }
2859 IonToolbar.decorators = [
2860 { type: Component, args: [{ selector: 'ion-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] },] },
2861 ];
2862 /** @nocollapse */
2863 IonToolbar.ctorParameters = function () { return [
2864 { type: ChangeDetectorRef },
2865 { type: ElementRef },
2866 { type: NgZone }
2867 ]; };
2868 return IonToolbar;
2869}());
2870proxyInputs(IonToolbar, ['color', 'mode']);
2871
2872/**
2873 * @fileoverview added by tsickle
2874 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2875 */
2876var Config = /** @class */ (function () {
2877 function Config() {
2878 }
2879 /**
2880 * @param {?} key
2881 * @param {?=} fallback
2882 * @return {?}
2883 */
2884 Config.prototype.get = /**
2885 * @param {?} key
2886 * @param {?=} fallback
2887 * @return {?}
2888 */
2889 function (key, fallback) {
2890 /** @type {?} */
2891 var c = getConfig();
2892 if (c) {
2893 return c.get(key, fallback);
2894 }
2895 return null;
2896 };
2897 /**
2898 * @param {?} key
2899 * @param {?=} fallback
2900 * @return {?}
2901 */
2902 Config.prototype.getBoolean = /**
2903 * @param {?} key
2904 * @param {?=} fallback
2905 * @return {?}
2906 */
2907 function (key, fallback) {
2908 /** @type {?} */
2909 var c = getConfig();
2910 if (c) {
2911 return c.getBoolean(key, fallback);
2912 }
2913 return false;
2914 };
2915 /**
2916 * @param {?} key
2917 * @param {?=} fallback
2918 * @return {?}
2919 */
2920 Config.prototype.getNumber = /**
2921 * @param {?} key
2922 * @param {?=} fallback
2923 * @return {?}
2924 */
2925 function (key, fallback) {
2926 /** @type {?} */
2927 var c = getConfig();
2928 if (c) {
2929 return c.getNumber(key, fallback);
2930 }
2931 return 0;
2932 };
2933 /**
2934 * @param {?} key
2935 * @param {?=} value
2936 * @return {?}
2937 */
2938 Config.prototype.set = /**
2939 * @param {?} key
2940 * @param {?=} value
2941 * @return {?}
2942 */
2943 function (key, value) {
2944 console.warn("[DEPRECATION][Config]: The Config.set() method is deprecated and will be removed in Ionic Framework 6.0. Please see https://ionicframework.com/docs/angular/config for alternatives.");
2945 /** @type {?} */
2946 var c = getConfig();
2947 if (c) {
2948 c.set(key, value);
2949 }
2950 };
2951 Config.decorators = [
2952 { type: Injectable, args: [{
2953 providedIn: 'root'
2954 },] },
2955 ];
2956 /** @nocollapse */ Config.ngInjectableDef = defineInjectable({ factory: function Config_Factory() { return new Config(); }, token: Config, providedIn: "root" });
2957 return Config;
2958}());
2959/** @type {?} */
2960var ConfigToken = new InjectionToken('USERCONFIG');
2961/** @type {?} */
2962var getConfig = (/**
2963 * @return {?}
2964 */
2965function () {
2966 if (typeof ((/** @type {?} */ (window))) !== 'undefined') {
2967 /** @type {?} */
2968 var Ionic = ((/** @type {?} */ ((/** @type {?} */ (window))))).Ionic;
2969 if (Ionic && Ionic.config) {
2970 return Ionic.config;
2971 }
2972 }
2973 return null;
2974});
2975
2976/**
2977 * @fileoverview added by tsickle
2978 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
2979 */
2980/**
2981 * \@description
2982 * NavParams are an object that exists on a page and can contain data for that particular view.
2983 * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible
2984 * option with a simple `get` method.
2985 *
2986 * \@usage
2987 * ```ts
2988 * import { NavParams } from '\@ionic/angular';
2989 *
2990 * export class MyClass{
2991 *
2992 * constructor(navParams: NavParams){
2993 * // userParams is an object we have in our nav-parameters
2994 * navParams.get('userParams');
2995 * }
2996 *
2997 * }
2998 * ```
2999 */
3000var /**
3001 * \@description
3002 * NavParams are an object that exists on a page and can contain data for that particular view.
3003 * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible
3004 * option with a simple `get` method.
3005 *
3006 * \@usage
3007 * ```ts
3008 * import { NavParams } from '\@ionic/angular';
3009 *
3010 * export class MyClass{
3011 *
3012 * constructor(navParams: NavParams){
3013 * // userParams is an object we have in our nav-parameters
3014 * navParams.get('userParams');
3015 * }
3016 *
3017 * }
3018 * ```
3019 */
3020NavParams = /** @class */ (function () {
3021 function NavParams(data) {
3022 if (data === void 0) { data = {}; }
3023 this.data = data;
3024 }
3025 /**
3026 * Get the value of a nav-parameter for the current view
3027 *
3028 * ```ts
3029 * import { NavParams } from 'ionic-angular';
3030 *
3031 * export class MyClass{
3032 * constructor(public navParams: NavParams){
3033 * // userParams is an object we have in our nav-parameters
3034 * this.navParams.get('userParams');
3035 * }
3036 * }
3037 * ```
3038 *
3039 * @param param Which param you want to look up
3040 */
3041 /**
3042 * Get the value of a nav-parameter for the current view
3043 *
3044 * ```ts
3045 * import { NavParams } from 'ionic-angular';
3046 *
3047 * export class MyClass{
3048 * constructor(public navParams: NavParams){
3049 * // userParams is an object we have in our nav-parameters
3050 * this.navParams.get('userParams');
3051 * }
3052 * }
3053 * ```
3054 *
3055 * @param {?} param Which param you want to look up
3056 * @return {?}
3057 */
3058 NavParams.prototype.get = /**
3059 * Get the value of a nav-parameter for the current view
3060 *
3061 * ```ts
3062 * import { NavParams } from 'ionic-angular';
3063 *
3064 * export class MyClass{
3065 * constructor(public navParams: NavParams){
3066 * // userParams is an object we have in our nav-parameters
3067 * this.navParams.get('userParams');
3068 * }
3069 * }
3070 * ```
3071 *
3072 * @param {?} param Which param you want to look up
3073 * @return {?}
3074 */
3075 function (param) {
3076 return this.data[param];
3077 };
3078 return NavParams;
3079}());
3080
3081/**
3082 * @fileoverview added by tsickle
3083 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3084 */
3085var AngularDelegate = /** @class */ (function () {
3086 function AngularDelegate(zone, appRef) {
3087 this.zone = zone;
3088 this.appRef = appRef;
3089 }
3090 /**
3091 * @param {?} resolver
3092 * @param {?} injector
3093 * @param {?=} location
3094 * @return {?}
3095 */
3096 AngularDelegate.prototype.create = /**
3097 * @param {?} resolver
3098 * @param {?} injector
3099 * @param {?=} location
3100 * @return {?}
3101 */
3102 function (resolver, injector, location) {
3103 return new AngularFrameworkDelegate(resolver, injector, location, this.appRef, this.zone);
3104 };
3105 AngularDelegate.decorators = [
3106 { type: Injectable },
3107 ];
3108 /** @nocollapse */
3109 AngularDelegate.ctorParameters = function () { return [
3110 { type: NgZone },
3111 { type: ApplicationRef }
3112 ]; };
3113 return AngularDelegate;
3114}());
3115var AngularFrameworkDelegate = /** @class */ (function () {
3116 function AngularFrameworkDelegate(resolver, injector, location, appRef, zone) {
3117 this.resolver = resolver;
3118 this.injector = injector;
3119 this.location = location;
3120 this.appRef = appRef;
3121 this.zone = zone;
3122 this.elRefMap = new WeakMap();
3123 this.elEventsMap = new WeakMap();
3124 }
3125 /**
3126 * @param {?} container
3127 * @param {?} component
3128 * @param {?=} params
3129 * @param {?=} cssClasses
3130 * @return {?}
3131 */
3132 AngularFrameworkDelegate.prototype.attachViewToDom = /**
3133 * @param {?} container
3134 * @param {?} component
3135 * @param {?=} params
3136 * @param {?=} cssClasses
3137 * @return {?}
3138 */
3139 function (container, component, params, cssClasses) {
3140 var _this = this;
3141 return this.zone.run((/**
3142 * @return {?}
3143 */
3144 function () {
3145 return new Promise((/**
3146 * @param {?} resolve
3147 * @return {?}
3148 */
3149 function (resolve) {
3150 /** @type {?} */
3151 var el = attachView(_this.zone, _this.resolver, _this.injector, _this.location, _this.appRef, _this.elRefMap, _this.elEventsMap, container, component, params, cssClasses);
3152 resolve(el);
3153 }));
3154 }));
3155 };
3156 /**
3157 * @param {?} _container
3158 * @param {?} component
3159 * @return {?}
3160 */
3161 AngularFrameworkDelegate.prototype.removeViewFromDom = /**
3162 * @param {?} _container
3163 * @param {?} component
3164 * @return {?}
3165 */
3166 function (_container, component) {
3167 var _this = this;
3168 return this.zone.run((/**
3169 * @return {?}
3170 */
3171 function () {
3172 return new Promise((/**
3173 * @param {?} resolve
3174 * @return {?}
3175 */
3176 function (resolve) {
3177 /** @type {?} */
3178 var componentRef = _this.elRefMap.get(component);
3179 if (componentRef) {
3180 componentRef.destroy();
3181 _this.elRefMap.delete(component);
3182 /** @type {?} */
3183 var unbindEvents = _this.elEventsMap.get(component);
3184 if (unbindEvents) {
3185 unbindEvents();
3186 _this.elEventsMap.delete(component);
3187 }
3188 }
3189 resolve();
3190 }));
3191 }));
3192 };
3193 return AngularFrameworkDelegate;
3194}());
3195/** @type {?} */
3196var attachView = (/**
3197 * @param {?} zone
3198 * @param {?} resolver
3199 * @param {?} injector
3200 * @param {?} location
3201 * @param {?} appRef
3202 * @param {?} elRefMap
3203 * @param {?} elEventsMap
3204 * @param {?} container
3205 * @param {?} component
3206 * @param {?} params
3207 * @param {?} cssClasses
3208 * @return {?}
3209 */
3210function (zone, resolver, injector, location, appRef, elRefMap, elEventsMap, container, component, params, cssClasses) {
3211 /** @type {?} */
3212 var factory = resolver.resolveComponentFactory(component);
3213 /** @type {?} */
3214 var childInjector = Injector.create({
3215 providers: getProviders(params),
3216 parent: injector
3217 });
3218 /** @type {?} */
3219 var componentRef = (location)
3220 ? location.createComponent(factory, location.length, childInjector)
3221 : factory.create(childInjector);
3222 /** @type {?} */
3223 var instance = componentRef.instance;
3224 /** @type {?} */
3225 var hostElement = componentRef.location.nativeElement;
3226 if (params) {
3227 Object.assign(instance, params);
3228 }
3229 if (cssClasses) {
3230 for (var _i = 0, cssClasses_1 = cssClasses; _i < cssClasses_1.length; _i++) {
3231 var clazz = cssClasses_1[_i];
3232 hostElement.classList.add(clazz);
3233 }
3234 }
3235 /** @type {?} */
3236 var unbindEvents = bindLifecycleEvents(zone, instance, hostElement);
3237 container.appendChild(hostElement);
3238 if (!location) {
3239 appRef.attachView(componentRef.hostView);
3240 }
3241 componentRef.changeDetectorRef.reattach();
3242 elRefMap.set(hostElement, componentRef);
3243 elEventsMap.set(hostElement, unbindEvents);
3244 return hostElement;
3245});
3246/** @type {?} */
3247var LIFECYCLES = [
3248 LIFECYCLE_WILL_ENTER,
3249 LIFECYCLE_DID_ENTER,
3250 LIFECYCLE_WILL_LEAVE,
3251 LIFECYCLE_DID_LEAVE,
3252 LIFECYCLE_WILL_UNLOAD
3253];
3254/** @type {?} */
3255var bindLifecycleEvents = (/**
3256 * @param {?} zone
3257 * @param {?} instance
3258 * @param {?} element
3259 * @return {?}
3260 */
3261function (zone, instance, element) {
3262 return zone.run((/**
3263 * @return {?}
3264 */
3265 function () {
3266 /** @type {?} */
3267 var unregisters = LIFECYCLES
3268 .filter((/**
3269 * @param {?} eventName
3270 * @return {?}
3271 */
3272 function (eventName) { return typeof instance[eventName] === 'function'; }))
3273 .map((/**
3274 * @param {?} eventName
3275 * @return {?}
3276 */
3277 function (eventName) {
3278 /** @type {?} */
3279 var handler = (/**
3280 * @param {?} ev
3281 * @return {?}
3282 */
3283 function (ev) { return instance[eventName](ev.detail); });
3284 element.addEventListener(eventName, handler);
3285 return (/**
3286 * @return {?}
3287 */
3288 function () { return element.removeEventListener(eventName, handler); });
3289 }));
3290 return (/**
3291 * @return {?}
3292 */
3293 function () { return unregisters.forEach((/**
3294 * @param {?} fn
3295 * @return {?}
3296 */
3297 function (fn) { return fn(); })); });
3298 }));
3299});
3300/** @type {?} */
3301var NavParamsToken = new InjectionToken('NavParamsToken');
3302/** @type {?} */
3303var getProviders = (/**
3304 * @param {?} params
3305 * @return {?}
3306 */
3307function (params) {
3308 return [
3309 {
3310 provide: NavParamsToken, useValue: params
3311 },
3312 {
3313 provide: NavParams, useFactory: provideNavParamsInjectable, deps: [NavParamsToken]
3314 }
3315 ];
3316});
3317/** @type {?} */
3318var provideNavParamsInjectable = (/**
3319 * @param {?} params
3320 * @return {?}
3321 */
3322function (params) {
3323 return new NavParams(params);
3324});
3325
3326/**
3327 * @fileoverview added by tsickle
3328 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3329 */
3330/** @type {?} */
3331var insertView = (/**
3332 * @param {?} views
3333 * @param {?} view
3334 * @param {?} direction
3335 * @return {?}
3336 */
3337function (views, view, direction) {
3338 if (direction === 'root') {
3339 return setRoot(views, view);
3340 }
3341 else if (direction === 'forward') {
3342 return setForward(views, view);
3343 }
3344 else {
3345 return setBack(views, view);
3346 }
3347});
3348/** @type {?} */
3349var setRoot = (/**
3350 * @param {?} views
3351 * @param {?} view
3352 * @return {?}
3353 */
3354function (views, view) {
3355 views = views.filter((/**
3356 * @param {?} v
3357 * @return {?}
3358 */
3359 function (v) { return v.stackId !== view.stackId; }));
3360 views.push(view);
3361 return views;
3362});
3363/** @type {?} */
3364var setForward = (/**
3365 * @param {?} views
3366 * @param {?} view
3367 * @return {?}
3368 */
3369function (views, view) {
3370 /** @type {?} */
3371 var index = views.indexOf(view);
3372 if (index >= 0) {
3373 views = views.filter((/**
3374 * @param {?} v
3375 * @return {?}
3376 */
3377 function (v) { return v.stackId !== view.stackId || v.id <= view.id; }));
3378 }
3379 else {
3380 views.push(view);
3381 }
3382 return views;
3383});
3384/** @type {?} */
3385var setBack = (/**
3386 * @param {?} views
3387 * @param {?} view
3388 * @return {?}
3389 */
3390function (views, view) {
3391 /** @type {?} */
3392 var index = views.indexOf(view);
3393 if (index >= 0) {
3394 return views.filter((/**
3395 * @param {?} v
3396 * @return {?}
3397 */
3398 function (v) { return v.stackId !== view.stackId || v.id <= view.id; }));
3399 }
3400 else {
3401 return setRoot(views, view);
3402 }
3403});
3404/** @type {?} */
3405var getUrl = (/**
3406 * @param {?} router
3407 * @param {?} activatedRoute
3408 * @return {?}
3409 */
3410function (router, activatedRoute) {
3411 /** @type {?} */
3412 var urlTree = router.createUrlTree(['.'], { relativeTo: activatedRoute });
3413 return router.serializeUrl(urlTree);
3414});
3415/** @type {?} */
3416var isTabSwitch = (/**
3417 * @param {?} enteringView
3418 * @param {?} leavingView
3419 * @return {?}
3420 */
3421function (enteringView, leavingView) {
3422 if (!leavingView) {
3423 return true;
3424 }
3425 return enteringView.stackId !== leavingView.stackId;
3426});
3427/** @type {?} */
3428var computeStackId = (/**
3429 * @param {?} prefixUrl
3430 * @param {?} url
3431 * @return {?}
3432 */
3433function (prefixUrl, url) {
3434 if (!prefixUrl) {
3435 return undefined;
3436 }
3437 /** @type {?} */
3438 var segments = toSegments(url);
3439 for (var i = 0; i < segments.length; i++) {
3440 if (i >= prefixUrl.length) {
3441 return segments[i];
3442 }
3443 if (segments[i] !== prefixUrl[i]) {
3444 return undefined;
3445 }
3446 }
3447 return undefined;
3448});
3449/** @type {?} */
3450var toSegments = (/**
3451 * @param {?} path
3452 * @return {?}
3453 */
3454function (path) {
3455 return path
3456 .split('/')
3457 .map((/**
3458 * @param {?} s
3459 * @return {?}
3460 */
3461 function (s) { return s.trim(); }))
3462 .filter((/**
3463 * @param {?} s
3464 * @return {?}
3465 */
3466 function (s) { return s !== ''; }));
3467});
3468/** @type {?} */
3469var destroyView = (/**
3470 * @param {?} view
3471 * @return {?}
3472 */
3473function (view) {
3474 if (view) {
3475 // TODO lifecycle event
3476 view.ref.destroy();
3477 view.unlistenEvents();
3478 }
3479});
3480
3481/**
3482 * @fileoverview added by tsickle
3483 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3484 */
3485var StackController = /** @class */ (function () {
3486 function StackController(tabsPrefix, containerEl, router, navCtrl, zone, location) {
3487 this.containerEl = containerEl;
3488 this.router = router;
3489 this.navCtrl = navCtrl;
3490 this.zone = zone;
3491 this.location = location;
3492 this.views = [];
3493 this.skipTransition = false;
3494 this.nextId = 0;
3495 this.tabsPrefix = tabsPrefix !== undefined ? toSegments(tabsPrefix) : undefined;
3496 }
3497 /**
3498 * @param {?} ref
3499 * @param {?} activatedRoute
3500 * @return {?}
3501 */
3502 StackController.prototype.createView = /**
3503 * @param {?} ref
3504 * @param {?} activatedRoute
3505 * @return {?}
3506 */
3507 function (ref, activatedRoute) {
3508 /** @type {?} */
3509 var url = getUrl(this.router, activatedRoute);
3510 /** @type {?} */
3511 var element = (/** @type {?} */ ((ref && ref.location && ref.location.nativeElement)));
3512 /** @type {?} */
3513 var unlistenEvents = bindLifecycleEvents(this.zone, ref.instance, element);
3514 return {
3515 id: this.nextId++,
3516 stackId: computeStackId(this.tabsPrefix, url),
3517 unlistenEvents: unlistenEvents,
3518 element: element,
3519 ref: ref,
3520 url: url,
3521 };
3522 };
3523 /**
3524 * @param {?} activatedRoute
3525 * @return {?}
3526 */
3527 StackController.prototype.getExistingView = /**
3528 * @param {?} activatedRoute
3529 * @return {?}
3530 */
3531 function (activatedRoute) {
3532 /** @type {?} */
3533 var activatedUrlKey = getUrl(this.router, activatedRoute);
3534 /** @type {?} */
3535 var view = this.views.find((/**
3536 * @param {?} vw
3537 * @return {?}
3538 */
3539 function (vw) { return vw.url === activatedUrlKey; }));
3540 if (view) {
3541 view.ref.changeDetectorRef.reattach();
3542 }
3543 return view;
3544 };
3545 /**
3546 * @param {?} enteringView
3547 * @return {?}
3548 */
3549 StackController.prototype.setActive = /**
3550 * @param {?} enteringView
3551 * @return {?}
3552 */
3553 function (enteringView) {
3554 var _this = this;
3555 var _a = this.navCtrl.consumeTransition(), direction = _a.direction, animation = _a.animation;
3556 /** @type {?} */
3557 var leavingView = this.activeView;
3558 /** @type {?} */
3559 var tabSwitch = isTabSwitch(enteringView, leavingView);
3560 if (tabSwitch) {
3561 direction = 'back';
3562 animation = undefined;
3563 }
3564 /** @type {?} */
3565 var viewsSnapshot = this.views.slice();
3566 /** @type {?} */
3567 var currentNavigation;
3568 /** @type {?} */
3569 var router = ((/** @type {?} */ (this.router)));
3570 // Angular >= 7.2.0
3571 if (router.getCurrentNavigation) {
3572 currentNavigation = router.getCurrentNavigation();
3573 // Angular < 7.2.0
3574 }
3575 else if (router.navigations &&
3576 router.navigations.value) {
3577 currentNavigation = router.navigations.value;
3578 }
3579 /**
3580 * If the navigation action
3581 * sets `replaceUrl: true`
3582 * then we need to make sure
3583 * we remove the last item
3584 * from our views stack
3585 */
3586 if (currentNavigation &&
3587 currentNavigation.extras &&
3588 currentNavigation.extras.replaceUrl) {
3589 if (this.views.length > 0) {
3590 this.views.splice(-1, 1);
3591 }
3592 }
3593 /** @type {?} */
3594 var reused = this.views.includes(enteringView);
3595 /** @type {?} */
3596 var views = this.insertView(enteringView, direction);
3597 // Trigger change detection before transition starts
3598 // This will call ngOnInit() the first time too, just after the view
3599 // was attached to the dom, but BEFORE the transition starts
3600 if (!reused) {
3601 enteringView.ref.changeDetectorRef.detectChanges();
3602 }
3603 // Wait until previous transitions finish
3604 return this.zone.runOutsideAngular((/**
3605 * @return {?}
3606 */
3607 function () {
3608 return _this.wait((/**
3609 * @return {?}
3610 */
3611 function () {
3612 // disconnect leaving page from change detection to
3613 // reduce jank during the page transition
3614 if (leavingView) {
3615 leavingView.ref.changeDetectorRef.detach();
3616 }
3617 // In case the enteringView is the same as the leavingPage we need to reattach()
3618 enteringView.ref.changeDetectorRef.reattach();
3619 return _this.transition(enteringView, leavingView, animation, _this.canGoBack(1), false)
3620 .then((/**
3621 * @return {?}
3622 */
3623 function () { return cleanupAsync(enteringView, views, viewsSnapshot, _this.location); }))
3624 .then((/**
3625 * @return {?}
3626 */
3627 function () { return ({
3628 enteringView: enteringView,
3629 direction: direction,
3630 animation: animation,
3631 tabSwitch: tabSwitch
3632 }); }));
3633 }));
3634 }));
3635 };
3636 /**
3637 * @param {?} deep
3638 * @param {?=} stackId
3639 * @return {?}
3640 */
3641 StackController.prototype.canGoBack = /**
3642 * @param {?} deep
3643 * @param {?=} stackId
3644 * @return {?}
3645 */
3646 function (deep, stackId) {
3647 if (stackId === void 0) { stackId = this.getActiveStackId(); }
3648 return this.getStack(stackId).length > deep;
3649 };
3650 /**
3651 * @param {?} deep
3652 * @param {?=} stackId
3653 * @return {?}
3654 */
3655 StackController.prototype.pop = /**
3656 * @param {?} deep
3657 * @param {?=} stackId
3658 * @return {?}
3659 */
3660 function (deep, stackId) {
3661 var _this = this;
3662 if (stackId === void 0) { stackId = this.getActiveStackId(); }
3663 return this.zone.run((/**
3664 * @return {?}
3665 */
3666 function () {
3667 /** @type {?} */
3668 var views = _this.getStack(stackId);
3669 if (views.length <= deep) {
3670 return Promise.resolve(false);
3671 }
3672 /** @type {?} */
3673 var view = views[views.length - deep - 1];
3674 /** @type {?} */
3675 var url = view.url;
3676 /** @type {?} */
3677 var viewSavedData = view.savedData;
3678 if (viewSavedData) {
3679 /** @type {?} */
3680 var primaryOutlet = viewSavedData.get('primary');
3681 if (primaryOutlet &&
3682 primaryOutlet.route &&
3683 primaryOutlet.route._routerState &&
3684 primaryOutlet.route._routerState.snapshot &&
3685 primaryOutlet.route._routerState.snapshot.url) {
3686 url = primaryOutlet.route._routerState.snapshot.url;
3687 }
3688 }
3689 return _this.navCtrl.navigateBack(url, view.savedExtras).then((/**
3690 * @return {?}
3691 */
3692 function () { return true; }));
3693 }));
3694 };
3695 /**
3696 * @return {?}
3697 */
3698 StackController.prototype.startBackTransition = /**
3699 * @return {?}
3700 */
3701 function () {
3702 var _this = this;
3703 /** @type {?} */
3704 var leavingView = this.activeView;
3705 if (leavingView) {
3706 /** @type {?} */
3707 var views = this.getStack(leavingView.stackId);
3708 /** @type {?} */
3709 var enteringView_1 = views[views.length - 2];
3710 return this.wait((/**
3711 * @return {?}
3712 */
3713 function () {
3714 return _this.transition(enteringView_1, // entering view
3715 leavingView, // leaving view
3716 'back', _this.canGoBack(2), true);
3717 }));
3718 }
3719 return Promise.resolve();
3720 };
3721 /**
3722 * @param {?} shouldComplete
3723 * @return {?}
3724 */
3725 StackController.prototype.endBackTransition = /**
3726 * @param {?} shouldComplete
3727 * @return {?}
3728 */
3729 function (shouldComplete) {
3730 if (shouldComplete) {
3731 this.skipTransition = true;
3732 this.pop(1);
3733 }
3734 else if (this.activeView) {
3735 cleanup(this.activeView, this.views, this.views, this.location);
3736 }
3737 };
3738 /**
3739 * @param {?=} stackId
3740 * @return {?}
3741 */
3742 StackController.prototype.getLastUrl = /**
3743 * @param {?=} stackId
3744 * @return {?}
3745 */
3746 function (stackId) {
3747 /** @type {?} */
3748 var views = this.getStack(stackId);
3749 return views.length > 0 ? views[views.length - 1] : undefined;
3750 };
3751 /**
3752 * @return {?}
3753 */
3754 StackController.prototype.getActiveStackId = /**
3755 * @return {?}
3756 */
3757 function () {
3758 return this.activeView ? this.activeView.stackId : undefined;
3759 };
3760 /**
3761 * @return {?}
3762 */
3763 StackController.prototype.destroy = /**
3764 * @return {?}
3765 */
3766 function () {
3767 this.containerEl = (/** @type {?} */ (undefined));
3768 this.views.forEach(destroyView);
3769 this.activeView = undefined;
3770 this.views = [];
3771 };
3772 /**
3773 * @private
3774 * @param {?} stackId
3775 * @return {?}
3776 */
3777 StackController.prototype.getStack = /**
3778 * @private
3779 * @param {?} stackId
3780 * @return {?}
3781 */
3782 function (stackId) {
3783 return this.views.filter((/**
3784 * @param {?} v
3785 * @return {?}
3786 */
3787 function (v) { return v.stackId === stackId; }));
3788 };
3789 /**
3790 * @private
3791 * @param {?} enteringView
3792 * @param {?} direction
3793 * @return {?}
3794 */
3795 StackController.prototype.insertView = /**
3796 * @private
3797 * @param {?} enteringView
3798 * @param {?} direction
3799 * @return {?}
3800 */
3801 function (enteringView, direction) {
3802 this.activeView = enteringView;
3803 this.views = insertView(this.views, enteringView, direction);
3804 return this.views.slice();
3805 };
3806 /**
3807 * @private
3808 * @param {?} enteringView
3809 * @param {?} leavingView
3810 * @param {?} direction
3811 * @param {?} showGoBack
3812 * @param {?} progressAnimation
3813 * @return {?}
3814 */
3815 StackController.prototype.transition = /**
3816 * @private
3817 * @param {?} enteringView
3818 * @param {?} leavingView
3819 * @param {?} direction
3820 * @param {?} showGoBack
3821 * @param {?} progressAnimation
3822 * @return {?}
3823 */
3824 function (enteringView, leavingView, direction, showGoBack, progressAnimation) {
3825 if (this.skipTransition) {
3826 this.skipTransition = false;
3827 return Promise.resolve(false);
3828 }
3829 if (leavingView === enteringView) {
3830 return Promise.resolve(false);
3831 }
3832 /** @type {?} */
3833 var enteringEl = enteringView ? enteringView.element : undefined;
3834 /** @type {?} */
3835 var leavingEl = leavingView ? leavingView.element : undefined;
3836 /** @type {?} */
3837 var containerEl = this.containerEl;
3838 if (enteringEl && enteringEl !== leavingEl) {
3839 enteringEl.classList.add('ion-page');
3840 enteringEl.classList.add('ion-page-invisible');
3841 if (enteringEl.parentElement !== containerEl) {
3842 containerEl.appendChild(enteringEl);
3843 }
3844 if (((/** @type {?} */ (containerEl))).commit) {
3845 return containerEl.commit(enteringEl, leavingEl, {
3846 deepWait: true,
3847 duration: direction === undefined ? 0 : undefined,
3848 direction: direction,
3849 showGoBack: showGoBack,
3850 progressAnimation: progressAnimation
3851 });
3852 }
3853 }
3854 return Promise.resolve(false);
3855 };
3856 /**
3857 * @private
3858 * @template T
3859 * @param {?} task
3860 * @return {?}
3861 */
3862 StackController.prototype.wait = /**
3863 * @private
3864 * @template T
3865 * @param {?} task
3866 * @return {?}
3867 */
3868 function (task) {
3869 return __awaiter(this, void 0, void 0, function () {
3870 var promise;
3871 return __generator(this, function (_a) {
3872 switch (_a.label) {
3873 case 0:
3874 if (!(this.runningTask !== undefined)) return [3 /*break*/, 2];
3875 return [4 /*yield*/, this.runningTask];
3876 case 1:
3877 _a.sent();
3878 this.runningTask = undefined;
3879 _a.label = 2;
3880 case 2:
3881 promise = this.runningTask = task();
3882 return [2 /*return*/, promise];
3883 }
3884 });
3885 });
3886 };
3887 return StackController;
3888}());
3889/** @type {?} */
3890var cleanupAsync = (/**
3891 * @param {?} activeRoute
3892 * @param {?} views
3893 * @param {?} viewsSnapshot
3894 * @param {?} location
3895 * @return {?}
3896 */
3897function (activeRoute, views, viewsSnapshot, location) {
3898 if (typeof ((/** @type {?} */ (requestAnimationFrame))) === 'function') {
3899 return new Promise((/**
3900 * @param {?} resolve
3901 * @return {?}
3902 */
3903 function (resolve) {
3904 requestAnimationFrame((/**
3905 * @return {?}
3906 */
3907 function () {
3908 cleanup(activeRoute, views, viewsSnapshot, location);
3909 resolve();
3910 }));
3911 }));
3912 }
3913 return Promise.resolve();
3914});
3915/** @type {?} */
3916var cleanup = (/**
3917 * @param {?} activeRoute
3918 * @param {?} views
3919 * @param {?} viewsSnapshot
3920 * @param {?} location
3921 * @return {?}
3922 */
3923function (activeRoute, views, viewsSnapshot, location) {
3924 viewsSnapshot
3925 .filter((/**
3926 * @param {?} view
3927 * @return {?}
3928 */
3929 function (view) { return !views.includes(view); }))
3930 .forEach(destroyView);
3931 views.forEach((/**
3932 * @param {?} view
3933 * @return {?}
3934 */
3935 function (view) {
3936 /**
3937 * In the event that a user navigated multiple
3938 * times in rapid succession, we want to make sure
3939 * we don't pre-emptively detach a view while
3940 * it is in mid-transition.
3941 *
3942 * In this instance we also do not care about query
3943 * params or fragments as it will be the same view regardless
3944 * @type {?}
3945 */
3946 var locationWithoutParams = location.path().split('?')[0];
3947 /** @type {?} */
3948 var locationWithoutFragment = locationWithoutParams.split('#')[0];
3949 if (view !== activeRoute && view.url !== locationWithoutFragment) {
3950 /** @type {?} */
3951 var element = view.element;
3952 element.setAttribute('aria-hidden', 'true');
3953 element.classList.add('ion-page-hidden');
3954 view.ref.changeDetectorRef.detach();
3955 }
3956 }));
3957});
3958
3959/**
3960 * @fileoverview added by tsickle
3961 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
3962 */
3963var IonRouterOutlet = /** @class */ (function () {
3964 function IonRouterOutlet(parentContexts, location, resolver, name, tabs, config, navCtrl, commonLocation, elementRef, router, zone, activatedRoute, parentOutlet) {
3965 this.parentContexts = parentContexts;
3966 this.location = location;
3967 this.resolver = resolver;
3968 this.config = config;
3969 this.navCtrl = navCtrl;
3970 this.parentOutlet = parentOutlet;
3971 this.activated = null;
3972 this.activatedView = null;
3973 this._activatedRoute = null;
3974 // Maintain map of activated route proxies for each component instance
3975 this.proxyMap = new WeakMap();
3976 // Keep the latest activated route in a subject for the proxy routes to switch map to
3977 this.currentActivatedRoute$ = new BehaviorSubject(null);
3978 this.stackEvents = new EventEmitter();
3979 this.activateEvents = new EventEmitter();
3980 this.deactivateEvents = new EventEmitter();
3981 this.nativeEl = elementRef.nativeElement;
3982 this.name = name || PRIMARY_OUTLET;
3983 this.tabsPrefix = tabs === 'true' ? getUrl(router, activatedRoute) : undefined;
3984 this.stackCtrl = new StackController(this.tabsPrefix, this.nativeEl, router, navCtrl, zone, commonLocation);
3985 parentContexts.onChildOutletCreated(this.name, (/** @type {?} */ (this)));
3986 }
3987 Object.defineProperty(IonRouterOutlet.prototype, "animated", {
3988 set: /**
3989 * @param {?} animated
3990 * @return {?}
3991 */
3992 function (animated) {
3993 this.nativeEl.animated = animated;
3994 },
3995 enumerable: true,
3996 configurable: true
3997 });
3998 Object.defineProperty(IonRouterOutlet.prototype, "swipeGesture", {
3999 set: /**
4000 * @param {?} swipe
4001 * @return {?}
4002 */
4003 function (swipe) {
4004 var _this = this;
4005 this._swipeGesture = swipe;
4006 this.nativeEl.swipeHandler = swipe ? {
4007 canStart: (/**
4008 * @return {?}
4009 */
4010 function () { return _this.stackCtrl.canGoBack(1); }),
4011 onStart: (/**
4012 * @return {?}
4013 */
4014 function () { return _this.stackCtrl.startBackTransition(); }),
4015 onEnd: (/**
4016 * @param {?} shouldContinue
4017 * @return {?}
4018 */
4019 function (shouldContinue) { return _this.stackCtrl.endBackTransition(shouldContinue); })
4020 } : undefined;
4021 },
4022 enumerable: true,
4023 configurable: true
4024 });
4025 /**
4026 * @return {?}
4027 */
4028 IonRouterOutlet.prototype.ngOnDestroy = /**
4029 * @return {?}
4030 */
4031 function () {
4032 this.stackCtrl.destroy();
4033 };
4034 /**
4035 * @return {?}
4036 */
4037 IonRouterOutlet.prototype.getContext = /**
4038 * @return {?}
4039 */
4040 function () {
4041 return this.parentContexts.getContext(this.name);
4042 };
4043 /**
4044 * @return {?}
4045 */
4046 IonRouterOutlet.prototype.ngOnInit = /**
4047 * @return {?}
4048 */
4049 function () {
4050 var _this = this;
4051 if (!this.activated) {
4052 // If the outlet was not instantiated at the time the route got activated we need to populate
4053 // the outlet when it is initialized (ie inside a NgIf)
4054 /** @type {?} */
4055 var context = this.getContext();
4056 if (context && context.route) {
4057 this.activateWith(context.route, context.resolver || null);
4058 }
4059 }
4060 if (((/** @type {?} */ (this.nativeEl))).componentOnReady) {
4061 this.nativeEl.componentOnReady().then((/**
4062 * @return {?}
4063 */
4064 function () {
4065 if (_this._swipeGesture === undefined) {
4066 _this.swipeGesture = _this.config.getBoolean('swipeBackEnabled', ((/** @type {?} */ (_this.nativeEl))).mode === 'ios');
4067 }
4068 }));
4069 }
4070 };
4071 Object.defineProperty(IonRouterOutlet.prototype, "isActivated", {
4072 get: /**
4073 * @return {?}
4074 */
4075 function () {
4076 return !!this.activated;
4077 },
4078 enumerable: true,
4079 configurable: true
4080 });
4081 Object.defineProperty(IonRouterOutlet.prototype, "component", {
4082 get: /**
4083 * @return {?}
4084 */
4085 function () {
4086 if (!this.activated) {
4087 throw new Error('Outlet is not activated');
4088 }
4089 return this.activated.instance;
4090 },
4091 enumerable: true,
4092 configurable: true
4093 });
4094 Object.defineProperty(IonRouterOutlet.prototype, "activatedRoute", {
4095 get: /**
4096 * @return {?}
4097 */
4098 function () {
4099 if (!this.activated) {
4100 throw new Error('Outlet is not activated');
4101 }
4102 return (/** @type {?} */ (this._activatedRoute));
4103 },
4104 enumerable: true,
4105 configurable: true
4106 });
4107 Object.defineProperty(IonRouterOutlet.prototype, "activatedRouteData", {
4108 get: /**
4109 * @return {?}
4110 */
4111 function () {
4112 if (this._activatedRoute) {
4113 return this._activatedRoute.snapshot.data;
4114 }
4115 return {};
4116 },
4117 enumerable: true,
4118 configurable: true
4119 });
4120 /**
4121 * Called when the `RouteReuseStrategy` instructs to detach the subtree
4122 */
4123 /**
4124 * Called when the `RouteReuseStrategy` instructs to detach the subtree
4125 * @return {?}
4126 */
4127 IonRouterOutlet.prototype.detach = /**
4128 * Called when the `RouteReuseStrategy` instructs to detach the subtree
4129 * @return {?}
4130 */
4131 function () {
4132 throw new Error('incompatible reuse strategy');
4133 };
4134 /**
4135 * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
4136 */
4137 /**
4138 * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
4139 * @param {?} _ref
4140 * @param {?} _activatedRoute
4141 * @return {?}
4142 */
4143 IonRouterOutlet.prototype.attach = /**
4144 * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
4145 * @param {?} _ref
4146 * @param {?} _activatedRoute
4147 * @return {?}
4148 */
4149 function (_ref, _activatedRoute) {
4150 throw new Error('incompatible reuse strategy');
4151 };
4152 /**
4153 * @return {?}
4154 */
4155 IonRouterOutlet.prototype.deactivate = /**
4156 * @return {?}
4157 */
4158 function () {
4159 if (this.activated) {
4160 if (this.activatedView) {
4161 this.activatedView.savedData = new Map((/** @type {?} */ (this.getContext())).children['contexts']);
4162 /**
4163 * Ensure we are saving the NavigationExtras
4164 * data otherwise it will be lost
4165 */
4166 this.activatedView.savedExtras = {};
4167 /** @type {?} */
4168 var context = (/** @type {?} */ (this.getContext()));
4169 if (context.route) {
4170 /** @type {?} */
4171 var contextSnapshot = context.route.snapshot;
4172 this.activatedView.savedExtras.queryParams = contextSnapshot.queryParams;
4173 this.activatedView.savedExtras.fragment = contextSnapshot.fragment;
4174 }
4175 }
4176 /** @type {?} */
4177 var c = this.component;
4178 this.activatedView = null;
4179 this.activated = null;
4180 this._activatedRoute = null;
4181 this.deactivateEvents.emit(c);
4182 }
4183 };
4184 /**
4185 * @param {?} activatedRoute
4186 * @param {?} resolver
4187 * @return {?}
4188 */
4189 IonRouterOutlet.prototype.activateWith = /**
4190 * @param {?} activatedRoute
4191 * @param {?} resolver
4192 * @return {?}
4193 */
4194 function (activatedRoute, resolver) {
4195 var _this = this;
4196 if (this.isActivated) {
4197 throw new Error('Cannot activate an already activated outlet');
4198 }
4199 this._activatedRoute = activatedRoute;
4200 /** @type {?} */
4201 var cmpRef;
4202 /** @type {?} */
4203 var enteringView = this.stackCtrl.getExistingView(activatedRoute);
4204 if (enteringView) {
4205 cmpRef = this.activated = enteringView.ref;
4206 /** @type {?} */
4207 var saved = enteringView.savedData;
4208 if (saved) {
4209 // self-restore
4210 /** @type {?} */
4211 var context = (/** @type {?} */ (this.getContext()));
4212 context.children['contexts'] = saved;
4213 }
4214 // Updated activated route proxy for this component
4215 this.updateActivatedRouteProxy(cmpRef.instance, activatedRoute);
4216 }
4217 else {
4218 /** @type {?} */
4219 var snapshot = ((/** @type {?} */ (activatedRoute)))._futureSnapshot;
4220 /** @type {?} */
4221 var component = (/** @type {?} */ ((/** @type {?} */ (snapshot.routeConfig)).component));
4222 resolver = resolver || this.resolver;
4223 /** @type {?} */
4224 var factory = resolver.resolveComponentFactory(component);
4225 /** @type {?} */
4226 var childContexts = this.parentContexts.getOrCreateContext(this.name).children;
4227 // We create an activated route proxy object that will maintain future updates for this component
4228 // over its lifecycle in the stack.
4229 /** @type {?} */
4230 var component$ = new BehaviorSubject(null);
4231 /** @type {?} */
4232 var activatedRouteProxy = this.createActivatedRouteProxy(component$, activatedRoute);
4233 /** @type {?} */
4234 var injector = new OutletInjector(activatedRouteProxy, childContexts, this.location.injector);
4235 cmpRef = this.activated = this.location.createComponent(factory, this.location.length, injector);
4236 // Once the component is created we can push it to our local subject supplied to the proxy
4237 component$.next(cmpRef.instance);
4238 // Calling `markForCheck` to make sure we will run the change detection when the
4239 // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.
4240 enteringView = this.stackCtrl.createView(this.activated, activatedRoute);
4241 // Store references to the proxy by component
4242 this.proxyMap.set(cmpRef.instance, activatedRouteProxy);
4243 this.currentActivatedRoute$.next({ component: cmpRef.instance, activatedRoute: activatedRoute });
4244 }
4245 this.activatedView = enteringView;
4246 this.stackCtrl.setActive(enteringView).then((/**
4247 * @param {?} data
4248 * @return {?}
4249 */
4250 function (data) {
4251 _this.navCtrl.setTopOutlet(_this);
4252 _this.activateEvents.emit(cmpRef.instance);
4253 _this.stackEvents.emit(data);
4254 }));
4255 };
4256 /**
4257 * Returns `true` if there are pages in the stack to go back.
4258 */
4259 /**
4260 * Returns `true` if there are pages in the stack to go back.
4261 * @param {?=} deep
4262 * @param {?=} stackId
4263 * @return {?}
4264 */
4265 IonRouterOutlet.prototype.canGoBack = /**
4266 * Returns `true` if there are pages in the stack to go back.
4267 * @param {?=} deep
4268 * @param {?=} stackId
4269 * @return {?}
4270 */
4271 function (deep, stackId) {
4272 if (deep === void 0) { deep = 1; }
4273 return this.stackCtrl.canGoBack(deep, stackId);
4274 };
4275 /**
4276 * Resolves to `true` if it the outlet was able to sucessfully pop the last N pages.
4277 */
4278 /**
4279 * Resolves to `true` if it the outlet was able to sucessfully pop the last N pages.
4280 * @param {?=} deep
4281 * @param {?=} stackId
4282 * @return {?}
4283 */
4284 IonRouterOutlet.prototype.pop = /**
4285 * Resolves to `true` if it the outlet was able to sucessfully pop the last N pages.
4286 * @param {?=} deep
4287 * @param {?=} stackId
4288 * @return {?}
4289 */
4290 function (deep, stackId) {
4291 if (deep === void 0) { deep = 1; }
4292 return this.stackCtrl.pop(deep, stackId);
4293 };
4294 /**
4295 * Returns the URL of the active page of each stack.
4296 */
4297 /**
4298 * Returns the URL of the active page of each stack.
4299 * @param {?=} stackId
4300 * @return {?}
4301 */
4302 IonRouterOutlet.prototype.getLastUrl = /**
4303 * Returns the URL of the active page of each stack.
4304 * @param {?=} stackId
4305 * @return {?}
4306 */
4307 function (stackId) {
4308 /** @type {?} */
4309 var active = this.stackCtrl.getLastUrl(stackId);
4310 return active ? active.url : undefined;
4311 };
4312 /**
4313 * Returns the active stack ID. In the context of ion-tabs, it means the active tab.
4314 */
4315 /**
4316 * Returns the active stack ID. In the context of ion-tabs, it means the active tab.
4317 * @return {?}
4318 */
4319 IonRouterOutlet.prototype.getActiveStackId = /**
4320 * Returns the active stack ID. In the context of ion-tabs, it means the active tab.
4321 * @return {?}
4322 */
4323 function () {
4324 return this.stackCtrl.getActiveStackId();
4325 };
4326 /**
4327 * Since the activated route can change over the life time of a component in an ion router outlet, we create
4328 * a proxy so that we can update the values over time as a user navigates back to components already in the stack.
4329 */
4330 /**
4331 * Since the activated route can change over the life time of a component in an ion router outlet, we create
4332 * a proxy so that we can update the values over time as a user navigates back to components already in the stack.
4333 * @private
4334 * @param {?} component$
4335 * @param {?} activatedRoute
4336 * @return {?}
4337 */
4338 IonRouterOutlet.prototype.createActivatedRouteProxy = /**
4339 * Since the activated route can change over the life time of a component in an ion router outlet, we create
4340 * a proxy so that we can update the values over time as a user navigates back to components already in the stack.
4341 * @private
4342 * @param {?} component$
4343 * @param {?} activatedRoute
4344 * @return {?}
4345 */
4346 function (component$, activatedRoute) {
4347 /** @type {?} */
4348 var proxy = new ActivatedRoute();
4349 proxy._futureSnapshot = ((/** @type {?} */ (activatedRoute)))._futureSnapshot;
4350 proxy._routerState = ((/** @type {?} */ (activatedRoute)))._routerState;
4351 proxy.snapshot = activatedRoute.snapshot;
4352 proxy.outlet = activatedRoute.outlet;
4353 proxy.component = activatedRoute.component;
4354 // Setup wrappers for the observables so consumers don't have to worry about switching to new observables as the state updates
4355 ((/** @type {?} */ (proxy)))._paramMap = this.proxyObservable(component$, 'paramMap');
4356 ((/** @type {?} */ (proxy)))._queryParamMap = this.proxyObservable(component$, 'queryParamMap');
4357 proxy.url = this.proxyObservable(component$, 'url');
4358 proxy.params = this.proxyObservable(component$, 'params');
4359 proxy.queryParams = this.proxyObservable(component$, 'queryParams');
4360 proxy.fragment = this.proxyObservable(component$, 'fragment');
4361 proxy.data = this.proxyObservable(component$, 'data');
4362 return (/** @type {?} */ (proxy));
4363 };
4364 /**
4365 * Create a wrapped observable that will switch to the latest activated route matched by the given component
4366 */
4367 /**
4368 * Create a wrapped observable that will switch to the latest activated route matched by the given component
4369 * @private
4370 * @param {?} component$
4371 * @param {?} path
4372 * @return {?}
4373 */
4374 IonRouterOutlet.prototype.proxyObservable = /**
4375 * Create a wrapped observable that will switch to the latest activated route matched by the given component
4376 * @private
4377 * @param {?} component$
4378 * @param {?} path
4379 * @return {?}
4380 */
4381 function (component$, path) {
4382 var _this = this;
4383 return component$.pipe(
4384 // First wait until the component instance is pushed
4385 filter((/**
4386 * @param {?} component
4387 * @return {?}
4388 */
4389 function (component) { return !!component; })), switchMap((/**
4390 * @param {?} component
4391 * @return {?}
4392 */
4393 function (component) {
4394 return _this.currentActivatedRoute$.pipe(filter((/**
4395 * @param {?} current
4396 * @return {?}
4397 */
4398 function (current) { return current !== null && current.component === component; })), switchMap((/**
4399 * @param {?} current
4400 * @return {?}
4401 */
4402 function (current) { return current && ((/** @type {?} */ (current.activatedRoute)))[path]; })), distinctUntilChanged());
4403 })));
4404 };
4405 /**
4406 * Updates the activated route proxy for the given component to the new incoming router state
4407 */
4408 /**
4409 * Updates the activated route proxy for the given component to the new incoming router state
4410 * @private
4411 * @param {?} component
4412 * @param {?} activatedRoute
4413 * @return {?}
4414 */
4415 IonRouterOutlet.prototype.updateActivatedRouteProxy = /**
4416 * Updates the activated route proxy for the given component to the new incoming router state
4417 * @private
4418 * @param {?} component
4419 * @param {?} activatedRoute
4420 * @return {?}
4421 */
4422 function (component, activatedRoute) {
4423 /** @type {?} */
4424 var proxy = this.proxyMap.get(component);
4425 if (!proxy) {
4426 throw new Error("Could not find activated route proxy for view");
4427 }
4428 ((/** @type {?} */ (proxy)))._futureSnapshot = ((/** @type {?} */ (activatedRoute)))._futureSnapshot;
4429 ((/** @type {?} */ (proxy)))._routerState = ((/** @type {?} */ (activatedRoute)))._routerState;
4430 proxy.snapshot = activatedRoute.snapshot;
4431 proxy.outlet = activatedRoute.outlet;
4432 proxy.component = activatedRoute.component;
4433 this.currentActivatedRoute$.next({ component: component, activatedRoute: activatedRoute });
4434 };
4435 IonRouterOutlet.decorators = [
4436 { type: Directive, args: [{
4437 selector: 'ion-router-outlet',
4438 exportAs: 'outlet',
4439 inputs: ['animated', 'swipeGesture']
4440 },] },
4441 ];
4442 /** @nocollapse */
4443 IonRouterOutlet.ctorParameters = function () { return [
4444 { type: ChildrenOutletContexts },
4445 { type: ViewContainerRef },
4446 { type: ComponentFactoryResolver },
4447 { type: String, decorators: [{ type: Attribute, args: ['name',] }] },
4448 { type: String, decorators: [{ type: Optional }, { type: Attribute, args: ['tabs',] }] },
4449 { type: Config },
4450 { type: NavController },
4451 { type: Location },
4452 { type: ElementRef },
4453 { type: Router },
4454 { type: NgZone },
4455 { type: ActivatedRoute },
4456 { type: IonRouterOutlet, decorators: [{ type: SkipSelf }, { type: Optional }] }
4457 ]; };
4458 IonRouterOutlet.propDecorators = {
4459 stackEvents: [{ type: Output }],
4460 activateEvents: [{ type: Output, args: ['activate',] }],
4461 deactivateEvents: [{ type: Output, args: ['deactivate',] }]
4462 };
4463 return IonRouterOutlet;
4464}());
4465var OutletInjector = /** @class */ (function () {
4466 function OutletInjector(route, childContexts, parent) {
4467 this.route = route;
4468 this.childContexts = childContexts;
4469 this.parent = parent;
4470 }
4471 /**
4472 * @param {?} token
4473 * @param {?=} notFoundValue
4474 * @return {?}
4475 */
4476 OutletInjector.prototype.get = /**
4477 * @param {?} token
4478 * @param {?=} notFoundValue
4479 * @return {?}
4480 */
4481 function (token, notFoundValue) {
4482 if (token === ActivatedRoute) {
4483 return this.route;
4484 }
4485 if (token === ChildrenOutletContexts) {
4486 return this.childContexts;
4487 }
4488 // tslint:disable-next-line
4489 return this.parent.get(token, notFoundValue);
4490 };
4491 return OutletInjector;
4492}());
4493
4494/**
4495 * @fileoverview added by tsickle
4496 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4497 */
4498var IonTabs = /** @class */ (function () {
4499 function IonTabs(navCtrl) {
4500 this.navCtrl = navCtrl;
4501 this.ionTabsWillChange = new EventEmitter();
4502 this.ionTabsDidChange = new EventEmitter();
4503 }
4504 /**
4505 * @internal
4506 */
4507 /**
4508 * \@internal
4509 * @param {?} detail
4510 * @return {?}
4511 */
4512 IonTabs.prototype.onPageSelected = /**
4513 * \@internal
4514 * @param {?} detail
4515 * @return {?}
4516 */
4517 function (detail) {
4518 /** @type {?} */
4519 var stackId = detail.enteringView.stackId;
4520 if (detail.tabSwitch && stackId !== undefined) {
4521 if (this.tabBar) {
4522 this.tabBar.selectedTab = stackId;
4523 }
4524 this.ionTabsWillChange.emit({ tab: stackId });
4525 this.ionTabsDidChange.emit({ tab: stackId });
4526 }
4527 };
4528 /**
4529 * @param {?} tab
4530 * @return {?}
4531 */
4532 IonTabs.prototype.select = /**
4533 * @param {?} tab
4534 * @return {?}
4535 */
4536 function (tab) {
4537 /** @type {?} */
4538 var alreadySelected = this.outlet.getActiveStackId() === tab;
4539 /** @type {?} */
4540 var href = this.outlet.tabsPrefix + "/" + tab;
4541 /** @type {?} */
4542 var url = alreadySelected
4543 ? href
4544 : this.outlet.getLastUrl(tab) || href;
4545 return this.navCtrl.navigateRoot(url, {
4546 animated: true,
4547 animationDirection: 'back'
4548 });
4549 };
4550 /**
4551 * @return {?}
4552 */
4553 IonTabs.prototype.getSelected = /**
4554 * @return {?}
4555 */
4556 function () {
4557 return this.outlet.getActiveStackId();
4558 };
4559 IonTabs.decorators = [
4560 { type: Component, args: [{
4561 selector: 'ion-tabs',
4562 template: "\n <ng-content select=\"[slot=top]\"></ng-content>\n <div class=\"tabs-inner\">\n <ion-router-outlet #outlet tabs=\"true\" (stackEvents)=\"onPageSelected($event)\"></ion-router-outlet>\n </div>\n <ng-content></ng-content>",
4563 styles: ["\n :host {\n display: flex;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n\n flex-direction: column;\n\n width: 100%;\n height: 100%;\n\n contain: layout size style;\n z-index: $z-index-page-container;\n }\n .tabs-inner {\n position: relative;\n\n flex: 1;\n\n contain: layout size style;\n }"
4564 ]
4565 },] },
4566 ];
4567 /** @nocollapse */
4568 IonTabs.ctorParameters = function () { return [
4569 { type: NavController }
4570 ]; };
4571 IonTabs.propDecorators = {
4572 outlet: [{ type: ViewChild, args: ['outlet', { read: IonRouterOutlet },] }],
4573 tabBar: [{ type: ContentChild, args: [IonTabBar,] }],
4574 ionTabsWillChange: [{ type: Output }],
4575 ionTabsDidChange: [{ type: Output }],
4576 select: [{ type: HostListener, args: ['ionTabButtonClick', ['$event.detail.tab'],] }]
4577 };
4578 return IonTabs;
4579}());
4580
4581/**
4582 * @fileoverview added by tsickle
4583 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4584 */
4585var IonBackButtonDelegate = /** @class */ (function () {
4586 function IonBackButtonDelegate(routerOutlet, navCtrl) {
4587 this.routerOutlet = routerOutlet;
4588 this.navCtrl = navCtrl;
4589 }
4590 /**
4591 * @internal
4592 */
4593 /**
4594 * \@internal
4595 * @param {?} ev
4596 * @return {?}
4597 */
4598 IonBackButtonDelegate.prototype.onClick = /**
4599 * \@internal
4600 * @param {?} ev
4601 * @return {?}
4602 */
4603 function (ev) {
4604 if (this.routerOutlet && this.routerOutlet.canGoBack()) {
4605 this.routerOutlet.pop();
4606 ev.preventDefault();
4607 }
4608 else if (this.defaultHref != null) {
4609 this.navCtrl.navigateBack(this.defaultHref);
4610 ev.preventDefault();
4611 }
4612 };
4613 IonBackButtonDelegate.decorators = [
4614 { type: Directive, args: [{
4615 selector: 'ion-back-button',
4616 inputs: ['defaultHref']
4617 },] },
4618 ];
4619 /** @nocollapse */
4620 IonBackButtonDelegate.ctorParameters = function () { return [
4621 { type: IonRouterOutlet, decorators: [{ type: Optional }] },
4622 { type: NavController }
4623 ]; };
4624 IonBackButtonDelegate.propDecorators = {
4625 onClick: [{ type: HostListener, args: ['click', ['$event'],] }]
4626 };
4627 return IonBackButtonDelegate;
4628}());
4629
4630/**
4631 * @fileoverview added by tsickle
4632 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4633 */
4634var NavDelegate = /** @class */ (function () {
4635 function NavDelegate(ref, resolver, injector, angularDelegate, location) {
4636 ref.nativeElement.delegate = angularDelegate.create(resolver, injector, location);
4637 }
4638 NavDelegate.decorators = [
4639 { type: Directive, args: [{
4640 selector: 'ion-nav',
4641 },] },
4642 ];
4643 /** @nocollapse */
4644 NavDelegate.ctorParameters = function () { return [
4645 { type: ElementRef },
4646 { type: ComponentFactoryResolver },
4647 { type: Injector },
4648 { type: AngularDelegate },
4649 { type: ViewContainerRef }
4650 ]; };
4651 return NavDelegate;
4652}());
4653
4654/**
4655 * @fileoverview added by tsickle
4656 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4657 */
4658var RouterLinkDelegate = /** @class */ (function () {
4659 function RouterLinkDelegate(locationStrategy, navCtrl, elementRef, router, routerLink) {
4660 this.locationStrategy = locationStrategy;
4661 this.navCtrl = navCtrl;
4662 this.elementRef = elementRef;
4663 this.router = router;
4664 this.routerLink = routerLink;
4665 this.routerDirection = 'forward';
4666 }
4667 /**
4668 * @return {?}
4669 */
4670 RouterLinkDelegate.prototype.ngOnInit = /**
4671 * @return {?}
4672 */
4673 function () {
4674 this.updateTargetUrlAndHref();
4675 };
4676 /**
4677 * @return {?}
4678 */
4679 RouterLinkDelegate.prototype.ngOnChanges = /**
4680 * @return {?}
4681 */
4682 function () {
4683 this.updateTargetUrlAndHref();
4684 };
4685 /**
4686 * @return {?}
4687 */
4688 RouterLinkDelegate.prototype.ngOnDestroy = /**
4689 * @return {?}
4690 */
4691 function () {
4692 if (this.subscription) {
4693 this.subscription.unsubscribe();
4694 }
4695 };
4696 /**
4697 * @private
4698 * @return {?}
4699 */
4700 RouterLinkDelegate.prototype.updateTargetUrlAndHref = /**
4701 * @private
4702 * @return {?}
4703 */
4704 function () {
4705 if (this.routerLink) {
4706 /** @type {?} */
4707 var href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.routerLink.urlTree));
4708 this.elementRef.nativeElement.href = href;
4709 }
4710 };
4711 /**
4712 * @internal
4713 */
4714 /**
4715 * \@internal
4716 * @param {?} ev
4717 * @return {?}
4718 */
4719 RouterLinkDelegate.prototype.onClick = /**
4720 * \@internal
4721 * @param {?} ev
4722 * @return {?}
4723 */
4724 function (ev) {
4725 this.navCtrl.setDirection(this.routerDirection);
4726 ev.preventDefault();
4727 };
4728 RouterLinkDelegate.decorators = [
4729 { type: Directive, args: [{
4730 selector: '[routerLink]',
4731 inputs: ['routerDirection']
4732 },] },
4733 ];
4734 /** @nocollapse */
4735 RouterLinkDelegate.ctorParameters = function () { return [
4736 { type: LocationStrategy },
4737 { type: NavController },
4738 { type: ElementRef },
4739 { type: Router },
4740 { type: RouterLink, decorators: [{ type: Optional }] }
4741 ]; };
4742 RouterLinkDelegate.propDecorators = {
4743 onClick: [{ type: HostListener, args: ['click', ['$event'],] }]
4744 };
4745 return RouterLinkDelegate;
4746}());
4747
4748/**
4749 * @fileoverview added by tsickle
4750 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4751 */
4752/**
4753 * @hidden
4754 */
4755var VirtualFooter = /** @class */ (function () {
4756 function VirtualFooter(templateRef) {
4757 this.templateRef = templateRef;
4758 }
4759 VirtualFooter.decorators = [
4760 { type: Directive, args: [{ selector: '[virtualFooter]' },] },
4761 ];
4762 /** @nocollapse */
4763 VirtualFooter.ctorParameters = function () { return [
4764 { type: TemplateRef }
4765 ]; };
4766 return VirtualFooter;
4767}());
4768
4769/**
4770 * @fileoverview added by tsickle
4771 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4772 */
4773/**
4774 * @hidden
4775 */
4776var VirtualHeader = /** @class */ (function () {
4777 function VirtualHeader(templateRef) {
4778 this.templateRef = templateRef;
4779 }
4780 VirtualHeader.decorators = [
4781 { type: Directive, args: [{ selector: '[virtualHeader]' },] },
4782 ];
4783 /** @nocollapse */
4784 VirtualHeader.ctorParameters = function () { return [
4785 { type: TemplateRef }
4786 ]; };
4787 return VirtualHeader;
4788}());
4789
4790/**
4791 * @fileoverview added by tsickle
4792 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4793 */
4794/**
4795 * @hidden
4796 */
4797var VirtualItem = /** @class */ (function () {
4798 function VirtualItem(templateRef, viewContainer) {
4799 this.templateRef = templateRef;
4800 this.viewContainer = viewContainer;
4801 }
4802 VirtualItem.decorators = [
4803 { type: Directive, args: [{ selector: '[virtualItem]' },] },
4804 ];
4805 /** @nocollapse */
4806 VirtualItem.ctorParameters = function () { return [
4807 { type: TemplateRef },
4808 { type: ViewContainerRef }
4809 ]; };
4810 return VirtualItem;
4811}());
4812
4813/**
4814 * @fileoverview added by tsickle
4815 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4816 */
4817var IonVirtualScroll = /** @class */ (function () {
4818 function IonVirtualScroll(z, iterableDiffers, elementRef) {
4819 this.z = z;
4820 this.iterableDiffers = iterableDiffers;
4821 this.refMap = new WeakMap();
4822 this.el = (/** @type {?} */ (elementRef.nativeElement));
4823 this.el.nodeRender = this.nodeRender.bind(this);
4824 }
4825 /**
4826 * @param {?} changes
4827 * @return {?}
4828 */
4829 IonVirtualScroll.prototype.ngOnChanges = /**
4830 * @param {?} changes
4831 * @return {?}
4832 */
4833 function (changes) {
4834 if (this.trackBy && 'items' in changes) {
4835 // React on virtualScroll changes only once all inputs have been initialized
4836 /** @type {?} */
4837 var value = changes['items'].currentValue;
4838 if (this.differ === undefined && value != null) {
4839 try {
4840 this.differ = this.iterableDiffers.find(value).create(this.trackBy);
4841 }
4842 catch (e) {
4843 throw new Error("Cannot find a differ supporting object '" + value + "'. VirtualScroll only supports binding to Iterables such as Arrays.");
4844 }
4845 }
4846 }
4847 };
4848 /**
4849 * @return {?}
4850 */
4851 IonVirtualScroll.prototype.ngDoCheck = /**
4852 * @return {?}
4853 */
4854 function () {
4855 // and if there actually are changes
4856 /** @type {?} */
4857 var changes = this.differ !== undefined && this.items ? this.differ.diff(this.items) : null;
4858 if (changes === null) {
4859 return;
4860 }
4861 // TODO: optimize
4862 this.checkRange(0);
4863 };
4864 /**
4865 * @private
4866 * @param {?} el
4867 * @param {?} cell
4868 * @param {?} index
4869 * @return {?}
4870 */
4871 IonVirtualScroll.prototype.nodeRender = /**
4872 * @private
4873 * @param {?} el
4874 * @param {?} cell
4875 * @param {?} index
4876 * @return {?}
4877 */
4878 function (el, cell, index) {
4879 var _this = this;
4880 return this.z.run((/**
4881 * @return {?}
4882 */
4883 function () {
4884 /** @type {?} */
4885 var node;
4886 if (!el) {
4887 node = _this.itmTmp.viewContainer.createEmbeddedView(_this.getComponent(cell.type), { $implicit: cell.value, index: index }, index);
4888 el = getElement(node);
4889 _this.refMap.set(el, node);
4890 }
4891 else {
4892 node = (/** @type {?} */ (_this.refMap.get(el)));
4893 /** @type {?} */
4894 var ctx = node.context;
4895 ctx.$implicit = cell.value;
4896 ctx.index = cell.index;
4897 }
4898 // run sync change detections
4899 node.detectChanges();
4900 return el;
4901 }));
4902 };
4903 /**
4904 * @private
4905 * @param {?} type
4906 * @return {?}
4907 */
4908 IonVirtualScroll.prototype.getComponent = /**
4909 * @private
4910 * @param {?} type
4911 * @return {?}
4912 */
4913 function (type) {
4914 switch (type) {
4915 case 'item': return this.itmTmp.templateRef;
4916 case 'header': return this.hdrTmp.templateRef;
4917 case 'footer': return this.ftrTmp.templateRef;
4918 }
4919 throw new Error('template for virtual item was not provided');
4920 };
4921 IonVirtualScroll.decorators = [
4922 { type: Component, args: [{
4923 selector: 'ion-virtual-scroll',
4924 template: '<ng-content></ng-content>',
4925 changeDetection: ChangeDetectionStrategy.OnPush,
4926 inputs: [
4927 'approxItemHeight',
4928 'approxHeaderHeight',
4929 'approxFooterHeight',
4930 'headerFn',
4931 'footerFn',
4932 'items',
4933 'itemHeight',
4934 'headerHeight',
4935 'footerHeight',
4936 'trackBy'
4937 ]
4938 },] },
4939 ];
4940 /** @nocollapse */
4941 IonVirtualScroll.ctorParameters = function () { return [
4942 { type: NgZone },
4943 { type: IterableDiffers },
4944 { type: ElementRef }
4945 ]; };
4946 IonVirtualScroll.propDecorators = {
4947 itmTmp: [{ type: ContentChild, args: [VirtualItem,] }],
4948 hdrTmp: [{ type: ContentChild, args: [VirtualHeader,] }],
4949 ftrTmp: [{ type: ContentChild, args: [VirtualFooter,] }]
4950 };
4951 return IonVirtualScroll;
4952}());
4953/** @type {?} */
4954var getElement = (/**
4955 * @param {?} view
4956 * @return {?}
4957 */
4958function (view) {
4959 /** @type {?} */
4960 var rootNodes = view.rootNodes;
4961 for (var i = 0; i < rootNodes.length; i++) {
4962 if (rootNodes[i].nodeType === 1) {
4963 return rootNodes[i];
4964 }
4965 }
4966 throw new Error('virtual element was not created');
4967});
4968proxyInputs(IonVirtualScroll, [
4969 'approxItemHeight',
4970 'approxHeaderHeight',
4971 'approxFooterHeight',
4972 'headerFn',
4973 'footerFn',
4974 'items',
4975 'itemHeight',
4976 'headerHeight',
4977 'footerHeight'
4978]);
4979proxyMethods(IonVirtualScroll, [
4980 'checkEnd',
4981 'checkRange',
4982 'positionForItem'
4983]);
4984
4985/**
4986 * @fileoverview added by tsickle
4987 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4988 */
4989var CssUtilsDeprecations = /** @class */ (function () {
4990 function CssUtilsDeprecations(ref) {
4991 /** @type {?} */
4992 var el = ((/** @type {?} */ (ref.nativeElement)));
4993 /** @type {?} */
4994 var attributes = Array.from(el.attributes)
4995 .map((/**
4996 * @param {?} a
4997 * @return {?}
4998 */
4999 function (a) { return a.name; }))
5000 .filter((/**
5001 * @param {?} n
5002 * @return {?}
5003 */
5004 function (n) { return DEPRECATED_ATTRIBUTES.includes(n); }));
5005 if (attributes.length > 0) {
5006 console.warn("[DEPRECATED][CSS] Ionic CSS attributes are deprecated.\nReplace:\n'<" + el.tagName.toLowerCase() + " " + attributes.map((/**
5007 * @param {?} n
5008 * @return {?}
5009 */
5010 function (n) { return "" + n; })).join(' ') + ">'\n\nWith:\n'<" + el.tagName.toLowerCase() + " class=\"" + attributes.map((/**
5011 * @param {?} n
5012 * @return {?}
5013 */
5014 function (n) { return "ion-" + n; })).join(' ') + "\">'\n ");
5015 }
5016 }
5017 CssUtilsDeprecations.decorators = [
5018 { type: Directive, args: [{
5019 selector: '[align-self-start], [align-self-end], [align-self-center], [align-self-stretch], [align-self-baseline], [align-self-auto], [wrap-reverse], [justify-content-start], [justify-content-center], [justify-content-end], [justify-content-around], [justify-content-between], [justify-content-evenly], [align-items-start], [align-items-center], [align-items-end], [align-items-stretch], [align-items-baseline], [float-left], [float-right], [float-start], [float-end], [float-sm-left], [float-sm-right], [float-sm-start], [float-sm-end], [float-md-left], [float-md-right], [float-md-start], [float-md-end], [float-lg-left], [float-lg-right], [float-lg-start], [float-lg-end], [float-xl-left], [float-xl-right], [float-xl-start], [float-xl-end], [text-center], [text-justify], [text-start], [text-end], [text-left], [text-right], [text-nowrap], [text-wrap], [text-sm-center], [text-sm-justify], [text-sm-start], [text-sm-end], [text-sm-left], [text-sm-right], [text-sm-nowrap], [text-sm-wrap], [text-md-center], [text-md-justify], [text-md-start], [text-md-end], [text-md-left], [text-md-right], [text-md-nowrap], [text-md-wrap], [text-lg-center], [text-lg-justify], [text-lg-start], [text-lg-end], [text-lg-left], [text-lg-right], [text-lg-nowrap], [text-lg-wrap], [text-xl-center], [text-xl-justify], [text-xl-start], [text-xl-end], [text-xl-left], [text-xl-right], [text-xl-nowrap], [text-xl-wrap], [text-uppercase], [text-lowercase], [text-capitalize], [text-sm-uppercase], [text-sm-lowercase], [text-sm-capitalize], [text-md-uppercase], [text-md-lowercase], [text-md-capitalize], [text-lg-uppercase], [text-lg-lowercase], [text-lg-capitalize], [text-xl-uppercase], [text-xl-lowercase], [text-xl-capitalize], [no-padding], [padding], [padding-top], [padding-bottom], [padding-start], [padding-end], [padding-vertical], [padding-horizontal], [no-margin], [margin], [margin-top], [margin-bottom], [margin-start], [margin-end], [margin-vertical], [margin-horizontal]',
5020 },] },
5021 ];
5022 /** @nocollapse */
5023 CssUtilsDeprecations.ctorParameters = function () { return [
5024 { type: ElementRef }
5025 ]; };
5026 return CssUtilsDeprecations;
5027}());
5028/** @type {?} */
5029var DEPRECATED_ATTRIBUTES = [
5030 'align-self-start',
5031 'align-self-end',
5032 'align-self-center',
5033 'align-self-stretch',
5034 'align-self-baseline',
5035 'align-self-auto',
5036 'wrap-reverse',
5037 'justify-content-start',
5038 'justify-content-center',
5039 'justify-content-end',
5040 'justify-content-around',
5041 'justify-content-between',
5042 'justify-content-evenly',
5043 'align-items-start',
5044 'align-items-center',
5045 'align-items-end',
5046 'align-items-stretch',
5047 'align-items-baseline',
5048 'float-left',
5049 'float-right',
5050 'float-start',
5051 'float-end',
5052 'float-sm-left',
5053 'float-sm-right',
5054 'float-sm-start',
5055 'float-sm-end',
5056 'float-md-left',
5057 'float-md-right',
5058 'float-md-start',
5059 'float-md-end',
5060 'float-lg-left',
5061 'float-lg-right',
5062 'float-lg-start',
5063 'float-lg-end',
5064 'float-xl-left',
5065 'float-xl-right',
5066 'float-xl-start',
5067 'float-xl-end',
5068 'text-center',
5069 'text-justify',
5070 'text-start',
5071 'text-end',
5072 'text-left',
5073 'text-right',
5074 'text-nowrap',
5075 'text-wrap',
5076 'text-sm-center',
5077 'text-sm-justify',
5078 'text-sm-start',
5079 'text-sm-end',
5080 'text-sm-left',
5081 'text-sm-right',
5082 'text-sm-nowrap',
5083 'text-sm-wrap',
5084 'text-md-center',
5085 'text-md-justify',
5086 'text-md-start',
5087 'text-md-end',
5088 'text-md-left',
5089 'text-md-right',
5090 'text-md-nowrap',
5091 'text-md-wrap',
5092 'text-lg-center',
5093 'text-lg-justify',
5094 'text-lg-start',
5095 'text-lg-end',
5096 'text-lg-left',
5097 'text-lg-right',
5098 'text-lg-nowrap',
5099 'text-lg-wrap',
5100 'text-xl-center',
5101 'text-xl-justify',
5102 'text-xl-start',
5103 'text-xl-end',
5104 'text-xl-left',
5105 'text-xl-right',
5106 'text-xl-nowrap',
5107 'text-xl-wrap',
5108 'text-uppercase',
5109 'text-lowercase',
5110 'text-capitalize',
5111 'text-sm-uppercase',
5112 'text-sm-lowercase',
5113 'text-sm-capitalize',
5114 'text-md-uppercase',
5115 'text-md-lowercase',
5116 'text-md-capitalize',
5117 'text-lg-uppercase',
5118 'text-lg-lowercase',
5119 'text-lg-capitalize',
5120 'text-xl-uppercase',
5121 'text-xl-lowercase',
5122 'text-xl-capitalize',
5123 'no-padding',
5124 'padding',
5125 'padding-top',
5126 'padding-bottom',
5127 'padding-start',
5128 'padding-end',
5129 'padding-vertical',
5130 'padding-horizontal',
5131 'no-margin',
5132 'margin',
5133 'margin-top',
5134 'margin-bottom',
5135 'margin-start',
5136 'margin-end',
5137 'margin-vertical',
5138 'margin-horizontal'
5139];
5140
5141/**
5142 * @fileoverview added by tsickle
5143 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5144 */
5145/**
5146 * @template Opts, Overlay
5147 */
5148var /**
5149 * @template Opts, Overlay
5150 */
5151OverlayBaseController = /** @class */ (function () {
5152 function OverlayBaseController(ctrl) {
5153 this.ctrl = ctrl;
5154 }
5155 /**
5156 * Creates a new overlay
5157 */
5158 /**
5159 * Creates a new overlay
5160 * @param {?=} opts
5161 * @return {?}
5162 */
5163 OverlayBaseController.prototype.create = /**
5164 * Creates a new overlay
5165 * @param {?=} opts
5166 * @return {?}
5167 */
5168 function (opts) {
5169 // TODO: next major release opts is not optional
5170 return this.ctrl.create((/** @type {?} */ ((opts || {}))));
5171 };
5172 /**
5173 * When `id` is not provided, it dismisses the top overlay.
5174 */
5175 /**
5176 * When `id` is not provided, it dismisses the top overlay.
5177 * @param {?=} data
5178 * @param {?=} role
5179 * @param {?=} id
5180 * @return {?}
5181 */
5182 OverlayBaseController.prototype.dismiss = /**
5183 * When `id` is not provided, it dismisses the top overlay.
5184 * @param {?=} data
5185 * @param {?=} role
5186 * @param {?=} id
5187 * @return {?}
5188 */
5189 function (data, role, id) {
5190 return this.ctrl.dismiss(data, role, id);
5191 };
5192 /**
5193 * Returns the top overlay.
5194 */
5195 /**
5196 * Returns the top overlay.
5197 * @return {?}
5198 */
5199 OverlayBaseController.prototype.getTop = /**
5200 * Returns the top overlay.
5201 * @return {?}
5202 */
5203 function () {
5204 return this.ctrl.getTop();
5205 };
5206 return OverlayBaseController;
5207}());
5208
5209/**
5210 * @fileoverview added by tsickle
5211 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5212 */
5213var ActionSheetController = /** @class */ (function (_super) {
5214 __extends(ActionSheetController, _super);
5215 function ActionSheetController() {
5216 return _super.call(this, actionSheetController) || this;
5217 }
5218 ActionSheetController.decorators = [
5219 { type: Injectable, args: [{
5220 providedIn: 'root',
5221 },] },
5222 ];
5223 /** @nocollapse */
5224 ActionSheetController.ctorParameters = function () { return []; };
5225 /** @nocollapse */ ActionSheetController.ngInjectableDef = defineInjectable({ factory: function ActionSheetController_Factory() { return new ActionSheetController(); }, token: ActionSheetController, providedIn: "root" });
5226 return ActionSheetController;
5227}(OverlayBaseController));
5228
5229/**
5230 * @fileoverview added by tsickle
5231 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5232 */
5233var AlertController = /** @class */ (function (_super) {
5234 __extends(AlertController, _super);
5235 function AlertController() {
5236 return _super.call(this, alertController) || this;
5237 }
5238 AlertController.decorators = [
5239 { type: Injectable, args: [{
5240 providedIn: 'root',
5241 },] },
5242 ];
5243 /** @nocollapse */
5244 AlertController.ctorParameters = function () { return []; };
5245 /** @nocollapse */ AlertController.ngInjectableDef = defineInjectable({ factory: function AlertController_Factory() { return new AlertController(); }, token: AlertController, providedIn: "root" });
5246 return AlertController;
5247}(OverlayBaseController));
5248
5249/**
5250 * @fileoverview added by tsickle
5251 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5252 */
5253var Events = /** @class */ (function () {
5254 function Events() {
5255 this.c = new Map();
5256 console.warn("[DEPRECATION][Events]: The Events provider is deprecated and it will be removed in the next major release.\n - Use \"Observables\" for a similar pub/sub architecture: https://angular.io/guide/observables\n - Use \"Redux\" for advanced state management: https://ngrx.io");
5257 }
5258 /**
5259 * Subscribe to an event topic. Events that get posted to that topic will trigger the provided handler.
5260 *
5261 * @param topic the topic to subscribe to
5262 * @param handler the event handler
5263 */
5264 /**
5265 * Subscribe to an event topic. Events that get posted to that topic will trigger the provided handler.
5266 *
5267 * @param {?} topic the topic to subscribe to
5268 * @param {...?} handlers
5269 * @return {?}
5270 */
5271 Events.prototype.subscribe = /**
5272 * Subscribe to an event topic. Events that get posted to that topic will trigger the provided handler.
5273 *
5274 * @param {?} topic the topic to subscribe to
5275 * @param {...?} handlers
5276 * @return {?}
5277 */
5278 function (topic) {
5279 var handlers = [];
5280 for (var _i = 1; _i < arguments.length; _i++) {
5281 handlers[_i - 1] = arguments[_i];
5282 }
5283 /** @type {?} */
5284 var topics = this.c.get(topic);
5285 if (!topics) {
5286 this.c.set(topic, topics = []);
5287 }
5288 topics.push.apply(topics, handlers);
5289 };
5290 /**
5291 * Unsubscribe from the given topic. Your handler will no longer receive events published to this topic.
5292 *
5293 * @param topic the topic to unsubscribe from
5294 * @param handler the event handler
5295 *
5296 * @return true if a handler was removed
5297 */
5298 /**
5299 * Unsubscribe from the given topic. Your handler will no longer receive events published to this topic.
5300 *
5301 * @param {?} topic the topic to unsubscribe from
5302 * @param {?=} handler the event handler
5303 *
5304 * @return {?} true if a handler was removed
5305 */
5306 Events.prototype.unsubscribe = /**
5307 * Unsubscribe from the given topic. Your handler will no longer receive events published to this topic.
5308 *
5309 * @param {?} topic the topic to unsubscribe from
5310 * @param {?=} handler the event handler
5311 *
5312 * @return {?} true if a handler was removed
5313 */
5314 function (topic, handler) {
5315 if (!handler) {
5316 return this.c.delete(topic);
5317 }
5318 /** @type {?} */
5319 var topics = this.c.get(topic);
5320 if (!topics) {
5321 return false;
5322 }
5323 // We need to find and remove a specific handler
5324 /** @type {?} */
5325 var index = topics.indexOf(handler);
5326 if (index < 0) {
5327 // Wasn't found, wasn't removed
5328 return false;
5329 }
5330 topics.splice(index, 1);
5331 if (topics.length === 0) {
5332 this.c.delete(topic);
5333 }
5334 return true;
5335 };
5336 /**
5337 * Publish an event to the given topic.
5338 *
5339 * @param topic the topic to publish to
5340 * @param eventData the data to send as the event
5341 */
5342 /**
5343 * Publish an event to the given topic.
5344 *
5345 * @param {?} topic the topic to publish to
5346 * @param {...?} args
5347 * @return {?}
5348 */
5349 Events.prototype.publish = /**
5350 * Publish an event to the given topic.
5351 *
5352 * @param {?} topic the topic to publish to
5353 * @param {...?} args
5354 * @return {?}
5355 */
5356 function (topic) {
5357 var args = [];
5358 for (var _i = 1; _i < arguments.length; _i++) {
5359 args[_i - 1] = arguments[_i];
5360 }
5361 /** @type {?} */
5362 var topics = this.c.get(topic);
5363 if (!topics) {
5364 return null;
5365 }
5366 return topics.map((/**
5367 * @param {?} handler
5368 * @return {?}
5369 */
5370 function (handler) {
5371 try {
5372 return handler.apply(void 0, args);
5373 }
5374 catch (e) {
5375 console.error(e);
5376 return null;
5377 }
5378 }));
5379 };
5380 Events.decorators = [
5381 { type: Injectable, args: [{
5382 providedIn: 'root',
5383 },] },
5384 ];
5385 /** @nocollapse */
5386 Events.ctorParameters = function () { return []; };
5387 /** @nocollapse */ Events.ngInjectableDef = defineInjectable({ factory: function Events_Factory() { return new Events(); }, token: Events, providedIn: "root" });
5388 return Events;
5389}());
5390
5391/**
5392 * @fileoverview added by tsickle
5393 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5394 */
5395var LoadingController = /** @class */ (function (_super) {
5396 __extends(LoadingController, _super);
5397 function LoadingController() {
5398 return _super.call(this, loadingController) || this;
5399 }
5400 LoadingController.decorators = [
5401 { type: Injectable, args: [{
5402 providedIn: 'root',
5403 },] },
5404 ];
5405 /** @nocollapse */
5406 LoadingController.ctorParameters = function () { return []; };
5407 /** @nocollapse */ LoadingController.ngInjectableDef = defineInjectable({ factory: function LoadingController_Factory() { return new LoadingController(); }, token: LoadingController, providedIn: "root" });
5408 return LoadingController;
5409}(OverlayBaseController));
5410
5411/**
5412 * @fileoverview added by tsickle
5413 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5414 */
5415var MenuController = /** @class */ (function () {
5416 function MenuController() {
5417 }
5418 /**
5419 * Programmatically open the Menu.
5420 * @param [menuId] Optionally get the menu by its id, or side.
5421 * @return returns a promise when the menu is fully opened
5422 */
5423 /**
5424 * Programmatically open the Menu.
5425 * @param {?=} menuId
5426 * @return {?} returns a promise when the menu is fully opened
5427 */
5428 MenuController.prototype.open = /**
5429 * Programmatically open the Menu.
5430 * @param {?=} menuId
5431 * @return {?} returns a promise when the menu is fully opened
5432 */
5433 function (menuId) {
5434 return menuController.open(menuId);
5435 };
5436 /**
5437 * Programmatically close the Menu. If no `menuId` is given as the first
5438 * argument then it'll close any menu which is open. If a `menuId`
5439 * is given then it'll close that exact menu.
5440 * @param [menuId] Optionally get the menu by its id, or side.
5441 * @return returns a promise when the menu is fully closed
5442 */
5443 /**
5444 * Programmatically close the Menu. If no `menuId` is given as the first
5445 * argument then it'll close any menu which is open. If a `menuId`
5446 * is given then it'll close that exact menu.
5447 * @param {?=} menuId
5448 * @return {?} returns a promise when the menu is fully closed
5449 */
5450 MenuController.prototype.close = /**
5451 * Programmatically close the Menu. If no `menuId` is given as the first
5452 * argument then it'll close any menu which is open. If a `menuId`
5453 * is given then it'll close that exact menu.
5454 * @param {?=} menuId
5455 * @return {?} returns a promise when the menu is fully closed
5456 */
5457 function (menuId) {
5458 return menuController.close(menuId);
5459 };
5460 /**
5461 * Toggle the menu. If it's closed, it will open, and if opened, it
5462 * will close.
5463 * @param [menuId] Optionally get the menu by its id, or side.
5464 * @return returns a promise when the menu has been toggled
5465 */
5466 /**
5467 * Toggle the menu. If it's closed, it will open, and if opened, it
5468 * will close.
5469 * @param {?=} menuId
5470 * @return {?} returns a promise when the menu has been toggled
5471 */
5472 MenuController.prototype.toggle = /**
5473 * Toggle the menu. If it's closed, it will open, and if opened, it
5474 * will close.
5475 * @param {?=} menuId
5476 * @return {?} returns a promise when the menu has been toggled
5477 */
5478 function (menuId) {
5479 return menuController.toggle(menuId);
5480 };
5481 /**
5482 * Used to enable or disable a menu. For example, there could be multiple
5483 * left menus, but only one of them should be able to be opened at the same
5484 * time. If there are multiple menus on the same side, then enabling one menu
5485 * will also automatically disable all the others that are on the same side.
5486 * @param [menuId] Optionally get the menu by its id, or side.
5487 * @return Returns the instance of the menu, which is useful for chaining.
5488 */
5489 /**
5490 * Used to enable or disable a menu. For example, there could be multiple
5491 * left menus, but only one of them should be able to be opened at the same
5492 * time. If there are multiple menus on the same side, then enabling one menu
5493 * will also automatically disable all the others that are on the same side.
5494 * @param {?} shouldEnable
5495 * @param {?=} menuId
5496 * @return {?} Returns the instance of the menu, which is useful for chaining.
5497 */
5498 MenuController.prototype.enable = /**
5499 * Used to enable or disable a menu. For example, there could be multiple
5500 * left menus, but only one of them should be able to be opened at the same
5501 * time. If there are multiple menus on the same side, then enabling one menu
5502 * will also automatically disable all the others that are on the same side.
5503 * @param {?} shouldEnable
5504 * @param {?=} menuId
5505 * @return {?} Returns the instance of the menu, which is useful for chaining.
5506 */
5507 function (shouldEnable, menuId) {
5508 return menuController.enable(shouldEnable, menuId);
5509 };
5510 /**
5511 * Used to enable or disable the ability to swipe open the menu.
5512 * @param shouldEnable True if it should be swipe-able, false if not.
5513 * @param [menuId] Optionally get the menu by its id, or side.
5514 * @return Returns the instance of the menu, which is useful for chaining.
5515 * @deprecated Use swipeGesture() instead.
5516 */
5517 /**
5518 * Used to enable or disable the ability to swipe open the menu.
5519 * @deprecated Use swipeGesture() instead.
5520 * @param {?} shouldEnable True if it should be swipe-able, false if not.
5521 * @param {?=} menuId
5522 * @return {?} Returns the instance of the menu, which is useful for chaining.
5523 */
5524 MenuController.prototype.swipeEnable = /**
5525 * Used to enable or disable the ability to swipe open the menu.
5526 * @deprecated Use swipeGesture() instead.
5527 * @param {?} shouldEnable True if it should be swipe-able, false if not.
5528 * @param {?=} menuId
5529 * @return {?} Returns the instance of the menu, which is useful for chaining.
5530 */
5531 function (shouldEnable, menuId) {
5532 console.warn('[DEPRECATED][ion-menu-controller] swipeEnable() is deprecated. Use MenuController.swipeGesture() instead');
5533 return this.swipeGesture(shouldEnable, menuId);
5534 };
5535 /**
5536 * Used to enable or disable the ability to swipe open the menu.
5537 * @param shouldEnable True if it should be swipe-able, false if not.
5538 * @param [menuId] Optionally get the menu by its id, or side.
5539 * @return Returns the instance of the menu, which is useful for chaining.
5540 */
5541 /**
5542 * Used to enable or disable the ability to swipe open the menu.
5543 * @param {?} shouldEnable True if it should be swipe-able, false if not.
5544 * @param {?=} menuId
5545 * @return {?} Returns the instance of the menu, which is useful for chaining.
5546 */
5547 MenuController.prototype.swipeGesture = /**
5548 * Used to enable or disable the ability to swipe open the menu.
5549 * @param {?} shouldEnable True if it should be swipe-able, false if not.
5550 * @param {?=} menuId
5551 * @return {?} Returns the instance of the menu, which is useful for chaining.
5552 */
5553 function (shouldEnable, menuId) {
5554 return menuController.swipeGesture(shouldEnable, menuId);
5555 };
5556 /**
5557 * @param [menuId] Optionally get the menu by its id, or side.
5558 * @return Returns true if the specified menu is currently open, otherwise false.
5559 * If the menuId is not specified, it returns true if ANY menu is currenly open.
5560 */
5561 /**
5562 * @param {?=} menuId
5563 * @return {?} Returns true if the specified menu is currently open, otherwise false.
5564 * If the menuId is not specified, it returns true if ANY menu is currenly open.
5565 */
5566 MenuController.prototype.isOpen = /**
5567 * @param {?=} menuId
5568 * @return {?} Returns true if the specified menu is currently open, otherwise false.
5569 * If the menuId is not specified, it returns true if ANY menu is currenly open.
5570 */
5571 function (menuId) {
5572 return menuController.isOpen(menuId);
5573 };
5574 /**
5575 * @param [menuId] Optionally get the menu by its id, or side.
5576 * @return Returns true if the menu is currently enabled, otherwise false.
5577 */
5578 /**
5579 * @param {?=} menuId
5580 * @return {?} Returns true if the menu is currently enabled, otherwise false.
5581 */
5582 MenuController.prototype.isEnabled = /**
5583 * @param {?=} menuId
5584 * @return {?} Returns true if the menu is currently enabled, otherwise false.
5585 */
5586 function (menuId) {
5587 return menuController.isEnabled(menuId);
5588 };
5589 /**
5590 * Used to get a menu instance. If a `menuId` is not provided then it'll
5591 * return the first menu found. If a `menuId` is `left` or `right`, then
5592 * it'll return the enabled menu on that side. Otherwise, if a `menuId` is
5593 * provided, then it'll try to find the menu using the menu's `id`
5594 * property. If a menu is not found then it'll return `null`.
5595 * @param [menuId] Optionally get the menu by its id, or side.
5596 * @return Returns the instance of the menu if found, otherwise `null`.
5597 */
5598 /**
5599 * Used to get a menu instance. If a `menuId` is not provided then it'll
5600 * return the first menu found. If a `menuId` is `left` or `right`, then
5601 * it'll return the enabled menu on that side. Otherwise, if a `menuId` is
5602 * provided, then it'll try to find the menu using the menu's `id`
5603 * property. If a menu is not found then it'll return `null`.
5604 * @param {?=} menuId
5605 * @return {?} Returns the instance of the menu if found, otherwise `null`.
5606 */
5607 MenuController.prototype.get = /**
5608 * Used to get a menu instance. If a `menuId` is not provided then it'll
5609 * return the first menu found. If a `menuId` is `left` or `right`, then
5610 * it'll return the enabled menu on that side. Otherwise, if a `menuId` is
5611 * provided, then it'll try to find the menu using the menu's `id`
5612 * property. If a menu is not found then it'll return `null`.
5613 * @param {?=} menuId
5614 * @return {?} Returns the instance of the menu if found, otherwise `null`.
5615 */
5616 function (menuId) {
5617 return menuController.get(menuId);
5618 };
5619 /**
5620 * @return Returns the instance of the menu already opened, otherwise `null`.
5621 */
5622 /**
5623 * @return {?} Returns the instance of the menu already opened, otherwise `null`.
5624 */
5625 MenuController.prototype.getOpen = /**
5626 * @return {?} Returns the instance of the menu already opened, otherwise `null`.
5627 */
5628 function () {
5629 return menuController.getOpen();
5630 };
5631 /**
5632 * @return Returns an array of all menu instances.
5633 */
5634 /**
5635 * @return {?} Returns an array of all menu instances.
5636 */
5637 MenuController.prototype.getMenus = /**
5638 * @return {?} Returns an array of all menu instances.
5639 */
5640 function () {
5641 return menuController.getMenus();
5642 };
5643 MenuController.decorators = [
5644 { type: Injectable, args: [{
5645 providedIn: 'root',
5646 },] },
5647 ];
5648 /** @nocollapse */ MenuController.ngInjectableDef = defineInjectable({ factory: function MenuController_Factory() { return new MenuController(); }, token: MenuController, providedIn: "root" });
5649 return MenuController;
5650}());
5651
5652/**
5653 * @fileoverview added by tsickle
5654 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5655 */
5656var PickerController = /** @class */ (function (_super) {
5657 __extends(PickerController, _super);
5658 function PickerController() {
5659 return _super.call(this, pickerController) || this;
5660 }
5661 PickerController.decorators = [
5662 { type: Injectable, args: [{
5663 providedIn: 'root',
5664 },] },
5665 ];
5666 /** @nocollapse */
5667 PickerController.ctorParameters = function () { return []; };
5668 /** @nocollapse */ PickerController.ngInjectableDef = defineInjectable({ factory: function PickerController_Factory() { return new PickerController(); }, token: PickerController, providedIn: "root" });
5669 return PickerController;
5670}(OverlayBaseController));
5671
5672/**
5673 * @fileoverview added by tsickle
5674 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5675 */
5676var ModalController = /** @class */ (function (_super) {
5677 __extends(ModalController, _super);
5678 function ModalController(angularDelegate, resolver, injector) {
5679 var _this = _super.call(this, modalController) || this;
5680 _this.angularDelegate = angularDelegate;
5681 _this.resolver = resolver;
5682 _this.injector = injector;
5683 return _this;
5684 }
5685 /**
5686 * @param {?} opts
5687 * @return {?}
5688 */
5689 ModalController.prototype.create = /**
5690 * @param {?} opts
5691 * @return {?}
5692 */
5693 function (opts) {
5694 return _super.prototype.create.call(this, __assign({}, opts, { delegate: this.angularDelegate.create(this.resolver, this.injector) }));
5695 };
5696 ModalController.decorators = [
5697 { type: Injectable },
5698 ];
5699 /** @nocollapse */
5700 ModalController.ctorParameters = function () { return [
5701 { type: AngularDelegate },
5702 { type: ComponentFactoryResolver },
5703 { type: Injector }
5704 ]; };
5705 return ModalController;
5706}(OverlayBaseController));
5707
5708/**
5709 * @fileoverview added by tsickle
5710 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5711 */
5712var PopoverController = /** @class */ (function (_super) {
5713 __extends(PopoverController, _super);
5714 function PopoverController(angularDelegate, resolver, injector) {
5715 var _this = _super.call(this, popoverController) || this;
5716 _this.angularDelegate = angularDelegate;
5717 _this.resolver = resolver;
5718 _this.injector = injector;
5719 return _this;
5720 }
5721 /**
5722 * @param {?} opts
5723 * @return {?}
5724 */
5725 PopoverController.prototype.create = /**
5726 * @param {?} opts
5727 * @return {?}
5728 */
5729 function (opts) {
5730 return _super.prototype.create.call(this, __assign({}, opts, { delegate: this.angularDelegate.create(this.resolver, this.injector) }));
5731 };
5732 PopoverController.decorators = [
5733 { type: Injectable },
5734 ];
5735 /** @nocollapse */
5736 PopoverController.ctorParameters = function () { return [
5737 { type: AngularDelegate },
5738 { type: ComponentFactoryResolver },
5739 { type: Injector }
5740 ]; };
5741 return PopoverController;
5742}(OverlayBaseController));
5743
5744/**
5745 * @fileoverview added by tsickle
5746 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5747 */
5748var ToastController = /** @class */ (function (_super) {
5749 __extends(ToastController, _super);
5750 function ToastController() {
5751 return _super.call(this, toastController) || this;
5752 }
5753 ToastController.decorators = [
5754 { type: Injectable, args: [{
5755 providedIn: 'root',
5756 },] },
5757 ];
5758 /** @nocollapse */
5759 ToastController.ctorParameters = function () { return []; };
5760 /** @nocollapse */ ToastController.ngInjectableDef = defineInjectable({ factory: function ToastController_Factory() { return new ToastController(); }, token: ToastController, providedIn: "root" });
5761 return ToastController;
5762}(OverlayBaseController));
5763
5764/**
5765 * @fileoverview added by tsickle
5766 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5767 */
5768var DomController = /** @class */ (function () {
5769 function DomController() {
5770 }
5771 /**
5772 * Schedules a task to run during the READ phase of the next frame.
5773 * This task should only read the DOM, but never modify it.
5774 */
5775 /**
5776 * Schedules a task to run during the READ phase of the next frame.
5777 * This task should only read the DOM, but never modify it.
5778 * @param {?} cb
5779 * @return {?}
5780 */
5781 DomController.prototype.read = /**
5782 * Schedules a task to run during the READ phase of the next frame.
5783 * This task should only read the DOM, but never modify it.
5784 * @param {?} cb
5785 * @return {?}
5786 */
5787 function (cb) {
5788 getQueue().read(cb);
5789 };
5790 /**
5791 * Schedules a task to run during the WRITE phase of the next frame.
5792 * This task should write the DOM, but never READ it.
5793 */
5794 /**
5795 * Schedules a task to run during the WRITE phase of the next frame.
5796 * This task should write the DOM, but never READ it.
5797 * @param {?} cb
5798 * @return {?}
5799 */
5800 DomController.prototype.write = /**
5801 * Schedules a task to run during the WRITE phase of the next frame.
5802 * This task should write the DOM, but never READ it.
5803 * @param {?} cb
5804 * @return {?}
5805 */
5806 function (cb) {
5807 getQueue().write(cb);
5808 };
5809 DomController.decorators = [
5810 { type: Injectable, args: [{
5811 providedIn: 'root',
5812 },] },
5813 ];
5814 /** @nocollapse */ DomController.ngInjectableDef = defineInjectable({ factory: function DomController_Factory() { return new DomController(); }, token: DomController, providedIn: "root" });
5815 return DomController;
5816}());
5817/** @type {?} */
5818var getQueue = (/**
5819 * @return {?}
5820 */
5821function () {
5822 /** @type {?} */
5823 var win = typeof ((/** @type {?} */ (window))) !== 'undefined' ? window : (/** @type {?} */ (null));
5824 if (win != null) {
5825 /** @type {?} */
5826 var Ionic = win.Ionic;
5827 if (Ionic && Ionic.queue) {
5828 return Ionic.queue;
5829 }
5830 return {
5831 read: (/**
5832 * @param {?} cb
5833 * @return {?}
5834 */
5835 function (cb) { return win.requestAnimationFrame(cb); }),
5836 write: (/**
5837 * @param {?} cb
5838 * @return {?}
5839 */
5840 function (cb) { return win.requestAnimationFrame(cb); })
5841 };
5842 }
5843 return {
5844 read: (/**
5845 * @param {?} cb
5846 * @return {?}
5847 */
5848 function (cb) { return cb(); }),
5849 write: (/**
5850 * @param {?} cb
5851 * @return {?}
5852 */
5853 function (cb) { return cb(); })
5854 };
5855});
5856
5857/**
5858 * @fileoverview added by tsickle
5859 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5860 */
5861var IonicRouteStrategy = /** @class */ (function () {
5862 function IonicRouteStrategy() {
5863 }
5864 /**
5865 * @param {?} _route
5866 * @return {?}
5867 */
5868 IonicRouteStrategy.prototype.shouldDetach = /**
5869 * @param {?} _route
5870 * @return {?}
5871 */
5872 function (_route) {
5873 return false;
5874 };
5875 /**
5876 * @param {?} _route
5877 * @return {?}
5878 */
5879 IonicRouteStrategy.prototype.shouldAttach = /**
5880 * @param {?} _route
5881 * @return {?}
5882 */
5883 function (_route) {
5884 return false;
5885 };
5886 /**
5887 * @param {?} _route
5888 * @param {?} _detachedTree
5889 * @return {?}
5890 */
5891 IonicRouteStrategy.prototype.store = /**
5892 * @param {?} _route
5893 * @param {?} _detachedTree
5894 * @return {?}
5895 */
5896 function (_route, _detachedTree) {
5897 return;
5898 };
5899 /**
5900 * @param {?} _route
5901 * @return {?}
5902 */
5903 IonicRouteStrategy.prototype.retrieve = /**
5904 * @param {?} _route
5905 * @return {?}
5906 */
5907 function (_route) {
5908 return null;
5909 };
5910 /**
5911 * @param {?} future
5912 * @param {?} curr
5913 * @return {?}
5914 */
5915 IonicRouteStrategy.prototype.shouldReuseRoute = /**
5916 * @param {?} future
5917 * @param {?} curr
5918 * @return {?}
5919 */
5920 function (future, curr) {
5921 if (future.routeConfig !== curr.routeConfig) {
5922 return false;
5923 }
5924 // checking router params
5925 /** @type {?} */
5926 var futureParams = future.params;
5927 /** @type {?} */
5928 var currentParams = curr.params;
5929 /** @type {?} */
5930 var keysA = Object.keys(futureParams);
5931 /** @type {?} */
5932 var keysB = Object.keys(currentParams);
5933 if (keysA.length !== keysB.length) {
5934 return false;
5935 }
5936 // Test for A's keys different from B.
5937 for (var _i = 0, keysA_1 = keysA; _i < keysA_1.length; _i++) {
5938 var key = keysA_1[_i];
5939 if (currentParams[key] !== futureParams[key]) {
5940 return false;
5941 }
5942 }
5943 return true;
5944 };
5945 return IonicRouteStrategy;
5946}());
5947
5948/**
5949 * @fileoverview added by tsickle
5950 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5951 */
5952/** @type {?} */
5953var didInitialize = false;
5954/** @type {?} */
5955var appInitialize = (/**
5956 * @param {?} config
5957 * @param {?} doc
5958 * @param {?} zone
5959 * @return {?}
5960 */
5961function (config, doc, zone) {
5962 return (/**
5963 * @return {?}
5964 */
5965 function () {
5966 /** @type {?} */
5967 var win = (/** @type {?} */ (doc.defaultView));
5968 if (win) {
5969 if (didInitialize) {
5970 console.warn('Ionic Angular was already initialized. Make sure IonicModule.forRoot() is just called once.');
5971 }
5972 didInitialize = true;
5973 /** @type {?} */
5974 var Ionic = win.Ionic = win.Ionic || {};
5975 Ionic.config = __assign({}, config, { _zoneGate: (/**
5976 * @param {?} h
5977 * @return {?}
5978 */
5979 function (h) { return zone.run(h); }) });
5980 /** @type {?} */
5981 var aelFn_1 = '__zone_symbol__addEventListener' in ((/** @type {?} */ (doc.body)))
5982 ? '__zone_symbol__addEventListener'
5983 : 'addEventListener';
5984 return applyPolyfills().then((/**
5985 * @return {?}
5986 */
5987 function () {
5988 return defineCustomElements(win, {
5989 exclude: ['ion-tabs', 'ion-tab'],
5990 syncQueue: true,
5991 raf: raf,
5992 jmp: (/**
5993 * @param {?} h
5994 * @return {?}
5995 */
5996 function (h) { return zone.runOutsideAngular(h); }),
5997 ael: /**
5998 * @param {?} elm
5999 * @param {?} eventName
6000 * @param {?} cb
6001 * @param {?} opts
6002 * @return {?}
6003 */
6004 function (elm, eventName, cb, opts) {
6005 ((/** @type {?} */ (elm)))[aelFn_1](eventName, cb, opts);
6006 },
6007 rel: /**
6008 * @param {?} elm
6009 * @param {?} eventName
6010 * @param {?} cb
6011 * @param {?} opts
6012 * @return {?}
6013 */
6014 function (elm, eventName, cb, opts) {
6015 elm.removeEventListener(eventName, cb, opts);
6016 }
6017 });
6018 }));
6019 }
6020 });
6021});
6022
6023/**
6024 * @fileoverview added by tsickle
6025 * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
6026 */
6027/** @type {?} */
6028var DECLARATIONS = [
6029 // proxies
6030 IonApp,
6031 IonAvatar,
6032 IonBackButton,
6033 IonBackdrop,
6034 IonBadge,
6035 IonButton,
6036 IonButtons,
6037 IonCard,
6038 IonCardContent,
6039 IonCardHeader,
6040 IonCardSubtitle,
6041 IonCardTitle,
6042 IonCheckbox,
6043 IonChip,
6044 IonCol,
6045 IonContent,
6046 IonDatetime,
6047 IonFab,
6048 IonFabButton,
6049 IonFabList,
6050 IonFooter,
6051 IonGrid,
6052 IonHeader,
6053 IonIcon,
6054 IonImg,
6055 IonInfiniteScroll,
6056 IonInfiniteScrollContent,
6057 IonInput,
6058 IonItem,
6059 IonItemDivider,
6060 IonItemGroup,
6061 IonItemOption,
6062 IonItemOptions,
6063 IonItemSliding,
6064 IonLabel,
6065 IonList,
6066 IonListHeader,
6067 IonMenu,
6068 IonMenuButton,
6069 IonMenuToggle,
6070 IonNav,
6071 IonNavLink,
6072 IonNavPop,
6073 IonNavPush,
6074 IonNavSetRoot,
6075 IonNote,
6076 IonProgressBar,
6077 IonRadio,
6078 IonRadioGroup,
6079 IonRange,
6080 IonRefresher,
6081 IonRefresherContent,
6082 IonReorder,
6083 IonReorderGroup,
6084 IonRippleEffect,
6085 IonRow,
6086 IonSearchbar,
6087 IonSegment,
6088 IonSegmentButton,
6089 IonSelect,
6090 IonSelectOption,
6091 IonSkeletonText,
6092 IonSlide,
6093 IonSlides,
6094 IonSpinner,
6095 IonSplitPane,
6096 IonTabBar,
6097 IonTabButton,
6098 IonText,
6099 IonTextarea,
6100 IonThumbnail,
6101 IonToggle,
6102 IonToolbar,
6103 IonTitle,
6104 IonTabs,
6105 // ngModel accessors
6106 BooleanValueAccessor,
6107 NumericValueAccessor,
6108 RadioValueAccessor,
6109 SelectValueAccessor,
6110 TextValueAccessor,
6111 // navigation
6112 IonRouterOutlet,
6113 IonBackButtonDelegate,
6114 NavDelegate,
6115 RouterLinkDelegate,
6116 // virtual scroll
6117 VirtualFooter,
6118 VirtualHeader,
6119 VirtualItem,
6120 IonVirtualScroll,
6121 // Deprecations
6122 CssUtilsDeprecations
6123];
6124var IonicModule = /** @class */ (function () {
6125 function IonicModule() {
6126 }
6127 /**
6128 * @param {?=} config
6129 * @return {?}
6130 */
6131 IonicModule.forRoot = /**
6132 * @param {?=} config
6133 * @return {?}
6134 */
6135 function (config) {
6136 return {
6137 ngModule: IonicModule,
6138 providers: [
6139 {
6140 provide: ConfigToken,
6141 useValue: config
6142 },
6143 {
6144 provide: APP_INITIALIZER,
6145 useFactory: appInitialize,
6146 multi: true,
6147 deps: [
6148 ConfigToken,
6149 DOCUMENT,
6150 NgZone
6151 ]
6152 }
6153 ]
6154 };
6155 };
6156 IonicModule.decorators = [
6157 { type: NgModule, args: [{
6158 declarations: DECLARATIONS,
6159 exports: DECLARATIONS,
6160 providers: [AngularDelegate, ModalController, PopoverController],
6161 imports: [CommonModule]
6162 },] },
6163 ];
6164 return IonicModule;
6165}());
6166
6167export { ActionSheetController, AlertController, AngularDelegate, BooleanValueAccessor, Config, CssUtilsDeprecations, DomController, Events, IonApp, IonAvatar, IonBackButton, IonBackButtonDelegate, IonBackdrop, IonBadge, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle, IonCardTitle, IonCheckbox, IonChip, IonCol, IonContent, IonDatetime, IonFab, IonFabButton, IonFabList, IonFooter, IonGrid, IonHeader, IonIcon, IonImg, IonInfiniteScroll, IonInfiniteScrollContent, IonInput, IonItem, IonItemDivider, IonItemGroup, IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonList, IonListHeader, IonMenu, IonMenuButton, IonMenuToggle, IonNav, IonNavLink, IonNavPop, IonNavPush, IonNavSetRoot, IonNote, IonProgressBar, IonRadio, IonRadioGroup, IonRange, IonRefresher, IonRefresherContent, IonReorder, IonReorderGroup, IonRippleEffect, IonRouterOutlet, IonRow, IonSearchbar, IonSegment, IonSegmentButton, IonSelect, IonSelectOption, IonSkeletonText, IonSlide, IonSlides, IonSpinner, IonSplitPane, IonTabBar, IonTabButton, IonTabs, IonText, IonTextarea, IonThumbnail, IonTitle, IonToggle, IonToolbar, IonVirtualScroll, IonicModule, IonicRouteStrategy, LoadingController, MenuController, ModalController, NavController, NavDelegate, NavParams, NumericValueAccessor, PickerController, Platform, PopoverController, RadioValueAccessor, RouterLinkDelegate, SelectValueAccessor, TextValueAccessor, ToastController, VirtualFooter, VirtualHeader, VirtualItem, ConfigToken as ɵa, ValueAccessor as ɵb, OverlayBaseController as ɵd, appInitialize as ɵe };