UNPKG

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