@sumaris-net/ngx-components 2.2.6-rc1 → 2.2.6-rc3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,4 +29,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
29
29
  type: Injectable,
30
30
  args: [{ providedIn: 'root' }]
31
31
  }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUVVLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUU3QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztLQXVCdEQ7SUFyQkMsSUFBSTtRQUNBLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQzs7K0dBdkJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRE4sTUFBTTsyRkFDbEIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBQcm9ncmVzc01vZGUgPSAnZGV0ZXJtaW5hdGUnIHwgJ2luZGV0ZXJtaW5hdGUnIHwgJ2J1ZmZlcicgfCAncXVlcnknO1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0JhclNlcnZpY2Uge1xuICBwcml2YXRlIF9yZXF1ZXN0c1J1bm5pbmcgPSAwO1xuXG4gIG9uUHJvZ3Jlc3NDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9ncmVzc01vZGU+KCk7XG5cbiAgbGlzdCgpOiBudW1iZXIge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RzUnVubmluZztcbiAgfVxuXG4gIGluY3JlYXNlKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlcXVlc3RzUnVubmluZysrO1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0c1J1bm5pbmcgPT09IDEpIHtcbiAgICAgICAgdGhpcy5vblByb2dyZXNzQ2hhbmdlZC5lbWl0KCdxdWVyeScpO1xuICAgIH1cbiAgfVxuXG4gIGRlY3JlYXNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZXF1ZXN0c1J1bm5pbmcgPiAwKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RzUnVubmluZy0tO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVxdWVzdHNSdW5uaW5nID09PSAwKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3NDaGFuZ2VkLmVtaXQobnVsbCk7XG4gICAgfVxuICB9XG5cblxufVxuIl19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtYmFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFNdkQsTUFBTSxPQUFPLGtCQUFrQjtJQUQvQjtRQUVVLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUU3QixzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztLQXVCekQ7SUFyQkMsSUFBSTtRQUNBLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDeEM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQzs7K0dBdkJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRE4sTUFBTTsyRkFDbEIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvZ3Jlc3NCYXJNb2RlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIFByb2dyZXNzTW9kZSA9IFByb2dyZXNzQmFyTW9kZTtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NCYXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfcmVxdWVzdHNSdW5uaW5nID0gMDtcblxuICBvblByb2dyZXNzQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZ3Jlc3NCYXJNb2RlPigpO1xuXG4gIGxpc3QoKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0c1J1bm5pbmc7XG4gIH1cblxuICBpbmNyZWFzZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXF1ZXN0c1J1bm5pbmcrKztcbiAgICBpZiAodGhpcy5fcmVxdWVzdHNSdW5uaW5nID09PSAxKSB7XG4gICAgICAgIHRoaXMub25Qcm9ncmVzc0NoYW5nZWQuZW1pdCgncXVlcnknKTtcbiAgICB9XG4gIH1cblxuICBkZWNyZWFzZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVxdWVzdHNSdW5uaW5nID4gMCkge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0c1J1bm5pbmctLTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlcXVlc3RzUnVubmluZyA9PT0gMCkge1xuICAgICAgdGhpcy5vblByb2dyZXNzQ2hhbmdlZC5lbWl0KG51bGwpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
2
2
  import { isNotNil, isNotNilOrBlank, toBoolean } from '../functions';
3
3
  import { debounceTime, distinctUntilChanged, startWith, tap } from 'rxjs/operators';
4
+ import { of } from 'rxjs';
4
5
  import { HAMMER_PRESS_TIME } from '../gesture/gesture-config';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/router";
@@ -33,16 +34,22 @@ export class ToolbarComponent {
33
34
  this.showSearchBar = false;
34
35
  // Listen progress bar service mode
35
36
  if (progressBarService) {
36
- this.progressBarMode$ = progressBarService.onProgressChanged
37
- .pipe(startWith('none'), tap((mode) => console.debug('[toolbar] Updating progressBarMode: ' + mode)), debounceTime(100), // wait 100ms, to group changes
38
- distinctUntilChanged());
37
+ this._progressBarMode$ = progressBarService.onProgressChanged
38
+ .pipe(startWith(null), // none, by default
39
+ debounceTime(100), // wait 100ms, to group changes
40
+ distinctUntilChanged(),
41
+ // DEBUG
42
+ tap((mode) => console.debug('[toolbar] Updating progressBarMode: ' + mode)));
43
+ }
44
+ else {
45
+ this._progressBarMode$ = of(null);
39
46
  }
40
47
  }
41
48
  set backHref(value) {
42
49
  if (value !== this._backHref) {
43
50
  this._backHref = value;
44
51
  this.canGoBack = this.canGoBack || isNotNil(value);
45
- this.cd.markForCheck();
52
+ this.markForCheck();
46
53
  }
47
54
  }
48
55
  get backHref() {
@@ -52,7 +59,7 @@ export class ToolbarComponent {
52
59
  if (value !== this._defaultBackHref) {
53
60
  this._defaultBackHref = value;
54
61
  this.canGoBack = this.canGoBack || isNotNil(value);
55
- this.cd.markForCheck();
62
+ this.markForCheck();
56
63
  }
57
64
  }
58
65
  get defaultBackHref() {
@@ -182,12 +189,12 @@ export class ToolbarComponent {
182
189
  ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.IonRouterOutlet }, { token: i0.ChangeDetectorRef }, { token: i3.ProgressBarService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
183
190
  ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ToolbarComponent, selector: "app-toolbar", inputs: { title: "title", color: "color", class: "class", backHref: "backHref", defaultBackHref: "defaultBackHref", hasValidate: "hasValidate", hasClose: "hasClose", hasSearch: "hasSearch", canGoBack: "canGoBack", canShowMenu: "canShowMenu" }, outputs: { onValidate: "onValidate", onClose: "onClose", onValidateAndClose: "onValidateAndClose", onBackClick: "onBackClick", onSearch: "onSearch" }, providers: [
184
191
  { provide: ToolbarToken, useExisting: ToolbarComponent }
185
- ], viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }, { propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true, static: true }], ngImport: i0, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
192
+ ], viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }, { propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true, static: true }], ngImport: i0, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"_progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
186
193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ToolbarComponent, decorators: [{
187
194
  type: Component,
188
195
  args: [{ selector: 'app-toolbar', providers: [
189
196
  { provide: ToolbarToken, useExisting: ToolbarComponent }
190
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n" }]
197
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"_progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n" }]
191
198
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.IonRouterOutlet }, { type: i0.ChangeDetectorRef }, { type: i3.ProgressBarService, decorators: [{
192
199
  type: Optional
193
200
  }] }]; }, propDecorators: { title: [{
@@ -227,4 +234,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
227
234
  type: ViewChild,
228
235
  args: ['menuToggle', { static: true }]
229
236
  }] } });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpKLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFJNUQsTUFBTSxPQUFnQixZQUFZO0NBS2pDO0FBV0QsTUFBTSxPQUFPLGdCQUFnQjtJQXlEM0IsWUFDVSxLQUFxQixFQUNyQixNQUFjLEVBQ2QsWUFBNkIsRUFDN0IsRUFBcUIsRUFDakIsa0JBQXNDO1FBSjFDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUEzRHZCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQUlyQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBRW5CLFVBQUssR0FBYyxTQUFTLENBQUM7UUFHdEMsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQTBCRixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2pC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QUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UHJvZ3Jlc3NCYXJTZXJ2aWNlLCBQcm9ncmVzc01vZGV9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyZXNzLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7SW9uTWVudVRvZ2dsZSwgSW9uUm91dGVyT3V0bGV0LCBJb25TZWFyY2hiYXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7aXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFufSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7SGFtbWVyVGFwRXZlbnR9IGZyb20gJy4uL2dlc3R1cmUvaGFtbWVyLnV0aWxzJztcbmltcG9ydCB7SEFNTUVSX1BSRVNTX1RJTUV9IGZyb20gJy4uL2dlc3R1cmUvZ2VzdHVyZS1jb25maWcnO1xuaW1wb3J0IHtBcHBDb2xvcnN9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7U2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWwgYXMgSVNlYXJjaGJhclNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsfSBmcm9tICdAaW9uaWMvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMvc2VhcmNoYmFyL3NlYXJjaGJhci1pbnRlcmZhY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVG9vbGJhclRva2VuIHtcbiAgYWJzdHJhY3Qgb25CYWNrQ2xpY2s6IE9ic2VydmFibGU8RXZlbnQ+O1xuICBhYnN0cmFjdCBkb0JhY2tDbGljayhldmVudDogRXZlbnQpO1xuICBhYnN0cmFjdCBnb0JhY2soKTogUHJvbWlzZTx2b2lkPjtcbiAgYWJzdHJhY3QgY2FuR29CYWNrOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdG9vbGJhcicsXG4gIHRlbXBsYXRlVXJsOiAndG9vbGJhci5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdG9vbGJhci5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBUb29sYmFyVG9rZW4sIHVzZUV4aXN0aW5nOiBUb29sYmFyQ29tcG9uZW50fVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgVG9vbGJhclRva2VuLCBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfY2xvc2VUYXBDb3VudCA9IDA7XG4gIHByaXZhdGUgX3ZhbGlkYXRlVGFwQ291bnQgPSAwO1xuICBwcml2YXRlIF9kZWZhdWx0QmFja0hyZWY6IHN0cmluZztcbiAgcHJpdmF0ZSBfYmFja0hyZWY6IHN0cmluZztcblxuICBASW5wdXQoKSB0aXRsZTogU3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgY29sb3I6IEFwcENvbG9ycyA9ICdwcmltYXJ5JztcblxuICBASW5wdXQoKVxuICBjbGFzcyA9ICcnO1xuXG4gIEBJbnB1dCgpIHNldCBiYWNrSHJlZih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9iYWNrSHJlZikge1xuICAgICAgdGhpcy5fYmFja0hyZWYgPSB2YWx1ZTtcbiAgICAgIHRoaXMuY2FuR29CYWNrID0gdGhpcy5jYW5Hb0JhY2sgfHwgaXNOb3ROaWwodmFsdWUpO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYmFja0hyZWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja0hyZWY7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGVmYXVsdEJhY2tIcmVmKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2RlZmF1bHRCYWNrSHJlZikge1xuICAgICAgdGhpcy5fZGVmYXVsdEJhY2tIcmVmID0gdmFsdWU7XG4gICAgICB0aGlzLmNhbkdvQmFjayA9IHRoaXMuY2FuR29CYWNrIHx8IGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlZmF1bHRCYWNrSHJlZigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0QmFja0hyZWY7XG4gIH1cblxuICBASW5wdXQoKSBoYXNWYWxpZGF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNDbG9zZSA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNTZWFyY2g6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhbkdvQmFjazogYm9vbGVhbjtcbiAgQElucHV0KCkgY2FuU2hvd01lbnUgPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblZhbGlkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uQ2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25WYWxpZGF0ZUFuZENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uQmFja0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxDdXN0b21FdmVudDxJU2VhcmNoYmFyU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWw+PigpO1xuXG4gIHByb2dyZXNzQmFyTW9kZSQ6IE9ic2VydmFibGU8UHJvZ3Jlc3NNb2RlPjtcbiAgc2hvd1NlYXJjaEJhciA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaGJhcicsIHtzdGF0aWM6IHRydWV9KSBzZWFyY2hiYXI6IElvblNlYXJjaGJhcjtcbiAgQFZpZXdDaGlsZCgnbWVudVRvZ2dsZScsIHtzdGF0aWM6IHRydWV9KSBtZW51VG9nZ2xlOiBJb25NZW51VG9nZ2xlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJvdXRlck91dGxldDogSW9uUm91dGVyT3V0bGV0LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByb2dyZXNzQmFyU2VydmljZTogUHJvZ3Jlc3NCYXJTZXJ2aWNlXG4gICkge1xuXG4gICAgLy8gTGlzdGVuIHByb2dyZXNzIGJhciBzZXJ2aWNlIG1vZGVcbiAgICBpZiAocHJvZ3Jlc3NCYXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnByb2dyZXNzQmFyTW9kZSQgPSBwcm9ncmVzc0JhclNlcnZpY2Uub25Qcm9ncmVzc0NoYW5nZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoPFByb2dyZXNzTW9kZT4oJ25vbmUnIGFzIFByb2dyZXNzTW9kZSksXG4gICAgICAgICAgdGFwKChtb2RlKSA9PiBjb25zb2xlLmRlYnVnKCdbdG9vbGJhcl0gVXBkYXRpbmcgcHJvZ3Jlc3NCYXJNb2RlOiAnICsgbW9kZSkpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLCAvLyB3YWl0IDEwMG1zLCB0byBncm91cCBjaGFuZ2VzXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGFzVmFsaWRhdGUgPSB0b0Jvb2xlYW4odGhpcy5oYXNWYWxpZGF0ZSwgdGhpcy5vblZhbGlkYXRlLm9ic2VydmVycy5sZW5ndGggPiAwKTtcbiAgICB0aGlzLmNhbkdvQmFjayA9IHRvQm9vbGVhbih0aGlzLmNhbkdvQmFjaywgdGhpcy5yb3V0ZXJPdXRsZXQuY2FuR29CYWNrKClcbiAgICAgIHx8IGlzTm90TmlsT3JCbGFuayh0aGlzLl9iYWNrSHJlZilcbiAgICAgIHx8IGlzTm90TmlsT3JCbGFuayh0aGlzLl9kZWZhdWx0QmFja0hyZWYpKTtcbiAgICB0aGlzLmhhc1NlYXJjaCA9IHRvQm9vbGVhbih0aGlzLmhhc1NlYXJjaCwgdGhpcy5vblNlYXJjaC5vYnNlcnZlcnMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQmFja0NsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vbkJhY2tDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25DbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25DbG9zZS51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblZhbGlkYXRlQW5kQ2xvc2UudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5vblNlYXJjaC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgdG9nZ2xlU2VhcmNoQmFyKCkge1xuICAgIHRoaXMuc2hvd1NlYXJjaEJhciA9ICF0aGlzLnNob3dTZWFyY2hCYXI7XG4gICAgaWYgKHRoaXMuc2hvd1NlYXJjaEJhciAmJiB0aGlzLnNlYXJjaGJhcikge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoYmFyLnNldEZvY3VzKCk7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIGRvQmFja0NsaWNrKGV2ZW50OiBFdmVudCkge1xuXG4gICAgdGhpcy5vbkJhY2tDbGljay5lbWl0KGV2ZW50KTtcblxuICAgIC8vIFN0b3AgcHJvcGFnYXRpb24sIGlmIG5lZWQgKGNhbiBiZSBjYW5jZWxsZWQgYnkgb25CYWNrQ2xpY2sgb2JzZXJ2ZXJzKVxuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBFeGVjdXRlIHRoZSBiYWNrIGFjdGlvblxuICAgIHRoaXMuZ29CYWNrKCk7XG4gIH1cblxuICBhc3luYyBnb0JhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW3Rvb2xiYXJdIGNhbGxpbmcgZ29CYWNrKCknKTtcbiAgICBpZiAodGhpcy5fYmFja0hyZWYpIHtcbiAgICAgIGNvbnN0IHJlcGxhY2VVcmwgPSAhdGhpcy5yb3V0ZXJPdXRsZXQuY2FuR29CYWNrKCk7XG4gICAgICAvLyBSZWxhdGl2ZSBocmVmXG4gICAgICBpZiAodGhpcy5fYmFja0hyZWYuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLl9iYWNrSHJlZl0sIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCByZXBsYWNlVXJsfSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLl9iYWNrSHJlZiwge3JlcGxhY2VVcmx9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5yb3V0ZXJPdXRsZXQuY2FuR29CYWNrKCkpIHtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyT3V0bGV0LnBvcCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLl9kZWZhdWx0QmFja0hyZWYpIHtcbiAgICAgIC8vIFJlbGF0aXZlIGhyZWZcbiAgICAgIGlmICh0aGlzLl9kZWZhdWx0QmFja0hyZWYuc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLl9kZWZhdWx0QmFja0hyZWZdLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcmVwbGFjZVVybDogdHJ1ZX0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5fZGVmYXVsdEJhY2tIcmVmLCB7XG4gICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1t0b29sYmFyXSBDYW5ub3QgZ28gYmFjay4gTWlzc2luZyBhdHRyaWJ1dGUgXFwnZGVmYXVsdEJhY2tIcmVmXFwnIG9yIFxcJ2JhY2tIcmVmXFwnJyk7XG4gICAgfVxuICB9XG5cbiAgdGFwQ2xvc2UoZXZlbnQ6IEhhbW1lclRhcEV2ZW50KSB7XG4gICAgLy8gREVWIG9ubHlcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwiW3Rvb2xiYXJdIHRhcENsb3NlXCIsIGV2ZW50LnRhcENvdW50KTtcbiAgICBpZiAodGhpcy5fdmFsaWRhdGVUYXBDb3VudCA+IDApIHJldHVybjtcblxuICAgIC8vIERpc3Rpbmd1aXNoIHNpbXBsZSBhbmQgZG91YmxlIHRhcFxuICAgIHRoaXMuX2Nsb3NlVGFwQ291bnQgPSBldmVudC50YXBDb3VudDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIEV2ZW50IGlzIG9ic29sZXRlIChhIG5ldyB0YXAgZXZlbnQgb2NjdXIpXG4gICAgICBpZiAoZXZlbnQudGFwQ291bnQgPCB0aGlzLl9jbG9zZVRhcENvdW50KSB7XG4gICAgICAgIC8vIElnbm9yZSBldmVudFxuICAgICAgfVxuXG4gICAgICAvLyBJZiBldmVudCBzdGlsbCB0aGUgbGFzdCB0YXAgZXZlbnQ6IHByb2Nlc3MgaXRcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdChldmVudC5zcmNFdmVudCB8fCBldmVudCk7XG5cbiAgICAgICAgLy8gUmVzZXQgdGFiIGNvdW50XG4gICAgICAgIHRoaXMuX2Nsb3NlVGFwQ291bnQgPSAwO1xuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICB0YXBWYWxpZGF0ZShldmVudDogSGFtbWVyVGFwRXZlbnQpIHtcbiAgICAvLyBERVYgb25seVxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlt0b29sYmFyXSB0YXBWYWxpZGF0ZVwiLCBldmVudC50YXBDb3VudCk7XG5cbiAgICBpZiAodGhpcy5vblZhbGlkYXRlQW5kQ2xvc2Uub2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vblZhbGlkYXRlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIERpc3Rpbmd1aXNoIHNpbXBsZSBhbmQgZG91YmxlIHRhcFxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fdmFsaWRhdGVUYXBDb3VudCA9IGV2ZW50LnRhcENvdW50O1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIEV2ZW50IGlzIG9ic29sZXRlIChhIG5ldyB0YXAgZXZlbnQgb2NjdXIpXG4gICAgICAgIGlmIChldmVudC50YXBDb3VudCA8IHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgZXZlbnRcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIGV2ZW50IHN0aWxsIHRoZSBsYXN0IHRhcCBldmVudDogcHJvY2VzcyBpdFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdGVUYXBDb3VudCA9PT0gMSkge1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh0aGlzLl92YWxpZGF0ZVRhcENvdW50ID49IDIpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlc2V0IHRhYiBjb3VudFxuICAgICAgICAgIHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPSAwO1xuICAgICAgICB9XG4gICAgICB9LCBIQU1NRVJfUFJFU1NfVElNRSsxMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGlvblNlYXJjaEJhckNoYW5nZWQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5vblNlYXJjaC5lbWl0KGV2ZW50IGFzIEN1c3RvbUV2ZW50PElTZWFyY2hiYXJTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbD4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlciBbY2xhc3NdPVwiY2xhc3NcIj5cbiAgPGlvbi10b29sYmFyIFtjb2xvcl09XCJjb2xvclwiPlxuXG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuXG4gICAgICA8IS0tIGJhY2sgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJiYWNrLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkdvQmFja1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG9CYWNrQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJiYWNrXCIgPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJhcnJvdy1iYWNrXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPCEtLSBzaG93IG1lbnUgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1tZW51LXRvZ2dsZSAjbWVudVRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICBbbWVudV09XCInbGVmdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCJjYW5Hb0JhY2sgfHwgIWNhblNob3dNZW51XCI+XG4gICAgICAgIDxpb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cIm1lbnVcIj48L2lvbi1pY29uPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1tZW51LXRvZ2dsZT5cblxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Nsb3Q9c3RhcnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlIFtpbm5lckhUTUxdPVwidGl0bGVcIj48L2lvbi10aXRsZT5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlvbi10aXRsZVwiPjwvbmctY29udGVudD5cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlvbi1idXR0b25zW3Nsb3Q9ZW5kXVwiPjwvbmctY29udGVudD5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCIgY29sbGFwc2U9XCJ0cnVlXCI+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDwhLS0gc2VhcmNoIGJhciAtLT5cbiAgICAgIDxpb24tc2VhcmNoYmFyICNzZWFyY2hiYXIgYW5pbWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dTZWFyY2hCYXJcIlxuICAgICAgICAgICAgICAgICAgICAgc2hvdy1jYW5jZWwtYnV0dG9uPVwiYWx3YXlzXCJcbiAgICAgICAgICAgICAgICAgICAgIChpb25DaGFuZ2UpPVwiaW9uU2VhcmNoQmFyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgIChpb25DYW5jZWwpPVwidG9nZ2xlU2VhcmNoQmFyKClcIj5cbiAgICAgIDwvaW9uLXNlYXJjaGJhcj5cblxuICAgICAgPCEtLSBzZWFyY2ggYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZVNlYXJjaEJhcigpXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VhcmNoICYmICFzaG93U2VhcmNoQmFyXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gY2xvc2UgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJoYXNDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAodGFwKT1cInRhcENsb3NlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGVcIj5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiY2xvc2VcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIHZhbGlkYXRlIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiaGFzVmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgKHRhcCk9XCJ0YXBWYWxpZGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cInNhdmVcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG5cbiAgPCEtLSBwcm9ncmVzcyBiYXIgLS0+XG4gIDxtYXQtcHJvZ3Jlc3MtYmFyIFtjb2xvcl09XCJjb2xvcnxtYXRDb2xvclwiIFttb2RlXT1cInByb2dyZXNzQmFyTW9kZSQgfCBhc3luY1wiPlxuICA8L21hdC1wcm9ncmVzcy1iYXI+XG48L2lvbi1oZWFkZXI+XG4iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3Rvb2xiYXIvdG9vbGJhci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpKLE9BQU8sRUFBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQWEsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztBQUs1RCxNQUFNLE9BQWdCLFlBQVk7Q0FLakM7QUFXRCxNQUFNLE9BQU8sZ0JBQWdCO0lBc0QzQixZQUNVLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxZQUE2QixFQUM3QixFQUFxQixFQUNqQixrQkFBc0M7UUFKMUMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQXhEdkIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBS3JCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsVUFBSyxHQUFjLFNBQVMsQ0FBQztRQUM3QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBMEJYLGdCQUFXLEdBQUcs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O2dCQUlpQyxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0csVUFBVTtzQkFBbEQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Byb2dyZXNzQmFyU2VydmljZSwgUHJvZ3Jlc3NNb2RlfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmVzcy1iYXIuc2VydmljZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0lvbk1lbnVUb2dnbGUsIElvblJvdXRlck91dGxldCwgSW9uU2VhcmNoYmFyfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge2lzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbn0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtIYW1tZXJUYXBFdmVudH0gZnJvbSAnLi4vZ2VzdHVyZS9oYW1tZXIudXRpbHMnO1xuaW1wb3J0IHtIQU1NRVJfUFJFU1NfVElNRX0gZnJvbSAnLi4vZ2VzdHVyZS9nZXN0dXJlLWNvbmZpZyc7XG5pbXBvcnQge0FwcENvbG9yc30gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtTZWFyY2hiYXJDaGFuZ2VFdmVudERldGFpbCBhcyBJU2VhcmNoYmFyU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWx9IGZyb20gJ0Bpb25pYy9jb3JlL2Rpc3QvdHlwZXMvY29tcG9uZW50cy9zZWFyY2hiYXIvc2VhcmNoYmFyLWludGVyZmFjZSc7XG5pbXBvcnQge1Byb2dyZXNzQmFyTW9kZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRvb2xiYXJUb2tlbiB7XG4gIGFic3RyYWN0IG9uQmFja0NsaWNrOiBPYnNlcnZhYmxlPEV2ZW50PjtcbiAgYWJzdHJhY3QgZG9CYWNrQ2xpY2soZXZlbnQ6IEV2ZW50KTtcbiAgYWJzdHJhY3QgZ29CYWNrKCk6IFByb21pc2U8dm9pZD47XG4gIGFic3RyYWN0IGNhbkdvQmFjazogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJ3Rvb2xiYXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rvb2xiYXIuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7cHJvdmlkZTogVG9vbGJhclRva2VuLCB1c2VFeGlzdGluZzogVG9vbGJhckNvbXBvbmVudH1cbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIFRvb2xiYXJUb2tlbiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2Nsb3NlVGFwQ291bnQgPSAwO1xuICBwcml2YXRlIF92YWxpZGF0ZVRhcENvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZGVmYXVsdEJhY2tIcmVmOiBzdHJpbmc7XG4gIHByaXZhdGUgX2JhY2tIcmVmOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcHJvZ3Jlc3NCYXJNb2RlJDogT2JzZXJ2YWJsZTxQcm9ncmVzc0Jhck1vZGU+O1xuXG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgY29sb3I6IEFwcENvbG9ycyA9ICdwcmltYXJ5JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBASW5wdXQoKSBzZXQgYmFja0hyZWYodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fYmFja0hyZWYpIHtcbiAgICAgIHRoaXMuX2JhY2tIcmVmID0gdmFsdWU7XG4gICAgICB0aGlzLmNhbkdvQmFjayA9IHRoaXMuY2FuR29CYWNrIHx8IGlzTm90TmlsKHZhbHVlKTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGJhY2tIcmVmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2JhY2tIcmVmO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGRlZmF1bHRCYWNrSHJlZih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kZWZhdWx0QmFja0hyZWYpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRCYWNrSHJlZiA9IHZhbHVlO1xuICAgICAgdGhpcy5jYW5Hb0JhY2sgPSB0aGlzLmNhbkdvQmFjayB8fCBpc05vdE5pbCh2YWx1ZSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBkZWZhdWx0QmFja0hyZWYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEJhY2tIcmVmO1xuICB9XG5cbiAgQElucHV0KCkgaGFzVmFsaWRhdGUgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzQ2xvc2UgPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzU2VhcmNoOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5Hb0JhY2s6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhblNob3dNZW51ID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgb25WYWxpZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uVmFsaWRhdGVBbmRDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkJhY2tDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8Q3VzdG9tRXZlbnQ8SVNlYXJjaGJhclNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsPj4oKTtcblxuICBzaG93U2VhcmNoQmFyID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoYmFyJywge3N0YXRpYzogdHJ1ZX0pIHNlYXJjaGJhcjogSW9uU2VhcmNoYmFyO1xuICBAVmlld0NoaWxkKCdtZW51VG9nZ2xlJywge3N0YXRpYzogdHJ1ZX0pIG1lbnVUb2dnbGU6IElvbk1lbnVUb2dnbGU7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGVyT3V0bGV0OiBJb25Sb3V0ZXJPdXRsZXQsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJvZ3Jlc3NCYXJTZXJ2aWNlOiBQcm9ncmVzc0JhclNlcnZpY2VcbiAgKSB7XG5cbiAgICAvLyBMaXN0ZW4gcHJvZ3Jlc3MgYmFyIHNlcnZpY2UgbW9kZVxuICAgIGlmIChwcm9ncmVzc0JhclNlcnZpY2UpIHtcbiAgICAgIHRoaXMuX3Byb2dyZXNzQmFyTW9kZSQgPSBwcm9ncmVzc0JhclNlcnZpY2Uub25Qcm9ncmVzc0NoYW5nZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKDxQcm9ncmVzc0Jhck1vZGU+bnVsbCksIC8vIG5vbmUsIGJ5IGRlZmF1bHRcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSwgLy8gd2FpdCAxMDBtcywgdG8gZ3JvdXAgY2hhbmdlc1xuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIHRhcCgobW9kZSkgPT4gY29uc29sZS5kZWJ1ZygnW3Rvb2xiYXJdIFVwZGF0aW5nIHByb2dyZXNzQmFyTW9kZTogJyArIG1vZGUpKVxuICAgICAgICApO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX3Byb2dyZXNzQmFyTW9kZSQgPSBvZihudWxsKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhhc1ZhbGlkYXRlID0gdG9Cb29sZWFuKHRoaXMuaGFzVmFsaWRhdGUsIHRoaXMub25WYWxpZGF0ZS5vYnNlcnZlcnMubGVuZ3RoID4gMCk7XG4gICAgdGhpcy5jYW5Hb0JhY2sgPSB0b0Jvb2xlYW4odGhpcy5jYW5Hb0JhY2ssIHRoaXMucm91dGVyT3V0bGV0LmNhbkdvQmFjaygpXG4gICAgICB8fCBpc05vdE5pbE9yQmxhbmsodGhpcy5fYmFja0hyZWYpXG4gICAgICB8fCBpc05vdE5pbE9yQmxhbmsodGhpcy5fZGVmYXVsdEJhY2tIcmVmKSk7XG4gICAgdGhpcy5oYXNTZWFyY2ggPSB0b0Jvb2xlYW4odGhpcy5oYXNTZWFyY2gsIHRoaXMub25TZWFyY2gub2JzZXJ2ZXJzLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkJhY2tDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25CYWNrQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uVmFsaWRhdGUuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uVmFsaWRhdGUudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ2xvc2UuY29tcGxldGUoKTtcbiAgICB0aGlzLm9uQ2xvc2UudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uVmFsaWRhdGVBbmRDbG9zZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblNlYXJjaC5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25TZWFyY2gudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZVNlYXJjaEJhcigpIHtcbiAgICB0aGlzLnNob3dTZWFyY2hCYXIgPSAhdGhpcy5zaG93U2VhcmNoQmFyO1xuICAgIGlmICh0aGlzLnNob3dTZWFyY2hCYXIgJiYgdGhpcy5zZWFyY2hiYXIpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGJhci5zZXRGb2N1cygpO1xuICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSwgMzAwKTtcbiAgICB9XG4gIH1cblxuICBkb0JhY2tDbGljayhldmVudDogRXZlbnQpIHtcblxuICAgIHRoaXMub25CYWNrQ2xpY2suZW1pdChldmVudCk7XG5cbiAgICAvLyBTdG9wIHByb3BhZ2F0aW9uLCBpZiBuZWVkIChjYW4gYmUgY2FuY2VsbGVkIGJ5IG9uQmFja0NsaWNrIG9ic2VydmVycylcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgLy8gRXhlY3V0ZSB0aGUgYmFjayBhY3Rpb25cbiAgICB0aGlzLmdvQmFjaygpO1xuICB9XG5cbiAgYXN5bmMgZ29CYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1t0b29sYmFyXSBjYWxsaW5nIGdvQmFjaygpJyk7XG4gICAgaWYgKHRoaXMuX2JhY2tIcmVmKSB7XG4gICAgICBjb25zdCByZXBsYWNlVXJsID0gIXRoaXMucm91dGVyT3V0bGV0LmNhbkdvQmFjaygpO1xuICAgICAgLy8gUmVsYXRpdmUgaHJlZlxuICAgICAgaWYgKHRoaXMuX2JhY2tIcmVmLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5fYmFja0hyZWZdLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgcmVwbGFjZVVybH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5fYmFja0hyZWYsIHtyZXBsYWNlVXJsfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMucm91dGVyT3V0bGV0LmNhbkdvQmFjaygpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlck91dGxldC5wb3AoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5fZGVmYXVsdEJhY2tIcmVmKSB7XG4gICAgICAvLyBSZWxhdGl2ZSBocmVmXG4gICAgICBpZiAodGhpcy5fZGVmYXVsdEJhY2tIcmVmLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5fZGVmYXVsdEJhY2tIcmVmXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGUsIHJlcGxhY2VVcmw6IHRydWV9KTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuX2RlZmF1bHRCYWNrSHJlZiwge1xuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbdG9vbGJhcl0gQ2Fubm90IGdvIGJhY2suIE1pc3NpbmcgYXR0cmlidXRlIFxcJ2RlZmF1bHRCYWNrSHJlZlxcJyBvciBcXCdiYWNrSHJlZlxcJycpO1xuICAgIH1cbiAgfVxuXG4gIHRhcENsb3NlKGV2ZW50OiBIYW1tZXJUYXBFdmVudCkge1xuICAgIC8vIERFViBvbmx5XG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcIlt0b29sYmFyXSB0YXBDbG9zZVwiLCBldmVudC50YXBDb3VudCk7XG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPiAwKSByZXR1cm47XG5cbiAgICAvLyBEaXN0aW5ndWlzaCBzaW1wbGUgYW5kIGRvdWJsZSB0YXBcbiAgICB0aGlzLl9jbG9zZVRhcENvdW50ID0gZXZlbnQudGFwQ291bnQ7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBFdmVudCBpcyBvYnNvbGV0ZSAoYSBuZXcgdGFwIGV2ZW50IG9jY3VyKVxuICAgICAgaWYgKGV2ZW50LnRhcENvdW50IDwgdGhpcy5fY2xvc2VUYXBDb3VudCkge1xuICAgICAgICAvLyBJZ25vcmUgZXZlbnRcbiAgICAgIH1cblxuICAgICAgLy8gSWYgZXZlbnQgc3RpbGwgdGhlIGxhc3QgdGFwIGV2ZW50OiBwcm9jZXNzIGl0XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoZXZlbnQuc3JjRXZlbnQgfHwgZXZlbnQpO1xuXG4gICAgICAgIC8vIFJlc2V0IHRhYiBjb3VudFxuICAgICAgICB0aGlzLl9jbG9zZVRhcENvdW50ID0gMDtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgdGFwVmFsaWRhdGUoZXZlbnQ6IEhhbW1lclRhcEV2ZW50KSB7XG4gICAgLy8gREVWIG9ubHlcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbdG9vbGJhcl0gdGFwVmFsaWRhdGVcIiwgZXZlbnQudGFwQ291bnQpO1xuXG4gICAgaWYgKHRoaXMub25WYWxpZGF0ZUFuZENsb3NlLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub25WYWxpZGF0ZS5lbWl0KGV2ZW50LnNyY0V2ZW50IHx8IGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBEaXN0aW5ndWlzaCBzaW1wbGUgYW5kIGRvdWJsZSB0YXBcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPSBldmVudC50YXBDb3VudDtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyBFdmVudCBpcyBvYnNvbGV0ZSAoYSBuZXcgdGFwIGV2ZW50IG9jY3VyKVxuICAgICAgICBpZiAoZXZlbnQudGFwQ291bnQgPCB0aGlzLl92YWxpZGF0ZVRhcENvdW50KSB7XG4gICAgICAgICAgLy8gSWdub3JlIGV2ZW50XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBldmVudCBzdGlsbCB0aGUgbGFzdCB0YXAgZXZlbnQ6IHByb2Nlc3MgaXRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlVGFwQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0ZS5lbWl0KGV2ZW50LnNyY0V2ZW50IHx8IGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5fdmFsaWRhdGVUYXBDb3VudCA+PSAyKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGVBbmRDbG9zZS5lbWl0KGV2ZW50LnNyY0V2ZW50IHx8IGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXNldCB0YWIgY291bnRcbiAgICAgICAgICB0aGlzLl92YWxpZGF0ZVRhcENvdW50ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSwgSEFNTUVSX1BSRVNTX1RJTUUrMTApO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBpb25TZWFyY2hCYXJDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMub25TZWFyY2guZW1pdChldmVudCBhcyBDdXN0b21FdmVudDxJU2VhcmNoYmFyU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWw+KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPGlvbi1oZWFkZXIgW2NsYXNzXT1cImNsYXNzXCI+XG4gIDxpb24tdG9vbGJhciBbY29sb3JdPVwiY29sb3JcIj5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cblxuICAgICAgPCEtLSBiYWNrIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uIGNsYXNzPVwiYmFjay1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5Hb0JhY2tcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvQmFja0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwiYmFja1wiID5cbiAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwiYXJyb3ctYmFja1wiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDwhLS0gc2hvdyBtZW51IGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tbWVudS10b2dnbGUgI21lbnVUb2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgW21lbnVdPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiY2FuR29CYWNrIHx8ICFjYW5TaG93TWVudVwiPlxuICAgICAgICA8aW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJtZW51XCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tbWVudS10b2dnbGU+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PXN0YXJ0XVwiPjwvbmctY29udGVudD5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZSBbaW5uZXJIVE1MXT1cInRpdGxlXCI+PC9pb24tdGl0bGU+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpb24tdGl0bGVcIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpb24tYnV0dG9uc1tzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiIGNvbGxhcHNlPVwidHJ1ZVwiPlxuXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1lbmRdXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICA8IS0tIHNlYXJjaCBiYXIgLS0+XG4gICAgICA8aW9uLXNlYXJjaGJhciAjc2VhcmNoYmFyIGFuaW1hdGVkXG4gICAgICAgICAgICAgICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFzaG93U2VhcmNoQmFyXCJcbiAgICAgICAgICAgICAgICAgICAgIHNob3ctY2FuY2VsLWJ1dHRvbj1cImFsd2F5c1wiXG4gICAgICAgICAgICAgICAgICAgICAoaW9uQ2hhbmdlKT1cImlvblNlYXJjaEJhckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAoaW9uQ2FuY2VsKT1cInRvZ2dsZVNlYXJjaEJhcigpXCI+XG4gICAgICA8L2lvbi1zZWFyY2hiYXI+XG5cbiAgICAgIDwhLS0gc2VhcmNoIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVTZWFyY2hCYXIoKVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1NlYXJjaCAmJiAhc2hvd1NlYXJjaEJhclwiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJzZWFyY2hcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICA8IS0tIGNsb3NlIGJ1dHRvbiAtLT5cbiAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiaGFzQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgKHRhcCk9XCJ0YXBDbG9zZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlXCI+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImNsb3NlXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPCEtLSB2YWxpZGF0ZSBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImhhc1ZhbGlkYXRlXCJcbiAgICAgICAgICAgICAgICAgICh0YXApPVwidGFwVmFsaWRhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZpc2libGUteHMgdmlzaWJsZS1zbSB2aXNpYmxlLW1vYmlsZVwiPlxuICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJzYXZlXCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuXG4gIDwhLS0gcHJvZ3Jlc3MgYmFyIC0tPlxuICA8bWF0LXByb2dyZXNzLWJhciBbY29sb3JdPVwiY29sb3J8bWF0Q29sb3JcIiBbbW9kZV09XCJfcHJvZ3Jlc3NCYXJNb2RlJCB8IGFzeW5jXCI+XG4gIDwvbWF0LXByb2dyZXNzLWJhcj5cbjwvaW9uLWhlYWRlcj5cbiJdfQ==
@@ -19063,16 +19063,22 @@ class ToolbarComponent {
19063
19063
  this.showSearchBar = false;
19064
19064
  // Listen progress bar service mode
19065
19065
  if (progressBarService) {
19066
- this.progressBarMode$ = progressBarService.onProgressChanged
19067
- .pipe(startWith('none'), tap((mode) => console.debug('[toolbar] Updating progressBarMode: ' + mode)), debounceTime(100), // wait 100ms, to group changes
19068
- distinctUntilChanged());
19066
+ this._progressBarMode$ = progressBarService.onProgressChanged
19067
+ .pipe(startWith(null), // none, by default
19068
+ debounceTime(100), // wait 100ms, to group changes
19069
+ distinctUntilChanged(),
19070
+ // DEBUG
19071
+ tap((mode) => console.debug('[toolbar] Updating progressBarMode: ' + mode)));
19072
+ }
19073
+ else {
19074
+ this._progressBarMode$ = of(null);
19069
19075
  }
19070
19076
  }
19071
19077
  set backHref(value) {
19072
19078
  if (value !== this._backHref) {
19073
19079
  this._backHref = value;
19074
19080
  this.canGoBack = this.canGoBack || isNotNil(value);
19075
- this.cd.markForCheck();
19081
+ this.markForCheck();
19076
19082
  }
19077
19083
  }
19078
19084
  get backHref() {
@@ -19082,7 +19088,7 @@ class ToolbarComponent {
19082
19088
  if (value !== this._defaultBackHref) {
19083
19089
  this._defaultBackHref = value;
19084
19090
  this.canGoBack = this.canGoBack || isNotNil(value);
19085
- this.cd.markForCheck();
19091
+ this.markForCheck();
19086
19092
  }
19087
19093
  }
19088
19094
  get defaultBackHref() {
@@ -19216,12 +19222,12 @@ class ToolbarComponent {
19216
19222
  ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1$5.ActivatedRoute }, { token: i1$5.Router }, { token: i2.IonRouterOutlet }, { token: i0.ChangeDetectorRef }, { token: ProgressBarService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
19217
19223
  ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ToolbarComponent, selector: "app-toolbar", inputs: { title: "title", color: "color", class: "class", backHref: "backHref", defaultBackHref: "defaultBackHref", hasValidate: "hasValidate", hasClose: "hasClose", hasSearch: "hasSearch", canGoBack: "canGoBack", canShowMenu: "canShowMenu" }, outputs: { onValidate: "onValidate", onClose: "onClose", onValidateAndClose: "onValidateAndClose", onBackClick: "onBackClick", onSearch: "onSearch" }, providers: [
19218
19224
  { provide: ToolbarToken, useExisting: ToolbarComponent }
19219
- ], viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }, { propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true, static: true }], ngImport: i0, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i5$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19225
+ ], viewQueries: [{ propertyName: "searchbar", first: true, predicate: ["searchbar"], descendants: true, static: true }, { propertyName: "menuToggle", first: true, predicate: ["menuToggle"], descendants: true, static: true }], ngImport: i0, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"_progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n", styles: [""], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "component", type: i5$2.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: MatColorPipe, name: "matColor" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19220
19226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ToolbarComponent, decorators: [{
19221
19227
  type: Component,
19222
19228
  args: [{ selector: 'app-toolbar', providers: [
19223
19229
  { provide: ToolbarToken, useExisting: ToolbarComponent }
19224
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n" }]
19230
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header [class]=\"class\">\n <ion-toolbar [color]=\"color\">\n\n <ion-buttons slot=\"start\">\n\n <!-- back button -->\n <ion-button class=\"back-button\"\n *ngIf=\"canGoBack\"\n (click)=\"doBackClick($event)\"\n routerDirection=\"back\" >\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n\n <!-- show menu button -->\n <ion-menu-toggle #menuToggle\n [menu]=\"'left'\"\n [class.cdk-visually-hidden]=\"canGoBack || !canShowMenu\">\n <ion-button>\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n\n <ng-content select=\"[slot=start]\"></ng-content>\n </ion-buttons>\n\n <ion-title [innerHTML]=\"title\"></ion-title>\n\n <ng-content select=\"ion-title\"></ng-content>\n\n <ng-content select=\"ion-buttons[slot=end]\"></ng-content>\n\n <ion-buttons slot=\"end\" collapse=\"true\">\n\n <ng-content select=\"[slot=end]\"></ng-content>\n\n <!-- search bar -->\n <ion-searchbar #searchbar animated\n type=\"search\"\n *ngIf=\"hasSearch\"\n [class.cdk-visually-hidden]=\"!showSearchBar\"\n show-cancel-button=\"always\"\n (ionChange)=\"ionSearchBarChanged($event)\"\n (ionCancel)=\"toggleSearchBar()\">\n </ion-searchbar>\n\n <!-- search button -->\n <ion-button (click)=\"toggleSearchBar()\"\n *ngIf=\"hasSearch && !showSearchBar\">\n <ion-icon slot=\"icon-only\" name=\"search\"></ion-icon>\n </ion-button>\n\n <!-- close button -->\n <ion-button *ngIf=\"hasClose\"\n (tap)=\"tapClose($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"close\"></ion-icon>\n </ion-button>\n\n <!-- validate button -->\n <ion-button *ngIf=\"hasValidate\"\n (tap)=\"tapValidate($event)\"\n class=\"visible-xs visible-sm visible-mobile\">\n <ion-icon slot=\"icon-only\" name=\"save\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n\n <!-- progress bar -->\n <mat-progress-bar [color]=\"color|matColor\" [mode]=\"_progressBarMode$ | async\">\n </mat-progress-bar>\n</ion-header>\n" }]
19225
19231
  }], ctorParameters: function () {
19226
19232
  return [{ type: i1$5.ActivatedRoute }, { type: i1$5.Router }, { type: i2.IonRouterOutlet }, { type: i0.ChangeDetectorRef }, { type: ProgressBarService, decorators: [{
19227
19233
  type: Optional