@sumaris-net/ngx-components 18.26.0 → 18.26.2

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.
@@ -17,7 +17,8 @@ import * as i10 from "@angular/material/badge";
17
17
  import * as i11 from "@angular/material/tooltip";
18
18
  import * as i12 from "../../shared/directives/autofocus.directive";
19
19
  import * as i13 from "../../shared/form/loading-spinner";
20
- import * as i14 from "../../shared/pipes/badge.pipes";
20
+ import * as i14 from "../../shared/pipes/arrays.pipe";
21
+ import * as i15 from "../../shared/pipes/badge.pipes";
21
22
  export class AppIconSelectorModal {
22
23
  title = 'ICON_SELECTOR.TITLE';
23
24
  ionicTabIndex = 0;
@@ -60,12 +61,12 @@ export class AppIconSelectorModal {
60
61
  this.viewCtrl.dismiss(null);
61
62
  }
62
63
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppIconSelectorModal, selector: "app-icon-selector-modal", inputs: { title: "title" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar>\n <ion-title>{{ title | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Barre de recherche -->\n <div class=\"search-bar\">\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-label translate>COMMON.SEARCH</mat-label>\n <input matInput type=\"text\" [ngModel]=\"searchText\" (ngModelChange)=\"onSearchChange($event)\" [placeholder]=\"'COMMON.SEARCH_PLACEHOLDER' | translate\" autofocus>\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- Onglets Ionic / Material -->\n <mat-tab-group [(selectedIndex)]=\"selectedIndex\" *ngIf=\"!loading\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_IONIC' | translate }}\n <span class=\"badge\" [matBadge]=\"ionicFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"primary\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === ionicTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of ionicFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'ionic')\"\n class=\"icon-btn\">\n <ion-icon [name]=\"entry.name\" size=\"large\"></ion-icon>\n </button>\n <div *ngIf=\"ionicFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_MATERIAL' | translate }}\n <span class=\"badge\" [matBadge]=\"materialFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"accent\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === materialTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of materialFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'material')\"\n class=\"icon-btn\">\n <mat-icon>{{ entry.name }}</mat-icon>\n </button>\n <div *ngIf=\"materialFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <app-loading-spinner *ngIf=\"loading\"></app-loading-spinner>\n</ion-content>", styles: [".search-bar{padding:8px 16px 0}.search-field{width:100%}.icon-grid{display:flex;flex-wrap:wrap;gap:4px;padding:8px;max-height:60vh;overflow-y:auto;justify-content:center}.icon-btn{width:44px;height:44px;line-height:44px;border-radius:8px;transition:background-color .15s ease}.icon-btn:hover{background-color:rgba(var(--ion-color-primary-rgb),.12)}.icon-btn:active{background-color:rgba(var(--ion-color-primary-rgb),.24)}.no-results{width:100%;text-align:center;padding:32px 16px;color:var(--ion-color-medium);font-style:italic}.badge{margin-left:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { 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.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i9.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i10.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i13.AppLoadingSpinner, selector: "app-loading-spinner", inputs: ["loading", "color", "name"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.BadgeNumberPipe, name: "badgeNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AppIconSelectorModal, selector: "app-icon-selector-modal", inputs: { title: "title" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar>\n <ion-title>{{ title | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Barre de recherche -->\n <div class=\"search-bar\">\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-label translate>COMMON.SEARCH</mat-label>\n <input matInput type=\"text\" [ngModel]=\"searchText\" (ngModelChange)=\"onSearchChange($event)\" [placeholder]=\"'COMMON.SEARCH_PLACEHOLDER' | translate\" autofocus>\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- Onglets Ionic / Material -->\n <mat-tab-group [(selectedIndex)]=\"selectedIndex\" *ngIf=\"!loading\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_IONIC' | translate }}\n <span class=\"badge\" [matBadge]=\"ionicFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"primary\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === ionicTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of ionicFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'ionic')\">\n <ion-icon [name]=\"entry.name\"></ion-icon>\n </button>\n <div *ngIf=\"ionicFiltered | isEmptyArray\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_MATERIAL' | translate }}\n <span class=\"badge\" [matBadge]=\"materialFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"accent\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === materialTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of materialFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'material')\">\n <mat-icon>{{ entry.name }}</mat-icon>\n </button>\n <div *ngIf=\"materialFiltered | isEmptyArray\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <app-loading-spinner *ngIf=\"loading\"></app-loading-spinner>\n</ion-content>\n", styles: [".search-bar{padding:8px 16px 0}.search-field{width:100%}.icon-grid{display:flex;flex-wrap:wrap;gap:4px;padding:8px;max-height:60vh;overflow-y:auto;justify-content:center}.icon-btn{width:44px;height:44px;line-height:44px;border-radius:8px;transition:background-color .15s ease}.icon-btn:hover{background-color:rgba(var(--ion-color-primary-rgb),.12)}.icon-btn:active{background-color:rgba(var(--ion-color-primary-rgb),.24)}.no-results{width:100%;text-align:center;padding:32px 16px;color:var(--ion-color-medium);font-style:italic}.badge{margin-left:4px}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { 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.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i9.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i10.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i12.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i13.AppLoadingSpinner, selector: "app-loading-spinner", inputs: ["loading", "color", "name"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.EmptyArrayPipe, name: "isEmptyArray" }, { kind: "pipe", type: i15.BadgeNumberPipe, name: "badgeNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
64
65
  }
65
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppIconSelectorModal, decorators: [{
66
67
  type: Component,
67
- args: [{ selector: 'app-icon-selector-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar>\n <ion-title>{{ title | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Barre de recherche -->\n <div class=\"search-bar\">\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-label translate>COMMON.SEARCH</mat-label>\n <input matInput type=\"text\" [ngModel]=\"searchText\" (ngModelChange)=\"onSearchChange($event)\" [placeholder]=\"'COMMON.SEARCH_PLACEHOLDER' | translate\" autofocus>\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- Onglets Ionic / Material -->\n <mat-tab-group [(selectedIndex)]=\"selectedIndex\" *ngIf=\"!loading\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_IONIC' | translate }}\n <span class=\"badge\" [matBadge]=\"ionicFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"primary\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === ionicTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of ionicFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'ionic')\"\n class=\"icon-btn\">\n <ion-icon [name]=\"entry.name\" size=\"large\"></ion-icon>\n </button>\n <div *ngIf=\"ionicFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_MATERIAL' | translate }}\n <span class=\"badge\" [matBadge]=\"materialFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"accent\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === materialTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of materialFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'material')\"\n class=\"icon-btn\">\n <mat-icon>{{ entry.name }}</mat-icon>\n </button>\n <div *ngIf=\"materialFiltered.length === 0\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <app-loading-spinner *ngIf=\"loading\"></app-loading-spinner>\n</ion-content>", styles: [".search-bar{padding:8px 16px 0}.search-field{width:100%}.icon-grid{display:flex;flex-wrap:wrap;gap:4px;padding:8px;max-height:60vh;overflow-y:auto;justify-content:center}.icon-btn{width:44px;height:44px;line-height:44px;border-radius:8px;transition:background-color .15s ease}.icon-btn:hover{background-color:rgba(var(--ion-color-primary-rgb),.12)}.icon-btn:active{background-color:rgba(var(--ion-color-primary-rgb),.24)}.no-results{width:100%;text-align:center;padding:32px 16px;color:var(--ion-color-medium);font-style:italic}.badge{margin-left:4px}\n"] }]
68
+ args: [{ selector: 'app-icon-selector-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar>\n <ion-title>{{ title | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Barre de recherche -->\n <div class=\"search-bar\">\n <mat-form-field appearance=\"outline\" class=\"search-field\">\n <mat-label translate>COMMON.SEARCH</mat-label>\n <input matInput type=\"text\" [ngModel]=\"searchText\" (ngModelChange)=\"onSearchChange($event)\" [placeholder]=\"'COMMON.SEARCH_PLACEHOLDER' | translate\" autofocus>\n <mat-icon matSuffix>search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- Onglets Ionic / Material -->\n <mat-tab-group [(selectedIndex)]=\"selectedIndex\" *ngIf=\"!loading\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_IONIC' | translate }}\n <span class=\"badge\" [matBadge]=\"ionicFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"primary\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === ionicTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of ionicFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'ionic')\">\n <ion-icon [name]=\"entry.name\"></ion-icon>\n </button>\n <div *ngIf=\"ionicFiltered | isEmptyArray\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'ICON_SELECTOR.TAB_MATERIAL' | translate }}\n <span class=\"badge\" [matBadge]=\"materialFiltered.length | badgeNumber\" matBadgeOverlap=\"false\" matBadgeSize=\"small\" matBadgeColor=\"accent\"></span>\n </ng-template>\n <div class=\"icon-grid\" *ngIf=\"selectedIndex === materialTabIndex\">\n <button mat-icon-button\n *ngFor=\"let entry of materialFiltered\"\n [matTooltip]=\"entry.label\"\n [attr.aria-label]=\"entry.label\"\n (click)=\"selectIcon(entry, 'material')\">\n <mat-icon>{{ entry.name }}</mat-icon>\n </button>\n <div *ngIf=\"materialFiltered | isEmptyArray\" class=\"no-results\" translate>COMMON.NO_RESULT</div>\n </div>\n </mat-tab>\n </mat-tab-group>\n\n <app-loading-spinner *ngIf=\"loading\"></app-loading-spinner>\n</ion-content>\n", styles: [".search-bar{padding:8px 16px 0}.search-field{width:100%}.icon-grid{display:flex;flex-wrap:wrap;gap:4px;padding:8px;max-height:60vh;overflow-y:auto;justify-content:center}.icon-btn{width:44px;height:44px;line-height:44px;border-radius:8px;transition:background-color .15s ease}.icon-btn:hover{background-color:rgba(var(--ion-color-primary-rgb),.12)}.icon-btn:active{background-color:rgba(var(--ion-color-primary-rgb),.24)}.no-results{width:100%;text-align:center;padding:32px 16px;color:var(--ion-color-medium);font-style:italic}.badge{margin-left:4px}\n"] }]
68
69
  }], ctorParameters: () => [], propDecorators: { title: [{
69
70
  type: Input
70
71
  }] } });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zZWxlY3Rvci5tb2RhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9pY29uL2ljb24tc2VsZWN0b3IubW9kYWwudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaWNvbi9pY29uLXNlbGVjdG9yLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQWEsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3RCLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztJQUVwQixhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUU5QixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLGFBQWEsR0FBZ0IsRUFBRSxDQUFDO0lBQ2hDLGdCQUFnQixHQUFnQixFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNsQixPQUFPLEdBQUcsSUFBSSxDQUFDO0lBRWpCLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO0lBRXRDLFdBQVcsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUMxQyxRQUFRLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUV4QztRQUNFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYTthQUNmLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLG9CQUFvQixFQUFFLEVBQ3RCLGtCQUFrQixFQUFFLENBQ3JCO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWE7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFnQixFQUFFLE1BQTRCO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7d0dBdERVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLDJGQ2JqQyx3bUZBNkRjOzs0RkRoREQsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTTt3REFHdEMsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEljb25TZWxlY3RvclNlcnZpY2UsIEljb25FbnRyeSB9IGZyb20gJy4vaWNvbi1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7IEljb25SZWYgfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtaWNvbi1zZWxlY3Rvci1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pY29uLXNlbGVjdG9yLm1vZGFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pY29uLXNlbGVjdG9yLm1vZGFsLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcEljb25TZWxlY3Rvck1vZGFsIHtcbiAgQElucHV0KCkgdGl0bGUgPSAnSUNPTl9TRUxFQ1RPUi5USVRMRSc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlvbmljVGFiSW5kZXggPSAwO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF0ZXJpYWxUYWJJbmRleCA9IDE7XG5cbiAgcHJvdGVjdGVkIHNlYXJjaFRleHQgPSAnJztcbiAgcHJvdGVjdGVkIGlvbmljRmlsdGVyZWQ6IEljb25FbnRyeVtdID0gW107XG4gIHByb3RlY3RlZCBtYXRlcmlhbEZpbHRlcmVkOiBJY29uRW50cnlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRJbmRleCA9IDA7XG4gIHByb3RlY3RlZCBsb2FkaW5nID0gdHJ1ZTtcblxuICBwcml2YXRlIHNlYXJjaFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBpY29uU2VydmljZSA9IGluamVjdChJY29uU2VsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB2aWV3Q3RybCA9IGluamVjdChNb2RhbENvbnRyb2xsZXIpO1xuICBwcml2YXRlIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2FkSWNvbnMoKTtcblxuICAgIHRoaXMuc2VhcmNoU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxNTApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgdGhpcy5pb25pY0ZpbHRlcmVkID0gdGhpcy5pY29uU2VydmljZS5zZWFyY2godmFsdWUsICdpb25pYycpO1xuICAgICAgICB0aGlzLm1hdGVyaWFsRmlsdGVyZWQgPSB0aGlzLmljb25TZXJ2aWNlLnNlYXJjaCh2YWx1ZSwgJ21hdGVyaWFsJyk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRJY29ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmljb25TZXJ2aWNlLnJlYWR5KCk7XG4gICAgdGhpcy5pb25pY0ZpbHRlcmVkID0gdGhpcy5pY29uU2VydmljZS5pb25pY0ljb25zKCk7XG4gICAgdGhpcy5tYXRlcmlhbEZpbHRlcmVkID0gdGhpcy5pY29uU2VydmljZS5tYXRlcmlhbEljb25zKCk7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblNlYXJjaENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gICAgdGhpcy5zZWFyY2hTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgc2VsZWN0SWNvbihlbnRyeTogSWNvbkVudHJ5LCBvcmlnaW46ICdpb25pYycgfCAnbWF0ZXJpYWwnKTogdm9pZCB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5pY29uU2VydmljZS50b0ljb25SZWYoZW50cnksIG9yaWdpbik7XG4gICAgdGhpcy52aWV3Q3RybC5kaXNtaXNzKHJlZik7XG4gIH1cblxuICBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy52aWV3Q3RybC5kaXNtaXNzKG51bGwpO1xuICB9XG59IiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhcj5cbiAgICA8aW9uLXRpdGxlPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9pb24tdGl0bGU+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJjYW5jZWwoKVwiPlxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudD5cbiAgPCEtLSBCYXJyZSBkZSByZWNoZXJjaGUgLS0+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtYmFyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzZWFyY2gtZmllbGRcIj5cbiAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5TRUFSQ0g8L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cInNlYXJjaFRleHRcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCIgW3BsYWNlaG9sZGVyXT1cIidDT01NT04uU0VBUkNIX1BMQUNFSE9MREVSJyB8IHRyYW5zbGF0ZVwiIGF1dG9mb2N1cz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXg+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8IS0tIE9uZ2xldHMgSW9uaWMgLyBNYXRlcmlhbCAtLT5cbiAgPG1hdC10YWItZ3JvdXAgWyhzZWxlY3RlZEluZGV4KV09XCJzZWxlY3RlZEluZGV4XCIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgIDxtYXQtdGFiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgIHt7ICdJQ09OX1NFTEVDVE9SLlRBQl9JT05JQycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZVwiIFttYXRCYWRnZV09XCJpb25pY0ZpbHRlcmVkLmxlbmd0aCB8IGJhZGdlTnVtYmVyXCIgbWF0QmFkZ2VPdmVybGFwPVwiZmFsc2VcIiBtYXRCYWRnZVNpemU9XCJzbWFsbFwiIG1hdEJhZGdlQ29sb3I9XCJwcmltYXJ5XCI+PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWdyaWRcIiAqbmdJZj1cInNlbGVjdGVkSW5kZXggPT09IGlvbmljVGFiSW5kZXhcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZW50cnkgb2YgaW9uaWNGaWx0ZXJlZFwiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZW50cnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZW50cnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJY29uKGVudHJ5LCAnaW9uaWMnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWJ0blwiPlxuICAgICAgICAgIDxpb24taWNvbiBbbmFtZV09XCJlbnRyeS5uYW1lXCIgc2l6ZT1cImxhcmdlXCI+PC9pb24taWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpb25pY0ZpbHRlcmVkLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiIHRyYW5zbGF0ZT5DT01NT04uTk9fUkVTVUxUPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG5cbiAgICA8bWF0LXRhYj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICB7eyAnSUNPTl9TRUxFQ1RPUi5UQUJfTUFURVJJQUwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIiBbbWF0QmFkZ2VdPVwibWF0ZXJpYWxGaWx0ZXJlZC5sZW5ndGggfCBiYWRnZU51bWJlclwiIG1hdEJhZGdlT3ZlcmxhcD1cImZhbHNlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWdyaWRcIiAqbmdJZj1cInNlbGVjdGVkSW5kZXggPT09IG1hdGVyaWFsVGFiSW5kZXhcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZW50cnkgb2YgbWF0ZXJpYWxGaWx0ZXJlZFwiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZW50cnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZW50cnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJY29uKGVudHJ5LCAnbWF0ZXJpYWwnKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLWJ0blwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBlbnRyeS5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtYXRlcmlhbEZpbHRlcmVkLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwibm8tcmVzdWx0c1wiIHRyYW5zbGF0ZT5DT01NT04uTk9fUkVTVUxUPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cblxuICA8YXBwLWxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1sb2FkaW5nLXNwaW5uZXI+XG48L2lvbi1jb250ZW50PiJdfQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zZWxlY3Rvci5tb2RhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9pY29uL2ljb24tc2VsZWN0b3IubW9kYWwudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaWNvbi9pY29uLXNlbGVjdG9yLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQWEsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTekUsTUFBTSxPQUFPLG9CQUFvQjtJQUN0QixLQUFLLEdBQUcscUJBQXFCLENBQUM7SUFFcEIsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNsQixnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFOUIsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNoQixhQUFhLEdBQWdCLEVBQUUsQ0FBQztJQUNoQyxnQkFBZ0IsR0FBZ0IsRUFBRSxDQUFDO0lBQ25DLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQztJQUVqQixhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUV0QyxXQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDMUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFeEM7UUFDRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLGFBQWE7YUFDZixJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixrQkFBa0IsRUFBRSxDQUNyQjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUztRQUNyQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBZ0IsRUFBRSxNQUE0QjtRQUN2RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO3dHQXREVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwyRkNiakMsdWhGQTREQTs7NEZEL0NhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSx5QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU07d0RBR3RDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JTZXJ2aWNlLCBJY29uRW50cnkgfSBmcm9tICcuL2ljb24tc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWljb24tc2VsZWN0b3ItbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vaWNvbi1zZWxlY3Rvci5tb2RhbC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaWNvbi1zZWxlY3Rvci5tb2RhbC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBJY29uU2VsZWN0b3JNb2RhbCB7XG4gIEBJbnB1dCgpIHRpdGxlID0gJ0lDT05fU0VMRUNUT1IuVElUTEUnO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpb25pY1RhYkluZGV4ID0gMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1hdGVyaWFsVGFiSW5kZXggPSAxO1xuXG4gIHByb3RlY3RlZCBzZWFyY2hUZXh0ID0gJyc7XG4gIHByb3RlY3RlZCBpb25pY0ZpbHRlcmVkOiBJY29uRW50cnlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbWF0ZXJpYWxGaWx0ZXJlZDogSWNvbkVudHJ5W10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkSW5kZXggPSAwO1xuICBwcm90ZWN0ZWQgbG9hZGluZyA9IHRydWU7XG5cbiAgcHJpdmF0ZSBzZWFyY2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgaWNvblNlcnZpY2UgPSBpbmplY3QoSWNvblNlbGVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgdmlld0N0cmwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9hZEljb25zKCk7XG5cbiAgICB0aGlzLnNlYXJjaFN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTUwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIHRoaXMuaW9uaWNGaWx0ZXJlZCA9IHRoaXMuaWNvblNlcnZpY2Uuc2VhcmNoKHZhbHVlLCAnaW9uaWMnKTtcbiAgICAgICAgdGhpcy5tYXRlcmlhbEZpbHRlcmVkID0gdGhpcy5pY29uU2VydmljZS5zZWFyY2godmFsdWUsICdtYXRlcmlhbCcpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSWNvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pY29uU2VydmljZS5yZWFkeSgpO1xuICAgIHRoaXMuaW9uaWNGaWx0ZXJlZCA9IHRoaXMuaWNvblNlcnZpY2UuaW9uaWNJY29ucygpO1xuICAgIHRoaXMubWF0ZXJpYWxGaWx0ZXJlZCA9IHRoaXMuaWNvblNlcnZpY2UubWF0ZXJpYWxJY29ucygpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25TZWFyY2hDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHZhbHVlO1xuICAgIHRoaXMuc2VhcmNoU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNlbGVjdEljb24oZW50cnk6IEljb25FbnRyeSwgb3JpZ2luOiAnaW9uaWMnIHwgJ21hdGVyaWFsJyk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuaWNvblNlcnZpY2UudG9JY29uUmVmKGVudHJ5LCBvcmlnaW4pO1xuICAgIHRoaXMudmlld0N0cmwuZGlzbWlzcyhyZWYpO1xuICB9XG5cbiAgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMudmlld0N0cmwuZGlzbWlzcyhudWxsKTtcbiAgfVxufSIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXI+XG4gICAgPGlvbi10aXRsZT57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvaW9uLXRpdGxlPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQ+XG4gIDwhLS0gQmFycmUgZGUgcmVjaGVyY2hlIC0tPlxuICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJhclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic2VhcmNoLWZpZWxkXCI+XG4gICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uU0VBUkNIPC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJzZWFyY2hUZXh0XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCInQ09NTU9OLlNFQVJDSF9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGVcIiBhdXRvZm9jdXM+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4PnNlYXJjaDwvbWF0LWljb24+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG5cbiAgPCEtLSBPbmdsZXRzIElvbmljIC8gTWF0ZXJpYWwgLS0+XG4gIDxtYXQtdGFiLWdyb3VwIFsoc2VsZWN0ZWRJbmRleCldPVwic2VsZWN0ZWRJbmRleFwiICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICA8bWF0LXRhYj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICB7eyAnSUNPTl9TRUxFQ1RPUi5UQUJfSU9OSUMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIiBbbWF0QmFkZ2VdPVwiaW9uaWNGaWx0ZXJlZC5sZW5ndGggfCBiYWRnZU51bWJlclwiIG1hdEJhZGdlT3ZlcmxhcD1cImZhbHNlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwicHJpbWFyeVwiPjwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkXCIgKm5nSWY9XCJzZWxlY3RlZEluZGV4ID09PSBpb25pY1RhYkluZGV4XCI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVudHJ5IG9mIGlvbmljRmlsdGVyZWRcIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImVudHJ5LmxhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVudHJ5LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SWNvbihlbnRyeSwgJ2lvbmljJylcIj5cbiAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZW50cnkubmFtZVwiPjwvaW9uLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW9uaWNGaWx0ZXJlZCB8IGlzRW1wdHlBcnJheVwiIGNsYXNzPVwibm8tcmVzdWx0c1wiIHRyYW5zbGF0ZT5DT01NT04uTk9fUkVTVUxUPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG5cbiAgICA8bWF0LXRhYj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICB7eyAnSUNPTl9TRUxFQ1RPUi5UQUJfTUFURVJJQUwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIiBbbWF0QmFkZ2VdPVwibWF0ZXJpYWxGaWx0ZXJlZC5sZW5ndGggfCBiYWRnZU51bWJlclwiIG1hdEJhZGdlT3ZlcmxhcD1cImZhbHNlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWdyaWRcIiAqbmdJZj1cInNlbGVjdGVkSW5kZXggPT09IG1hdGVyaWFsVGFiSW5kZXhcIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZW50cnkgb2YgbWF0ZXJpYWxGaWx0ZXJlZFwiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZW50cnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZW50cnkubGFiZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RJY29uKGVudHJ5LCAnbWF0ZXJpYWwnKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBlbnRyeS5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtYXRlcmlhbEZpbHRlcmVkIHwgaXNFbXB0eUFycmF5XCIgY2xhc3M9XCJuby1yZXN1bHRzXCIgdHJhbnNsYXRlPkNPTU1PTi5OT19SRVNVTFQ8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRhYj5cbiAgPC9tYXQtdGFiLWdyb3VwPlxuXG4gIDxhcHAtbG9hZGluZy1zcGlubmVyICpuZ0lmPVwibG9hZGluZ1wiPjwvYXBwLWxvYWRpbmctc3Bpbm5lcj5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=