UNPKG

182 kBJavaScriptView Raw
1(function (global, factory) {
2 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/forms'), require('@angular/common'), require('@angular/router'), require('@ionic/core'), require('rxjs'), require('rxjs/operators'), require('@ionic/core/loader')) :
3 typeof define === 'function' && define.amd ? define('@ionic/angular', ['exports', '@angular/core', '@angular/forms', '@angular/common', '@angular/router', '@ionic/core', 'rxjs', 'rxjs/operators', '@ionic/core/loader'], factory) :
4 (global = global || self, factory((global.ionic = global.ionic || {}, global.ionic.angular = {}), global.ng.core, global.ng.forms, global.ng.common, global.ng.router, global.core$1, global.rxjs, global.rxjs.operators, global.loader));
5}(this, (function (exports, core, forms, common, router, core$1, rxjs, operators, loader) { 'use strict';
6
7 /*! *****************************************************************************
8 Copyright (c) Microsoft Corporation. All rights reserved.
9 Licensed under the Apache License, Version 2.0 (the "License"); you may not use
10 this file except in compliance with the License. You may obtain a copy of the
11 License at http://www.apache.org/licenses/LICENSE-2.0
12
13 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
15 WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
16 MERCHANTABLITY OR NON-INFRINGEMENT.
17
18 See the Apache Version 2.0 License for specific language governing permissions
19 and limitations under the License.
20 ***************************************************************************** */
21 /* global Reflect, Promise */
22
23 var extendStatics = function(d, b) {
24 extendStatics = Object.setPrototypeOf ||
25 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
26 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27 return extendStatics(d, b);
28 };
29
30 function __extends(d, b) {
31 extendStatics(d, b);
32 function __() { this.constructor = d; }
33 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34 }
35
36 var __assign = function() {
37 __assign = Object.assign || function __assign(t) {
38 for (var s, i = 1, n = arguments.length; i < n; i++) {
39 s = arguments[i];
40 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
41 }
42 return t;
43 };
44 return __assign.apply(this, arguments);
45 };
46
47 function __rest(s, e) {
48 var t = {};
49 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
50 t[p] = s[p];
51 if (s != null && typeof Object.getOwnPropertySymbols === "function")
52 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
53 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
54 t[p[i]] = s[p[i]];
55 }
56 return t;
57 }
58
59 function __decorate(decorators, target, key, desc) {
60 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
61 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
62 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
63 return c > 3 && r && Object.defineProperty(target, key, r), r;
64 }
65
66 function __param(paramIndex, decorator) {
67 return function (target, key) { decorator(target, key, paramIndex); }
68 }
69
70 function __metadata(metadataKey, metadataValue) {
71 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
72 }
73
74 function __awaiter(thisArg, _arguments, P, generator) {
75 return new (P || (P = Promise))(function (resolve, reject) {
76 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
77 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
78 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
79 step((generator = generator.apply(thisArg, _arguments || [])).next());
80 });
81 }
82
83 function __generator(thisArg, body) {
84 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
85 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
86 function verb(n) { return function (v) { return step([n, v]); }; }
87 function step(op) {
88 if (f) throw new TypeError("Generator is already executing.");
89 while (_) try {
90 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
91 if (y = 0, t) op = [op[0] & 2, t.value];
92 switch (op[0]) {
93 case 0: case 1: t = op; break;
94 case 4: _.label++; return { value: op[1], done: false };
95 case 5: _.label++; y = op[1]; op = [0]; continue;
96 case 7: op = _.ops.pop(); _.trys.pop(); continue;
97 default:
98 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
99 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
100 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
101 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
102 if (t[2]) _.ops.pop();
103 _.trys.pop(); continue;
104 }
105 op = body.call(thisArg, _);
106 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
107 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
108 }
109 }
110
111 function __exportStar(m, exports) {
112 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
113 }
114
115 function __values(o) {
116 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
117 if (m) return m.call(o);
118 return {
119 next: function () {
120 if (o && i >= o.length) o = void 0;
121 return { value: o && o[i++], done: !o };
122 }
123 };
124 }
125
126 function __read(o, n) {
127 var m = typeof Symbol === "function" && o[Symbol.iterator];
128 if (!m) return o;
129 var i = m.call(o), r, ar = [], e;
130 try {
131 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
132 }
133 catch (error) { e = { error: error }; }
134 finally {
135 try {
136 if (r && !r.done && (m = i["return"])) m.call(i);
137 }
138 finally { if (e) throw e.error; }
139 }
140 return ar;
141 }
142
143 function __spread() {
144 for (var ar = [], i = 0; i < arguments.length; i++)
145 ar = ar.concat(__read(arguments[i]));
146 return ar;
147 }
148
149 function __spreadArrays() {
150 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
151 for (var r = Array(s), k = 0, i = 0; i < il; i++)
152 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
153 r[k] = a[j];
154 return r;
155 };
156
157 function __await(v) {
158 return this instanceof __await ? (this.v = v, this) : new __await(v);
159 }
160
161 function __asyncGenerator(thisArg, _arguments, generator) {
162 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
163 var g = generator.apply(thisArg, _arguments || []), i, q = [];
164 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
165 function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
166 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
167 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
168 function fulfill(value) { resume("next", value); }
169 function reject(value) { resume("throw", value); }
170 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
171 }
172
173 function __asyncDelegator(o) {
174 var i, p;
175 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
176 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
177 }
178
179 function __asyncValues(o) {
180 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
181 var m = o[Symbol.asyncIterator], i;
182 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
183 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
184 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
185 }
186
187 function __makeTemplateObject(cooked, raw) {
188 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
189 return cooked;
190 };
191
192 function __importStar(mod) {
193 if (mod && mod.__esModule) return mod;
194 var result = {};
195 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
196 result.default = mod;
197 return result;
198 }
199
200 function __importDefault(mod) {
201 return (mod && mod.__esModule) ? mod : { default: mod };
202 }
203
204 var raf = function (h) {
205 if (typeof __zone_symbol__requestAnimationFrame === 'function') {
206 return __zone_symbol__requestAnimationFrame(h);
207 }
208 if (typeof requestAnimationFrame === 'function') {
209 return requestAnimationFrame(h);
210 }
211 return setTimeout(h);
212 };
213
214 var ValueAccessor = /** @class */ (function () {
215 function ValueAccessor(el) {
216 this.el = el;
217 this.onChange = function () { };
218 this.onTouched = function () { };
219 }
220 ValueAccessor.prototype.writeValue = function (value) {
221 this.el.nativeElement.value = this.lastValue = value == null ? '' : value;
222 setIonicClasses(this.el);
223 };
224 ValueAccessor.prototype.handleChangeEvent = function (el, value) {
225 if (el === this.el.nativeElement) {
226 if (value !== this.lastValue) {
227 this.lastValue = value;
228 this.onChange(value);
229 }
230 setIonicClasses(this.el);
231 }
232 };
233 ValueAccessor.prototype._handleBlurEvent = function (el) {
234 if (el === this.el.nativeElement) {
235 this.onTouched();
236 setIonicClasses(this.el);
237 }
238 };
239 ValueAccessor.prototype.registerOnChange = function (fn) {
240 this.onChange = fn;
241 };
242 ValueAccessor.prototype.registerOnTouched = function (fn) {
243 this.onTouched = fn;
244 };
245 ValueAccessor.prototype.setDisabledState = function (isDisabled) {
246 this.el.nativeElement.disabled = isDisabled;
247 };
248 __decorate([
249 core.HostListener('ionBlur', ['$event.target'])
250 ], ValueAccessor.prototype, "_handleBlurEvent", null);
251 return ValueAccessor;
252 }());
253 var setIonicClasses = function (element) {
254 raf(function () {
255 var input = element.nativeElement;
256 var classes = getClasses(input);
257 setClasses(input, classes);
258 var item = input.closest('ion-item');
259 if (item) {
260 setClasses(item, classes);
261 }
262 });
263 };
264 var getClasses = function (element) {
265 var classList = element.classList;
266 var classes = [];
267 for (var i = 0; i < classList.length; i++) {
268 var item = classList.item(i);
269 if (item !== null && startsWith(item, 'ng-')) {
270 classes.push("ion-" + item.substr(3));
271 }
272 }
273 return classes;
274 };
275 var ɵ0 = getClasses;
276 var setClasses = function (element, classes) {
277 var classList = element.classList;
278 [
279 'ion-valid',
280 'ion-invalid',
281 'ion-touched',
282 'ion-untouched',
283 'ion-dirty',
284 'ion-pristine'
285 ].forEach(function (c) { return classList.remove(c); });
286 classes.forEach(function (c) { return classList.add(c); });
287 };
288 var ɵ1 = setClasses;
289 var startsWith = function (input, search) {
290 return input.substr(0, search.length) === search;
291 };
292 var ɵ2 = startsWith;
293
294 var BooleanValueAccessor = /** @class */ (function (_super) {
295 __extends(BooleanValueAccessor, _super);
296 function BooleanValueAccessor(el) {
297 return _super.call(this, el) || this;
298 }
299 BooleanValueAccessor_1 = BooleanValueAccessor;
300 BooleanValueAccessor.prototype.writeValue = function (value) {
301 this.el.nativeElement.checked = this.lastValue = value == null ? false : value;
302 setIonicClasses(this.el);
303 };
304 BooleanValueAccessor.prototype._handleIonChange = function (el) {
305 this.handleChangeEvent(el, el.checked);
306 };
307 var BooleanValueAccessor_1;
308 BooleanValueAccessor.ctorParameters = function () { return [
309 { type: core.ElementRef }
310 ]; };
311 __decorate([
312 core.HostListener('ionChange', ['$event.target'])
313 ], BooleanValueAccessor.prototype, "_handleIonChange", null);
314 BooleanValueAccessor = BooleanValueAccessor_1 = __decorate([
315 core.Directive({
316 /* tslint:disable-next-line:directive-selector */
317 selector: 'ion-checkbox,ion-toggle',
318 providers: [
319 {
320 provide: forms.NG_VALUE_ACCESSOR,
321 useExisting: BooleanValueAccessor_1,
322 multi: true
323 }
324 ]
325 })
326 ], BooleanValueAccessor);
327 return BooleanValueAccessor;
328 }(ValueAccessor));
329
330 var NumericValueAccessor = /** @class */ (function (_super) {
331 __extends(NumericValueAccessor, _super);
332 function NumericValueAccessor(el) {
333 return _super.call(this, el) || this;
334 }
335 NumericValueAccessor_1 = NumericValueAccessor;
336 NumericValueAccessor.prototype._handleIonChange = function (el) {
337 this.handleChangeEvent(el, el.value);
338 };
339 NumericValueAccessor.prototype.registerOnChange = function (fn) {
340 _super.prototype.registerOnChange.call(this, function (value) {
341 fn(value === '' ? null : parseFloat(value));
342 });
343 };
344 var NumericValueAccessor_1;
345 NumericValueAccessor.ctorParameters = function () { return [
346 { type: core.ElementRef }
347 ]; };
348 __decorate([
349 core.HostListener('ionChange', ['$event.target'])
350 ], NumericValueAccessor.prototype, "_handleIonChange", null);
351 NumericValueAccessor = NumericValueAccessor_1 = __decorate([
352 core.Directive({
353 /* tslint:disable-next-line:directive-selector */
354 selector: 'ion-input[type=number]',
355 providers: [
356 {
357 provide: forms.NG_VALUE_ACCESSOR,
358 useExisting: NumericValueAccessor_1,
359 multi: true
360 }
361 ]
362 })
363 ], NumericValueAccessor);
364 return NumericValueAccessor;
365 }(ValueAccessor));
366
367 var RadioValueAccessor = /** @class */ (function (_super) {
368 __extends(RadioValueAccessor, _super);
369 function RadioValueAccessor(el) {
370 return _super.call(this, el) || this;
371 }
372 RadioValueAccessor_1 = RadioValueAccessor;
373 RadioValueAccessor.prototype._handleIonSelect = function (el) {
374 this.handleChangeEvent(el, el.checked);
375 };
376 var RadioValueAccessor_1;
377 RadioValueAccessor.ctorParameters = function () { return [
378 { type: core.ElementRef }
379 ]; };
380 __decorate([
381 core.HostListener('ionSelect', ['$event.target'])
382 ], RadioValueAccessor.prototype, "_handleIonSelect", null);
383 RadioValueAccessor = RadioValueAccessor_1 = __decorate([
384 core.Directive({
385 /* tslint:disable-next-line:directive-selector */
386 selector: 'ion-radio',
387 providers: [
388 {
389 provide: forms.NG_VALUE_ACCESSOR,
390 useExisting: RadioValueAccessor_1,
391 multi: true
392 }
393 ]
394 })
395 ], RadioValueAccessor);
396 return RadioValueAccessor;
397 }(ValueAccessor));
398
399 var SelectValueAccessor = /** @class */ (function (_super) {
400 __extends(SelectValueAccessor, _super);
401 function SelectValueAccessor(el) {
402 return _super.call(this, el) || this;
403 }
404 SelectValueAccessor_1 = SelectValueAccessor;
405 SelectValueAccessor.prototype._handleChangeEvent = function (el) {
406 this.handleChangeEvent(el, el.value);
407 };
408 var SelectValueAccessor_1;
409 SelectValueAccessor.ctorParameters = function () { return [
410 { type: core.ElementRef }
411 ]; };
412 __decorate([
413 core.HostListener('ionChange', ['$event.target'])
414 ], SelectValueAccessor.prototype, "_handleChangeEvent", null);
415 SelectValueAccessor = SelectValueAccessor_1 = __decorate([
416 core.Directive({
417 /* tslint:disable-next-line:directive-selector */
418 selector: 'ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime',
419 providers: [
420 {
421 provide: forms.NG_VALUE_ACCESSOR,
422 useExisting: SelectValueAccessor_1,
423 multi: true
424 }
425 ]
426 })
427 ], SelectValueAccessor);
428 return SelectValueAccessor;
429 }(ValueAccessor));
430
431 var TextValueAccessor = /** @class */ (function (_super) {
432 __extends(TextValueAccessor, _super);
433 function TextValueAccessor(el) {
434 return _super.call(this, el) || this;
435 }
436 TextValueAccessor_1 = TextValueAccessor;
437 TextValueAccessor.prototype._handleInputEvent = function (el) {
438 this.handleChangeEvent(el, el.value);
439 };
440 var TextValueAccessor_1;
441 TextValueAccessor.ctorParameters = function () { return [
442 { type: core.ElementRef }
443 ]; };
444 __decorate([
445 core.HostListener('ionChange', ['$event.target'])
446 ], TextValueAccessor.prototype, "_handleInputEvent", null);
447 TextValueAccessor = TextValueAccessor_1 = __decorate([
448 core.Directive({
449 /* tslint:disable-next-line:directive-selector */
450 selector: 'ion-input:not([type=number]),ion-textarea,ion-searchbar',
451 providers: [
452 {
453 provide: forms.NG_VALUE_ACCESSOR,
454 useExisting: TextValueAccessor_1,
455 multi: true
456 }
457 ]
458 })
459 ], TextValueAccessor);
460 return TextValueAccessor;
461 }(ValueAccessor));
462
463 var Platform = /** @class */ (function () {
464 function Platform(doc, zone) {
465 var _this = this;
466 this.doc = doc;
467 /**
468 * @hidden
469 */
470 this.backButton = new rxjs.Subject();
471 /**
472 * The pause event emits when the native platform puts the application
473 * into the background, typically when the user switches to a different
474 * application. This event would emit when a Cordova app is put into
475 * the background, however, it would not fire on a standard web browser.
476 */
477 this.pause = new rxjs.Subject();
478 /**
479 * The resume event emits when the native platform pulls the application
480 * out from the background. This event would emit when a Cordova app comes
481 * out from the background, however, it would not fire on a standard web browser.
482 */
483 this.resume = new rxjs.Subject();
484 /**
485 * The resize event emits when the browser window has changed dimensions. This
486 * could be from a browser window being physically resized, or from a device
487 * changing orientation.
488 */
489 this.resize = new rxjs.Subject();
490 zone.run(function () {
491 _this.win = doc.defaultView;
492 _this.backButton.subscribeWithPriority = function (priority, callback) {
493 return this.subscribe(function (ev) { return (ev.register(priority, function () { return zone.run(callback); })); });
494 };
495 proxyEvent(_this.pause, doc, 'pause');
496 proxyEvent(_this.resume, doc, 'resume');
497 proxyEvent(_this.backButton, doc, 'ionBackButton');
498 proxyEvent(_this.resize, _this.win, 'resize');
499 var readyResolve;
500 _this._readyPromise = new Promise(function (res) { readyResolve = res; });
501 if (_this.win && _this.win['cordova']) {
502 doc.addEventListener('deviceready', function () {
503 readyResolve('cordova');
504 }, { once: true });
505 }
506 else {
507 readyResolve('dom');
508 }
509 });
510 }
511 /**
512 * @returns returns true/false based on platform.
513 * @description
514 * Depending on the platform the user is on, `is(platformName)` will
515 * return `true` or `false`. Note that the same app can return `true`
516 * for more than one platform name. For example, an app running from
517 * an iPad would return `true` for the platform names: `mobile`,
518 * `ios`, `ipad`, and `tablet`. Additionally, if the app was running
519 * from Cordova then `cordova` would be true, and if it was running
520 * from a web browser on the iPad then `mobileweb` would be `true`.
521 *
522 * ```
523 * import { Platform } from 'ionic-angular';
524 *
525 * @Component({...})
526 * export MyPage {
527 * constructor(public platform: Platform) {
528 * if (this.platform.is('ios')) {
529 * // This will only print when on iOS
530 * console.log('I am an iOS device!');
531 * }
532 * }
533 * }
534 * ```
535 *
536 * | Platform Name | Description |
537 * |-----------------|------------------------------------|
538 * | android | on a device running Android. |
539 * | cordova | on a device running Cordova. |
540 * | ios | on a device running iOS. |
541 * | ipad | on an iPad device. |
542 * | iphone | on an iPhone device. |
543 * | phablet | on a phablet device. |
544 * | tablet | on a tablet device. |
545 * | electron | in Electron on a desktop device. |
546 * | pwa | as a PWA app. |
547 * | mobile | on a mobile device. |
548 * | mobileweb | on a mobile device in a browser. |
549 * | desktop | on a desktop device. |
550 * | hybrid | is a cordova or capacitor app. |
551 *
552 */
553 Platform.prototype.is = function (platformName) {
554 return core$1.isPlatform(this.win, platformName);
555 };
556 /**
557 * @returns the array of platforms
558 * @description
559 * Depending on what device you are on, `platforms` can return multiple values.
560 * Each possible value is a hierarchy of platforms. For example, on an iPhone,
561 * it would return `mobile`, `ios`, and `iphone`.
562 *
563 * ```
564 * import { Platform } from 'ionic-angular';
565 *
566 * @Component({...})
567 * export MyPage {
568 * constructor(public platform: Platform) {
569 * // This will print an array of the current platforms
570 * console.log(this.platform.platforms());
571 * }
572 * }
573 * ```
574 */
575 Platform.prototype.platforms = function () {
576 return core$1.getPlatforms(this.win);
577 };
578 /**
579 * Returns a promise when the platform is ready and native functionality
580 * can be called. If the app is running from within a web browser, then
581 * the promise will resolve when the DOM is ready. When the app is running
582 * from an application engine such as Cordova, then the promise will
583 * resolve when Cordova triggers the `deviceready` event.
584 *
585 * The resolved value is the `readySource`, which states which platform
586 * ready was used. For example, when Cordova is ready, the resolved ready
587 * source is `cordova`. The default ready source value will be `dom`. The
588 * `readySource` is useful if different logic should run depending on the
589 * platform the app is running from. For example, only Cordova can execute
590 * the status bar plugin, so the web should not run status bar plugin logic.
591 *
592 * ```
593 * import { Component } from '@angular/core';
594 * import { Platform } from 'ionic-angular';
595 *
596 * @Component({...})
597 * export MyApp {
598 * constructor(public platform: Platform) {
599 * this.platform.ready().then((readySource) => {
600 * console.log('Platform ready from', readySource);
601 * // Platform now ready, execute any required native code
602 * });
603 * }
604 * }
605 * ```
606 */
607 Platform.prototype.ready = function () {
608 return this._readyPromise;
609 };
610 Object.defineProperty(Platform.prototype, "isRTL", {
611 /**
612 * Returns if this app is using right-to-left language direction or not.
613 * We recommend the app's `index.html` file already has the correct `dir`
614 * attribute value set, such as `<html dir="ltr">` or `<html dir="rtl">`.
615 * [W3C: Structural markup and right-to-left text in HTML](http://www.w3.org/International/questions/qa-html-dir)
616 */
617 get: function () {
618 return this.doc.dir === 'rtl';
619 },
620 enumerable: true,
621 configurable: true
622 });
623 /**
624 * Get the query string parameter
625 */
626 Platform.prototype.getQueryParam = function (key) {
627 return readQueryParam(this.win.location.href, key);
628 };
629 /**
630 * Returns `true` if the app is in landscape mode.
631 */
632 Platform.prototype.isLandscape = function () {
633 return !this.isPortrait();
634 };
635 /**
636 * Returns `true` if the app is in portait mode.
637 */
638 Platform.prototype.isPortrait = function () {
639 return this.win.matchMedia && this.win.matchMedia('(orientation: portrait)').matches;
640 };
641 Platform.prototype.testUserAgent = function (expression) {
642 var nav = this.win.navigator;
643 return !!(nav && nav.userAgent && nav.userAgent.indexOf(expression) >= 0);
644 };
645 /**
646 * Get the current url.
647 */
648 Platform.prototype.url = function () {
649 return this.win.location.href;
650 };
651 /**
652 * Gets the width of the platform's viewport using `window.innerWidth`.
653 */
654 Platform.prototype.width = function () {
655 return this.win.innerWidth;
656 };
657 /**
658 * Gets the height of the platform's viewport using `window.innerHeight`.
659 */
660 Platform.prototype.height = function () {
661 return this.win.innerHeight;
662 };
663 Platform.ctorParameters = function () { return [
664 { type: undefined, decorators: [{ type: core.Inject, args: [common.DOCUMENT,] }] },
665 { type: core.NgZone }
666 ]; };
667 Platform.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function Platform_Factory() { return new Platform(core.ɵɵinject(common.DOCUMENT), core.ɵɵinject(core.NgZone)); }, token: Platform, providedIn: "root" });
668 Platform = __decorate([
669 core.Injectable({
670 providedIn: 'root',
671 }),
672 __param(0, core.Inject(common.DOCUMENT))
673 ], Platform);
674 return Platform;
675 }());
676 var readQueryParam = function (url, key) {
677 key = key.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
678 var regex = new RegExp('[\\?&]' + key + '=([^&#]*)');
679 var results = regex.exec(url);
680 return results ? decodeURIComponent(results[1].replace(/\+/g, ' ')) : null;
681 };
682 var ɵ0$1 = readQueryParam;
683 var proxyEvent = function (emitter, el, eventName) {
684 if (el) {
685 el.addEventListener(eventName, function (ev) {
686 // ?? cordova might emit "null" events
687 emitter.next(ev != null ? ev.detail : undefined);
688 });
689 }
690 };
691 var ɵ1$1 = proxyEvent;
692
693 var NavController = /** @class */ (function () {
694 function NavController(platform, location, serializer, router$1) {
695 var _this = this;
696 this.location = location;
697 this.serializer = serializer;
698 this.router = router$1;
699 this.direction = DEFAULT_DIRECTION;
700 this.animated = DEFAULT_ANIMATED;
701 this.guessDirection = 'forward';
702 this.lastNavId = -1;
703 // Subscribe to router events to detect direction
704 if (router$1) {
705 router$1.events.subscribe(function (ev) {
706 if (ev instanceof router.NavigationStart) {
707 var id = (ev.restoredState) ? ev.restoredState.navigationId : ev.id;
708 _this.guessDirection = id < _this.lastNavId ? 'back' : 'forward';
709 _this.guessAnimation = !ev.restoredState ? _this.guessDirection : undefined;
710 _this.lastNavId = _this.guessDirection === 'forward' ? ev.id : id;
711 }
712 });
713 }
714 // Subscribe to backButton events
715 platform.backButton.subscribeWithPriority(0, function () { return _this.pop(); });
716 }
717 /**
718 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
719 * it's equivalent to calling `this.router.navigateByUrl()`, but it's explicit about the **direction** of the transition.
720 *
721 * Going **forward** means that a new page is going to be pushed to the stack of the outlet (ion-router-outlet),
722 * and that it will show a "forward" animation by default.
723 *
724 * Navigating forward can also be triggered in a declarative manner by using the `[routerDirection]` directive:
725 *
726 * ```html
727 * <a routerLink="/path/to/page" routerDirection="forward">Link</a>
728 * ```
729 */
730 NavController.prototype.navigateForward = function (url, options) {
731 if (options === void 0) { options = {}; }
732 this.setDirection('forward', options.animated, options.animationDirection);
733 return this.navigate(url, options);
734 };
735 /**
736 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
737 * it's equivalent to calling:
738 *
739 * ```ts
740 * this.navController.setDirection('back');
741 * this.router.navigateByUrl(path);
742 * ```
743 *
744 * Going **back** means that all the pages in the stack until the navigated page is found will be popped,
745 * and that it will show a "back" animation by default.
746 *
747 * Navigating back can also be triggered in a declarative manner by using the `[routerDirection]` directive:
748 *
749 * ```html
750 * <a routerLink="/path/to/page" routerDirection="back">Link</a>
751 * ```
752 */
753 NavController.prototype.navigateBack = function (url, options) {
754 if (options === void 0) { options = {}; }
755 this.setDirection('back', options.animated, options.animationDirection);
756 return this.navigate(url, options);
757 };
758 /**
759 * This method uses Angular's [Router](https://angular.io/api/router/Router) under the hood,
760 * it's equivalent to calling:
761 *
762 * ```ts
763 * this.navController.setDirection('root');
764 * this.router.navigateByUrl(path);
765 * ```
766 *
767 * Going **root** means that all existing pages in the stack will be removed,
768 * and the navigated page will become the single page in the stack.
769 *
770 * Navigating root can also be triggered in a declarative manner by using the `[routerDirection]` directive:
771 *
772 * ```html
773 * <a routerLink="/path/to/page" routerDirection="root">Link</a>
774 * ```
775 */
776 NavController.prototype.navigateRoot = function (url, options) {
777 if (options === void 0) { options = {}; }
778 this.setDirection('root', options.animated, options.animationDirection);
779 return this.navigate(url, options);
780 };
781 /**
782 * Same as [Location](https://angular.io/api/common/Location)'s back() method.
783 * It will use the standard `window.history.back()` under the hood, but featuring a `back` animation
784 * by default.
785 */
786 NavController.prototype.back = function (options) {
787 if (options === void 0) { options = { animated: true, animationDirection: 'back' }; }
788 this.setDirection('back', options.animated, options.animationDirection);
789 return this.location.back();
790 };
791 /**
792 * This methods goes back in the context of Ionic's stack navigation.
793 *
794 * It recursively finds the top active `ion-router-outlet` and calls `pop()`.
795 * This is the recommended way to go back when you are using `ion-router-outlet`.
796 */
797 NavController.prototype.pop = function () {
798 return __awaiter(this, void 0, void 0, function () {
799 var outlet;
800 return __generator(this, function (_a) {
801 switch (_a.label) {
802 case 0:
803 outlet = this.topOutlet;
804 _a.label = 1;
805 case 1:
806 if (!outlet) return [3 /*break*/, 3];
807 return [4 /*yield*/, outlet.pop()];
808 case 2:
809 if (_a.sent()) {
810 return [3 /*break*/, 3];
811 }
812 else {
813 outlet = outlet.parentOutlet;
814 }
815 return [3 /*break*/, 1];
816 case 3: return [2 /*return*/];
817 }
818 });
819 });
820 };
821 /**
822 * This methods specifies the direction of the next navigation performed by the Angular router.
823 *
824 * `setDirection()` does not trigger any transition, it just sets some flags to be consumed by `ion-router-outlet`.
825 *
826 * It's recommended to use `navigateForward()`, `navigateBack()` and `navigateRoot()` instead of `setDirection()`.
827 */
828 NavController.prototype.setDirection = function (direction, animated, animationDirection) {
829 this.direction = direction;
830 this.animated = getAnimation(direction, animated, animationDirection);
831 };
832 /**
833 * @internal
834 */
835 NavController.prototype.setTopOutlet = function (outlet) {
836 this.topOutlet = outlet;
837 };
838 /**
839 * @internal
840 */
841 NavController.prototype.consumeTransition = function () {
842 var direction = 'root';
843 var animation;
844 if (this.direction === 'auto') {
845 direction = this.guessDirection;
846 animation = this.guessAnimation;
847 }
848 else {
849 animation = this.animated;
850 direction = this.direction;
851 }
852 this.direction = DEFAULT_DIRECTION;
853 this.animated = DEFAULT_ANIMATED;
854 return {
855 direction: direction,
856 animation: animation
857 };
858 };
859 NavController.prototype.navigate = function (url, options) {
860 if (Array.isArray(url)) {
861 return this.router.navigate(url, options);
862 }
863 else {
864 /**
865 * navigateByUrl ignores any properties that
866 * would change the url, so things like queryParams
867 * would be ignored unless we create a url tree
868 * More Info: https://github.com/angular/angular/issues/18798
869 */
870 var urlTree = this.serializer.parse(url.toString());
871 if (options.queryParams !== undefined) {
872 urlTree.queryParams = __assign({}, options.queryParams);
873 }
874 if (options.fragment !== undefined) {
875 urlTree.fragment = options.fragment;
876 }
877 /**
878 * `navigateByUrl` will still apply `NavigationExtras` properties
879 * that do not modify the url, such as `replaceUrl` which is why
880 * `options` is passed in here.
881 */
882 return this.router.navigateByUrl(urlTree, options);
883 }
884 };
885 NavController.ctorParameters = function () { return [
886 { type: Platform },
887 { type: common.Location },
888 { type: router.UrlSerializer },
889 { type: router.Router, decorators: [{ type: core.Optional }] }
890 ]; };
891 NavController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function NavController_Factory() { return new NavController(core.ɵɵinject(Platform), core.ɵɵinject(common.Location), core.ɵɵinject(router.UrlSerializer), core.ɵɵinject(router.Router, 8)); }, token: NavController, providedIn: "root" });
892 NavController = __decorate([
893 core.Injectable({
894 providedIn: 'root',
895 }),
896 __param(3, core.Optional())
897 ], NavController);
898 return NavController;
899 }());
900 var getAnimation = function (direction, animated, animationDirection) {
901 if (animated === false) {
902 return undefined;
903 }
904 if (animationDirection !== undefined) {
905 return animationDirection;
906 }
907 if (direction === 'forward' || direction === 'back') {
908 return direction;
909 }
910 else if (direction === 'root' && animated === true) {
911 return 'forward';
912 }
913 return undefined;
914 };
915 var ɵ0$2 = getAnimation;
916 var DEFAULT_DIRECTION = 'auto';
917 var DEFAULT_ANIMATED = undefined;
918
919 /* tslint:disable */
920 var proxyInputs = function (Cmp, inputs) {
921 var Prototype = Cmp.prototype;
922 inputs.forEach(function (item) {
923 Object.defineProperty(Prototype, item, {
924 get: function () {
925 return this.el[item];
926 },
927 set: function (val) {
928 var _this = this;
929 this.z.runOutsideAngular(function () { return (_this.el[item] = val); });
930 }
931 });
932 });
933 };
934 var proxyMethods = function (Cmp, methods) {
935 var Prototype = Cmp.prototype;
936 methods.forEach(function (methodName) {
937 Prototype[methodName] = function () {
938 var _this = this;
939 var args = arguments;
940 return this.z.runOutsideAngular(function () {
941 return _this.el[methodName].apply(_this.el, args);
942 });
943 };
944 });
945 };
946 var proxyOutputs = function (instance, el, events) {
947 events.forEach(function (eventName) { return instance[eventName] = rxjs.fromEvent(el, eventName); });
948 };
949 // tslint:disable-next-line: only-arrow-functions
950 function ProxyCmp(opts) {
951 var decorator = function (cls) {
952 if (opts.inputs) {
953 proxyInputs(cls, opts.inputs);
954 }
955 if (opts.methods) {
956 proxyMethods(cls, opts.methods);
957 }
958 return cls;
959 };
960 return decorator;
961 }
962
963 var IonApp = /** @class */ (function () {
964 function IonApp(c, r, z) {
965 this.z = z;
966 c.detach();
967 this.el = r.nativeElement;
968 }
969 IonApp.ctorParameters = function () { return [
970 { type: core.ChangeDetectorRef },
971 { type: core.ElementRef },
972 { type: core.NgZone }
973 ]; };
974 IonApp = __decorate([
975 core.Component({ selector: 'ion-app', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
976 ], IonApp);
977 return IonApp;
978 }());
979 var IonAvatar = /** @class */ (function () {
980 function IonAvatar(c, r, z) {
981 this.z = z;
982 c.detach();
983 this.el = r.nativeElement;
984 }
985 IonAvatar.ctorParameters = function () { return [
986 { type: core.ChangeDetectorRef },
987 { type: core.ElementRef },
988 { type: core.NgZone }
989 ]; };
990 IonAvatar = __decorate([
991 core.Component({ selector: 'ion-avatar', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
992 ], IonAvatar);
993 return IonAvatar;
994 }());
995 var IonBackButton = /** @class */ (function () {
996 function IonBackButton(c, r, z) {
997 this.z = z;
998 c.detach();
999 this.el = r.nativeElement;
1000 }
1001 IonBackButton.ctorParameters = function () { return [
1002 { type: core.ChangeDetectorRef },
1003 { type: core.ElementRef },
1004 { type: core.NgZone }
1005 ]; };
1006 IonBackButton = __decorate([
1007 ProxyCmp({ inputs: ['color', 'defaultHref', 'disabled', 'icon', 'mode', 'text', 'type'] }),
1008 core.Component({ selector: 'ion-back-button', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'defaultHref', 'disabled', 'icon', 'mode', 'text', 'type'] })
1009 ], IonBackButton);
1010 return IonBackButton;
1011 }());
1012 var IonBackdrop = /** @class */ (function () {
1013 function IonBackdrop(c, r, z) {
1014 this.z = z;
1015 c.detach();
1016 this.el = r.nativeElement;
1017 proxyOutputs(this, this.el, ['ionBackdropTap']);
1018 }
1019 IonBackdrop.ctorParameters = function () { return [
1020 { type: core.ChangeDetectorRef },
1021 { type: core.ElementRef },
1022 { type: core.NgZone }
1023 ]; };
1024 IonBackdrop = __decorate([
1025 ProxyCmp({ inputs: ['stopPropagation', 'tappable', 'visible'] }),
1026 core.Component({ selector: 'ion-backdrop', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['stopPropagation', 'tappable', 'visible'] })
1027 ], IonBackdrop);
1028 return IonBackdrop;
1029 }());
1030 var IonBadge = /** @class */ (function () {
1031 function IonBadge(c, r, z) {
1032 this.z = z;
1033 c.detach();
1034 this.el = r.nativeElement;
1035 }
1036 IonBadge.ctorParameters = function () { return [
1037 { type: core.ChangeDetectorRef },
1038 { type: core.ElementRef },
1039 { type: core.NgZone }
1040 ]; };
1041 IonBadge = __decorate([
1042 ProxyCmp({ inputs: ['color', 'mode'] }),
1043 core.Component({ selector: 'ion-badge', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] })
1044 ], IonBadge);
1045 return IonBadge;
1046 }());
1047 var IonButton = /** @class */ (function () {
1048 function IonButton(c, r, z) {
1049 this.z = z;
1050 c.detach();
1051 this.el = r.nativeElement;
1052 proxyOutputs(this, this.el, ['ionFocus', 'ionBlur']);
1053 }
1054 IonButton.ctorParameters = function () { return [
1055 { type: core.ChangeDetectorRef },
1056 { type: core.ElementRef },
1057 { type: core.NgZone }
1058 ]; };
1059 IonButton = __decorate([
1060 ProxyCmp({ inputs: ['buttonType', 'color', 'disabled', 'download', 'expand', 'fill', 'href', 'mode', 'rel', 'routerDirection', 'shape', 'size', 'strong', 'target', 'type'] }),
1061 core.Component({ selector: 'ion-button', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['buttonType', 'color', 'disabled', 'download', 'expand', 'fill', 'href', 'mode', 'rel', 'routerDirection', 'shape', 'size', 'strong', 'target', 'type'] })
1062 ], IonButton);
1063 return IonButton;
1064 }());
1065 var IonButtons = /** @class */ (function () {
1066 function IonButtons(c, r, z) {
1067 this.z = z;
1068 c.detach();
1069 this.el = r.nativeElement;
1070 }
1071 IonButtons.ctorParameters = function () { return [
1072 { type: core.ChangeDetectorRef },
1073 { type: core.ElementRef },
1074 { type: core.NgZone }
1075 ]; };
1076 IonButtons = __decorate([
1077 ProxyCmp({ inputs: ['collapse'] }),
1078 core.Component({ selector: 'ion-buttons', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['collapse'] })
1079 ], IonButtons);
1080 return IonButtons;
1081 }());
1082 var IonCard = /** @class */ (function () {
1083 function IonCard(c, r, z) {
1084 this.z = z;
1085 c.detach();
1086 this.el = r.nativeElement;
1087 }
1088 IonCard.ctorParameters = function () { return [
1089 { type: core.ChangeDetectorRef },
1090 { type: core.ElementRef },
1091 { type: core.NgZone }
1092 ]; };
1093 IonCard = __decorate([
1094 ProxyCmp({ inputs: ['button', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'target', 'type'] }),
1095 core.Component({ selector: 'ion-card', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['button', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'target', 'type'] })
1096 ], IonCard);
1097 return IonCard;
1098 }());
1099 var IonCardContent = /** @class */ (function () {
1100 function IonCardContent(c, r, z) {
1101 this.z = z;
1102 c.detach();
1103 this.el = r.nativeElement;
1104 }
1105 IonCardContent.ctorParameters = function () { return [
1106 { type: core.ChangeDetectorRef },
1107 { type: core.ElementRef },
1108 { type: core.NgZone }
1109 ]; };
1110 IonCardContent = __decorate([
1111 ProxyCmp({ inputs: ['mode'] }),
1112 core.Component({ selector: 'ion-card-content', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['mode'] })
1113 ], IonCardContent);
1114 return IonCardContent;
1115 }());
1116 var IonCardHeader = /** @class */ (function () {
1117 function IonCardHeader(c, r, z) {
1118 this.z = z;
1119 c.detach();
1120 this.el = r.nativeElement;
1121 }
1122 IonCardHeader.ctorParameters = function () { return [
1123 { type: core.ChangeDetectorRef },
1124 { type: core.ElementRef },
1125 { type: core.NgZone }
1126 ]; };
1127 IonCardHeader = __decorate([
1128 ProxyCmp({ inputs: ['color', 'mode', 'translucent'] }),
1129 core.Component({ selector: 'ion-card-header', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'translucent'] })
1130 ], IonCardHeader);
1131 return IonCardHeader;
1132 }());
1133 var IonCardSubtitle = /** @class */ (function () {
1134 function IonCardSubtitle(c, r, z) {
1135 this.z = z;
1136 c.detach();
1137 this.el = r.nativeElement;
1138 }
1139 IonCardSubtitle.ctorParameters = function () { return [
1140 { type: core.ChangeDetectorRef },
1141 { type: core.ElementRef },
1142 { type: core.NgZone }
1143 ]; };
1144 IonCardSubtitle = __decorate([
1145 ProxyCmp({ inputs: ['color', 'mode'] }),
1146 core.Component({ selector: 'ion-card-subtitle', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] })
1147 ], IonCardSubtitle);
1148 return IonCardSubtitle;
1149 }());
1150 var IonCardTitle = /** @class */ (function () {
1151 function IonCardTitle(c, r, z) {
1152 this.z = z;
1153 c.detach();
1154 this.el = r.nativeElement;
1155 }
1156 IonCardTitle.ctorParameters = function () { return [
1157 { type: core.ChangeDetectorRef },
1158 { type: core.ElementRef },
1159 { type: core.NgZone }
1160 ]; };
1161 IonCardTitle = __decorate([
1162 ProxyCmp({ inputs: ['color', 'mode'] }),
1163 core.Component({ selector: 'ion-card-title', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] })
1164 ], IonCardTitle);
1165 return IonCardTitle;
1166 }());
1167 var IonCheckbox = /** @class */ (function () {
1168 function IonCheckbox(c, r, z) {
1169 this.z = z;
1170 c.detach();
1171 this.el = r.nativeElement;
1172 proxyOutputs(this, this.el, ['ionChange', 'ionFocus', 'ionBlur']);
1173 }
1174 IonCheckbox.ctorParameters = function () { return [
1175 { type: core.ChangeDetectorRef },
1176 { type: core.ElementRef },
1177 { type: core.NgZone }
1178 ]; };
1179 IonCheckbox = __decorate([
1180 ProxyCmp({ inputs: ['checked', 'color', 'disabled', 'indeterminate', 'mode', 'name', 'value'] }),
1181 core.Component({ selector: 'ion-checkbox', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['checked', 'color', 'disabled', 'indeterminate', 'mode', 'name', 'value'] })
1182 ], IonCheckbox);
1183 return IonCheckbox;
1184 }());
1185 var IonChip = /** @class */ (function () {
1186 function IonChip(c, r, z) {
1187 this.z = z;
1188 c.detach();
1189 this.el = r.nativeElement;
1190 }
1191 IonChip.ctorParameters = function () { return [
1192 { type: core.ChangeDetectorRef },
1193 { type: core.ElementRef },
1194 { type: core.NgZone }
1195 ]; };
1196 IonChip = __decorate([
1197 ProxyCmp({ inputs: ['color', 'mode', 'outline'] }),
1198 core.Component({ selector: 'ion-chip', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'outline'] })
1199 ], IonChip);
1200 return IonChip;
1201 }());
1202 var IonCol = /** @class */ (function () {
1203 function IonCol(c, r, z) {
1204 this.z = z;
1205 c.detach();
1206 this.el = r.nativeElement;
1207 }
1208 IonCol.ctorParameters = function () { return [
1209 { type: core.ChangeDetectorRef },
1210 { type: core.ElementRef },
1211 { type: core.NgZone }
1212 ]; };
1213 IonCol = __decorate([
1214 ProxyCmp({ 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'] }),
1215 core.Component({ selector: 'ion-col', changeDetection: core.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'] })
1216 ], IonCol);
1217 return IonCol;
1218 }());
1219 var IonContent = /** @class */ (function () {
1220 function IonContent(c, r, z) {
1221 this.z = z;
1222 c.detach();
1223 this.el = r.nativeElement;
1224 proxyOutputs(this, this.el, ['ionScrollStart', 'ionScroll', 'ionScrollEnd']);
1225 }
1226 IonContent.ctorParameters = function () { return [
1227 { type: core.ChangeDetectorRef },
1228 { type: core.ElementRef },
1229 { type: core.NgZone }
1230 ]; };
1231 IonContent = __decorate([
1232 ProxyCmp({ inputs: ['color', 'forceOverscroll', 'fullscreen', 'scrollEvents', 'scrollX', 'scrollY'], 'methods': ['getScrollElement', 'scrollToTop', 'scrollToBottom', 'scrollByPoint', 'scrollToPoint'] }),
1233 core.Component({ selector: 'ion-content', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'forceOverscroll', 'fullscreen', 'scrollEvents', 'scrollX', 'scrollY'] })
1234 ], IonContent);
1235 return IonContent;
1236 }());
1237 var IonDatetime = /** @class */ (function () {
1238 function IonDatetime(c, r, z) {
1239 this.z = z;
1240 c.detach();
1241 this.el = r.nativeElement;
1242 proxyOutputs(this, this.el, ['ionCancel', 'ionChange', 'ionFocus', 'ionBlur']);
1243 }
1244 IonDatetime.ctorParameters = function () { return [
1245 { type: core.ChangeDetectorRef },
1246 { type: core.ElementRef },
1247 { type: core.NgZone }
1248 ]; };
1249 IonDatetime = __decorate([
1250 ProxyCmp({ inputs: ['cancelText', 'dayNames', 'dayShortNames', 'dayValues', 'disabled', 'displayFormat', 'displayTimezone', 'doneText', 'hourValues', 'max', 'min', 'minuteValues', 'mode', 'monthNames', 'monthShortNames', 'monthValues', 'name', 'pickerFormat', 'pickerOptions', 'placeholder', 'readonly', 'value', 'yearValues'], 'methods': ['open'] }),
1251 core.Component({ selector: 'ion-datetime', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['cancelText', 'dayNames', 'dayShortNames', 'dayValues', 'disabled', 'displayFormat', 'displayTimezone', 'doneText', 'hourValues', 'max', 'min', 'minuteValues', 'mode', 'monthNames', 'monthShortNames', 'monthValues', 'name', 'pickerFormat', 'pickerOptions', 'placeholder', 'readonly', 'value', 'yearValues'] })
1252 ], IonDatetime);
1253 return IonDatetime;
1254 }());
1255 var IonFab = /** @class */ (function () {
1256 function IonFab(c, r, z) {
1257 this.z = z;
1258 c.detach();
1259 this.el = r.nativeElement;
1260 }
1261 IonFab.ctorParameters = function () { return [
1262 { type: core.ChangeDetectorRef },
1263 { type: core.ElementRef },
1264 { type: core.NgZone }
1265 ]; };
1266 IonFab = __decorate([
1267 ProxyCmp({ inputs: ['activated', 'edge', 'horizontal', 'vertical'], 'methods': ['close'] }),
1268 core.Component({ selector: 'ion-fab', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['activated', 'edge', 'horizontal', 'vertical'] })
1269 ], IonFab);
1270 return IonFab;
1271 }());
1272 var IonFabButton = /** @class */ (function () {
1273 function IonFabButton(c, r, z) {
1274 this.z = z;
1275 c.detach();
1276 this.el = r.nativeElement;
1277 proxyOutputs(this, this.el, ['ionFocus', 'ionBlur']);
1278 }
1279 IonFabButton.ctorParameters = function () { return [
1280 { type: core.ChangeDetectorRef },
1281 { type: core.ElementRef },
1282 { type: core.NgZone }
1283 ]; };
1284 IonFabButton = __decorate([
1285 ProxyCmp({ inputs: ['activated', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'show', 'size', 'target', 'translucent', 'type'] }),
1286 core.Component({ selector: 'ion-fab-button', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['activated', 'color', 'disabled', 'download', 'href', 'mode', 'rel', 'routerDirection', 'show', 'size', 'target', 'translucent', 'type'] })
1287 ], IonFabButton);
1288 return IonFabButton;
1289 }());
1290 var IonFabList = /** @class */ (function () {
1291 function IonFabList(c, r, z) {
1292 this.z = z;
1293 c.detach();
1294 this.el = r.nativeElement;
1295 }
1296 IonFabList.ctorParameters = function () { return [
1297 { type: core.ChangeDetectorRef },
1298 { type: core.ElementRef },
1299 { type: core.NgZone }
1300 ]; };
1301 IonFabList = __decorate([
1302 ProxyCmp({ inputs: ['activated', 'side'] }),
1303 core.Component({ selector: 'ion-fab-list', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['activated', 'side'] })
1304 ], IonFabList);
1305 return IonFabList;
1306 }());
1307 var IonFooter = /** @class */ (function () {
1308 function IonFooter(c, r, z) {
1309 this.z = z;
1310 c.detach();
1311 this.el = r.nativeElement;
1312 }
1313 IonFooter.ctorParameters = function () { return [
1314 { type: core.ChangeDetectorRef },
1315 { type: core.ElementRef },
1316 { type: core.NgZone }
1317 ]; };
1318 IonFooter = __decorate([
1319 ProxyCmp({ inputs: ['mode', 'translucent'] }),
1320 core.Component({ selector: 'ion-footer', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['mode', 'translucent'] })
1321 ], IonFooter);
1322 return IonFooter;
1323 }());
1324 var IonGrid = /** @class */ (function () {
1325 function IonGrid(c, r, z) {
1326 this.z = z;
1327 c.detach();
1328 this.el = r.nativeElement;
1329 }
1330 IonGrid.ctorParameters = function () { return [
1331 { type: core.ChangeDetectorRef },
1332 { type: core.ElementRef },
1333 { type: core.NgZone }
1334 ]; };
1335 IonGrid = __decorate([
1336 ProxyCmp({ inputs: ['fixed'] }),
1337 core.Component({ selector: 'ion-grid', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['fixed'] })
1338 ], IonGrid);
1339 return IonGrid;
1340 }());
1341 var IonHeader = /** @class */ (function () {
1342 function IonHeader(c, r, z) {
1343 this.z = z;
1344 c.detach();
1345 this.el = r.nativeElement;
1346 }
1347 IonHeader.ctorParameters = function () { return [
1348 { type: core.ChangeDetectorRef },
1349 { type: core.ElementRef },
1350 { type: core.NgZone }
1351 ]; };
1352 IonHeader = __decorate([
1353 ProxyCmp({ inputs: ['collapse', 'mode', 'translucent'] }),
1354 core.Component({ selector: 'ion-header', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['collapse', 'mode', 'translucent'] })
1355 ], IonHeader);
1356 return IonHeader;
1357 }());
1358 var IonIcon = /** @class */ (function () {
1359 function IonIcon(c, r, z) {
1360 this.z = z;
1361 c.detach();
1362 this.el = r.nativeElement;
1363 }
1364 IonIcon.ctorParameters = function () { return [
1365 { type: core.ChangeDetectorRef },
1366 { type: core.ElementRef },
1367 { type: core.NgZone }
1368 ]; };
1369 IonIcon = __decorate([
1370 ProxyCmp({ inputs: ['ariaLabel', 'color', 'flipRtl', 'icon', 'ios', 'lazy', 'md', 'mode', 'name', 'size', 'src'] }),
1371 core.Component({ selector: 'ion-icon', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['ariaLabel', 'color', 'flipRtl', 'icon', 'ios', 'lazy', 'md', 'mode', 'name', 'size', 'src'] })
1372 ], IonIcon);
1373 return IonIcon;
1374 }());
1375 var IonImg = /** @class */ (function () {
1376 function IonImg(c, r, z) {
1377 this.z = z;
1378 c.detach();
1379 this.el = r.nativeElement;
1380 proxyOutputs(this, this.el, ['ionImgWillLoad', 'ionImgDidLoad', 'ionError']);
1381 }
1382 IonImg.ctorParameters = function () { return [
1383 { type: core.ChangeDetectorRef },
1384 { type: core.ElementRef },
1385 { type: core.NgZone }
1386 ]; };
1387 IonImg = __decorate([
1388 ProxyCmp({ inputs: ['alt', 'src'] }),
1389 core.Component({ selector: 'ion-img', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['alt', 'src'] })
1390 ], IonImg);
1391 return IonImg;
1392 }());
1393 var IonInfiniteScroll = /** @class */ (function () {
1394 function IonInfiniteScroll(c, r, z) {
1395 this.z = z;
1396 c.detach();
1397 this.el = r.nativeElement;
1398 proxyOutputs(this, this.el, ['ionInfinite']);
1399 }
1400 IonInfiniteScroll.ctorParameters = function () { return [
1401 { type: core.ChangeDetectorRef },
1402 { type: core.ElementRef },
1403 { type: core.NgZone }
1404 ]; };
1405 IonInfiniteScroll = __decorate([
1406 ProxyCmp({ inputs: ['disabled', 'position', 'threshold'], 'methods': ['complete'] }),
1407 core.Component({ selector: 'ion-infinite-scroll', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'position', 'threshold'] })
1408 ], IonInfiniteScroll);
1409 return IonInfiniteScroll;
1410 }());
1411 var IonInfiniteScrollContent = /** @class */ (function () {
1412 function IonInfiniteScrollContent(c, r, z) {
1413 this.z = z;
1414 c.detach();
1415 this.el = r.nativeElement;
1416 }
1417 IonInfiniteScrollContent.ctorParameters = function () { return [
1418 { type: core.ChangeDetectorRef },
1419 { type: core.ElementRef },
1420 { type: core.NgZone }
1421 ]; };
1422 IonInfiniteScrollContent = __decorate([
1423 ProxyCmp({ inputs: ['loadingSpinner', 'loadingText'] }),
1424 core.Component({ selector: 'ion-infinite-scroll-content', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['loadingSpinner', 'loadingText'] })
1425 ], IonInfiniteScrollContent);
1426 return IonInfiniteScrollContent;
1427 }());
1428 var IonInput = /** @class */ (function () {
1429 function IonInput(c, r, z) {
1430 this.z = z;
1431 c.detach();
1432 this.el = r.nativeElement;
1433 proxyOutputs(this, this.el, ['ionInput', 'ionChange', 'ionBlur', 'ionFocus']);
1434 }
1435 IonInput.ctorParameters = function () { return [
1436 { type: core.ChangeDetectorRef },
1437 { type: core.ElementRef },
1438 { type: core.NgZone }
1439 ]; };
1440 IonInput = __decorate([
1441 ProxyCmp({ 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'], 'methods': ['setFocus', 'getInputElement'] }),
1442 core.Component({ selector: 'ion-input', changeDetection: core.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'] })
1443 ], IonInput);
1444 return IonInput;
1445 }());
1446 var IonItem = /** @class */ (function () {
1447 function IonItem(c, r, z) {
1448 this.z = z;
1449 c.detach();
1450 this.el = r.nativeElement;
1451 }
1452 IonItem.ctorParameters = function () { return [
1453 { type: core.ChangeDetectorRef },
1454 { type: core.ElementRef },
1455 { type: core.NgZone }
1456 ]; };
1457 IonItem = __decorate([
1458 ProxyCmp({ inputs: ['button', 'color', 'detail', 'detailIcon', 'disabled', 'download', 'href', 'lines', 'mode', 'rel', 'routerDirection', 'target', 'type'] }),
1459 core.Component({ selector: 'ion-item', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['button', 'color', 'detail', 'detailIcon', 'disabled', 'download', 'href', 'lines', 'mode', 'rel', 'routerDirection', 'target', 'type'] })
1460 ], IonItem);
1461 return IonItem;
1462 }());
1463 var IonItemDivider = /** @class */ (function () {
1464 function IonItemDivider(c, r, z) {
1465 this.z = z;
1466 c.detach();
1467 this.el = r.nativeElement;
1468 }
1469 IonItemDivider.ctorParameters = function () { return [
1470 { type: core.ChangeDetectorRef },
1471 { type: core.ElementRef },
1472 { type: core.NgZone }
1473 ]; };
1474 IonItemDivider = __decorate([
1475 ProxyCmp({ inputs: ['color', 'mode', 'sticky'] }),
1476 core.Component({ selector: 'ion-item-divider', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'sticky'] })
1477 ], IonItemDivider);
1478 return IonItemDivider;
1479 }());
1480 var IonItemGroup = /** @class */ (function () {
1481 function IonItemGroup(c, r, z) {
1482 this.z = z;
1483 c.detach();
1484 this.el = r.nativeElement;
1485 }
1486 IonItemGroup.ctorParameters = function () { return [
1487 { type: core.ChangeDetectorRef },
1488 { type: core.ElementRef },
1489 { type: core.NgZone }
1490 ]; };
1491 IonItemGroup = __decorate([
1492 core.Component({ selector: 'ion-item-group', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
1493 ], IonItemGroup);
1494 return IonItemGroup;
1495 }());
1496 var IonItemOption = /** @class */ (function () {
1497 function IonItemOption(c, r, z) {
1498 this.z = z;
1499 c.detach();
1500 this.el = r.nativeElement;
1501 }
1502 IonItemOption.ctorParameters = function () { return [
1503 { type: core.ChangeDetectorRef },
1504 { type: core.ElementRef },
1505 { type: core.NgZone }
1506 ]; };
1507 IonItemOption = __decorate([
1508 ProxyCmp({ inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'target', 'type'] }),
1509 core.Component({ selector: 'ion-item-option', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'disabled', 'download', 'expandable', 'href', 'mode', 'rel', 'target', 'type'] })
1510 ], IonItemOption);
1511 return IonItemOption;
1512 }());
1513 var IonItemOptions = /** @class */ (function () {
1514 function IonItemOptions(c, r, z) {
1515 this.z = z;
1516 c.detach();
1517 this.el = r.nativeElement;
1518 proxyOutputs(this, this.el, ['ionSwipe']);
1519 }
1520 IonItemOptions.ctorParameters = function () { return [
1521 { type: core.ChangeDetectorRef },
1522 { type: core.ElementRef },
1523 { type: core.NgZone }
1524 ]; };
1525 IonItemOptions = __decorate([
1526 ProxyCmp({ inputs: ['side'] }),
1527 core.Component({ selector: 'ion-item-options', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['side'] })
1528 ], IonItemOptions);
1529 return IonItemOptions;
1530 }());
1531 var IonItemSliding = /** @class */ (function () {
1532 function IonItemSliding(c, r, z) {
1533 this.z = z;
1534 c.detach();
1535 this.el = r.nativeElement;
1536 proxyOutputs(this, this.el, ['ionDrag']);
1537 }
1538 IonItemSliding.ctorParameters = function () { return [
1539 { type: core.ChangeDetectorRef },
1540 { type: core.ElementRef },
1541 { type: core.NgZone }
1542 ]; };
1543 IonItemSliding = __decorate([
1544 ProxyCmp({ inputs: ['disabled'], 'methods': ['getOpenAmount', 'getSlidingRatio', 'open', 'close', 'closeOpened'] }),
1545 core.Component({ selector: 'ion-item-sliding', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled'] })
1546 ], IonItemSliding);
1547 return IonItemSliding;
1548 }());
1549 var IonLabel = /** @class */ (function () {
1550 function IonLabel(c, r, z) {
1551 this.z = z;
1552 c.detach();
1553 this.el = r.nativeElement;
1554 }
1555 IonLabel.ctorParameters = function () { return [
1556 { type: core.ChangeDetectorRef },
1557 { type: core.ElementRef },
1558 { type: core.NgZone }
1559 ]; };
1560 IonLabel = __decorate([
1561 ProxyCmp({ inputs: ['color', 'mode', 'position'] }),
1562 core.Component({ selector: 'ion-label', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'position'] })
1563 ], IonLabel);
1564 return IonLabel;
1565 }());
1566 var IonList = /** @class */ (function () {
1567 function IonList(c, r, z) {
1568 this.z = z;
1569 c.detach();
1570 this.el = r.nativeElement;
1571 }
1572 IonList.ctorParameters = function () { return [
1573 { type: core.ChangeDetectorRef },
1574 { type: core.ElementRef },
1575 { type: core.NgZone }
1576 ]; };
1577 IonList = __decorate([
1578 ProxyCmp({ inputs: ['inset', 'lines', 'mode'], 'methods': ['closeSlidingItems'] }),
1579 core.Component({ selector: 'ion-list', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['inset', 'lines', 'mode'] })
1580 ], IonList);
1581 return IonList;
1582 }());
1583 var IonListHeader = /** @class */ (function () {
1584 function IonListHeader(c, r, z) {
1585 this.z = z;
1586 c.detach();
1587 this.el = r.nativeElement;
1588 }
1589 IonListHeader.ctorParameters = function () { return [
1590 { type: core.ChangeDetectorRef },
1591 { type: core.ElementRef },
1592 { type: core.NgZone }
1593 ]; };
1594 IonListHeader = __decorate([
1595 ProxyCmp({ inputs: ['color', 'lines', 'mode'] }),
1596 core.Component({ selector: 'ion-list-header', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'lines', 'mode'] })
1597 ], IonListHeader);
1598 return IonListHeader;
1599 }());
1600 var IonMenu = /** @class */ (function () {
1601 function IonMenu(c, r, z) {
1602 this.z = z;
1603 c.detach();
1604 this.el = r.nativeElement;
1605 proxyOutputs(this, this.el, ['ionWillOpen', 'ionWillClose', 'ionDidOpen', 'ionDidClose']);
1606 }
1607 IonMenu.ctorParameters = function () { return [
1608 { type: core.ChangeDetectorRef },
1609 { type: core.ElementRef },
1610 { type: core.NgZone }
1611 ]; };
1612 IonMenu = __decorate([
1613 ProxyCmp({ inputs: ['contentId', 'disabled', 'maxEdgeStart', 'menuId', 'side', 'swipeGesture', 'type'], 'methods': ['isOpen', 'isActive', 'open', 'close', 'toggle', 'setOpen'] }),
1614 core.Component({ selector: 'ion-menu', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['contentId', 'disabled', 'maxEdgeStart', 'menuId', 'side', 'swipeGesture', 'type'] })
1615 ], IonMenu);
1616 return IonMenu;
1617 }());
1618 var IonMenuButton = /** @class */ (function () {
1619 function IonMenuButton(c, r, z) {
1620 this.z = z;
1621 c.detach();
1622 this.el = r.nativeElement;
1623 }
1624 IonMenuButton.ctorParameters = function () { return [
1625 { type: core.ChangeDetectorRef },
1626 { type: core.ElementRef },
1627 { type: core.NgZone }
1628 ]; };
1629 IonMenuButton = __decorate([
1630 ProxyCmp({ inputs: ['autoHide', 'color', 'disabled', 'menu', 'type'] }),
1631 core.Component({ selector: 'ion-menu-button', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['autoHide', 'color', 'disabled', 'menu', 'type'] })
1632 ], IonMenuButton);
1633 return IonMenuButton;
1634 }());
1635 var IonMenuToggle = /** @class */ (function () {
1636 function IonMenuToggle(c, r, z) {
1637 this.z = z;
1638 c.detach();
1639 this.el = r.nativeElement;
1640 }
1641 IonMenuToggle.ctorParameters = function () { return [
1642 { type: core.ChangeDetectorRef },
1643 { type: core.ElementRef },
1644 { type: core.NgZone }
1645 ]; };
1646 IonMenuToggle = __decorate([
1647 ProxyCmp({ inputs: ['autoHide', 'menu'] }),
1648 core.Component({ selector: 'ion-menu-toggle', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['autoHide', 'menu'] })
1649 ], IonMenuToggle);
1650 return IonMenuToggle;
1651 }());
1652 var IonNav = /** @class */ (function () {
1653 function IonNav(c, r, z) {
1654 this.z = z;
1655 c.detach();
1656 this.el = r.nativeElement;
1657 proxyOutputs(this, this.el, ['ionNavWillChange', 'ionNavDidChange']);
1658 }
1659 IonNav.ctorParameters = function () { return [
1660 { type: core.ChangeDetectorRef },
1661 { type: core.ElementRef },
1662 { type: core.NgZone }
1663 ]; };
1664 IonNav = __decorate([
1665 ProxyCmp({ inputs: ['animated', 'animation', 'root', 'rootParams', 'swipeGesture'], 'methods': ['push', 'insert', 'insertPages', 'pop', 'popTo', 'popToRoot', 'removeIndex', 'setRoot', 'setPages', 'getActive', 'getByIndex', 'canGoBack', 'getPrevious'] }),
1666 core.Component({ selector: 'ion-nav', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['animated', 'animation', 'root', 'rootParams', 'swipeGesture'] })
1667 ], IonNav);
1668 return IonNav;
1669 }());
1670 var IonNavLink = /** @class */ (function () {
1671 function IonNavLink(c, r, z) {
1672 this.z = z;
1673 c.detach();
1674 this.el = r.nativeElement;
1675 }
1676 IonNavLink.ctorParameters = function () { return [
1677 { type: core.ChangeDetectorRef },
1678 { type: core.ElementRef },
1679 { type: core.NgZone }
1680 ]; };
1681 IonNavLink = __decorate([
1682 ProxyCmp({ inputs: ['component', 'componentProps', 'routerDirection'] }),
1683 core.Component({ selector: 'ion-nav-link', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['component', 'componentProps', 'routerDirection'] })
1684 ], IonNavLink);
1685 return IonNavLink;
1686 }());
1687 var IonNote = /** @class */ (function () {
1688 function IonNote(c, r, z) {
1689 this.z = z;
1690 c.detach();
1691 this.el = r.nativeElement;
1692 }
1693 IonNote.ctorParameters = function () { return [
1694 { type: core.ChangeDetectorRef },
1695 { type: core.ElementRef },
1696 { type: core.NgZone }
1697 ]; };
1698 IonNote = __decorate([
1699 ProxyCmp({ inputs: ['color', 'mode'] }),
1700 core.Component({ selector: 'ion-note', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] })
1701 ], IonNote);
1702 return IonNote;
1703 }());
1704 var IonProgressBar = /** @class */ (function () {
1705 function IonProgressBar(c, r, z) {
1706 this.z = z;
1707 c.detach();
1708 this.el = r.nativeElement;
1709 }
1710 IonProgressBar.ctorParameters = function () { return [
1711 { type: core.ChangeDetectorRef },
1712 { type: core.ElementRef },
1713 { type: core.NgZone }
1714 ]; };
1715 IonProgressBar = __decorate([
1716 ProxyCmp({ inputs: ['buffer', 'color', 'mode', 'reversed', 'type', 'value'] }),
1717 core.Component({ selector: 'ion-progress-bar', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['buffer', 'color', 'mode', 'reversed', 'type', 'value'] })
1718 ], IonProgressBar);
1719 return IonProgressBar;
1720 }());
1721 var IonRadio = /** @class */ (function () {
1722 function IonRadio(c, r, z) {
1723 this.z = z;
1724 c.detach();
1725 this.el = r.nativeElement;
1726 proxyOutputs(this, this.el, ['ionFocus', 'ionBlur']);
1727 }
1728 IonRadio.ctorParameters = function () { return [
1729 { type: core.ChangeDetectorRef },
1730 { type: core.ElementRef },
1731 { type: core.NgZone }
1732 ]; };
1733 IonRadio = __decorate([
1734 ProxyCmp({ inputs: ['color', 'disabled', 'mode', 'name', 'value'] }),
1735 core.Component({ selector: 'ion-radio', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'disabled', 'mode', 'name', 'value'] })
1736 ], IonRadio);
1737 return IonRadio;
1738 }());
1739 var IonRadioGroup = /** @class */ (function () {
1740 function IonRadioGroup(c, r, z) {
1741 this.z = z;
1742 c.detach();
1743 this.el = r.nativeElement;
1744 proxyOutputs(this, this.el, ['ionChange']);
1745 }
1746 IonRadioGroup.ctorParameters = function () { return [
1747 { type: core.ChangeDetectorRef },
1748 { type: core.ElementRef },
1749 { type: core.NgZone }
1750 ]; };
1751 IonRadioGroup = __decorate([
1752 ProxyCmp({ inputs: ['allowEmptySelection', 'name', 'value'] }),
1753 core.Component({ selector: 'ion-radio-group', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['allowEmptySelection', 'name', 'value'] })
1754 ], IonRadioGroup);
1755 return IonRadioGroup;
1756 }());
1757 var IonRange = /** @class */ (function () {
1758 function IonRange(c, r, z) {
1759 this.z = z;
1760 c.detach();
1761 this.el = r.nativeElement;
1762 proxyOutputs(this, this.el, ['ionChange', 'ionFocus', 'ionBlur']);
1763 }
1764 IonRange.ctorParameters = function () { return [
1765 { type: core.ChangeDetectorRef },
1766 { type: core.ElementRef },
1767 { type: core.NgZone }
1768 ]; };
1769 IonRange = __decorate([
1770 ProxyCmp({ inputs: ['color', 'debounce', 'disabled', 'dualKnobs', 'max', 'min', 'mode', 'name', 'pin', 'snaps', 'step', 'ticks', 'value'] }),
1771 core.Component({ selector: 'ion-range', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'debounce', 'disabled', 'dualKnobs', 'max', 'min', 'mode', 'name', 'pin', 'snaps', 'step', 'ticks', 'value'] })
1772 ], IonRange);
1773 return IonRange;
1774 }());
1775 var IonRefresher = /** @class */ (function () {
1776 function IonRefresher(c, r, z) {
1777 this.z = z;
1778 c.detach();
1779 this.el = r.nativeElement;
1780 proxyOutputs(this, this.el, ['ionRefresh', 'ionPull', 'ionStart']);
1781 }
1782 IonRefresher.ctorParameters = function () { return [
1783 { type: core.ChangeDetectorRef },
1784 { type: core.ElementRef },
1785 { type: core.NgZone }
1786 ]; };
1787 IonRefresher = __decorate([
1788 ProxyCmp({ inputs: ['closeDuration', 'disabled', 'pullFactor', 'pullMax', 'pullMin', 'snapbackDuration'], 'methods': ['complete', 'cancel', 'getProgress'] }),
1789 core.Component({ selector: 'ion-refresher', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['closeDuration', 'disabled', 'pullFactor', 'pullMax', 'pullMin', 'snapbackDuration'] })
1790 ], IonRefresher);
1791 return IonRefresher;
1792 }());
1793 var IonRefresherContent = /** @class */ (function () {
1794 function IonRefresherContent(c, r, z) {
1795 this.z = z;
1796 c.detach();
1797 this.el = r.nativeElement;
1798 }
1799 IonRefresherContent.ctorParameters = function () { return [
1800 { type: core.ChangeDetectorRef },
1801 { type: core.ElementRef },
1802 { type: core.NgZone }
1803 ]; };
1804 IonRefresherContent = __decorate([
1805 ProxyCmp({ inputs: ['pullingIcon', 'pullingText', 'refreshingSpinner', 'refreshingText'] }),
1806 core.Component({ selector: 'ion-refresher-content', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['pullingIcon', 'pullingText', 'refreshingSpinner', 'refreshingText'] })
1807 ], IonRefresherContent);
1808 return IonRefresherContent;
1809 }());
1810 var IonReorder = /** @class */ (function () {
1811 function IonReorder(c, r, z) {
1812 this.z = z;
1813 c.detach();
1814 this.el = r.nativeElement;
1815 }
1816 IonReorder.ctorParameters = function () { return [
1817 { type: core.ChangeDetectorRef },
1818 { type: core.ElementRef },
1819 { type: core.NgZone }
1820 ]; };
1821 IonReorder = __decorate([
1822 core.Component({ selector: 'ion-reorder', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
1823 ], IonReorder);
1824 return IonReorder;
1825 }());
1826 var IonReorderGroup = /** @class */ (function () {
1827 function IonReorderGroup(c, r, z) {
1828 this.z = z;
1829 c.detach();
1830 this.el = r.nativeElement;
1831 proxyOutputs(this, this.el, ['ionItemReorder']);
1832 }
1833 IonReorderGroup.ctorParameters = function () { return [
1834 { type: core.ChangeDetectorRef },
1835 { type: core.ElementRef },
1836 { type: core.NgZone }
1837 ]; };
1838 IonReorderGroup = __decorate([
1839 ProxyCmp({ inputs: ['disabled'], 'methods': ['complete'] }),
1840 core.Component({ selector: 'ion-reorder-group', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled'] })
1841 ], IonReorderGroup);
1842 return IonReorderGroup;
1843 }());
1844 var IonRippleEffect = /** @class */ (function () {
1845 function IonRippleEffect(c, r, z) {
1846 this.z = z;
1847 c.detach();
1848 this.el = r.nativeElement;
1849 }
1850 IonRippleEffect.ctorParameters = function () { return [
1851 { type: core.ChangeDetectorRef },
1852 { type: core.ElementRef },
1853 { type: core.NgZone }
1854 ]; };
1855 IonRippleEffect = __decorate([
1856 ProxyCmp({ inputs: ['type'], 'methods': ['addRipple'] }),
1857 core.Component({ selector: 'ion-ripple-effect', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['type'] })
1858 ], IonRippleEffect);
1859 return IonRippleEffect;
1860 }());
1861 var IonRow = /** @class */ (function () {
1862 function IonRow(c, r, z) {
1863 this.z = z;
1864 c.detach();
1865 this.el = r.nativeElement;
1866 }
1867 IonRow.ctorParameters = function () { return [
1868 { type: core.ChangeDetectorRef },
1869 { type: core.ElementRef },
1870 { type: core.NgZone }
1871 ]; };
1872 IonRow = __decorate([
1873 core.Component({ selector: 'ion-row', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
1874 ], IonRow);
1875 return IonRow;
1876 }());
1877 var IonSearchbar = /** @class */ (function () {
1878 function IonSearchbar(c, r, z) {
1879 this.z = z;
1880 c.detach();
1881 this.el = r.nativeElement;
1882 proxyOutputs(this, this.el, ['ionInput', 'ionChange', 'ionCancel', 'ionClear', 'ionBlur', 'ionFocus']);
1883 }
1884 IonSearchbar.ctorParameters = function () { return [
1885 { type: core.ChangeDetectorRef },
1886 { type: core.ElementRef },
1887 { type: core.NgZone }
1888 ]; };
1889 IonSearchbar = __decorate([
1890 ProxyCmp({ inputs: ['animated', 'autocomplete', 'autocorrect', 'cancelButtonIcon', 'cancelButtonText', 'clearIcon', 'color', 'debounce', 'disabled', 'inputmode', 'mode', 'placeholder', 'searchIcon', 'showCancelButton', 'spellcheck', 'type', 'value'], 'methods': ['setFocus', 'getInputElement'] }),
1891 core.Component({ selector: 'ion-searchbar', changeDetection: core.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'] })
1892 ], IonSearchbar);
1893 return IonSearchbar;
1894 }());
1895 var IonSegment = /** @class */ (function () {
1896 function IonSegment(c, r, z) {
1897 this.z = z;
1898 c.detach();
1899 this.el = r.nativeElement;
1900 proxyOutputs(this, this.el, ['ionChange']);
1901 }
1902 IonSegment.ctorParameters = function () { return [
1903 { type: core.ChangeDetectorRef },
1904 { type: core.ElementRef },
1905 { type: core.NgZone }
1906 ]; };
1907 IonSegment = __decorate([
1908 ProxyCmp({ inputs: ['color', 'disabled', 'mode', 'scrollable', 'value'] }),
1909 core.Component({ selector: 'ion-segment', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'disabled', 'mode', 'scrollable', 'value'] })
1910 ], IonSegment);
1911 return IonSegment;
1912 }());
1913 var IonSegmentButton = /** @class */ (function () {
1914 function IonSegmentButton(c, r, z) {
1915 this.z = z;
1916 c.detach();
1917 this.el = r.nativeElement;
1918 }
1919 IonSegmentButton.ctorParameters = function () { return [
1920 { type: core.ChangeDetectorRef },
1921 { type: core.ElementRef },
1922 { type: core.NgZone }
1923 ]; };
1924 IonSegmentButton = __decorate([
1925 ProxyCmp({ inputs: ['disabled', 'layout', 'mode', 'type', 'value'] }),
1926 core.Component({ selector: 'ion-segment-button', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'layout', 'mode', 'type', 'value'] })
1927 ], IonSegmentButton);
1928 return IonSegmentButton;
1929 }());
1930 var IonSelect = /** @class */ (function () {
1931 function IonSelect(c, r, z) {
1932 this.z = z;
1933 c.detach();
1934 this.el = r.nativeElement;
1935 proxyOutputs(this, this.el, ['ionChange', 'ionCancel', 'ionFocus', 'ionBlur']);
1936 }
1937 IonSelect.ctorParameters = function () { return [
1938 { type: core.ChangeDetectorRef },
1939 { type: core.ElementRef },
1940 { type: core.NgZone }
1941 ]; };
1942 IonSelect = __decorate([
1943 ProxyCmp({ inputs: ['cancelText', 'compareWith', 'disabled', 'interface', 'interfaceOptions', 'mode', 'multiple', 'name', 'okText', 'placeholder', 'selectedText', 'value'], 'methods': ['open'] }),
1944 core.Component({ selector: 'ion-select', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['cancelText', 'compareWith', 'disabled', 'interface', 'interfaceOptions', 'mode', 'multiple', 'name', 'okText', 'placeholder', 'selectedText', 'value'] })
1945 ], IonSelect);
1946 return IonSelect;
1947 }());
1948 var IonSelectOption = /** @class */ (function () {
1949 function IonSelectOption(c, r, z) {
1950 this.z = z;
1951 c.detach();
1952 this.el = r.nativeElement;
1953 }
1954 IonSelectOption.ctorParameters = function () { return [
1955 { type: core.ChangeDetectorRef },
1956 { type: core.ElementRef },
1957 { type: core.NgZone }
1958 ]; };
1959 IonSelectOption = __decorate([
1960 ProxyCmp({ inputs: ['disabled', 'value'] }),
1961 core.Component({ selector: 'ion-select-option', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'value'] })
1962 ], IonSelectOption);
1963 return IonSelectOption;
1964 }());
1965 var IonSkeletonText = /** @class */ (function () {
1966 function IonSkeletonText(c, r, z) {
1967 this.z = z;
1968 c.detach();
1969 this.el = r.nativeElement;
1970 }
1971 IonSkeletonText.ctorParameters = function () { return [
1972 { type: core.ChangeDetectorRef },
1973 { type: core.ElementRef },
1974 { type: core.NgZone }
1975 ]; };
1976 IonSkeletonText = __decorate([
1977 ProxyCmp({ inputs: ['animated'] }),
1978 core.Component({ selector: 'ion-skeleton-text', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['animated'] })
1979 ], IonSkeletonText);
1980 return IonSkeletonText;
1981 }());
1982 var IonSlide = /** @class */ (function () {
1983 function IonSlide(c, r, z) {
1984 this.z = z;
1985 c.detach();
1986 this.el = r.nativeElement;
1987 }
1988 IonSlide.ctorParameters = function () { return [
1989 { type: core.ChangeDetectorRef },
1990 { type: core.ElementRef },
1991 { type: core.NgZone }
1992 ]; };
1993 IonSlide = __decorate([
1994 core.Component({ selector: 'ion-slide', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
1995 ], IonSlide);
1996 return IonSlide;
1997 }());
1998 var IonSlides = /** @class */ (function () {
1999 function IonSlides(c, r, z) {
2000 this.z = z;
2001 c.detach();
2002 this.el = r.nativeElement;
2003 proxyOutputs(this, this.el, ['ionSlidesDidLoad', 'ionSlideTap', 'ionSlideDoubleTap', 'ionSlideWillChange', 'ionSlideDidChange', 'ionSlideNextStart', 'ionSlidePrevStart', 'ionSlideNextEnd', 'ionSlidePrevEnd', 'ionSlideTransitionStart', 'ionSlideTransitionEnd', 'ionSlideDrag', 'ionSlideReachStart', 'ionSlideReachEnd', 'ionSlideTouchStart', 'ionSlideTouchEnd']);
2004 }
2005 IonSlides.ctorParameters = function () { return [
2006 { type: core.ChangeDetectorRef },
2007 { type: core.ElementRef },
2008 { type: core.NgZone }
2009 ]; };
2010 IonSlides = __decorate([
2011 ProxyCmp({ inputs: ['mode', 'options', 'pager', 'scrollbar'], 'methods': ['update', 'updateAutoHeight', 'slideTo', 'slideNext', 'slidePrev', 'getActiveIndex', 'getPreviousIndex', 'length', 'isEnd', 'isBeginning', 'startAutoplay', 'stopAutoplay', 'lockSwipeToNext', 'lockSwipeToPrev', 'lockSwipes', 'getSwiper'] }),
2012 core.Component({ selector: 'ion-slides', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['mode', 'options', 'pager', 'scrollbar'] })
2013 ], IonSlides);
2014 return IonSlides;
2015 }());
2016 var IonSpinner = /** @class */ (function () {
2017 function IonSpinner(c, r, z) {
2018 this.z = z;
2019 c.detach();
2020 this.el = r.nativeElement;
2021 }
2022 IonSpinner.ctorParameters = function () { return [
2023 { type: core.ChangeDetectorRef },
2024 { type: core.ElementRef },
2025 { type: core.NgZone }
2026 ]; };
2027 IonSpinner = __decorate([
2028 ProxyCmp({ inputs: ['color', 'duration', 'name', 'paused'] }),
2029 core.Component({ selector: 'ion-spinner', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'duration', 'name', 'paused'] })
2030 ], IonSpinner);
2031 return IonSpinner;
2032 }());
2033 var IonSplitPane = /** @class */ (function () {
2034 function IonSplitPane(c, r, z) {
2035 this.z = z;
2036 c.detach();
2037 this.el = r.nativeElement;
2038 proxyOutputs(this, this.el, ['ionSplitPaneVisible']);
2039 }
2040 IonSplitPane.ctorParameters = function () { return [
2041 { type: core.ChangeDetectorRef },
2042 { type: core.ElementRef },
2043 { type: core.NgZone }
2044 ]; };
2045 IonSplitPane = __decorate([
2046 ProxyCmp({ inputs: ['contentId', 'disabled', 'when'] }),
2047 core.Component({ selector: 'ion-split-pane', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['contentId', 'disabled', 'when'] })
2048 ], IonSplitPane);
2049 return IonSplitPane;
2050 }());
2051 var IonTabBar = /** @class */ (function () {
2052 function IonTabBar(c, r, z) {
2053 this.z = z;
2054 c.detach();
2055 this.el = r.nativeElement;
2056 }
2057 IonTabBar.ctorParameters = function () { return [
2058 { type: core.ChangeDetectorRef },
2059 { type: core.ElementRef },
2060 { type: core.NgZone }
2061 ]; };
2062 IonTabBar = __decorate([
2063 ProxyCmp({ inputs: ['color', 'mode', 'selectedTab', 'translucent'] }),
2064 core.Component({ selector: 'ion-tab-bar', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode', 'selectedTab', 'translucent'] })
2065 ], IonTabBar);
2066 return IonTabBar;
2067 }());
2068 var IonTabButton = /** @class */ (function () {
2069 function IonTabButton(c, r, z) {
2070 this.z = z;
2071 c.detach();
2072 this.el = r.nativeElement;
2073 }
2074 IonTabButton.ctorParameters = function () { return [
2075 { type: core.ChangeDetectorRef },
2076 { type: core.ElementRef },
2077 { type: core.NgZone }
2078 ]; };
2079 IonTabButton = __decorate([
2080 ProxyCmp({ inputs: ['disabled', 'download', 'href', 'layout', 'mode', 'rel', 'selected', 'tab', 'target'] }),
2081 core.Component({ selector: 'ion-tab-button', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['disabled', 'download', 'href', 'layout', 'mode', 'rel', 'selected', 'tab', 'target'] })
2082 ], IonTabButton);
2083 return IonTabButton;
2084 }());
2085 var IonText = /** @class */ (function () {
2086 function IonText(c, r, z) {
2087 this.z = z;
2088 c.detach();
2089 this.el = r.nativeElement;
2090 }
2091 IonText.ctorParameters = function () { return [
2092 { type: core.ChangeDetectorRef },
2093 { type: core.ElementRef },
2094 { type: core.NgZone }
2095 ]; };
2096 IonText = __decorate([
2097 ProxyCmp({ inputs: ['color', 'mode'] }),
2098 core.Component({ selector: 'ion-text', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] })
2099 ], IonText);
2100 return IonText;
2101 }());
2102 var IonTextarea = /** @class */ (function () {
2103 function IonTextarea(c, r, z) {
2104 this.z = z;
2105 c.detach();
2106 this.el = r.nativeElement;
2107 proxyOutputs(this, this.el, ['ionChange', 'ionInput', 'ionBlur', 'ionFocus']);
2108 }
2109 IonTextarea.ctorParameters = function () { return [
2110 { type: core.ChangeDetectorRef },
2111 { type: core.ElementRef },
2112 { type: core.NgZone }
2113 ]; };
2114 IonTextarea = __decorate([
2115 ProxyCmp({ inputs: ['autoGrow', 'autocapitalize', 'autofocus', 'clearOnEdit', 'color', 'cols', 'debounce', 'disabled', 'maxlength', 'minlength', 'mode', 'name', 'placeholder', 'readonly', 'required', 'rows', 'spellcheck', 'value', 'wrap'], 'methods': ['setFocus', 'getInputElement'] }),
2116 core.Component({ selector: 'ion-textarea', changeDetection: core.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'] })
2117 ], IonTextarea);
2118 return IonTextarea;
2119 }());
2120 var IonThumbnail = /** @class */ (function () {
2121 function IonThumbnail(c, r, z) {
2122 this.z = z;
2123 c.detach();
2124 this.el = r.nativeElement;
2125 }
2126 IonThumbnail.ctorParameters = function () { return [
2127 { type: core.ChangeDetectorRef },
2128 { type: core.ElementRef },
2129 { type: core.NgZone }
2130 ]; };
2131 IonThumbnail = __decorate([
2132 core.Component({ selector: 'ion-thumbnail', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>' })
2133 ], IonThumbnail);
2134 return IonThumbnail;
2135 }());
2136 var IonTitle = /** @class */ (function () {
2137 function IonTitle(c, r, z) {
2138 this.z = z;
2139 c.detach();
2140 this.el = r.nativeElement;
2141 }
2142 IonTitle.ctorParameters = function () { return [
2143 { type: core.ChangeDetectorRef },
2144 { type: core.ElementRef },
2145 { type: core.NgZone }
2146 ]; };
2147 IonTitle = __decorate([
2148 ProxyCmp({ inputs: ['color', 'size'] }),
2149 core.Component({ selector: 'ion-title', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'size'] })
2150 ], IonTitle);
2151 return IonTitle;
2152 }());
2153 var IonToggle = /** @class */ (function () {
2154 function IonToggle(c, r, z) {
2155 this.z = z;
2156 c.detach();
2157 this.el = r.nativeElement;
2158 proxyOutputs(this, this.el, ['ionChange', 'ionFocus', 'ionBlur']);
2159 }
2160 IonToggle.ctorParameters = function () { return [
2161 { type: core.ChangeDetectorRef },
2162 { type: core.ElementRef },
2163 { type: core.NgZone }
2164 ]; };
2165 IonToggle = __decorate([
2166 ProxyCmp({ inputs: ['checked', 'color', 'disabled', 'mode', 'name', 'value'] }),
2167 core.Component({ selector: 'ion-toggle', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['checked', 'color', 'disabled', 'mode', 'name', 'value'] })
2168 ], IonToggle);
2169 return IonToggle;
2170 }());
2171 var IonToolbar = /** @class */ (function () {
2172 function IonToolbar(c, r, z) {
2173 this.z = z;
2174 c.detach();
2175 this.el = r.nativeElement;
2176 }
2177 IonToolbar.ctorParameters = function () { return [
2178 { type: core.ChangeDetectorRef },
2179 { type: core.ElementRef },
2180 { type: core.NgZone }
2181 ]; };
2182 IonToolbar = __decorate([
2183 ProxyCmp({ inputs: ['color', 'mode'] }),
2184 core.Component({ selector: 'ion-toolbar', changeDetection: core.ChangeDetectionStrategy.OnPush, template: '<ng-content></ng-content>', inputs: ['color', 'mode'] })
2185 ], IonToolbar);
2186 return IonToolbar;
2187 }());
2188
2189 var Config = /** @class */ (function () {
2190 function Config() {
2191 }
2192 Config.prototype.get = function (key, fallback) {
2193 var c = getConfig();
2194 if (c) {
2195 return c.get(key, fallback);
2196 }
2197 return null;
2198 };
2199 Config.prototype.getBoolean = function (key, fallback) {
2200 var c = getConfig();
2201 if (c) {
2202 return c.getBoolean(key, fallback);
2203 }
2204 return false;
2205 };
2206 Config.prototype.getNumber = function (key, fallback) {
2207 var c = getConfig();
2208 if (c) {
2209 return c.getNumber(key, fallback);
2210 }
2211 return 0;
2212 };
2213 Config.prototype.set = function (key, value) {
2214 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.");
2215 var c = getConfig();
2216 if (c) {
2217 c.set(key, value);
2218 }
2219 };
2220 Config.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function Config_Factory() { return new Config(); }, token: Config, providedIn: "root" });
2221 Config = __decorate([
2222 core.Injectable({
2223 providedIn: 'root'
2224 })
2225 ], Config);
2226 return Config;
2227 }());
2228 var ConfigToken = new core.InjectionToken('USERCONFIG');
2229 var getConfig = function () {
2230 if (typeof window !== 'undefined') {
2231 var Ionic = window.Ionic;
2232 if (Ionic && Ionic.config) {
2233 return Ionic.config;
2234 }
2235 }
2236 return null;
2237 };
2238 var ɵ0$3 = getConfig;
2239
2240 /**
2241 * @description
2242 * NavParams are an object that exists on a page and can contain data for that particular view.
2243 * Similar to how data was pass to a view in V1 with `$stateParams`, NavParams offer a much more flexible
2244 * option with a simple `get` method.
2245 *
2246 * @usage
2247 * ```ts
2248 * import { NavParams } from '@ionic/angular';
2249 *
2250 * export class MyClass{
2251 *
2252 * constructor(navParams: NavParams){
2253 * // userParams is an object we have in our nav-parameters
2254 * navParams.get('userParams');
2255 * }
2256 *
2257 * }
2258 * ```
2259 */
2260 var NavParams = /** @class */ (function () {
2261 function NavParams(data) {
2262 if (data === void 0) { data = {}; }
2263 this.data = data;
2264 }
2265 /**
2266 * Get the value of a nav-parameter for the current view
2267 *
2268 * ```ts
2269 * import { NavParams } from 'ionic-angular';
2270 *
2271 * export class MyClass{
2272 * constructor(public navParams: NavParams){
2273 * // userParams is an object we have in our nav-parameters
2274 * this.navParams.get('userParams');
2275 * }
2276 * }
2277 * ```
2278 *
2279 * @param param Which param you want to look up
2280 */
2281 NavParams.prototype.get = function (param) {
2282 return this.data[param];
2283 };
2284 return NavParams;
2285 }());
2286
2287 var AngularDelegate = /** @class */ (function () {
2288 function AngularDelegate(zone, appRef) {
2289 this.zone = zone;
2290 this.appRef = appRef;
2291 }
2292 AngularDelegate.prototype.create = function (resolver, injector, location) {
2293 return new AngularFrameworkDelegate(resolver, injector, location, this.appRef, this.zone);
2294 };
2295 AngularDelegate.ctorParameters = function () { return [
2296 { type: core.NgZone },
2297 { type: core.ApplicationRef }
2298 ]; };
2299 AngularDelegate = __decorate([
2300 core.Injectable()
2301 ], AngularDelegate);
2302 return AngularDelegate;
2303 }());
2304 var AngularFrameworkDelegate = /** @class */ (function () {
2305 function AngularFrameworkDelegate(resolver, injector, location, appRef, zone) {
2306 this.resolver = resolver;
2307 this.injector = injector;
2308 this.location = location;
2309 this.appRef = appRef;
2310 this.zone = zone;
2311 this.elRefMap = new WeakMap();
2312 this.elEventsMap = new WeakMap();
2313 }
2314 AngularFrameworkDelegate.prototype.attachViewToDom = function (container, component, params, cssClasses) {
2315 var _this = this;
2316 return this.zone.run(function () {
2317 return new Promise(function (resolve) {
2318 var el = attachView(_this.zone, _this.resolver, _this.injector, _this.location, _this.appRef, _this.elRefMap, _this.elEventsMap, container, component, params, cssClasses);
2319 resolve(el);
2320 });
2321 });
2322 };
2323 AngularFrameworkDelegate.prototype.removeViewFromDom = function (_container, component) {
2324 var _this = this;
2325 return this.zone.run(function () {
2326 return new Promise(function (resolve) {
2327 var componentRef = _this.elRefMap.get(component);
2328 if (componentRef) {
2329 componentRef.destroy();
2330 _this.elRefMap.delete(component);
2331 var unbindEvents = _this.elEventsMap.get(component);
2332 if (unbindEvents) {
2333 unbindEvents();
2334 _this.elEventsMap.delete(component);
2335 }
2336 }
2337 resolve();
2338 });
2339 });
2340 };
2341 return AngularFrameworkDelegate;
2342 }());
2343 var attachView = function (zone, resolver, injector, location, appRef, elRefMap, elEventsMap, container, component, params, cssClasses) {
2344 var e_1, _a;
2345 var factory = resolver.resolveComponentFactory(component);
2346 var childInjector = core.Injector.create({
2347 providers: getProviders(params),
2348 parent: injector
2349 });
2350 var componentRef = (location)
2351 ? location.createComponent(factory, location.length, childInjector)
2352 : factory.create(childInjector);
2353 var instance = componentRef.instance;
2354 var hostElement = componentRef.location.nativeElement;
2355 if (params) {
2356 Object.assign(instance, params);
2357 }
2358 if (cssClasses) {
2359 try {
2360 for (var cssClasses_1 = __values(cssClasses), cssClasses_1_1 = cssClasses_1.next(); !cssClasses_1_1.done; cssClasses_1_1 = cssClasses_1.next()) {
2361 var clazz = cssClasses_1_1.value;
2362 hostElement.classList.add(clazz);
2363 }
2364 }
2365 catch (e_1_1) { e_1 = { error: e_1_1 }; }
2366 finally {
2367 try {
2368 if (cssClasses_1_1 && !cssClasses_1_1.done && (_a = cssClasses_1.return)) _a.call(cssClasses_1);
2369 }
2370 finally { if (e_1) throw e_1.error; }
2371 }
2372 }
2373 var unbindEvents = bindLifecycleEvents(zone, instance, hostElement);
2374 container.appendChild(hostElement);
2375 if (!location) {
2376 appRef.attachView(componentRef.hostView);
2377 }
2378 componentRef.changeDetectorRef.reattach();
2379 elRefMap.set(hostElement, componentRef);
2380 elEventsMap.set(hostElement, unbindEvents);
2381 return hostElement;
2382 };
2383 var LIFECYCLES = [
2384 core$1.LIFECYCLE_WILL_ENTER,
2385 core$1.LIFECYCLE_DID_ENTER,
2386 core$1.LIFECYCLE_WILL_LEAVE,
2387 core$1.LIFECYCLE_DID_LEAVE,
2388 core$1.LIFECYCLE_WILL_UNLOAD
2389 ];
2390 var bindLifecycleEvents = function (zone, instance, element) {
2391 return zone.run(function () {
2392 var unregisters = LIFECYCLES
2393 .filter(function (eventName) { return typeof instance[eventName] === 'function'; })
2394 .map(function (eventName) {
2395 var handler = function (ev) { return instance[eventName](ev.detail); };
2396 element.addEventListener(eventName, handler);
2397 return function () { return element.removeEventListener(eventName, handler); };
2398 });
2399 return function () { return unregisters.forEach(function (fn) { return fn(); }); };
2400 });
2401 };
2402 var NavParamsToken = new core.InjectionToken('NavParamsToken');
2403 var getProviders = function (params) {
2404 return [
2405 {
2406 provide: NavParamsToken, useValue: params
2407 },
2408 {
2409 provide: NavParams, useFactory: provideNavParamsInjectable, deps: [NavParamsToken]
2410 }
2411 ];
2412 };
2413 var ɵ0$4 = getProviders;
2414 var provideNavParamsInjectable = function (params) {
2415 return new NavParams(params);
2416 };
2417 var ɵ1$2 = provideNavParamsInjectable;
2418
2419 var insertView = function (views, view, direction) {
2420 if (direction === 'root') {
2421 return setRoot(views, view);
2422 }
2423 else if (direction === 'forward') {
2424 return setForward(views, view);
2425 }
2426 else {
2427 return setBack(views, view);
2428 }
2429 };
2430 var setRoot = function (views, view) {
2431 views = views.filter(function (v) { return v.stackId !== view.stackId; });
2432 views.push(view);
2433 return views;
2434 };
2435 var ɵ0$5 = setRoot;
2436 var setForward = function (views, view) {
2437 var index = views.indexOf(view);
2438 if (index >= 0) {
2439 views = views.filter(function (v) { return v.stackId !== view.stackId || v.id <= view.id; });
2440 }
2441 else {
2442 views.push(view);
2443 }
2444 return views;
2445 };
2446 var ɵ1$3 = setForward;
2447 var setBack = function (views, view) {
2448 var index = views.indexOf(view);
2449 if (index >= 0) {
2450 return views.filter(function (v) { return v.stackId !== view.stackId || v.id <= view.id; });
2451 }
2452 else {
2453 return setRoot(views, view);
2454 }
2455 };
2456 var ɵ2$1 = setBack;
2457 var getUrl = function (router, activatedRoute) {
2458 var urlTree = router.createUrlTree(['.'], { relativeTo: activatedRoute });
2459 return router.serializeUrl(urlTree);
2460 };
2461 var isTabSwitch = function (enteringView, leavingView) {
2462 if (!leavingView) {
2463 return true;
2464 }
2465 return enteringView.stackId !== leavingView.stackId;
2466 };
2467 var computeStackId = function (prefixUrl, url) {
2468 if (!prefixUrl) {
2469 return undefined;
2470 }
2471 var segments = toSegments(url);
2472 for (var i = 0; i < segments.length; i++) {
2473 if (i >= prefixUrl.length) {
2474 return segments[i];
2475 }
2476 if (segments[i] !== prefixUrl[i]) {
2477 return undefined;
2478 }
2479 }
2480 return undefined;
2481 };
2482 var toSegments = function (path) {
2483 return path
2484 .split('/')
2485 .map(function (s) { return s.trim(); })
2486 .filter(function (s) { return s !== ''; });
2487 };
2488 var destroyView = function (view) {
2489 if (view) {
2490 // TODO lifecycle event
2491 view.ref.destroy();
2492 view.unlistenEvents();
2493 }
2494 };
2495
2496 var StackController = /** @class */ (function () {
2497 function StackController(tabsPrefix, containerEl, router, navCtrl, zone, location) {
2498 this.containerEl = containerEl;
2499 this.router = router;
2500 this.navCtrl = navCtrl;
2501 this.zone = zone;
2502 this.location = location;
2503 this.views = [];
2504 this.skipTransition = false;
2505 this.nextId = 0;
2506 this.tabsPrefix = tabsPrefix !== undefined ? toSegments(tabsPrefix) : undefined;
2507 }
2508 StackController.prototype.createView = function (ref, activatedRoute) {
2509 var url = getUrl(this.router, activatedRoute);
2510 var element = (ref && ref.location && ref.location.nativeElement);
2511 var unlistenEvents = bindLifecycleEvents(this.zone, ref.instance, element);
2512 return {
2513 id: this.nextId++,
2514 stackId: computeStackId(this.tabsPrefix, url),
2515 unlistenEvents: unlistenEvents,
2516 element: element,
2517 ref: ref,
2518 url: url,
2519 };
2520 };
2521 StackController.prototype.getExistingView = function (activatedRoute) {
2522 var activatedUrlKey = getUrl(this.router, activatedRoute);
2523 var view = this.views.find(function (vw) { return vw.url === activatedUrlKey; });
2524 if (view) {
2525 view.ref.changeDetectorRef.reattach();
2526 }
2527 return view;
2528 };
2529 StackController.prototype.setActive = function (enteringView) {
2530 var _this = this;
2531 var _a = this.navCtrl.consumeTransition(), direction = _a.direction, animation = _a.animation;
2532 var leavingView = this.activeView;
2533 var tabSwitch = isTabSwitch(enteringView, leavingView);
2534 if (tabSwitch) {
2535 direction = 'back';
2536 animation = undefined;
2537 }
2538 var viewsSnapshot = this.views.slice();
2539 var currentNavigation;
2540 var router = this.router;
2541 // Angular >= 7.2.0
2542 if (router.getCurrentNavigation) {
2543 currentNavigation = router.getCurrentNavigation();
2544 // Angular < 7.2.0
2545 }
2546 else if (router.navigations &&
2547 router.navigations.value) {
2548 currentNavigation = router.navigations.value;
2549 }
2550 /**
2551 * If the navigation action
2552 * sets `replaceUrl: true`
2553 * then we need to make sure
2554 * we remove the last item
2555 * from our views stack
2556 */
2557 if (currentNavigation &&
2558 currentNavigation.extras &&
2559 currentNavigation.extras.replaceUrl) {
2560 if (this.views.length > 0) {
2561 this.views.splice(-1, 1);
2562 }
2563 }
2564 var reused = this.views.includes(enteringView);
2565 var views = this.insertView(enteringView, direction);
2566 // Trigger change detection before transition starts
2567 // This will call ngOnInit() the first time too, just after the view
2568 // was attached to the dom, but BEFORE the transition starts
2569 if (!reused) {
2570 enteringView.ref.changeDetectorRef.detectChanges();
2571 }
2572 // Wait until previous transitions finish
2573 return this.zone.runOutsideAngular(function () {
2574 return _this.wait(function () {
2575 // disconnect leaving page from change detection to
2576 // reduce jank during the page transition
2577 if (leavingView) {
2578 leavingView.ref.changeDetectorRef.detach();
2579 }
2580 // In case the enteringView is the same as the leavingPage we need to reattach()
2581 enteringView.ref.changeDetectorRef.reattach();
2582 return _this.transition(enteringView, leavingView, animation, _this.canGoBack(1), false)
2583 .then(function () { return cleanupAsync(enteringView, views, viewsSnapshot, _this.location); })
2584 .then(function () { return ({
2585 enteringView: enteringView,
2586 direction: direction,
2587 animation: animation,
2588 tabSwitch: tabSwitch
2589 }); });
2590 });
2591 });
2592 };
2593 StackController.prototype.canGoBack = function (deep, stackId) {
2594 if (stackId === void 0) { stackId = this.getActiveStackId(); }
2595 return this.getStack(stackId).length > deep;
2596 };
2597 StackController.prototype.pop = function (deep, stackId) {
2598 var _this = this;
2599 if (stackId === void 0) { stackId = this.getActiveStackId(); }
2600 return this.zone.run(function () {
2601 var views = _this.getStack(stackId);
2602 if (views.length <= deep) {
2603 return Promise.resolve(false);
2604 }
2605 var view = views[views.length - deep - 1];
2606 var url = view.url;
2607 var viewSavedData = view.savedData;
2608 if (viewSavedData) {
2609 var primaryOutlet = viewSavedData.get('primary');
2610 if (primaryOutlet &&
2611 primaryOutlet.route &&
2612 primaryOutlet.route._routerState &&
2613 primaryOutlet.route._routerState.snapshot &&
2614 primaryOutlet.route._routerState.snapshot.url) {
2615 url = primaryOutlet.route._routerState.snapshot.url;
2616 }
2617 }
2618 return _this.navCtrl.navigateBack(url, view.savedExtras).then(function () { return true; });
2619 });
2620 };
2621 StackController.prototype.startBackTransition = function () {
2622 var _this = this;
2623 var leavingView = this.activeView;
2624 if (leavingView) {
2625 var views = this.getStack(leavingView.stackId);
2626 var enteringView_1 = views[views.length - 2];
2627 return this.wait(function () {
2628 return _this.transition(enteringView_1, // entering view
2629 leavingView, // leaving view
2630 'back', _this.canGoBack(2), true);
2631 });
2632 }
2633 return Promise.resolve();
2634 };
2635 StackController.prototype.endBackTransition = function (shouldComplete) {
2636 if (shouldComplete) {
2637 this.skipTransition = true;
2638 this.pop(1);
2639 }
2640 else if (this.activeView) {
2641 cleanup(this.activeView, this.views, this.views, this.location);
2642 }
2643 };
2644 StackController.prototype.getLastUrl = function (stackId) {
2645 var views = this.getStack(stackId);
2646 return views.length > 0 ? views[views.length - 1] : undefined;
2647 };
2648 /**
2649 * @internal
2650 */
2651 StackController.prototype.getRootUrl = function (stackId) {
2652 var views = this.getStack(stackId);
2653 return views.length > 0 ? views[0] : undefined;
2654 };
2655 StackController.prototype.getActiveStackId = function () {
2656 return this.activeView ? this.activeView.stackId : undefined;
2657 };
2658 StackController.prototype.destroy = function () {
2659 this.containerEl = undefined;
2660 this.views.forEach(destroyView);
2661 this.activeView = undefined;
2662 this.views = [];
2663 };
2664 StackController.prototype.getStack = function (stackId) {
2665 return this.views.filter(function (v) { return v.stackId === stackId; });
2666 };
2667 StackController.prototype.insertView = function (enteringView, direction) {
2668 this.activeView = enteringView;
2669 this.views = insertView(this.views, enteringView, direction);
2670 return this.views.slice();
2671 };
2672 StackController.prototype.transition = function (enteringView, leavingView, direction, showGoBack, progressAnimation) {
2673 if (this.skipTransition) {
2674 this.skipTransition = false;
2675 return Promise.resolve(false);
2676 }
2677 if (leavingView === enteringView) {
2678 return Promise.resolve(false);
2679 }
2680 var enteringEl = enteringView ? enteringView.element : undefined;
2681 var leavingEl = leavingView ? leavingView.element : undefined;
2682 var containerEl = this.containerEl;
2683 if (enteringEl && enteringEl !== leavingEl) {
2684 enteringEl.classList.add('ion-page');
2685 enteringEl.classList.add('ion-page-invisible');
2686 if (enteringEl.parentElement !== containerEl) {
2687 containerEl.appendChild(enteringEl);
2688 }
2689 if (containerEl.commit) {
2690 return containerEl.commit(enteringEl, leavingEl, {
2691 deepWait: true,
2692 duration: direction === undefined ? 0 : undefined,
2693 direction: direction,
2694 showGoBack: showGoBack,
2695 progressAnimation: progressAnimation
2696 });
2697 }
2698 }
2699 return Promise.resolve(false);
2700 };
2701 StackController.prototype.wait = function (task) {
2702 return __awaiter(this, void 0, void 0, function () {
2703 var promise;
2704 return __generator(this, function (_a) {
2705 switch (_a.label) {
2706 case 0:
2707 if (!(this.runningTask !== undefined)) return [3 /*break*/, 2];
2708 return [4 /*yield*/, this.runningTask];
2709 case 1:
2710 _a.sent();
2711 this.runningTask = undefined;
2712 _a.label = 2;
2713 case 2:
2714 promise = this.runningTask = task();
2715 return [2 /*return*/, promise];
2716 }
2717 });
2718 });
2719 };
2720 return StackController;
2721 }());
2722 var cleanupAsync = function (activeRoute, views, viewsSnapshot, location) {
2723 if (typeof requestAnimationFrame === 'function') {
2724 return new Promise(function (resolve) {
2725 requestAnimationFrame(function () {
2726 cleanup(activeRoute, views, viewsSnapshot, location);
2727 resolve();
2728 });
2729 });
2730 }
2731 return Promise.resolve();
2732 };
2733 var ɵ0$6 = cleanupAsync;
2734 var cleanup = function (activeRoute, views, viewsSnapshot, location) {
2735 viewsSnapshot
2736 .filter(function (view) { return !views.includes(view); })
2737 .forEach(destroyView);
2738 views.forEach(function (view) {
2739 /**
2740 * In the event that a user navigated multiple
2741 * times in rapid succession, we want to make sure
2742 * we don't pre-emptively detach a view while
2743 * it is in mid-transition.
2744 *
2745 * In this instance we also do not care about query
2746 * params or fragments as it will be the same view regardless
2747 */
2748 var locationWithoutParams = location.path().split('?')[0];
2749 var locationWithoutFragment = locationWithoutParams.split('#')[0];
2750 if (view !== activeRoute && view.url !== locationWithoutFragment) {
2751 var element = view.element;
2752 element.setAttribute('aria-hidden', 'true');
2753 element.classList.add('ion-page-hidden');
2754 view.ref.changeDetectorRef.detach();
2755 }
2756 });
2757 };
2758 var ɵ1$4 = cleanup;
2759
2760 var IonRouterOutlet = /** @class */ (function () {
2761 function IonRouterOutlet(parentContexts, location, resolver, name, tabs, config, navCtrl, commonLocation, elementRef, router$1, zone, activatedRoute, parentOutlet) {
2762 this.parentContexts = parentContexts;
2763 this.location = location;
2764 this.resolver = resolver;
2765 this.config = config;
2766 this.navCtrl = navCtrl;
2767 this.parentOutlet = parentOutlet;
2768 this.activated = null;
2769 this.activatedView = null;
2770 this._activatedRoute = null;
2771 // Maintain map of activated route proxies for each component instance
2772 this.proxyMap = new WeakMap();
2773 // Keep the latest activated route in a subject for the proxy routes to switch map to
2774 this.currentActivatedRoute$ = new rxjs.BehaviorSubject(null);
2775 this.stackEvents = new core.EventEmitter();
2776 this.activateEvents = new core.EventEmitter();
2777 this.deactivateEvents = new core.EventEmitter();
2778 this.nativeEl = elementRef.nativeElement;
2779 this.name = name || router.PRIMARY_OUTLET;
2780 this.tabsPrefix = tabs === 'true' ? getUrl(router$1, activatedRoute) : undefined;
2781 this.stackCtrl = new StackController(this.tabsPrefix, this.nativeEl, router$1, navCtrl, zone, commonLocation);
2782 parentContexts.onChildOutletCreated(this.name, this);
2783 }
2784 Object.defineProperty(IonRouterOutlet.prototype, "animated", {
2785 set: function (animated) {
2786 this.nativeEl.animated = animated;
2787 },
2788 enumerable: true,
2789 configurable: true
2790 });
2791 Object.defineProperty(IonRouterOutlet.prototype, "swipeGesture", {
2792 set: function (swipe) {
2793 var _this = this;
2794 this._swipeGesture = swipe;
2795 this.nativeEl.swipeHandler = swipe ? {
2796 canStart: function () { return _this.stackCtrl.canGoBack(1); },
2797 onStart: function () { return _this.stackCtrl.startBackTransition(); },
2798 onEnd: function (shouldContinue) { return _this.stackCtrl.endBackTransition(shouldContinue); }
2799 } : undefined;
2800 },
2801 enumerable: true,
2802 configurable: true
2803 });
2804 IonRouterOutlet.prototype.ngOnDestroy = function () {
2805 this.stackCtrl.destroy();
2806 };
2807 IonRouterOutlet.prototype.getContext = function () {
2808 return this.parentContexts.getContext(this.name);
2809 };
2810 IonRouterOutlet.prototype.ngOnInit = function () {
2811 var _this = this;
2812 if (!this.activated) {
2813 // If the outlet was not instantiated at the time the route got activated we need to populate
2814 // the outlet when it is initialized (ie inside a NgIf)
2815 var context = this.getContext();
2816 if (context && context.route) {
2817 this.activateWith(context.route, context.resolver || null);
2818 }
2819 }
2820 if (this.nativeEl.componentOnReady) {
2821 this.nativeEl.componentOnReady().then(function () {
2822 if (_this._swipeGesture === undefined) {
2823 _this.swipeGesture = _this.config.getBoolean('swipeBackEnabled', _this.nativeEl.mode === 'ios');
2824 }
2825 });
2826 }
2827 };
2828 Object.defineProperty(IonRouterOutlet.prototype, "isActivated", {
2829 get: function () {
2830 return !!this.activated;
2831 },
2832 enumerable: true,
2833 configurable: true
2834 });
2835 Object.defineProperty(IonRouterOutlet.prototype, "component", {
2836 get: function () {
2837 if (!this.activated) {
2838 throw new Error('Outlet is not activated');
2839 }
2840 return this.activated.instance;
2841 },
2842 enumerable: true,
2843 configurable: true
2844 });
2845 Object.defineProperty(IonRouterOutlet.prototype, "activatedRoute", {
2846 get: function () {
2847 if (!this.activated) {
2848 throw new Error('Outlet is not activated');
2849 }
2850 return this._activatedRoute;
2851 },
2852 enumerable: true,
2853 configurable: true
2854 });
2855 Object.defineProperty(IonRouterOutlet.prototype, "activatedRouteData", {
2856 get: function () {
2857 if (this._activatedRoute) {
2858 return this._activatedRoute.snapshot.data;
2859 }
2860 return {};
2861 },
2862 enumerable: true,
2863 configurable: true
2864 });
2865 /**
2866 * Called when the `RouteReuseStrategy` instructs to detach the subtree
2867 */
2868 IonRouterOutlet.prototype.detach = function () {
2869 throw new Error('incompatible reuse strategy');
2870 };
2871 /**
2872 * Called when the `RouteReuseStrategy` instructs to re-attach a previously detached subtree
2873 */
2874 IonRouterOutlet.prototype.attach = function (_ref, _activatedRoute) {
2875 throw new Error('incompatible reuse strategy');
2876 };
2877 IonRouterOutlet.prototype.deactivate = function () {
2878 if (this.activated) {
2879 if (this.activatedView) {
2880 this.activatedView.savedData = new Map(this.getContext().children['contexts']);
2881 /**
2882 * Ensure we are saving the NavigationExtras
2883 * data otherwise it will be lost
2884 */
2885 this.activatedView.savedExtras = {};
2886 var context = this.getContext();
2887 if (context.route) {
2888 var contextSnapshot = context.route.snapshot;
2889 this.activatedView.savedExtras.queryParams = contextSnapshot.queryParams;
2890 this.activatedView.savedExtras.fragment = contextSnapshot.fragment;
2891 }
2892 }
2893 var c = this.component;
2894 this.activatedView = null;
2895 this.activated = null;
2896 this._activatedRoute = null;
2897 this.deactivateEvents.emit(c);
2898 }
2899 };
2900 IonRouterOutlet.prototype.activateWith = function (activatedRoute, resolver) {
2901 var _this = this;
2902 if (this.isActivated) {
2903 throw new Error('Cannot activate an already activated outlet');
2904 }
2905 this._activatedRoute = activatedRoute;
2906 var cmpRef;
2907 var enteringView = this.stackCtrl.getExistingView(activatedRoute);
2908 if (enteringView) {
2909 cmpRef = this.activated = enteringView.ref;
2910 var saved = enteringView.savedData;
2911 if (saved) {
2912 // self-restore
2913 var context = this.getContext();
2914 context.children['contexts'] = saved;
2915 }
2916 // Updated activated route proxy for this component
2917 this.updateActivatedRouteProxy(cmpRef.instance, activatedRoute);
2918 }
2919 else {
2920 var snapshot = activatedRoute._futureSnapshot;
2921 var component = snapshot.routeConfig.component;
2922 resolver = resolver || this.resolver;
2923 var factory = resolver.resolveComponentFactory(component);
2924 var childContexts = this.parentContexts.getOrCreateContext(this.name).children;
2925 // We create an activated route proxy object that will maintain future updates for this component
2926 // over its lifecycle in the stack.
2927 var component$ = new rxjs.BehaviorSubject(null);
2928 var activatedRouteProxy = this.createActivatedRouteProxy(component$, activatedRoute);
2929 var injector = new OutletInjector(activatedRouteProxy, childContexts, this.location.injector);
2930 cmpRef = this.activated = this.location.createComponent(factory, this.location.length, injector);
2931 // Once the component is created we can push it to our local subject supplied to the proxy
2932 component$.next(cmpRef.instance);
2933 // Calling `markForCheck` to make sure we will run the change detection when the
2934 // `RouterOutlet` is inside a `ChangeDetectionStrategy.OnPush` component.
2935 enteringView = this.stackCtrl.createView(this.activated, activatedRoute);
2936 // Store references to the proxy by component
2937 this.proxyMap.set(cmpRef.instance, activatedRouteProxy);
2938 this.currentActivatedRoute$.next({ component: cmpRef.instance, activatedRoute: activatedRoute });
2939 }
2940 this.activatedView = enteringView;
2941 this.stackCtrl.setActive(enteringView).then(function (data) {
2942 _this.navCtrl.setTopOutlet(_this);
2943 _this.activateEvents.emit(cmpRef.instance);
2944 _this.stackEvents.emit(data);
2945 });
2946 };
2947 /**
2948 * Returns `true` if there are pages in the stack to go back.
2949 */
2950 IonRouterOutlet.prototype.canGoBack = function (deep, stackId) {
2951 if (deep === void 0) { deep = 1; }
2952 return this.stackCtrl.canGoBack(deep, stackId);
2953 };
2954 /**
2955 * Resolves to `true` if it the outlet was able to sucessfully pop the last N pages.
2956 */
2957 IonRouterOutlet.prototype.pop = function (deep, stackId) {
2958 if (deep === void 0) { deep = 1; }
2959 return this.stackCtrl.pop(deep, stackId);
2960 };
2961 /**
2962 * Returns the URL of the active page of each stack.
2963 */
2964 IonRouterOutlet.prototype.getLastUrl = function (stackId) {
2965 var active = this.stackCtrl.getLastUrl(stackId);
2966 return active ? active.url : undefined;
2967 };
2968 /**
2969 * Returns the RouteView of the active page of each stack.
2970 * @internal
2971 */
2972 IonRouterOutlet.prototype.getLastRouteView = function (stackId) {
2973 return this.stackCtrl.getLastUrl(stackId);
2974 };
2975 /**
2976 * Returns the root view in the tab stack.
2977 * @internal
2978 */
2979 IonRouterOutlet.prototype.getRootView = function (stackId) {
2980 return this.stackCtrl.getRootUrl(stackId);
2981 };
2982 /**
2983 * Returns the active stack ID. In the context of ion-tabs, it means the active tab.
2984 */
2985 IonRouterOutlet.prototype.getActiveStackId = function () {
2986 return this.stackCtrl.getActiveStackId();
2987 };
2988 /**
2989 * Since the activated route can change over the life time of a component in an ion router outlet, we create
2990 * a proxy so that we can update the values over time as a user navigates back to components already in the stack.
2991 */
2992 IonRouterOutlet.prototype.createActivatedRouteProxy = function (component$, activatedRoute) {
2993 var proxy = new router.ActivatedRoute();
2994 proxy._futureSnapshot = activatedRoute._futureSnapshot;
2995 proxy._routerState = activatedRoute._routerState;
2996 proxy.snapshot = activatedRoute.snapshot;
2997 proxy.outlet = activatedRoute.outlet;
2998 proxy.component = activatedRoute.component;
2999 // Setup wrappers for the observables so consumers don't have to worry about switching to new observables as the state updates
3000 proxy._paramMap = this.proxyObservable(component$, 'paramMap');
3001 proxy._queryParamMap = this.proxyObservable(component$, 'queryParamMap');
3002 proxy.url = this.proxyObservable(component$, 'url');
3003 proxy.params = this.proxyObservable(component$, 'params');
3004 proxy.queryParams = this.proxyObservable(component$, 'queryParams');
3005 proxy.fragment = this.proxyObservable(component$, 'fragment');
3006 proxy.data = this.proxyObservable(component$, 'data');
3007 return proxy;
3008 };
3009 /**
3010 * Create a wrapped observable that will switch to the latest activated route matched by the given component
3011 */
3012 IonRouterOutlet.prototype.proxyObservable = function (component$, path) {
3013 var _this = this;
3014 return component$.pipe(
3015 // First wait until the component instance is pushed
3016 operators.filter(function (component) { return !!component; }), operators.switchMap(function (component) {
3017 return _this.currentActivatedRoute$.pipe(operators.filter(function (current) { return current !== null && current.component === component; }), operators.switchMap(function (current) { return current && current.activatedRoute[path]; }), operators.distinctUntilChanged());
3018 }));
3019 };
3020 /**
3021 * Updates the activated route proxy for the given component to the new incoming router state
3022 */
3023 IonRouterOutlet.prototype.updateActivatedRouteProxy = function (component, activatedRoute) {
3024 var proxy = this.proxyMap.get(component);
3025 if (!proxy) {
3026 throw new Error("Could not find activated route proxy for view");
3027 }
3028 proxy._futureSnapshot = activatedRoute._futureSnapshot;
3029 proxy._routerState = activatedRoute._routerState;
3030 proxy.snapshot = activatedRoute.snapshot;
3031 proxy.outlet = activatedRoute.outlet;
3032 proxy.component = activatedRoute.component;
3033 this.currentActivatedRoute$.next({ component: component, activatedRoute: activatedRoute });
3034 };
3035 IonRouterOutlet.ctorParameters = function () { return [
3036 { type: router.ChildrenOutletContexts },
3037 { type: core.ViewContainerRef },
3038 { type: core.ComponentFactoryResolver },
3039 { type: String, decorators: [{ type: core.Attribute, args: ['name',] }] },
3040 { type: String, decorators: [{ type: core.Optional }, { type: core.Attribute, args: ['tabs',] }] },
3041 { type: Config },
3042 { type: NavController },
3043 { type: common.Location },
3044 { type: core.ElementRef },
3045 { type: router.Router },
3046 { type: core.NgZone },
3047 { type: router.ActivatedRoute },
3048 { type: IonRouterOutlet, decorators: [{ type: core.SkipSelf }, { type: core.Optional }] }
3049 ]; };
3050 __decorate([
3051 core.Output()
3052 ], IonRouterOutlet.prototype, "stackEvents", void 0);
3053 __decorate([
3054 core.Output('activate')
3055 ], IonRouterOutlet.prototype, "activateEvents", void 0);
3056 __decorate([
3057 core.Output('deactivate')
3058 ], IonRouterOutlet.prototype, "deactivateEvents", void 0);
3059 IonRouterOutlet = __decorate([
3060 core.Directive({
3061 selector: 'ion-router-outlet',
3062 exportAs: 'outlet',
3063 inputs: ['animated', 'swipeGesture']
3064 }),
3065 __param(3, core.Attribute('name')),
3066 __param(4, core.Optional()), __param(4, core.Attribute('tabs')),
3067 __param(12, core.SkipSelf()), __param(12, core.Optional())
3068 ], IonRouterOutlet);
3069 return IonRouterOutlet;
3070 }());
3071 var OutletInjector = /** @class */ (function () {
3072 function OutletInjector(route, childContexts, parent) {
3073 this.route = route;
3074 this.childContexts = childContexts;
3075 this.parent = parent;
3076 }
3077 OutletInjector.prototype.get = function (token, notFoundValue) {
3078 if (token === router.ActivatedRoute) {
3079 return this.route;
3080 }
3081 if (token === router.ChildrenOutletContexts) {
3082 return this.childContexts;
3083 }
3084 // tslint:disable-next-line
3085 return this.parent.get(token, notFoundValue);
3086 };
3087 return OutletInjector;
3088 }());
3089
3090 var IonTabs = /** @class */ (function () {
3091 function IonTabs(navCtrl) {
3092 this.navCtrl = navCtrl;
3093 this.ionTabsWillChange = new core.EventEmitter();
3094 this.ionTabsDidChange = new core.EventEmitter();
3095 }
3096 /**
3097 * @internal
3098 */
3099 IonTabs.prototype.onPageSelected = function (detail) {
3100 var stackId = detail.enteringView.stackId;
3101 if (detail.tabSwitch && stackId !== undefined) {
3102 if (this.tabBar) {
3103 this.tabBar.selectedTab = stackId;
3104 }
3105 this.ionTabsWillChange.emit({ tab: stackId });
3106 this.ionTabsDidChange.emit({ tab: stackId });
3107 }
3108 };
3109 /**
3110 * When a tab button is clicked, there are several scenarios:
3111 * 1. If the selected tab is currently active (the tab button has been clicked
3112 * again), then it should go to the root view for that tab.
3113 *
3114 * a. Get the saved root view from the router outlet. If the saved root view
3115 * matches the tabRootUrl, set the route view to this view including the
3116 * navigation extras.
3117 * b. If the saved root view from the router outlet does
3118 * not match, navigate to the tabRootUrl. No navigation extras are
3119 * included.
3120 *
3121 * 2. If the current tab tab is not currently selected, get the last route
3122 * view from the router outlet.
3123 *
3124 * a. If the last route view exists, navigate to that view including any
3125 * navigation extras
3126 * b. If the last route view doesn't exist, then navigate
3127 * to the default tabRootUrl
3128 */
3129 IonTabs.prototype.select = function (tab) {
3130 var alreadySelected = this.outlet.getActiveStackId() === tab;
3131 var tabRootUrl = this.outlet.tabsPrefix + "/" + tab;
3132 if (alreadySelected) {
3133 var rootView = this.outlet.getRootView(tab);
3134 var navigationExtras = rootView && tabRootUrl === rootView.url && rootView.savedExtras;
3135 return this.navCtrl.navigateRoot(tabRootUrl, __assign({}, (navigationExtras), { animated: true, animationDirection: 'back' }));
3136 }
3137 else {
3138 var lastRoute = this.outlet.getLastRouteView(tab);
3139 /**
3140 * If there is a lastRoute, goto that, otherwise goto the fallback url of the
3141 * selected tab
3142 */
3143 var url = lastRoute && lastRoute.url || tabRootUrl;
3144 var navigationExtras = lastRoute && lastRoute.savedExtras;
3145 return this.navCtrl.navigateRoot(url, __assign({}, (navigationExtras), { animated: true, animationDirection: 'back' }));
3146 }
3147 };
3148 IonTabs.prototype.getSelected = function () {
3149 return this.outlet.getActiveStackId();
3150 };
3151 IonTabs.ctorParameters = function () { return [
3152 { type: NavController }
3153 ]; };
3154 __decorate([
3155 core.ViewChild('outlet', { read: IonRouterOutlet, static: false })
3156 ], IonTabs.prototype, "outlet", void 0);
3157 __decorate([
3158 core.ContentChild(IonTabBar, { static: false })
3159 ], IonTabs.prototype, "tabBar", void 0);
3160 __decorate([
3161 core.Output()
3162 ], IonTabs.prototype, "ionTabsWillChange", void 0);
3163 __decorate([
3164 core.Output()
3165 ], IonTabs.prototype, "ionTabsDidChange", void 0);
3166 __decorate([
3167 core.HostListener('ionTabButtonClick', ['$event.detail.tab'])
3168 ], IonTabs.prototype, "select", null);
3169 IonTabs = __decorate([
3170 core.Component({
3171 selector: 'ion-tabs',
3172 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>",
3173 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 }"]
3174 })
3175 ], IonTabs);
3176 return IonTabs;
3177 }());
3178
3179 var IonBackButtonDelegate = /** @class */ (function () {
3180 function IonBackButtonDelegate(routerOutlet, navCtrl) {
3181 this.routerOutlet = routerOutlet;
3182 this.navCtrl = navCtrl;
3183 }
3184 /**
3185 * @internal
3186 */
3187 IonBackButtonDelegate.prototype.onClick = function (ev) {
3188 if (this.routerOutlet && this.routerOutlet.canGoBack()) {
3189 this.routerOutlet.pop();
3190 ev.preventDefault();
3191 }
3192 else if (this.defaultHref != null) {
3193 this.navCtrl.navigateBack(this.defaultHref);
3194 ev.preventDefault();
3195 }
3196 };
3197 IonBackButtonDelegate.ctorParameters = function () { return [
3198 { type: IonRouterOutlet, decorators: [{ type: core.Optional }] },
3199 { type: NavController }
3200 ]; };
3201 __decorate([
3202 core.HostListener('click', ['$event'])
3203 ], IonBackButtonDelegate.prototype, "onClick", null);
3204 IonBackButtonDelegate = __decorate([
3205 core.Directive({
3206 selector: 'ion-back-button',
3207 inputs: ['defaultHref'],
3208 }),
3209 __param(0, core.Optional())
3210 ], IonBackButtonDelegate);
3211 return IonBackButtonDelegate;
3212 }());
3213
3214 var NavDelegate = /** @class */ (function () {
3215 function NavDelegate(ref, resolver, injector, angularDelegate, location) {
3216 this.el = ref.nativeElement;
3217 ref.nativeElement.delegate = angularDelegate.create(resolver, injector, location);
3218 proxyOutputs(this, this.el, ['ionNavDidChange', 'ionNavWillChange']);
3219 }
3220 NavDelegate.ctorParameters = function () { return [
3221 { type: core.ElementRef },
3222 { type: core.ComponentFactoryResolver },
3223 { type: core.Injector },
3224 { type: AngularDelegate },
3225 { type: core.ViewContainerRef }
3226 ]; };
3227 NavDelegate = __decorate([
3228 ProxyCmp({
3229 inputs: ['animated', 'animation', 'root', 'rootParams', 'swipeGesture'],
3230 methods: ['push', 'insert', 'insertPages', 'pop', 'popTo', 'popToRoot', 'removeIndex', 'setRoot', 'setPages', 'getActive', 'getByIndex', 'canGoBack', 'getPrevious']
3231 }),
3232 core.Directive({
3233 selector: 'ion-nav'
3234 })
3235 ], NavDelegate);
3236 return NavDelegate;
3237 }());
3238
3239 var RouterLinkDelegate = /** @class */ (function () {
3240 function RouterLinkDelegate(locationStrategy, navCtrl, elementRef, router, routerLink) {
3241 this.locationStrategy = locationStrategy;
3242 this.navCtrl = navCtrl;
3243 this.elementRef = elementRef;
3244 this.router = router;
3245 this.routerLink = routerLink;
3246 this.routerDirection = 'forward';
3247 }
3248 RouterLinkDelegate.prototype.ngOnInit = function () {
3249 this.updateTargetUrlAndHref();
3250 };
3251 RouterLinkDelegate.prototype.ngOnChanges = function () {
3252 this.updateTargetUrlAndHref();
3253 };
3254 RouterLinkDelegate.prototype.ngOnDestroy = function () {
3255 if (this.subscription) {
3256 this.subscription.unsubscribe();
3257 }
3258 };
3259 RouterLinkDelegate.prototype.updateTargetUrlAndHref = function () {
3260 if (this.routerLink) {
3261 var href = this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.routerLink.urlTree));
3262 this.elementRef.nativeElement.href = href;
3263 }
3264 };
3265 /**
3266 * @internal
3267 */
3268 RouterLinkDelegate.prototype.onClick = function (ev) {
3269 this.navCtrl.setDirection(this.routerDirection);
3270 ev.preventDefault();
3271 };
3272 RouterLinkDelegate.ctorParameters = function () { return [
3273 { type: common.LocationStrategy },
3274 { type: NavController },
3275 { type: core.ElementRef },
3276 { type: router.Router },
3277 { type: router.RouterLink, decorators: [{ type: core.Optional }] }
3278 ]; };
3279 __decorate([
3280 core.HostListener('click', ['$event'])
3281 ], RouterLinkDelegate.prototype, "onClick", null);
3282 RouterLinkDelegate = __decorate([
3283 core.Directive({
3284 selector: '[routerLink]',
3285 inputs: ['routerDirection']
3286 }),
3287 __param(4, core.Optional())
3288 ], RouterLinkDelegate);
3289 return RouterLinkDelegate;
3290 }());
3291
3292 /**
3293 * @hidden
3294 */
3295 var VirtualFooter = /** @class */ (function () {
3296 function VirtualFooter(templateRef) {
3297 this.templateRef = templateRef;
3298 }
3299 VirtualFooter.ctorParameters = function () { return [
3300 { type: core.TemplateRef }
3301 ]; };
3302 VirtualFooter = __decorate([
3303 core.Directive({ selector: '[virtualFooter]' })
3304 ], VirtualFooter);
3305 return VirtualFooter;
3306 }());
3307
3308 /**
3309 * @hidden
3310 */
3311 var VirtualHeader = /** @class */ (function () {
3312 function VirtualHeader(templateRef) {
3313 this.templateRef = templateRef;
3314 }
3315 VirtualHeader.ctorParameters = function () { return [
3316 { type: core.TemplateRef }
3317 ]; };
3318 VirtualHeader = __decorate([
3319 core.Directive({ selector: '[virtualHeader]' })
3320 ], VirtualHeader);
3321 return VirtualHeader;
3322 }());
3323
3324 /**
3325 * @hidden
3326 */
3327 var VirtualItem = /** @class */ (function () {
3328 function VirtualItem(templateRef, viewContainer) {
3329 this.templateRef = templateRef;
3330 this.viewContainer = viewContainer;
3331 }
3332 VirtualItem.ctorParameters = function () { return [
3333 { type: core.TemplateRef },
3334 { type: core.ViewContainerRef }
3335 ]; };
3336 VirtualItem = __decorate([
3337 core.Directive({ selector: '[virtualItem]' })
3338 ], VirtualItem);
3339 return VirtualItem;
3340 }());
3341
3342 var IonVirtualScroll = /** @class */ (function () {
3343 function IonVirtualScroll(z, iterableDiffers, elementRef) {
3344 this.z = z;
3345 this.iterableDiffers = iterableDiffers;
3346 this.refMap = new WeakMap();
3347 this.el = elementRef.nativeElement;
3348 this.el.nodeRender = this.nodeRender.bind(this);
3349 }
3350 IonVirtualScroll.prototype.ngOnChanges = function (changes) {
3351 if (this.trackBy && 'items' in changes) {
3352 // React on virtualScroll changes only once all inputs have been initialized
3353 var value = changes['items'].currentValue;
3354 if (this.differ === undefined && value != null) {
3355 try {
3356 this.differ = this.iterableDiffers.find(value).create(this.trackBy);
3357 }
3358 catch (e) {
3359 throw new Error("Cannot find a differ supporting object '" + value + "'. VirtualScroll only supports binding to Iterables such as Arrays.");
3360 }
3361 }
3362 }
3363 };
3364 IonVirtualScroll.prototype.ngDoCheck = function () {
3365 // and if there actually are changes
3366 var changes = this.differ !== undefined && this.items ? this.differ.diff(this.items) : null;
3367 if (changes === null) {
3368 return;
3369 }
3370 // TODO: optimize
3371 this.checkRange(0);
3372 };
3373 IonVirtualScroll.prototype.nodeRender = function (el, cell, index) {
3374 var _this = this;
3375 return this.z.run(function () {
3376 var node;
3377 if (!el) {
3378 node = _this.itmTmp.viewContainer.createEmbeddedView(_this.getComponent(cell.type), { $implicit: cell.value, index: index }, index);
3379 el = getElement(node);
3380 _this.refMap.set(el, node);
3381 }
3382 else {
3383 node = _this.refMap.get(el);
3384 var ctx = node.context;
3385 ctx.$implicit = cell.value;
3386 ctx.index = cell.index;
3387 }
3388 // run sync change detections
3389 node.detectChanges();
3390 return el;
3391 });
3392 };
3393 IonVirtualScroll.prototype.getComponent = function (type) {
3394 switch (type) {
3395 case 'item': return this.itmTmp.templateRef;
3396 case 'header': return this.hdrTmp.templateRef;
3397 case 'footer': return this.ftrTmp.templateRef;
3398 }
3399 throw new Error('template for virtual item was not provided');
3400 };
3401 IonVirtualScroll.ctorParameters = function () { return [
3402 { type: core.NgZone },
3403 { type: core.IterableDiffers },
3404 { type: core.ElementRef }
3405 ]; };
3406 __decorate([
3407 core.ContentChild(VirtualItem, { static: false })
3408 ], IonVirtualScroll.prototype, "itmTmp", void 0);
3409 __decorate([
3410 core.ContentChild(VirtualHeader, { static: false })
3411 ], IonVirtualScroll.prototype, "hdrTmp", void 0);
3412 __decorate([
3413 core.ContentChild(VirtualFooter, { static: false })
3414 ], IonVirtualScroll.prototype, "ftrTmp", void 0);
3415 IonVirtualScroll = __decorate([
3416 ProxyCmp({
3417 inputs: ['approxItemHeight', 'approxHeaderHeight', 'approxFooterHeight', 'headerFn', 'footerFn', 'items', 'itemHeight', 'headerHeight', 'footerHeight'],
3418 methods: ['checkEnd', 'checkRange', 'positionForItem']
3419 }),
3420 core.Component({
3421 selector: 'ion-virtual-scroll',
3422 template: '<ng-content></ng-content>',
3423 changeDetection: core.ChangeDetectionStrategy.OnPush,
3424 inputs: [
3425 'approxItemHeight',
3426 'approxHeaderHeight',
3427 'approxFooterHeight',
3428 'headerFn',
3429 'footerFn',
3430 'items',
3431 'itemHeight',
3432 'headerHeight',
3433 'footerHeight',
3434 'trackBy'
3435 ]
3436 })
3437 ], IonVirtualScroll);
3438 return IonVirtualScroll;
3439 }());
3440 var getElement = function (view) {
3441 var rootNodes = view.rootNodes;
3442 for (var i = 0; i < rootNodes.length; i++) {
3443 if (rootNodes[i].nodeType === 1) {
3444 return rootNodes[i];
3445 }
3446 }
3447 throw new Error('virtual element was not created');
3448 };
3449 var ɵ0$7 = getElement;
3450
3451 var OverlayBaseController = /** @class */ (function () {
3452 function OverlayBaseController(ctrl) {
3453 this.ctrl = ctrl;
3454 }
3455 /**
3456 * Creates a new overlay
3457 */
3458 OverlayBaseController.prototype.create = function (opts) {
3459 // TODO: next major release opts is not optional
3460 return this.ctrl.create((opts || {}));
3461 };
3462 /**
3463 * When `id` is not provided, it dismisses the top overlay.
3464 */
3465 OverlayBaseController.prototype.dismiss = function (data, role, id) {
3466 return this.ctrl.dismiss(data, role, id);
3467 };
3468 /**
3469 * Returns the top overlay.
3470 */
3471 OverlayBaseController.prototype.getTop = function () {
3472 return this.ctrl.getTop();
3473 };
3474 return OverlayBaseController;
3475 }());
3476
3477 var ActionSheetController = /** @class */ (function (_super) {
3478 __extends(ActionSheetController, _super);
3479 function ActionSheetController() {
3480 return _super.call(this, core$1.actionSheetController) || this;
3481 }
3482 ActionSheetController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function ActionSheetController_Factory() { return new ActionSheetController(); }, token: ActionSheetController, providedIn: "root" });
3483 ActionSheetController = __decorate([
3484 core.Injectable({
3485 providedIn: 'root',
3486 })
3487 ], ActionSheetController);
3488 return ActionSheetController;
3489 }(OverlayBaseController));
3490
3491 var AlertController = /** @class */ (function (_super) {
3492 __extends(AlertController, _super);
3493 function AlertController() {
3494 return _super.call(this, core$1.alertController) || this;
3495 }
3496 AlertController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function AlertController_Factory() { return new AlertController(); }, token: AlertController, providedIn: "root" });
3497 AlertController = __decorate([
3498 core.Injectable({
3499 providedIn: 'root',
3500 })
3501 ], AlertController);
3502 return AlertController;
3503 }(OverlayBaseController));
3504
3505 var LoadingController = /** @class */ (function (_super) {
3506 __extends(LoadingController, _super);
3507 function LoadingController() {
3508 return _super.call(this, core$1.loadingController) || this;
3509 }
3510 LoadingController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function LoadingController_Factory() { return new LoadingController(); }, token: LoadingController, providedIn: "root" });
3511 LoadingController = __decorate([
3512 core.Injectable({
3513 providedIn: 'root',
3514 })
3515 ], LoadingController);
3516 return LoadingController;
3517 }(OverlayBaseController));
3518
3519 var MenuController = /** @class */ (function () {
3520 function MenuController() {
3521 }
3522 /**
3523 * Programmatically open the Menu.
3524 * @param [menuId] Optionally get the menu by its id, or side.
3525 * @return returns a promise when the menu is fully opened
3526 */
3527 MenuController.prototype.open = function (menuId) {
3528 return core$1.menuController.open(menuId);
3529 };
3530 /**
3531 * Programmatically close the Menu. If no `menuId` is given as the first
3532 * argument then it'll close any menu which is open. If a `menuId`
3533 * is given then it'll close that exact menu.
3534 * @param [menuId] Optionally get the menu by its id, or side.
3535 * @return returns a promise when the menu is fully closed
3536 */
3537 MenuController.prototype.close = function (menuId) {
3538 return core$1.menuController.close(menuId);
3539 };
3540 /**
3541 * Toggle the menu. If it's closed, it will open, and if opened, it
3542 * will close.
3543 * @param [menuId] Optionally get the menu by its id, or side.
3544 * @return returns a promise when the menu has been toggled
3545 */
3546 MenuController.prototype.toggle = function (menuId) {
3547 return core$1.menuController.toggle(menuId);
3548 };
3549 /**
3550 * Used to enable or disable a menu. For example, there could be multiple
3551 * left menus, but only one of them should be able to be opened at the same
3552 * time. If there are multiple menus on the same side, then enabling one menu
3553 * will also automatically disable all the others that are on the same side.
3554 * @param [menuId] Optionally get the menu by its id, or side.
3555 * @return Returns the instance of the menu, which is useful for chaining.
3556 */
3557 MenuController.prototype.enable = function (shouldEnable, menuId) {
3558 return core$1.menuController.enable(shouldEnable, menuId);
3559 };
3560 /**
3561 * Used to enable or disable the ability to swipe open the menu.
3562 * @param shouldEnable True if it should be swipe-able, false if not.
3563 * @param [menuId] Optionally get the menu by its id, or side.
3564 * @return Returns the instance of the menu, which is useful for chaining.
3565 */
3566 MenuController.prototype.swipeGesture = function (shouldEnable, menuId) {
3567 return core$1.menuController.swipeGesture(shouldEnable, menuId);
3568 };
3569 /**
3570 * @param [menuId] Optionally get the menu by its id, or side.
3571 * @return Returns true if the specified menu is currently open, otherwise false.
3572 * If the menuId is not specified, it returns true if ANY menu is currenly open.
3573 */
3574 MenuController.prototype.isOpen = function (menuId) {
3575 return core$1.menuController.isOpen(menuId);
3576 };
3577 /**
3578 * @param [menuId] Optionally get the menu by its id, or side.
3579 * @return Returns true if the menu is currently enabled, otherwise false.
3580 */
3581 MenuController.prototype.isEnabled = function (menuId) {
3582 return core$1.menuController.isEnabled(menuId);
3583 };
3584 /**
3585 * Used to get a menu instance. If a `menuId` is not provided then it'll
3586 * return the first menu found. If a `menuId` is `left` or `right`, then
3587 * it'll return the enabled menu on that side. Otherwise, if a `menuId` is
3588 * provided, then it'll try to find the menu using the menu's `id`
3589 * property. If a menu is not found then it'll return `null`.
3590 * @param [menuId] Optionally get the menu by its id, or side.
3591 * @return Returns the instance of the menu if found, otherwise `null`.
3592 */
3593 MenuController.prototype.get = function (menuId) {
3594 return core$1.menuController.get(menuId);
3595 };
3596 /**
3597 * @return Returns the instance of the menu already opened, otherwise `null`.
3598 */
3599 MenuController.prototype.getOpen = function () {
3600 return core$1.menuController.getOpen();
3601 };
3602 /**
3603 * @return Returns an array of all menu instances.
3604 */
3605 MenuController.prototype.getMenus = function () {
3606 return core$1.menuController.getMenus();
3607 };
3608 MenuController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function MenuController_Factory() { return new MenuController(); }, token: MenuController, providedIn: "root" });
3609 MenuController = __decorate([
3610 core.Injectable({
3611 providedIn: 'root',
3612 })
3613 ], MenuController);
3614 return MenuController;
3615 }());
3616
3617 var PickerController = /** @class */ (function (_super) {
3618 __extends(PickerController, _super);
3619 function PickerController() {
3620 return _super.call(this, core$1.pickerController) || this;
3621 }
3622 PickerController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function PickerController_Factory() { return new PickerController(); }, token: PickerController, providedIn: "root" });
3623 PickerController = __decorate([
3624 core.Injectable({
3625 providedIn: 'root',
3626 })
3627 ], PickerController);
3628 return PickerController;
3629 }(OverlayBaseController));
3630
3631 var ModalController = /** @class */ (function (_super) {
3632 __extends(ModalController, _super);
3633 function ModalController(angularDelegate, resolver, injector) {
3634 var _this = _super.call(this, core$1.modalController) || this;
3635 _this.angularDelegate = angularDelegate;
3636 _this.resolver = resolver;
3637 _this.injector = injector;
3638 return _this;
3639 }
3640 ModalController.prototype.create = function (opts) {
3641 return _super.prototype.create.call(this, __assign({}, opts, { delegate: this.angularDelegate.create(this.resolver, this.injector) }));
3642 };
3643 ModalController.ctorParameters = function () { return [
3644 { type: AngularDelegate },
3645 { type: core.ComponentFactoryResolver },
3646 { type: core.Injector }
3647 ]; };
3648 ModalController = __decorate([
3649 core.Injectable()
3650 ], ModalController);
3651 return ModalController;
3652 }(OverlayBaseController));
3653
3654 var PopoverController = /** @class */ (function (_super) {
3655 __extends(PopoverController, _super);
3656 function PopoverController(angularDelegate, resolver, injector) {
3657 var _this = _super.call(this, core$1.popoverController) || this;
3658 _this.angularDelegate = angularDelegate;
3659 _this.resolver = resolver;
3660 _this.injector = injector;
3661 return _this;
3662 }
3663 PopoverController.prototype.create = function (opts) {
3664 return _super.prototype.create.call(this, __assign({}, opts, { delegate: this.angularDelegate.create(this.resolver, this.injector) }));
3665 };
3666 PopoverController.ctorParameters = function () { return [
3667 { type: AngularDelegate },
3668 { type: core.ComponentFactoryResolver },
3669 { type: core.Injector }
3670 ]; };
3671 PopoverController = __decorate([
3672 core.Injectable()
3673 ], PopoverController);
3674 return PopoverController;
3675 }(OverlayBaseController));
3676
3677 var ToastController = /** @class */ (function (_super) {
3678 __extends(ToastController, _super);
3679 function ToastController() {
3680 return _super.call(this, core$1.toastController) || this;
3681 }
3682 ToastController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function ToastController_Factory() { return new ToastController(); }, token: ToastController, providedIn: "root" });
3683 ToastController = __decorate([
3684 core.Injectable({
3685 providedIn: 'root',
3686 })
3687 ], ToastController);
3688 return ToastController;
3689 }(OverlayBaseController));
3690
3691 var DomController = /** @class */ (function () {
3692 function DomController() {
3693 }
3694 /**
3695 * Schedules a task to run during the READ phase of the next frame.
3696 * This task should only read the DOM, but never modify it.
3697 */
3698 DomController.prototype.read = function (cb) {
3699 getQueue().read(cb);
3700 };
3701 /**
3702 * Schedules a task to run during the WRITE phase of the next frame.
3703 * This task should write the DOM, but never READ it.
3704 */
3705 DomController.prototype.write = function (cb) {
3706 getQueue().write(cb);
3707 };
3708 DomController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function DomController_Factory() { return new DomController(); }, token: DomController, providedIn: "root" });
3709 DomController = __decorate([
3710 core.Injectable({
3711 providedIn: 'root',
3712 })
3713 ], DomController);
3714 return DomController;
3715 }());
3716 var getQueue = function () {
3717 var win = typeof window !== 'undefined' ? window : null;
3718 if (win != null) {
3719 var Ionic = win.Ionic;
3720 if (Ionic && Ionic.queue) {
3721 return Ionic.queue;
3722 }
3723 return {
3724 read: function (cb) { return win.requestAnimationFrame(cb); },
3725 write: function (cb) { return win.requestAnimationFrame(cb); }
3726 };
3727 }
3728 return {
3729 read: function (cb) { return cb(); },
3730 write: function (cb) { return cb(); }
3731 };
3732 };
3733 var ɵ0$8 = getQueue;
3734
3735 var AnimationController = /** @class */ (function () {
3736 function AnimationController() {
3737 }
3738 /**
3739 * Create a new animation
3740 */
3741 AnimationController.prototype.create = function (animationId) {
3742 return core$1.createAnimation(animationId);
3743 };
3744 /**
3745 * EXPERIMENTAL
3746 *
3747 * Given a progression and a cubic bezier function,
3748 * this utility returns the time value(s) at which the
3749 * cubic bezier reaches the given time progression.
3750 *
3751 * If the cubic bezier never reaches the progression
3752 * the result will be an empty array.
3753 *
3754 * This is most useful for switching between easing curves
3755 * when doing a gesture animation (i.e. going from linear easing
3756 * during a drag, to another easing when `progressEnd` is called)
3757 */
3758 AnimationController.prototype.easingTime = function (p0, p1, p2, p3, progression) {
3759 return core$1.getTimeGivenProgression(p0, p1, p2, p3, progression);
3760 };
3761 AnimationController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function AnimationController_Factory() { return new AnimationController(); }, token: AnimationController, providedIn: "root" });
3762 AnimationController = __decorate([
3763 core.Injectable({
3764 providedIn: 'root',
3765 })
3766 ], AnimationController);
3767 return AnimationController;
3768 }());
3769
3770 var GestureController = /** @class */ (function () {
3771 function GestureController() {
3772 }
3773 /**
3774 * Create a new gesture
3775 */
3776 GestureController.prototype.create = function (opts) {
3777 return core$1.createGesture(opts);
3778 };
3779 GestureController.ngInjectableDef = core.ɵɵdefineInjectable({ factory: function GestureController_Factory() { return new GestureController(); }, token: GestureController, providedIn: "root" });
3780 GestureController = __decorate([
3781 core.Injectable({
3782 providedIn: 'root',
3783 })
3784 ], GestureController);
3785 return GestureController;
3786 }());
3787
3788 var IonicRouteStrategy = /** @class */ (function () {
3789 function IonicRouteStrategy() {
3790 }
3791 IonicRouteStrategy.prototype.shouldDetach = function (_route) {
3792 return false;
3793 };
3794 IonicRouteStrategy.prototype.shouldAttach = function (_route) {
3795 return false;
3796 };
3797 IonicRouteStrategy.prototype.store = function (_route, _detachedTree) {
3798 return;
3799 };
3800 IonicRouteStrategy.prototype.retrieve = function (_route) {
3801 return null;
3802 };
3803 IonicRouteStrategy.prototype.shouldReuseRoute = function (future, curr) {
3804 var e_1, _a;
3805 if (future.routeConfig !== curr.routeConfig) {
3806 return false;
3807 }
3808 // checking router params
3809 var futureParams = future.params;
3810 var currentParams = curr.params;
3811 var keysA = Object.keys(futureParams);
3812 var keysB = Object.keys(currentParams);
3813 if (keysA.length !== keysB.length) {
3814 return false;
3815 }
3816 try {
3817 // Test for A's keys different from B.
3818 for (var keysA_1 = __values(keysA), keysA_1_1 = keysA_1.next(); !keysA_1_1.done; keysA_1_1 = keysA_1.next()) {
3819 var key = keysA_1_1.value;
3820 if (currentParams[key] !== futureParams[key]) {
3821 return false;
3822 }
3823 }
3824 }
3825 catch (e_1_1) { e_1 = { error: e_1_1 }; }
3826 finally {
3827 try {
3828 if (keysA_1_1 && !keysA_1_1.done && (_a = keysA_1.return)) _a.call(keysA_1);
3829 }
3830 finally { if (e_1) throw e_1.error; }
3831 }
3832 return true;
3833 };
3834 return IonicRouteStrategy;
3835 }());
3836
3837 var didInitialize = false;
3838 var appInitialize = function (config, doc, zone) {
3839 return function () {
3840 var win = doc.defaultView;
3841 if (win && typeof window !== 'undefined') {
3842 if (didInitialize) {
3843 console.warn('Ionic Angular was already initialized. Make sure IonicModule.forRoot() is just called once.');
3844 }
3845 didInitialize = true;
3846 var Ionic = win.Ionic = win.Ionic || {};
3847 Ionic.config = __assign({}, config, { _zoneGate: function (h) { return zone.run(h); } });
3848 var aelFn_1 = '__zone_symbol__addEventListener' in doc.body
3849 ? '__zone_symbol__addEventListener'
3850 : 'addEventListener';
3851 return loader.applyPolyfills().then(function () {
3852 return loader.defineCustomElements(win, {
3853 exclude: ['ion-tabs', 'ion-tab'],
3854 syncQueue: true,
3855 raf: raf,
3856 jmp: function (h) { return zone.runOutsideAngular(h); },
3857 ael: function (elm, eventName, cb, opts) {
3858 elm[aelFn_1](eventName, cb, opts);
3859 },
3860 rel: function (elm, eventName, cb, opts) {
3861 elm.removeEventListener(eventName, cb, opts);
3862 }
3863 });
3864 });
3865 }
3866 };
3867 };
3868
3869 var DECLARATIONS = [
3870 // proxies
3871 IonApp,
3872 IonAvatar,
3873 IonBackButton,
3874 IonBackdrop,
3875 IonBadge,
3876 IonButton,
3877 IonButtons,
3878 IonCard,
3879 IonCardContent,
3880 IonCardHeader,
3881 IonCardSubtitle,
3882 IonCardTitle,
3883 IonCheckbox,
3884 IonChip,
3885 IonCol,
3886 IonContent,
3887 IonDatetime,
3888 IonFab,
3889 IonFabButton,
3890 IonFabList,
3891 IonFooter,
3892 IonGrid,
3893 IonHeader,
3894 IonIcon,
3895 IonImg,
3896 IonInfiniteScroll,
3897 IonInfiniteScrollContent,
3898 IonInput,
3899 IonItem,
3900 IonItemDivider,
3901 IonItemGroup,
3902 IonItemOption,
3903 IonItemOptions,
3904 IonItemSliding,
3905 IonLabel,
3906 IonList,
3907 IonListHeader,
3908 IonMenu,
3909 IonMenuButton,
3910 IonMenuToggle,
3911 IonNav,
3912 IonNavLink,
3913 IonNote,
3914 IonProgressBar,
3915 IonRadio,
3916 IonRadioGroup,
3917 IonRange,
3918 IonRefresher,
3919 IonRefresherContent,
3920 IonReorder,
3921 IonReorderGroup,
3922 IonRippleEffect,
3923 IonRow,
3924 IonSearchbar,
3925 IonSegment,
3926 IonSegmentButton,
3927 IonSelect,
3928 IonSelectOption,
3929 IonSkeletonText,
3930 IonSlide,
3931 IonSlides,
3932 IonSpinner,
3933 IonSplitPane,
3934 IonTabBar,
3935 IonTabButton,
3936 IonText,
3937 IonTextarea,
3938 IonThumbnail,
3939 IonToggle,
3940 IonToolbar,
3941 IonTitle,
3942 IonTabs,
3943 // ngModel accessors
3944 BooleanValueAccessor,
3945 NumericValueAccessor,
3946 RadioValueAccessor,
3947 SelectValueAccessor,
3948 TextValueAccessor,
3949 // navigation
3950 IonRouterOutlet,
3951 IonBackButtonDelegate,
3952 NavDelegate,
3953 RouterLinkDelegate,
3954 // virtual scroll
3955 VirtualFooter,
3956 VirtualHeader,
3957 VirtualItem,
3958 IonVirtualScroll
3959 ];
3960 var IonicModule = /** @class */ (function () {
3961 function IonicModule() {
3962 }
3963 IonicModule_1 = IonicModule;
3964 IonicModule.forRoot = function (config) {
3965 return {
3966 ngModule: IonicModule_1,
3967 providers: [
3968 {
3969 provide: ConfigToken,
3970 useValue: config
3971 },
3972 {
3973 provide: core.APP_INITIALIZER,
3974 useFactory: appInitialize,
3975 multi: true,
3976 deps: [
3977 ConfigToken,
3978 common.DOCUMENT,
3979 core.NgZone
3980 ]
3981 }
3982 ]
3983 };
3984 };
3985 var IonicModule_1;
3986 IonicModule = IonicModule_1 = __decorate([
3987 core.NgModule({
3988 declarations: DECLARATIONS,
3989 exports: DECLARATIONS,
3990 providers: [AngularDelegate, ModalController, PopoverController],
3991 imports: [common.CommonModule]
3992 })
3993 ], IonicModule);
3994 return IonicModule;
3995 }());
3996
3997 exports.ActionSheetController = ActionSheetController;
3998 exports.AlertController = AlertController;
3999 exports.AngularDelegate = AngularDelegate;
4000 exports.AnimationController = AnimationController;
4001 exports.BooleanValueAccessor = BooleanValueAccessor;
4002 exports.Config = Config;
4003 exports.DomController = DomController;
4004 exports.GestureController = GestureController;
4005 exports.IonApp = IonApp;
4006 exports.IonAvatar = IonAvatar;
4007 exports.IonBackButton = IonBackButton;
4008 exports.IonBackButtonDelegate = IonBackButtonDelegate;
4009 exports.IonBackdrop = IonBackdrop;
4010 exports.IonBadge = IonBadge;
4011 exports.IonButton = IonButton;
4012 exports.IonButtons = IonButtons;
4013 exports.IonCard = IonCard;
4014 exports.IonCardContent = IonCardContent;
4015 exports.IonCardHeader = IonCardHeader;
4016 exports.IonCardSubtitle = IonCardSubtitle;
4017 exports.IonCardTitle = IonCardTitle;
4018 exports.IonCheckbox = IonCheckbox;
4019 exports.IonChip = IonChip;
4020 exports.IonCol = IonCol;
4021 exports.IonContent = IonContent;
4022 exports.IonDatetime = IonDatetime;
4023 exports.IonFab = IonFab;
4024 exports.IonFabButton = IonFabButton;
4025 exports.IonFabList = IonFabList;
4026 exports.IonFooter = IonFooter;
4027 exports.IonGrid = IonGrid;
4028 exports.IonHeader = IonHeader;
4029 exports.IonIcon = IonIcon;
4030 exports.IonImg = IonImg;
4031 exports.IonInfiniteScroll = IonInfiniteScroll;
4032 exports.IonInfiniteScrollContent = IonInfiniteScrollContent;
4033 exports.IonInput = IonInput;
4034 exports.IonItem = IonItem;
4035 exports.IonItemDivider = IonItemDivider;
4036 exports.IonItemGroup = IonItemGroup;
4037 exports.IonItemOption = IonItemOption;
4038 exports.IonItemOptions = IonItemOptions;
4039 exports.IonItemSliding = IonItemSliding;
4040 exports.IonLabel = IonLabel;
4041 exports.IonList = IonList;
4042 exports.IonListHeader = IonListHeader;
4043 exports.IonMenu = IonMenu;
4044 exports.IonMenuButton = IonMenuButton;
4045 exports.IonMenuToggle = IonMenuToggle;
4046 exports.IonNav = IonNav;
4047 exports.IonNavLink = IonNavLink;
4048 exports.IonNote = IonNote;
4049 exports.IonProgressBar = IonProgressBar;
4050 exports.IonRadio = IonRadio;
4051 exports.IonRadioGroup = IonRadioGroup;
4052 exports.IonRange = IonRange;
4053 exports.IonRefresher = IonRefresher;
4054 exports.IonRefresherContent = IonRefresherContent;
4055 exports.IonReorder = IonReorder;
4056 exports.IonReorderGroup = IonReorderGroup;
4057 exports.IonRippleEffect = IonRippleEffect;
4058 exports.IonRouterOutlet = IonRouterOutlet;
4059 exports.IonRow = IonRow;
4060 exports.IonSearchbar = IonSearchbar;
4061 exports.IonSegment = IonSegment;
4062 exports.IonSegmentButton = IonSegmentButton;
4063 exports.IonSelect = IonSelect;
4064 exports.IonSelectOption = IonSelectOption;
4065 exports.IonSkeletonText = IonSkeletonText;
4066 exports.IonSlide = IonSlide;
4067 exports.IonSlides = IonSlides;
4068 exports.IonSpinner = IonSpinner;
4069 exports.IonSplitPane = IonSplitPane;
4070 exports.IonTabBar = IonTabBar;
4071 exports.IonTabButton = IonTabButton;
4072 exports.IonTabs = IonTabs;
4073 exports.IonText = IonText;
4074 exports.IonTextarea = IonTextarea;
4075 exports.IonThumbnail = IonThumbnail;
4076 exports.IonTitle = IonTitle;
4077 exports.IonToggle = IonToggle;
4078 exports.IonToolbar = IonToolbar;
4079 exports.IonVirtualScroll = IonVirtualScroll;
4080 exports.IonicModule = IonicModule;
4081 exports.IonicRouteStrategy = IonicRouteStrategy;
4082 exports.LoadingController = LoadingController;
4083 exports.MenuController = MenuController;
4084 exports.ModalController = ModalController;
4085 exports.NavController = NavController;
4086 exports.NavDelegate = NavDelegate;
4087 exports.NavParams = NavParams;
4088 exports.NumericValueAccessor = NumericValueAccessor;
4089 exports.PickerController = PickerController;
4090 exports.Platform = Platform;
4091 exports.PopoverController = PopoverController;
4092 exports.RadioValueAccessor = RadioValueAccessor;
4093 exports.RouterLinkDelegate = RouterLinkDelegate;
4094 exports.SelectValueAccessor = SelectValueAccessor;
4095 exports.TextValueAccessor = TextValueAccessor;
4096 exports.ToastController = ToastController;
4097 exports.VirtualFooter = VirtualFooter;
4098 exports.VirtualHeader = VirtualHeader;
4099 exports.VirtualItem = VirtualItem;
4100 exports.ɵa = ConfigToken;
4101 exports.ɵb = ValueAccessor;
4102 exports.ɵc = ProxyCmp;
4103 exports.ɵe = OverlayBaseController;
4104 exports.ɵf = appInitialize;
4105
4106 Object.defineProperty(exports, '__esModule', { value: true });
4107
4108})));
4109//# sourceMappingURL=ionic-angular.umd.js.map