UNPKG

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