@unipin/angular-applet 18.6.5 → 18.6.6

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.
@@ -89,7 +89,7 @@ export class FilterComponent {
89
89
  }
90
90
  }
91
91
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
93
93
  }
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FilterComponent, decorators: [{
95
95
  type: Component,
@@ -102,7 +102,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
102
102
  ReactiveFormsModule,
103
103
  FormSelectComponent,
104
104
  FormSearchableSelectComponent
105
- ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
105
+ ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
106
106
  }], ctorParameters: () => [{ type: undefined, decorators: [{
107
107
  type: Attribute,
108
108
  args: ['placeholder']
@@ -118,4 +118,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
118
118
  type: ViewChild,
119
119
  args: ['searchBox']
120
120
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFvQnJILE1BQU0sT0FBTyxlQUFlO0lBeUMxQixZQUNtQyxXQUFtQixFQUNqQyxFQUFxQixFQUNyQixXQUE4QjtRQUZoQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUF2QnpCLGFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVl6RSxTQUFJLEdBQW1CLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTWxELGlCQUFZLEdBQW9ELEVBQUUsQ0FBQztJQU10RSxDQUFDO0lBTUUsUUFBUTtRQUNiLElB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QUM7SUFDSCxDQUFDOzhHQXhLVSxlQUFlLGtCQTBDYixhQUFhO2tHQTFDZixlQUFlLCtTQzNCNUIsb3FJQTZFQSw4cEJEMURJLFdBQVcsODRCQUNYLGlCQUFpQiwrR0FDakIsa0JBQWtCLDhIQUNsQixtQkFBbUIsNnJCQUNuQixtQkFBbUIsaU1BQ25CLDZCQUE2Qjs7MkZBR3BCLGVBQWU7a0JBbEIzQixTQUFTO2lDQUNJLElBQUksWUFDTixXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osS0FBSyxFQUFFLDJCQUEyQjtxQkFDbkMsV0FDUTt3QkFDUCxXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsNkJBQTZCO3FCQUM5Qjs7MEJBNENFLFNBQVM7MkJBQUMsYUFBYTt5R0FuQ1EsRUFBRTtzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT1MsTUFBTTtzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT0MsUUFBUTtzQkFBakMsTUFBTTtnQkFNb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUsIFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlckZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyLXNlYXJjaC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRm9ybUlucHV0Q29tcG9uZW50LCBGb3JtU2VsZWN0Q29tcG9uZW50LCBGb3JtRGF0ZUNvbXBvbmVudCwgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3VwLWZpbHRlcicsXG4gIHN0eWxlVXJsOiAgJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IFxuICAgIGNsYXNzOiAnZC1ibG9jayBwb3NpdGlvbi1yZWxhdGl2ZScgXG4gIH0sXG4gIGltcG9ydHM6IFsgIFxuICAgIElvbmljTW9kdWxlLFxuICAgIEZvcm1EYXRlQ29tcG9uZW50LFxuICAgIEZvcm1JbnB1dENvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1TZWxlY3RDb21wb25lbnQsXG4gICAgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmaWx0ZXIuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHNwZWNpZnlpbmcgZmlsdGVyIGZpZWxkcyBhbmQgbW9kZS5cbiAgICogQHR5cGUge0ZpbHRlckNvbmZpZ31cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY29uZmlnITogRmlsdGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZXZlbnQgZW1pdHRlciB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHNlYXJjaC5cbiAgICogRW1pdHMgYSBgRmlsdGVyU2VhcmNoRXZlbnRgIG9iamVjdCB3aXRoIHNlYXJjaCBtb2RlIGFuZCBjcml0ZXJpYSBkYXRhLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEZpbHRlclNlYXJjaEV2ZW50Pn1cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFZpZXdDaGlsZCBkZWNvcmF0b3IgdG8gcmVmZXJlbmNlIHRoZSBzZWFyY2hCb3ggZWxlbWVudCBpbiB0aGUgdGVtcGxhdGUuXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmfVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnc2VhcmNoQm94JykgcHJvdGVjdGVkIHJlYWRvbmx5IHNlYXJjaEJveCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEZvcm0gZ3JvdXAgZm9yIG1hbmFnaW5nIGZvcm0gY29udHJvbHMuXG4gICAqIEB0eXBlIHtGb3JtR3JvdXA8YW55Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmb3JtOiBGb3JtR3JvdXA8YW55PiA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIC8qKlxuICAgKiBBcnJheSB0byBzdG9yZSBhY3RpdmUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W119XG4gICAqL1xuICBwdWJsaWMgYWN0aXZlRmlsdGVyOiB7IGxhYmVsOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcG9wb3ZlckN0cmw6IFBvcG92ZXJDb250cm9sbGVyXG4gICkgeyB9IFxuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgaG9vayB0byBpbml0aWFsaXplIHRoZSBjb21wb25lbnQuXG4gICAqIENyZWF0ZXMgZm9ybSBjb250cm9scyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lke1xuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKCh7IGtleSwgaW5pdGlhbFZhbHVlIH06IEZpbHRlckZpZWxkKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woa2V5LCBpbml0aWFsVmFsdWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGtleS5mb3JFYWNoKChrOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gdGhpcy5jcmVhdGVGb3JtQ29udHJvbChrLCBpbml0aWFsVmFsdWU/LmF0KGkpKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBmaWx0ZXIgcG9wb3Zlci5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkeyB0aGlzLnBvcG92ZXJDdHJsLmRpc21pc3MoKTsgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGZpbHRlciBjcml0ZXJpYSBhbmQgdHJpZ2dlcnMgYSBzZWFyY2ggZXZlbnQgd2l0aCBudWxsIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZHtcbiAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQoeyBtb2RlOiB0aGlzLmNvbmZpZy5tb2RlLCBkYXRhOiBudWxsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzcGVjaWZpYyBmaWx0ZXIgY3JpdGVyaWEgYmFzZWQgb24gaXRzIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAtIEluZGV4IG9mIHRoZSBmaWx0ZXIgY3JpdGVyaWEgdG8gYmUgcmVtb3ZlZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoaTogbnVtYmVyKTogdm9pZHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5hY3RpdmVGaWx0ZXJbaV0ua2V5XS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIuc3BsaWNlKGksIDEpO1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgc2VhcmNoIGJhc2VkIG9uIHRoZSBhY3RpdmUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKi9cbiAgcHVibGljIHNlYXJjaCgpOiB2b2lke1xuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKChrOiBzdHJpbmcsIHY6IHN0cmluZykgPT4gdGhpcy5hY3RpdmVGaWx0ZXIucHVzaCh7ICBrZXk6IGssIHZhbHVlOiB2LCBsYWJlbDogYCR7IGsgfTokeyBrLmluY2x1ZGVzKCdkYXRlJyk/IGZvcm1hdERhdGUodiwgJ2RkIE1NTSB5eXl5JywgJ2VuLVVTJykgOiB2IH1gIH0pKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBmaWx0ZXIgY3JpdGVyaWEgYmFzZWQgb24gdGhlIHVzZXIgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYWRkKCk6IHZvaWR7XG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSB0aGlzLmdldFZhbHVlKHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5maWVsZHMuZmluZEluZGV4KCh7IGtleTogayB9KSA9PiBrID09PSBrZXkpID09PSAtMSkge1xuICAgICAgdGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGkgPSB0aGlzLmFjdGl2ZUZpbHRlci5maW5kSW5kZXgoKHsga2V5OiBrIH0pID0+IGsgPT09IGtleSk7XG4gICAgaWYgKGkgPT09IC0xKSB0aGlzLmFjdGl2ZUZpbHRlci5wdXNoKHsgbGFiZWw6IGAkeyBrZXkgfTokeyB2YWx1ZSB9YCwga2V5LCB2YWx1ZSB9KTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLmtleSA9IGtleTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlcltpXS5sYWJlbCA9IGAkeyBrZXkgfTokeyB2YWx1ZSB9YDtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIGNsZWFycyB0aGUgc2VhcmNoIGJveC5cbiAgICovXG4gIHByb3RlY3RlZCByZXNldFZhbHVlKCk6IHZvaWR7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIubGVuZ3RoID0gMDtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBpbnB1dCB2YWx1ZSBhbmQgcmV0dXJucyBhIGtleS12YWx1ZSBwYWlyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBJbnB1dCB2YWx1ZSB0byBiZSBwYXJzZWQuXG4gICAqIEByZXR1cm5zIHt7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH19IC0gS2V5LXZhbHVlIHBhaXIgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH17XG4gICAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHsga2V5OiA8c3RyaW5nPiB0aGlzLmNvbmZpZy5maWVsZHNbMF0ua2V5LCB2YWx1ZTogdmFsdWVzWzBdIH07XG4gICAgcmV0dXJuIHsga2V5OiB2YWx1ZXNbMF0sIHZhbHVlOiB2YWx1ZXNbMV0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VhcmNoIGV2ZW50IGJhc2VkIG9uIHRoZSBmb3JtIHZhbHVlcy5cbiAgICogSW52b2tlcyBhbiBleHRyYSBhY3Rpb24gaWYgcHJvdmlkZWQuXG4gICAqIEBwYXJhbSB7KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkfSBbZXh0cmFBY3Rpb25dIC0gT3B0aW9uYWwgZXh0cmEgYWN0aW9uIHRvIGJlIGludm9rZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW1pdFZhbHVlKGV4dHJhQWN0aW9uPzogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZHtcbiAgICBsZXQgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBkYXRhOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIFxuICAgIE9iamVjdC5rZXlzKGYpLmZvckVhY2goKGs6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFmW2tdKSByZXR1cm47XG4gICAgICBcbiAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgZGF0YVtrXSA9IGZba107XG4gICAgICBleHRyYUFjdGlvbj8uKGssIGZba10pO1xuICAgIH0pO1xuICAgIHRoaXMub25TZWFyY2guZW1pdCh7IG1vZGU6IHRoaXMuY29uZmlnLm1vZGUsIGRhdGE6IGZsYWc/IGRhdGEgOiBudWxsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtIGNvbnRyb2wgZm9yIGEgZ2l2ZW4ga2V5IGFuZCBzZXRzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gS2V5IGZvciB0aGUgZm9ybSBjb250cm9sLlxuICAgKiBAcGFyYW0geyp9IFt2YWxdIC0gSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVGb3JtQ29udHJvbChrZXk6IHN0cmluZywgdmFsPzogYW55KTogdm9pZHtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsKTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyLnB1c2goeyBsYWJlbDogYCR7IGtleSB9OiR7IHZhbCB9YCwga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1pY29uIG5hbWU9XCJzZWFyY2hcIiBjbGFzcz1cImZzLTQgcG9zaXRpb24tYWJzb2x1dGVcIiAvPlxuXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmb3JtLWNvbnRyb2wgcHMtNSBweS0wIHBlLTAgZ2FwLTNcIj5cbiAgICBAaWYgKGFjdGl2ZUZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgZmxleC1zaHJpbmstMCB0YWctY29udGFpbmVyIGdhcC0yIHRleHQtbm93cmFwIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgYWN0aXZlRmlsdGVyOyB0cmFjayBpdGVtLmtleTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnLWl0ZW0gcC0xIHJvdW5kZWQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB1c2VyLXNlbGVjdC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjbGFzcz1cInBlLTEgbWUtMSBjdXJzb3ItcG9pbnRlciB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpO1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGlucHV0ICNzZWFyY2hCb3ggdHlwZT1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiBjbGFzcz1cImZsZXgtc2hyaW5rLTEgYm9yZGVyLTAgZm9ybS1jb250cm9sIHBzLTAgcHktMlwiIFtjbGFzcy5hZHZdPVwiY29uZmlnLm1vZGUgPT09ICdhZHZhbmNlZCdcIiAoa2V5dXAuZW50ZXIpPVwiYWRkKCk7XCIgLz5cbjwvZGl2PlxuXG5AaWYgKGNvbmZpZy5tb2RlID09PSAnYWR2YW5jZWQnKSB7XG4gICAgPGlvbi1pY29uIG5hbWU9XCJmaWx0ZXJcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiBpZD1cImZpbHRlci17eyBpZCB9fVwiIC8+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZnMtNCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbGVhcigpO1wiIC8+XG4gICAgXG4gICAgPGlvbi1wb3BvdmVyIHRyaWdnZXI9XCJmaWx0ZXIte3sgaWQgfX1cIiB0cmlnZ2VyQWN0aW9uPVwiY2xpY2tcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItYm90dG9tIHAtMSBwZS00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNSBmdy1tZWRpdW1cIj5BZHZhbmNlZCBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmbGV4LWdyb3ctMSBvdmVyZmxvdy1hdXRvIHB4LTRcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBjb25maWcuZmllbGRzOyB0cmFjayBjLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoYy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1pbnB1dCB0eXBlPVwibnVtYmVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBsYWJlbFBsYWNlbWVudD1cImVuZFwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCI+e3sgYy5sYWJlbCB9fTwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUtcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWRhdGUgY2xhc3M9XCJmbGV4LWdyb3ctMVwiIG5hbWU9XCJmaWx0ZXItZnJvbVwiIGxhYmVsPVwie3sgYy5sYWJlbFswXSB9fVwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5WzBdIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1kYXRlIGNsYXNzPVwiZmxleC1ncm93LTFcIiBuYW1lPVwiZmlsdGVyLXRvXCIgbGFiZWw9XCJ7eyBjLmxhYmVsWzFdIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXlbMV0gfX1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1zZWxlY3QgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiBbaXRlbXNdPVwiYy5vcHRpb25zIVwiIC8+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2VhcmNoYWJsZS1zZWxlY3QnKSB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXAtc2VhcmNoYWJsZS1zZWxlY3QgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiBbcXVlcnlGdW5jXT1cImMuZ2V0T3B0aW9ucyFcIiBbaW5pdGlhbEl0ZW1zXT1cImMub3B0aW9ucyFcIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHB5LTMgcHgtNCBib3JkZXItdG9wIGQtZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiZm9ybS5yZXNldCgpO1wiPlJlc2V0PC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpO1wiPlNlYXJjaDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICA8L2lvbi1wb3BvdmVyPiAgICBcbn1cbiJdfQ==
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuaXBpbi1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0osT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFvQnJILE1BQU0sT0FBTyxlQUFlO0lBeUMxQixZQUNtQyxXQUFtQixFQUNqQyxFQUFxQixFQUNyQixXQUE4QjtRQUZoQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUF2QnpCLGFBQVEsR0FBb0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVl6RSxTQUFJLEdBQW1CLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTWxELGlCQUFZLEdBQW9ELEVBQUUsQ0FBQztJQU10RSxDQUFDO0lBTUUsUUFBUTtRQUNiLElB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QUM7SUFDSCxDQUFDOzhHQXhLVSxlQUFlLGtCQTBDYixhQUFhO2tHQTFDZixlQUFlLCtTQzNCNUIsd3NJQTZFQSw4cEJEMURJLFdBQVcsODRCQUNYLGlCQUFpQiwrR0FDakIsa0JBQWtCLDhIQUNsQixtQkFBbUIsNnJCQUNuQixtQkFBbUIsaU1BQ25CLDZCQUE2Qjs7MkZBR3BCLGVBQWU7a0JBbEIzQixTQUFTO2lDQUNJLElBQUksWUFDTixXQUFXLG1CQUdKLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0osS0FBSyxFQUFFLDJCQUEyQjtxQkFDbkMsV0FDUTt3QkFDUCxXQUFXO3dCQUNYLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsNkJBQTZCO3FCQUM5Qjs7MEJBNENFLFNBQVM7MkJBQUMsYUFBYTt5R0FuQ1EsRUFBRTtzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT1MsTUFBTTtzQkFBdkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT0MsUUFBUTtzQkFBakMsTUFBTTtnQkFNb0MsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uaWNNb2R1bGUsIFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZpbHRlckZpZWxkIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ZpbHRlci1maWVsZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvZmlsdGVyLXNlYXJjaC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRm9ybUlucHV0Q29tcG9uZW50LCBGb3JtU2VsZWN0Q29tcG9uZW50LCBGb3JtRGF0ZUNvbXBvbmVudCwgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3VwLWZpbHRlcicsXG4gIHN0eWxlVXJsOiAgJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IFxuICAgIGNsYXNzOiAnZC1ibG9jayBwb3NpdGlvbi1yZWxhdGl2ZScgXG4gIH0sXG4gIGltcG9ydHM6IFsgIFxuICAgIElvbmljTW9kdWxlLFxuICAgIEZvcm1EYXRlQ29tcG9uZW50LFxuICAgIEZvcm1JbnB1dENvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1TZWxlY3RDb21wb25lbnQsXG4gICAgRm9ybVNlYXJjaGFibGVTZWxlY3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmaWx0ZXIuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljIGlkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCB2YXJpYWJsZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHNwZWNpZnlpbmcgZmlsdGVyIGZpZWxkcyBhbmQgbW9kZS5cbiAgICogQHR5cGUge0ZpbHRlckNvbmZpZ31cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY29uZmlnITogRmlsdGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZXZlbnQgZW1pdHRlciB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBwZXJmb3JtcyBhIHNlYXJjaC5cbiAgICogRW1pdHMgYSBgRmlsdGVyU2VhcmNoRXZlbnRgIG9iamVjdCB3aXRoIHNlYXJjaCBtb2RlIGFuZCBjcml0ZXJpYSBkYXRhLlxuICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPEZpbHRlclNlYXJjaEV2ZW50Pn1cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgb25TZWFyY2g6IEV2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFZpZXdDaGlsZCBkZWNvcmF0b3IgdG8gcmVmZXJlbmNlIHRoZSBzZWFyY2hCb3ggZWxlbWVudCBpbiB0aGUgdGVtcGxhdGUuXG4gICAqIEB0eXBlIHtFbGVtZW50UmVmfVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnc2VhcmNoQm94JykgcHJvdGVjdGVkIHJlYWRvbmx5IHNlYXJjaEJveCE6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIEZvcm0gZ3JvdXAgZm9yIG1hbmFnaW5nIGZvcm0gY29udHJvbHMuXG4gICAqIEB0eXBlIHtGb3JtR3JvdXA8YW55Pn1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmb3JtOiBGb3JtR3JvdXA8YW55PiA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIC8qKlxuICAgKiBBcnJheSB0byBzdG9yZSBhY3RpdmUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKiBAdHlwZSB7eyBsYWJlbDogc3RyaW5nLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9W119XG4gICAqL1xuICBwdWJsaWMgYWN0aXZlRmlsdGVyOiB7IGxhYmVsOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJykgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcG9wb3ZlckN0cmw6IFBvcG92ZXJDb250cm9sbGVyXG4gICkgeyB9IFxuXG4gIC8qKlxuICAgKiBMaWZlY3ljbGUgaG9vayB0byBpbml0aWFsaXplIHRoZSBjb21wb25lbnQuXG4gICAqIENyZWF0ZXMgZm9ybSBjb250cm9scyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lke1xuICAgIHRoaXMuY29uZmlnLmZpZWxkcy5mb3JFYWNoKCh7IGtleSwgaW5pdGlhbFZhbHVlIH06IEZpbHRlckZpZWxkKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woa2V5LCBpbml0aWFsVmFsdWUpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGtleS5mb3JFYWNoKChrOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gdGhpcy5jcmVhdGVGb3JtQ29udHJvbChrLCBpbml0aWFsVmFsdWU/LmF0KGkpKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBmaWx0ZXIgcG9wb3Zlci5cbiAgICovXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkeyB0aGlzLnBvcG92ZXJDdHJsLmRpc21pc3MoKTsgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGZpbHRlciBjcml0ZXJpYSBhbmQgdHJpZ2dlcnMgYSBzZWFyY2ggZXZlbnQgd2l0aCBudWxsIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZHtcbiAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICB0aGlzLmZvcm0ucmVzZXQoKTtcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQoeyBtb2RlOiB0aGlzLmNvbmZpZy5tb2RlLCBkYXRhOiBudWxsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBzcGVjaWZpYyBmaWx0ZXIgY3JpdGVyaWEgYmFzZWQgb24gaXRzIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAtIEluZGV4IG9mIHRoZSBmaWx0ZXIgY3JpdGVyaWEgdG8gYmUgcmVtb3ZlZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoaTogbnVtYmVyKTogdm9pZHtcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5hY3RpdmVGaWx0ZXJbaV0ua2V5XS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIuc3BsaWNlKGksIDEpO1xuICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgc2VhcmNoIGJhc2VkIG9uIHRoZSBhY3RpdmUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKi9cbiAgcHVibGljIHNlYXJjaCgpOiB2b2lke1xuICAgIHRoaXMucmVzZXRWYWx1ZSgpO1xuICAgIHRoaXMuZW1pdFZhbHVlKChrOiBzdHJpbmcsIHY6IHN0cmluZykgPT4gdGhpcy5hY3RpdmVGaWx0ZXIucHVzaCh7ICBrZXk6IGssIHZhbHVlOiB2LCBsYWJlbDogYCR7IGsgfTokeyBrLmluY2x1ZGVzKCdkYXRlJyk/IGZvcm1hdERhdGUodiwgJ2RkIE1NTSB5eXl5JywgJ2VuLVVTJykgOiB2IH1gIH0pKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBmaWx0ZXIgY3JpdGVyaWEgYmFzZWQgb24gdGhlIHVzZXIgaW5wdXQuXG4gICAqL1xuICBwdWJsaWMgYWRkKCk6IHZvaWR7XG4gICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSB0aGlzLmdldFZhbHVlKHRoaXMuc2VhcmNoQm94Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZy5maWVsZHMuZmluZEluZGV4KCh7IGtleTogayB9KSA9PiBrID09PSBrZXkpID09PSAtMSkge1xuICAgICAgdGhpcy5zZWFyY2hCb3gubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGkgPSB0aGlzLmFjdGl2ZUZpbHRlci5maW5kSW5kZXgoKHsga2V5OiBrIH0pID0+IGsgPT09IGtleSk7XG4gICAgaWYgKGkgPT09IC0xKSB0aGlzLmFjdGl2ZUZpbHRlci5wdXNoKHsgbGFiZWw6IGAkeyBrZXkgfTokeyB2YWx1ZSB9YCwga2V5LCB2YWx1ZSB9KTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLmtleSA9IGtleTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyW2ldLnZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlcltpXS5sYWJlbCA9IGAkeyBrZXkgfTokeyB2YWx1ZSB9YDtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IFtrZXldOiB2YWx1ZSB9KTtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGFjdGl2ZSBmaWx0ZXIgYW5kIGNsZWFycyB0aGUgc2VhcmNoIGJveC5cbiAgICovXG4gIHByb3RlY3RlZCByZXNldFZhbHVlKCk6IHZvaWR7XG4gICAgdGhpcy5hY3RpdmVGaWx0ZXIubGVuZ3RoID0gMDtcbiAgICB0aGlzLnNlYXJjaEJveC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2VzIHRoZSBpbnB1dCB2YWx1ZSBhbmQgcmV0dXJucyBhIGtleS12YWx1ZSBwYWlyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgLSBJbnB1dCB2YWx1ZSB0byBiZSBwYXJzZWQuXG4gICAqIEByZXR1cm5zIHt7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH19IC0gS2V5LXZhbHVlIHBhaXIgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIH17XG4gICAgY29uc3QgdmFsdWVzOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIHsga2V5OiA8c3RyaW5nPiB0aGlzLmNvbmZpZy5maWVsZHNbMF0ua2V5LCB2YWx1ZTogdmFsdWVzWzBdIH07XG4gICAgcmV0dXJuIHsga2V5OiB2YWx1ZXNbMF0sIHZhbHVlOiB2YWx1ZXNbMV0gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2VhcmNoIGV2ZW50IGJhc2VkIG9uIHRoZSBmb3JtIHZhbHVlcy5cbiAgICogSW52b2tlcyBhbiBleHRyYSBhY3Rpb24gaWYgcHJvdmlkZWQuXG4gICAqIEBwYXJhbSB7KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkfSBbZXh0cmFBY3Rpb25dIC0gT3B0aW9uYWwgZXh0cmEgYWN0aW9uIHRvIGJlIGludm9rZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW1pdFZhbHVlKGV4dHJhQWN0aW9uPzogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZHtcbiAgICBsZXQgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBkYXRhOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIFxuICAgIE9iamVjdC5rZXlzKGYpLmZvckVhY2goKGs6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFmW2tdKSByZXR1cm47XG4gICAgICBcbiAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgZGF0YVtrXSA9IGZba107XG4gICAgICBleHRyYUFjdGlvbj8uKGssIGZba10pO1xuICAgIH0pO1xuICAgIHRoaXMub25TZWFyY2guZW1pdCh7IG1vZGU6IHRoaXMuY29uZmlnLm1vZGUsIGRhdGE6IGZsYWc/IGRhdGEgOiBudWxsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtIGNvbnRyb2wgZm9yIGEgZ2l2ZW4ga2V5IGFuZCBzZXRzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gS2V5IGZvciB0aGUgZm9ybSBjb250cm9sLlxuICAgKiBAcGFyYW0geyp9IFt2YWxdIC0gSW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZvcm0gY29udHJvbC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVGb3JtQ29udHJvbChrZXk6IHN0cmluZywgdmFsPzogYW55KTogdm9pZHtcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChrZXksIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuXG4gICAgaWYgKHZhbCkge1xuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsKTtcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVyLnB1c2goeyBsYWJlbDogYCR7IGtleSB9OiR7IHZhbCB9YCwga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGlvbi1pY29uIG5hbWU9XCJzZWFyY2hcIiBjbGFzcz1cImZzLTQgcG9zaXRpb24tYWJzb2x1dGVcIiAvPlxuXG48ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBmb3JtLWNvbnRyb2wgcHMtNSBweS0wIHBlLTAgZ2FwLTNcIj5cbiAgICBAaWYgKGFjdGl2ZUZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgZmxleC1zaHJpbmstMCB0YWctY29udGFpbmVyIGdhcC0yIHRleHQtbm93cmFwIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgYWN0aXZlRmlsdGVyOyB0cmFjayBpdGVtLmtleTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFnLWl0ZW0gcC0xIHJvdW5kZWQgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB1c2VyLXNlbGVjdC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjbGFzcz1cInBlLTEgbWUtMSBjdXJzb3ItcG9pbnRlciB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpO1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGlucHV0ICNzZWFyY2hCb3ggdHlwZT1cInNlYXJjaFwiIHBsYWNlaG9sZGVyPVwie3sgcGxhY2Vob2xkZXIgfX1cIiBjbGFzcz1cImZsZXgtc2hyaW5rLTEgYm9yZGVyLTAgZm9ybS1jb250cm9sIHBzLTAgcHktMlwiIFtjbGFzcy5hZHZdPVwiY29uZmlnLm1vZGUgPT09ICdhZHZhbmNlZCdcIiAoa2V5dXAuZW50ZXIpPVwiYWRkKCk7XCIgLz5cbjwvZGl2PlxuXG5AaWYgKGNvbmZpZy5tb2RlID09PSAnYWR2YW5jZWQnKSB7XG4gICAgPGlvbi1pY29uIG5hbWU9XCJmaWx0ZXJcIiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIGZzLTQgY3Vyc29yLXBvaW50ZXJcIiBpZD1cImZpbHRlci17eyBpZCB9fVwiIC8+XG4gICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgZnMtNCBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbGVhcigpO1wiIC8+XG4gICAgXG4gICAgPGlvbi1wb3BvdmVyIHRyaWdnZXI9XCJmaWx0ZXIte3sgaWQgfX1cIiB0cmlnZ2VyQWN0aW9uPVwiY2xpY2tcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBib3JkZXItYm90dG9tIHAtMSBwZS00IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1idXR0b24gc2l6ZT1cInNtYWxsXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJjbG9zZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNSBmdy1tZWRpdW1cIj5BZHZhbmNlZCBGaWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG4gICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmbGV4LWdyb3ctMSBvdmVyZmxvdy1hdXRvIHB4LTRcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYyBvZiBjb25maWcuZmllbGRzOyB0cmFjayBjLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoYy50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1pbnB1dCB0eXBlPVwibnVtYmVyXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jaGVja2JveCBsYWJlbFBsYWNlbWVudD1cImVuZFwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5IH19XCI+e3sgYy5sYWJlbCB9fTwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2RhdGUtcmFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWRhdGUgY2xhc3M9XCJmbGV4LWdyb3ctMVwiIG5hbWU9XCJmaWx0ZXItZnJvbVwiIGxhYmVsPVwie3sgYy5sYWJlbFswXSB9fVwiIGZvcm1Db250cm9sTmFtZT1cInt7IGMua2V5WzBdIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1kYXRlIGNsYXNzPVwiZmxleC1ncm93LTFcIiBuYW1lPVwiZmlsdGVyLXRvXCIgbGFiZWw9XCJ7eyBjLmxhYmVsWzFdIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXlbMV0gfX1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NlbGVjdCcpIHsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1cC1zZWxlY3QgY2xhc3M9XCJteS00XCIgYXBwZW5kVG89XCJib2R5XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiBbaXRlbXNdPVwiYy5vcHRpb25zIVwiIC8+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2VhcmNoYWJsZS1zZWxlY3QnKSB7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXAtc2VhcmNoYWJsZS1zZWxlY3QgY2xhc3M9XCJteS00XCIgYXBwZW5kVG89XCJib2R5XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiBbcXVlcnlGdW5jXT1cImMuZ2V0T3B0aW9ucyFcIiBbaW5pdGlhbEl0ZW1zXT1cImMub3B0aW9ucyFcIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQgeyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVwLWlucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJteS00XCIgbGFiZWw9XCJ7eyBjLmxhYmVsIH19XCIgZm9ybUNvbnRyb2xOYW1lPVwie3sgYy5rZXkgfX1cIiAvPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHB5LTMgcHgtNCBib3JkZXItdG9wIGQtZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiZm9ybS5yZXNldCgpO1wiPlJlc2V0PC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCIgY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNlYXJjaCgpO1wiPlNlYXJjaDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICA8L2lvbi1wb3BvdmVyPiAgICBcbn1cbiJdfQ==
@@ -2627,7 +2627,7 @@ class FilterComponent {
2627
2627
  }
2628
2628
  }
2629
2629
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FilterComponent, deps: [{ token: 'placeholder', attribute: true }, { token: i0.ChangeDetectorRef }, { token: i1.PopoverController }], target: i0.ɵɵFactoryTarget.Component }); }
2630
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2630
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: FilterComponent, isStandalone: true, selector: "up-filter", inputs: { id: "id", config: "config" }, outputs: { onSearch: "onSearch" }, host: { classAttribute: "d-block position-relative" }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], ngImport: i0, template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i1.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: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "indeterminate", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonPopover, selector: "ion-popover" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "component", type: FormDateComponent, selector: "up-date", inputs: ["label", "required", "disabled", "presentation"] }, { kind: "component", type: FormInputComponent, selector: "up-input", inputs: ["label", "value", "required", "disabled"], outputs: ["onInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: FormSelectComponent, selector: "up-select", inputs: ["items", "clearable", "label", "multiple", "required", "addTag", "disabled", "searchable", "bindLabel", "bindValue", "appendTo"] }, { kind: "component", type: FormSearchableSelectComponent, selector: "up-searchable-select", inputs: ["queryFunc", "clearable", "label", "initialItems", "required", "addTag", "disabled", "multiple", "bindLabel", "bindValue", "appendTo"], outputs: ["onChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2631
2631
  }
2632
2632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: FilterComponent, decorators: [{
2633
2633
  type: Component,
@@ -2640,7 +2640,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
2640
2640
  ReactiveFormsModule,
2641
2641
  FormSelectComponent,
2642
2642
  FormSearchableSelectComponent
2643
- ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
2643
+ ], template: "<ion-icon name=\"search\" class=\"fs-4 position-absolute\" />\n\n<div class=\"d-flex align-items-center form-control ps-5 py-0 pe-0 gap-3\">\n @if (activeFilter.length > 0) {\n <div class=\"d-flex flex-grow-1 flex-shrink-0 tag-container gap-2 text-nowrap overflow-auto\">\n @for (item of activeFilter; track item.key; let i = $index) {\n <div class=\"tag-item p-1 rounded d-flex align-items-center user-select-none\">\n <ion-icon name=\"close\" class=\"pe-1 me-1 cursor-pointer text-primary\" (click)=\"removeFilter(i);\" />\n {{ item.label }}\n </div>\n }\n </div>\n }\n\n <input #searchBox type=\"search\" placeholder=\"{{ placeholder }}\" class=\"flex-shrink-1 border-0 form-control ps-0 py-2\" [class.adv]=\"config.mode === 'advanced'\" (keyup.enter)=\"add();\" />\n</div>\n\n@if (config.mode === 'advanced') {\n <ion-icon name=\"filter\" class=\"position-absolute fs-4 cursor-pointer\" id=\"filter-{{ id }}\" />\n <ion-icon name=\"close\" class=\"position-absolute fs-4 cursor-pointer\" (click)=\"clear();\" />\n \n <ion-popover trigger=\"filter-{{ id }}\" triggerAction=\"click\">\n <ng-template>\n <div class=\"d-flex flex-column filter\">\n <div class=\"flex-shrink-0 border-bottom p-1 pe-4 d-flex align-items-center\">\n <ion-buttons>\n <ion-button size=\"small\" (click)=\"close()\">\n <ion-icon slot=\"icon-only\" name=\"close\" />\n </ion-button>\n </ion-buttons>\n \n <div class=\"fs-5 fw-medium\">Advanced Filter</div>\n </div>\n \n <form class=\"flex-grow-1 overflow-auto px-4\" [formGroup]=\"form\">\n @for (c of config.fields; track c.key) {\n @switch (c.type) {\n @case ('number') {\n <up-input type=\"number\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n\n @case ('checkbox') {\n <div class=\"my-4\">\n <ion-checkbox labelPlacement=\"end\" formControlName=\"{{ c.key }}\">{{ c.label }}</ion-checkbox>\n </div>\n }\n\n @case ('date-range') {\n <div class=\"d-flex gap-3 my-4\">\n <up-date class=\"flex-grow-1\" name=\"filter-from\" label=\"{{ c.label[0] }}\" formControlName=\"{{ c.key[0] }}\" />\n <up-date class=\"flex-grow-1\" name=\"filter-to\" label=\"{{ c.label[1] }}\" formControlName=\"{{ c.key[1] }}\" />\n </div>\n }\n\n @case ('select') { \n <up-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [items]=\"c.options!\" /> \n }\n\n @case ('searchable-select') { \n <up-searchable-select class=\"my-4\" appendTo=\"body\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" [queryFunc]=\"c.getOptions!\" [initialItems]=\"c.options!\" /> \n }\n \n @default { \n <up-input type=\"text\" autocomplete=\"off\" class=\"my-4\" label=\"{{ c.label }}\" formControlName=\"{{ c.key }}\" /> \n }\n }\n }\n </form>\n \n <div class=\"flex-shrink-0 py-3 px-4 border-top d-flex gap-3\">\n <ion-button class=\"flex-grow-1\" color=\"secondary\" (click)=\"form.reset();\">Reset</ion-button>\n <ion-button class=\"flex-grow-1\" color=\"primary\" (click)=\"search();\">Search</ion-button>\n </div>\n </div>\n </ng-template>\n </ion-popover> \n}\n", styles: ["ion-icon{top:7px}ion-icon[name=close]{right:16px}ion-icon[name=search]{left:14px}ion-icon[name=filter]{right:48px}ion-popover{--width: 80%;--max-width: 450px}.adv{padding-right:60px}.fs-5,ion-icon{color:#616161}.tag-container{max-width:45%}@media (max-width: 576px){.tag-container{max-width:35%}}.tag-container::-webkit-scrollbar{height:0px}.tag-item{color:#ed6b26;background-color:#fef3ee}.tag-item ion-icon{border-right:1px solid #fbd1be}input::-webkit-search-decoration,input::-webkit-search-cancel-button,input::-webkit-search-results-button,input::-webkit-search-results-decoration{-webkit-appearance:none}\n"] }]
2644
2644
  }], ctorParameters: () => [{ type: undefined, decorators: [{
2645
2645
  type: Attribute,
2646
2646
  args: ['placeholder']