ngx-techlify-core 18.67.0 → 18.69.0
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.
- package/esm2022/lib/audit-log/audit-log-list/audit-log-list.component.mjs +1 -1
- package/esm2022/lib/base-model/techlify-list-component.mjs +5 -5
- package/esm2022/lib/custom-icon/custom-icons.registry.mjs +13 -2
- package/esm2022/lib/export-excel/export-excel-button/export-excel-button.component.mjs +6 -3
- package/esm2022/lib/request-helper/request-helper.service.mjs +4 -3
- package/esm2022/lib/techlify-auto-complete-select/techlify-auto-complete-select.component.mjs +8 -4
- package/esm2022/lib/techlify-icon/techlify-icon.component.mjs +6 -2
- package/fesm2022/ngx-techlify-core.mjs +37 -14
- package/fesm2022/ngx-techlify-core.mjs.map +1 -1
- package/lib/export-excel/export-excel-button/export-excel-button.component.d.ts +2 -1
- package/lib/request-helper/request-helper.service.d.ts +2 -1
- package/lib/techlify-auto-complete-select/techlify-auto-complete-select.component.d.ts +2 -1
- package/package.json +1 -1
package/esm2022/lib/techlify-auto-complete-select/techlify-auto-complete-select.component.mjs
CHANGED
|
@@ -42,6 +42,8 @@ export class TechlifyAutoCompleteSelectComponent {
|
|
|
42
42
|
this.isAllowDynamicOptionsAdd = false;
|
|
43
43
|
//Output to watch for selected items change
|
|
44
44
|
this.selectedItemsChange = new EventEmitter();
|
|
45
|
+
//Default false
|
|
46
|
+
this.readonly = false;
|
|
45
47
|
this.filteredOptions = [];
|
|
46
48
|
this.onChange = (_) => { };
|
|
47
49
|
this.onTouched = () => { };
|
|
@@ -144,11 +146,11 @@ export class TechlifyAutoCompleteSelectComponent {
|
|
|
144
146
|
this.onTouched = fn;
|
|
145
147
|
}
|
|
146
148
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TechlifyAutoCompleteSelectComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
147
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TechlifyAutoCompleteSelectComponent, isStandalone: true, selector: "app-techlify-auto-complete-select", inputs: { service: "service", titleField: "titleField", valueField: "valueField", placeholder: "placeholder", perPage: "perPage", sortBy: "sortBy", displaySelectedDir: "displaySelectedDir", options: "options", selectedItems: "selectedItems", isAllowDynamicOptionsAdd: "isAllowDynamicOptionsAdd" }, outputs: { selectedItemsChange: "selectedItemsChange" }, providers: [{
|
|
149
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TechlifyAutoCompleteSelectComponent, isStandalone: true, selector: "app-techlify-auto-complete-select", inputs: { service: "service", titleField: "titleField", valueField: "valueField", placeholder: "placeholder", perPage: "perPage", sortBy: "sortBy", displaySelectedDir: "displaySelectedDir", options: "options", selectedItems: "selectedItems", isAllowDynamicOptionsAdd: "isAllowDynamicOptionsAdd", readonly: "readonly" }, outputs: { selectedItemsChange: "selectedItemsChange" }, providers: [{
|
|
148
150
|
provide: NG_VALUE_ACCESSOR,
|
|
149
151
|
useExisting: forwardRef(() => TechlifyAutoCompleteSelectComponent),
|
|
150
152
|
multi: true
|
|
151
|
-
}], queries: [{ propertyName: "itemTemplate", first: true, predicate: ["itemTemplate"], descendants: true }, { propertyName: "selectedTemplate", first: true, predicate: ["selectedTemplate"], descendants: true }], ngImport: i0, template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { 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: "ngmodule", type: TechlifyIconModule }, { kind: "component", type: i7.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
153
|
+
}], queries: [{ propertyName: "itemTemplate", first: true, predicate: ["itemTemplate"], descendants: true }, { propertyName: "selectedTemplate", first: true, predicate: ["selectedTemplate"], descendants: true }], ngImport: i0, template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon *ngIf=\"!readonly\" name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\" *ngIf=\"!readonly\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { 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: "ngmodule", type: TechlifyIconModule }, { kind: "component", type: i7.TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
152
154
|
}
|
|
153
155
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TechlifyAutoCompleteSelectComponent, decorators: [{
|
|
154
156
|
type: Component,
|
|
@@ -164,7 +166,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
164
166
|
provide: NG_VALUE_ACCESSOR,
|
|
165
167
|
useExisting: forwardRef(() => TechlifyAutoCompleteSelectComponent),
|
|
166
168
|
multi: true
|
|
167
|
-
}], template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"] }]
|
|
169
|
+
}], template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon *ngIf=\"!readonly\" name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\" *ngIf=\"!readonly\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"] }]
|
|
168
170
|
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { service: [{
|
|
169
171
|
type: Input
|
|
170
172
|
}], titleField: [{
|
|
@@ -193,5 +195,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
193
195
|
}], selectedTemplate: [{
|
|
194
196
|
type: ContentChild,
|
|
195
197
|
args: ['selectedTemplate']
|
|
198
|
+
}], readonly: [{
|
|
199
|
+
type: Input
|
|
196
200
|
}] } });
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktYXV0by1jb21wbGV0ZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi90ZWNobGlmeS1hdXRvLWNvbXBsZXRlLXNlbGVjdC90ZWNobGlmeS1hdXRvLWNvbXBsZXRlLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0L3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7O0FBNEIzRSxNQUFNLE9BQU8sbUNBQW1DO0lB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QUFsQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUdJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHdUIsWUFBWTtzQkFBekMsWUFBWTt1QkFBQyxjQUFjO2dCQUdNLGdCQUFnQjtzQkFBakQsWUFBWTt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRlY2hsaWZ5SWNvbk1vZHVsZSB9IGZyb20gJy4uL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5tb2R1bGUnO1xuaW1wb3J0IHsgVGVjaGxpZnlTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS1tb2RlbC90ZWNobGlmeS1zZXJ2aWNlJztcblxudHlwZSBTZWxlY3RJdGVtID0ge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIF9faXNDdXN0b20/OiBib29sZWFuO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgVGVjaGxpZnlJY29uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlY2hsaWZ5QXV0b0NvbXBsZXRlU2VsZWN0Q29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeUF1dG9Db21wbGV0ZVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvL0RlZmF1bHQgc2VydmljZSBmb3IgZmV0Y2hpbmcgc2VsZWN0IGl0ZW1zXG4gIEBJbnB1dCgpIHNlcnZpY2UhOiBUZWNobGlmeVNlcnZpY2U7XG5cbiAgLy9EZWZhdWx0IHRpdGxlIGZpZWxkXG4gIEBJbnB1dCgpIHRpdGxlRmllbGQ6IHN0cmluZyA9ICd0aXRsZSc7XG4gIC8vRGVmYXVsdCB2YWx1ZSBmaWVsZFxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnO1xuICAvL0RlZmF1bHQgcGxhY2Vob2xkZXJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2guLi4nO1xuICAvL0RlZmF1bHQgaXRlbXMgcGVyIHJlcXVlc3RcbiAgQElucHV0KCkgcGVyUGFnZTogbnVtYmVyID0gNTA7XG4gIC8vRGVmYXVsdCBzb3J0IGJ5XG4gIEBJbnB1dCgpIHNvcnRCeTogc3RyaW5nID0gJ3RpdGxlfGFzYyc7XG4gIC8vRGVmYXVsdCBzZWxlY3RlZCBjb250YWluZXIgZGlzcGxheVxuICBASW5wdXQoKSBkaXNwbGF5U2VsZWN0ZWREaXI6ICdjb2x1bW4nIHwgJ3JvdycgPSAnY29sdW1uJztcbiAgLy9EZWZhdWx0IG9wdGlvbnNcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcbiAgLy9EZWZhdWx0IHNlbGVjdGVkIGl0ZW1zXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuICAvKipcbiAgICogQm9vbGVhbiB0byBkZW5vdGUgd2hldGhlciBkeW5hbWljIHR5cGVkIG9wdGlvbnMgYXJlIGNvbnNpZGVyZWRcbiAgICogQnkgZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgaXNBbGxvd0R5bmFtaWNPcHRpb25zQWRkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9PdXRwdXQgdG8gd2F0Y2ggZm9yIHNlbGVjdGVkIGl0ZW1zIGNoYW5nZVxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0SXRlbVtdPigpO1xuXG4gIC8vT3ZlcnJpZGlibGUgaXRlbSB0ZW1wbGF0ZSBmb3IgYXV0byBjb21wbGV0ZVxuICBAQ29udGVudENoaWxkKCdpdGVtVGVtcGxhdGUnKSBpdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vT3ZlcnJpZGlibGUgc2VjdGVkIHRlbXBsYXRlIHRvIGRpc3BsYXkgc2VsZWN0ZWQgaXRlbXNcbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0ZWRUZW1wbGF0ZScpIHNlbGVjdGVkVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmlsdGVyZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3ViITogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzZWFyY2g6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzZWFyY2hDb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWFyY2gnKSE7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YiA9IHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmluZGV4KHtcbiAgICAgICAgICBzZWFyY2g6IHZhbHVlLFxuICAgICAgICAgIHBlclBhZ2U6IHRoaXMucGVyUGFnZSxcbiAgICAgICAgICBzb3J0X2J5OiB0aGlzLnNvcnRCeVxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzPy5kYXRhIHx8IFtdKVxuICAgICkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsIGZpbHRlclxuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vVXBkYXRlIHRoZSBmaWx0ZXJlZCBvcHRpb25zIHRvIGVsaW1pbmF0ZSBwcmV2aW91c2x5IHNlbGVjdGVkIGl0ZW1zIGFuZCBkdXBsaWNhdGVzXG4gIHVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+XG4gICAgICAhdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoXG4gICAgICAgIHNlbGVjdGVkID0+XG4gICAgICAgICAgdGhpcy5nZXRWYWx1ZShzZWxlY3RlZCkgPT09IG9wdGlvblt0aGlzLnZhbHVlRmllbGRdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8vU2VsZWN0IGFuIGl0ZW0gZnJvbSBhdXRvIGNvbXBsZXRlXG4gIHNlbGVjdEl0ZW0oaXRlbTogYW55KSB7XG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaSA9PiB0aGlzLmdldFZhbHVlKGkpID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gIH1cblxuICAvL1JlbW92ZSBhbiBpdGVtIGZyb20gc2VsZWN0ZWQgbGlzdFxuICByZW1vdmVJdGVtKGl0ZW06IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShpdGVtKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gdGhpcy5nZXRWYWx1ZShpKSAhPT0gdmFsdWUpO1xuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICAvL01ldGhvZCB0byBhZGQgZHluYW1pYyB0ZXh0cyBmcm9tIGF1dG8gY29tcGxldGVcbiAgaGFuZGxlRW50ZXIoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdmFsdWUgPSAodGhpcy5zZWFyY2hDb250cm9sLnZhbHVlID8/ICcnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgICBpZiAoKCF0aGlzLmlzQWxsb3dEeW5hbWljT3B0aW9uc0FkZCkgfHwgKCF2YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaXRlbSA9PlxuICAgICAgdGhpcy5nZXRWYWx1ZShpdGVtKT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgICBpZiAoIWV4aXN0cykge1xuICAgICAgY29uc3QgY3VzdG9tSXRlbTogU2VsZWN0SXRlbSA9IHtcbiAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZhbHVlLFxuICAgICAgICBbdGhpcy50aXRsZUZpZWxkXTogdmFsdWUsXG4gICAgICAgIF9faXNDdXN0b206IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChjdXN0b21JdGVtKTtcbiAgICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gIH1cblxuICAvL1Byb3BvZ2F0ZSB0aGUgY2hhbmdlcyB0byBjaGlsZCBjb21wb25lbnRcbiAgcHJvcGFnYXRlKCkge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG5cbiAgZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHJldHVybiBpdGVtO1xuICAgIHJldHVybiBpdGVtW3RoaXMudmFsdWVGaWVsZF07XG4gIH1cblxuICBnZXRUaXRsZShpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHJldHVybiBpdGVtO1xuICAgIHJldHVybiBpdGVtW3RoaXMudGl0bGVGaWVsZF07XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBTZWxlY3RJdGVtW10pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxufSIsIjwhLS0gU2VsZWN0ZWQgSXRlbXMgLS0+XG48ZGl2IGNsYXNzPVwibXktMlwiXG4gICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1jb250YWluZXItY29sdW1uJzpkaXNwbGF5U2VsZWN0ZWREaXI9PSdjb2x1bW4nLCdzZWxlY3RlZC1jb250YWluZXItcm93JzpkaXNwbGF5U2VsZWN0ZWREaXI9PSdyb3cnIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cblxuICAgICAgICA8IS0tIEN1c3RvbSBTZWxlY3RlZCBUZW1wbGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFNlbGVjdGVkVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RlZFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSxyZW1vdmU6IHJlbW92ZUl0ZW0uYmluZCh0aGlzKX1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBEZWZhdWx0IFRlbXBsYXRlIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZFRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWNhcmRcIiBbY2xhc3MuY3VzdG9tXT1cIml0ZW0uX19pc0N1c3RvbVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFRpdGxlKGl0ZW0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktaWNvbiBuYW1lPVwicmVqZWN0XCIgY2xhc3M9XCJtcy0yIGNsaWNrYWJsZVwiIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtdGVjaGxpZnktaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPCEtLSBTZWxlY3RlZCBJdGVtcyAtLT5cbjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwXCI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlRW50ZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiBtYXRTdWZmaXg+XG4gICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RJdGVtKCRldmVudC5vcHRpb24udmFsdWUpXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cblxuICAgICAgICAgICAgICAgIDwhLS0gQ3VzdG9tIFRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBvcHRpb24gfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBEZWZhdWx0IFRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25bdGl0bGVGaWVsZF0gfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuPC9mb3JtPiJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktYXV0by1jb21wbGV0ZS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNvcmUvc3JjL2xpYi90ZWNobGlmeS1hdXRvLWNvbXBsZXRlLXNlbGVjdC90ZWNobGlmeS1hdXRvLWNvbXBsZXRlLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0L3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBMEIsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7Ozs7O0FBNEIzRSxNQUFNLE9BQU8sbUNBQW1DO0lBK0M5QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTFDbkMscUJBQXFCO1FBQ1osZUFBVSxHQUFXLE9BQU8sQ0FBQztRQUN0QyxxQkFBcUI7UUFDWixlQUFVLEdBQVcsSUFBSSxDQUFDO1FBQ25DLHFCQUFxQjtRQUNaLGdCQUFXLEdBQVcsV0FBVyxDQUFDO1FBQzNDLDJCQUEyQjtRQUNsQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQzlCLGlCQUFpQjtRQUNSLFdBQU0sR0FBVyxXQUFXLENBQUM7UUFDdEMsb0NBQW9DO1FBQzNCLHVCQUFrQixHQUFxQixRQUFRLENBQUM7UUFDekQsaUJBQWlCO1FBQ1IsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUM3Qix3QkFBd0I7UUFDZixrQkFBYSxHQUFpQixFQUFFLENBQUM7UUFDMUM7OztXQUdHO1FBQ00sNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBRW5ELDJDQUEyQztRQUNqQyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQVFqRSxlQUFlO1FBQ04sYUFBUSxHQUFZLEtBQUssQ0FBQztRQUduQyxvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUlwQixhQUFRLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDeEIsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDN0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3JCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDbkMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDbEQsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDdEIsUUFBUSxDQUFDLEVBQUUsQ0FDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3RELENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsVUFBVSxDQUFDLElBQVM7UUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsVUFBVSxDQUFDLElBQVM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxXQUFXLENBQUMsS0FBVTtRQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxVQUFVLEdBQWU7Z0JBQzdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUs7Z0JBQ3hCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUs7Z0JBQ3hCLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsU0FBUztRQUNQLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBR0QsUUFBUSxDQUFDLElBQVM7UUFDaEIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN2QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBbUI7UUFDNUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOytHQXpLVSxtQ0FBbUM7bUdBQW5DLG1DQUFtQyx5Y0FObkMsQ0FBQztnQkFDVixPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2dCQUNsRSxLQUFLLEVBQUUsSUFBSTthQUNaLENBQUMsMk9DbENKLDRoRUErQ08sMlREM0JILFlBQVksb2dCQUNaLGtCQUFrQiwwV0FDbEIscUJBQXFCLHcxQkFDckIsbUJBQW1CLDQ4QkFDbkIsY0FBYywwV0FDZCxrQkFBa0IsOElBQ2xCLGFBQWE7OzRGQVVKLG1DQUFtQztrQkFwQi9DLFNBQVM7K0JBQ0UsbUNBQW1DLGNBQ2pDLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixhQUFhO3FCQUNkLGFBR1UsQ0FBQzs0QkFDVixPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxvQ0FBb0MsQ0FBQzs0QkFDbEUsS0FBSyxFQUFFLElBQUk7eUJBQ1osQ0FBQztnRkFLTyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUdJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHdUIsWUFBWTtzQkFBekMsWUFBWTt1QkFBQyxjQUFjO2dCQUdNLGdCQUFnQjtzQkFBakQsWUFBWTt1QkFBQyxrQkFBa0I7Z0JBR3ZCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRlY2hsaWZ5SWNvbk1vZHVsZSB9IGZyb20gJy4uL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5tb2R1bGUnO1xuaW1wb3J0IHsgVGVjaGxpZnlTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS1tb2RlbC90ZWNobGlmeS1zZXJ2aWNlJztcblxudHlwZSBTZWxlY3RJdGVtID0ge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIF9faXNDdXN0b20/OiBib29sZWFuO1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXRlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgVGVjaGxpZnlJY29uTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3RlY2hsaWZ5LWF1dG8tY29tcGxldGUtc2VsZWN0LmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbe1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlY2hsaWZ5QXV0b0NvbXBsZXRlU2VsZWN0Q29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9XVxufSlcbmV4cG9ydCBjbGFzcyBUZWNobGlmeUF1dG9Db21wbGV0ZVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAvL0RlZmF1bHQgc2VydmljZSBmb3IgZmV0Y2hpbmcgc2VsZWN0IGl0ZW1zXG4gIEBJbnB1dCgpIHNlcnZpY2UhOiBUZWNobGlmeVNlcnZpY2U7XG5cbiAgLy9EZWZhdWx0IHRpdGxlIGZpZWxkXG4gIEBJbnB1dCgpIHRpdGxlRmllbGQ6IHN0cmluZyA9ICd0aXRsZSc7XG4gIC8vRGVmYXVsdCB2YWx1ZSBmaWVsZFxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAnaWQnO1xuICAvL0RlZmF1bHQgcGxhY2Vob2xkZXJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2guLi4nO1xuICAvL0RlZmF1bHQgaXRlbXMgcGVyIHJlcXVlc3RcbiAgQElucHV0KCkgcGVyUGFnZTogbnVtYmVyID0gNTA7XG4gIC8vRGVmYXVsdCBzb3J0IGJ5XG4gIEBJbnB1dCgpIHNvcnRCeTogc3RyaW5nID0gJ3RpdGxlfGFzYyc7XG4gIC8vRGVmYXVsdCBzZWxlY3RlZCBjb250YWluZXIgZGlzcGxheVxuICBASW5wdXQoKSBkaXNwbGF5U2VsZWN0ZWREaXI6ICdjb2x1bW4nIHwgJ3JvdycgPSAnY29sdW1uJztcbiAgLy9EZWZhdWx0IG9wdGlvbnNcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcbiAgLy9EZWZhdWx0IHNlbGVjdGVkIGl0ZW1zXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuICAvKipcbiAgICogQm9vbGVhbiB0byBkZW5vdGUgd2hldGhlciBkeW5hbWljIHR5cGVkIG9wdGlvbnMgYXJlIGNvbnNpZGVyZWRcbiAgICogQnkgZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgaXNBbGxvd0R5bmFtaWNPcHRpb25zQWRkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9PdXRwdXQgdG8gd2F0Y2ggZm9yIHNlbGVjdGVkIGl0ZW1zIGNoYW5nZVxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0SXRlbVtdPigpO1xuXG4gIC8vT3ZlcnJpZGlibGUgaXRlbSB0ZW1wbGF0ZSBmb3IgYXV0byBjb21wbGV0ZVxuICBAQ29udGVudENoaWxkKCdpdGVtVGVtcGxhdGUnKSBpdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vT3ZlcnJpZGlibGUgc2VjdGVkIHRlbXBsYXRlIHRvIGRpc3BsYXkgc2VsZWN0ZWQgaXRlbXNcbiAgQENvbnRlbnRDaGlsZCgnc2VsZWN0ZWRUZW1wbGF0ZScpIHNlbGVjdGVkVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vRGVmYXVsdCBmYWxzZVxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgZmlsdGVyZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3ViITogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzZWFyY2g6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzZWFyY2hDb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWFyY2gnKSE7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YiA9IHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmluZGV4KHtcbiAgICAgICAgICBzZWFyY2g6IHZhbHVlLFxuICAgICAgICAgIHBlclBhZ2U6IHRoaXMucGVyUGFnZSxcbiAgICAgICAgICBzb3J0X2J5OiB0aGlzLnNvcnRCeVxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4gcmVzPy5kYXRhIHx8IFtdKVxuICAgICkuc3Vic2NyaWJlKG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsIGZpbHRlclxuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8vVXBkYXRlIHRoZSBmaWx0ZXJlZCBvcHRpb25zIHRvIGVsaW1pbmF0ZSBwcmV2aW91c2x5IHNlbGVjdGVkIGl0ZW1zIGFuZCBkdXBsaWNhdGVzXG4gIHVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+XG4gICAgICAhdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoXG4gICAgICAgIHNlbGVjdGVkID0+XG4gICAgICAgICAgdGhpcy5nZXRWYWx1ZShzZWxlY3RlZCkgPT09IG9wdGlvblt0aGlzLnZhbHVlRmllbGRdXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8vU2VsZWN0IGFuIGl0ZW0gZnJvbSBhdXRvIGNvbXBsZXRlXG4gIHNlbGVjdEl0ZW0oaXRlbTogYW55KSB7XG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaSA9PiB0aGlzLmdldFZhbHVlKGkpID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pO1xuICAgIGlmICghZXhpc3RzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gIH1cblxuICAvL1JlbW92ZSBhbiBpdGVtIGZyb20gc2VsZWN0ZWQgbGlzdFxuICByZW1vdmVJdGVtKGl0ZW06IGFueSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShpdGVtKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKGkgPT4gdGhpcy5nZXRWYWx1ZShpKSAhPT0gdmFsdWUpO1xuICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gIH1cblxuICAvL01ldGhvZCB0byBhZGQgZHluYW1pYyB0ZXh0cyBmcm9tIGF1dG8gY29tcGxldGVcbiAgaGFuZGxlRW50ZXIoZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdmFsdWUgPSAodGhpcy5zZWFyY2hDb250cm9sLnZhbHVlID8/ICcnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgICBpZiAoKCF0aGlzLmlzQWxsb3dEeW5hbWljT3B0aW9uc0FkZCkgfHwgKCF2YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaXRlbSA9PlxuICAgICAgdGhpcy5nZXRWYWx1ZShpdGVtKT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgICBpZiAoIWV4aXN0cykge1xuICAgICAgY29uc3QgY3VzdG9tSXRlbTogU2VsZWN0SXRlbSA9IHtcbiAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZhbHVlLFxuICAgICAgICBbdGhpcy50aXRsZUZpZWxkXTogdmFsdWUsXG4gICAgICAgIF9faXNDdXN0b206IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChjdXN0b21JdGVtKTtcbiAgICAgIHRoaXMucHJvcGFnYXRlKCk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gIH1cblxuICAvL1Byb3BvZ2F0ZSB0aGUgY2hhbmdlcyB0byBjaGlsZCBjb21wb25lbnRcbiAgcHJvcGFnYXRlKCkge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG5cbiAgZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiBudWxsO1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHJldHVybiBpdGVtO1xuICAgIHJldHVybiBpdGVtW3RoaXMudmFsdWVGaWVsZF07XG4gIH1cblxuICBnZXRUaXRsZShpdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHJldHVybiBpdGVtO1xuICAgIHJldHVybiBpdGVtW3RoaXMudGl0bGVGaWVsZF07XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBTZWxlY3RJdGVtW10pOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJlZE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxufSIsIjwhLS0gU2VsZWN0ZWQgSXRlbXMgLS0+XG48ZGl2IGNsYXNzPVwibXktMlwiXG4gICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZC1jb250YWluZXItY29sdW1uJzpkaXNwbGF5U2VsZWN0ZWREaXI9PSdjb2x1bW4nLCdzZWxlY3RlZC1jb250YWluZXItcm93JzpkaXNwbGF5U2VsZWN0ZWREaXI9PSdyb3cnIH1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIj5cblxuICAgICAgICA8IS0tIEN1c3RvbSBTZWxlY3RlZCBUZW1wbGF0ZSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFNlbGVjdGVkVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RlZFRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSxyZW1vdmU6IHJlbW92ZUl0ZW0uYmluZCh0aGlzKX1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBEZWZhdWx0IFRlbXBsYXRlIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZFRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWNhcmRcIiBbY2xhc3MuY3VzdG9tXT1cIml0ZW0uX19pc0N1c3RvbVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFRpdGxlKGl0ZW0pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhcHAtdGVjaGxpZnktaWNvbiAqbmdJZj1cIiFyZWFkb25seVwiIG5hbWU9XCJyZWplY3RcIiBjbGFzcz1cIm1zLTIgY2xpY2thYmxlXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC10ZWNobGlmeS1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48IS0tIFNlbGVjdGVkIEl0ZW1zIC0tPlxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cIiFyZWFkb25seVwiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImhhbmRsZUVudGVyKCRldmVudClcIiAvPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0SXRlbSgkZXZlbnQub3B0aW9uLnZhbHVlKVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEN1c3RvbSBUZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogb3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBUZW1wbGF0ZSAtLT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uW3RpdGxlRmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZm9ybT4iXX0=
|
|
@@ -7,7 +7,11 @@ export class TechlifyIconComponent {
|
|
|
7
7
|
this.name = '';
|
|
8
8
|
this.size = 'md';
|
|
9
9
|
//Custom icon list
|
|
10
|
-
this.customIconList = [
|
|
10
|
+
this.customIconList = [
|
|
11
|
+
'batch-add',
|
|
12
|
+
'unapprove',
|
|
13
|
+
'gra'
|
|
14
|
+
];
|
|
11
15
|
// Map logical names to CSS classes
|
|
12
16
|
this.iconMap = {
|
|
13
17
|
add: 'fas fa-plus',
|
|
@@ -65,4 +69,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
65
69
|
}], size: [{
|
|
66
70
|
type: Input
|
|
67
71
|
}] } });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVjaGxpZnktaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVjaGxpZnktY29yZS9zcmMvbGliL3RlY2hsaWZ5LWljb24vdGVjaGxpZnktaWNvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU9qRCxNQUFNLE9BQU8scUJBQXFCO0lBTGxDO1FBTVcsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQXFDLElBQUksQ0FBQztRQVF2RCxrQkFBa0I7UUFDbEIsbUJBQWMsR0FBYTtZQUN6QixXQUFXO1lBQ1gsV0FBVztZQUNYLEtBQUs7U0FDTixDQUFDO1FBT0YsbUNBQW1DO1FBQzNCLFlBQU8sR0FBMkI7WUFDeEMsR0FBRyxFQUFFLGFBQWE7WUFDbEIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsTUFBTSxFQUFFLGNBQWM7WUFDdEIsTUFBTSxFQUFFLG9CQUFvQjtZQUM1QixNQUFNLEVBQUUsbUJBQW1CO1lBQzNCLEtBQUssRUFBRSxjQUFjO1lBQ3JCLEdBQUcsRUFBRSxpQkFBaUI7WUFDdEIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFLHFCQUFxQjtZQUMvQixVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsT0FBTyxFQUFFLGNBQWM7WUFDdkIsTUFBTSxFQUFFLGNBQWM7WUFDdEIsUUFBUSxFQUFFLGlCQUFpQjtZQUMzQixLQUFLLEVBQUUsY0FBYztZQUNyQixjQUFjLEVBQUUscUJBQXFCO1lBQ3JDLElBQUksRUFBRSxhQUFhO1lBQ25CLEtBQUssRUFBRSxhQUFhO1lBQ3BCLEtBQUssRUFBRSxjQUFjO1lBQ3JCLFFBQVEsRUFBRSx1QkFBdUI7WUFDakMsTUFBTSxFQUFFLGVBQWU7WUFDdkIsWUFBWSxFQUFFLG1CQUFtQjtZQUNqQyxJQUFJLEVBQUUsZ0JBQWdCO1NBQ3ZCLENBQUM7UUFFRixnQ0FBZ0M7UUFDeEIsWUFBTyxHQUEyQjtZQUN4QyxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPO1lBQ1gsRUFBRSxFQUFFLE9BQU87WUFDWCxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPO1NBQ1osQ0FBQztLQUNIO0lBdkRDLElBQUksU0FBUztRQUNYLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHVCQUF1QixDQUFDO1FBQ3JFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFTRCw4QkFBOEI7SUFDOUIsWUFBWSxDQUFDLElBQVk7UUFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQXBCVSxxQkFBcUI7bUdBQXJCLHFCQUFxQixpR0NQbEMsZ1FBUWM7OzRGRERELHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7OEJBS3BCLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZWNobGlmeS1pY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RlY2hsaWZ5LWljb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZWNobGlmeS1pY29uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGVjaGxpZnlJY29uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAneGwnID0gJ21kJztcblxuICBnZXQgaWNvbkNsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBiYXNlQ2xhc3MgPSB0aGlzLmljb25NYXBbdGhpcy5uYW1lXSB8fCAnZmEgZmEtcXVlc3Rpb24tY2lyY2xlJztcbiAgICBjb25zdCBzaXplQ2xhc3MgPSB0aGlzLnNpemVNYXBbdGhpcy5zaXplXSB8fCAnJztcbiAgICByZXR1cm4gW2Jhc2VDbGFzcywgc2l6ZUNsYXNzXTtcbiAgfVxuXG4gIC8vQ3VzdG9tIGljb24gbGlzdFxuICBjdXN0b21JY29uTGlzdDogc3RyaW5nW10gPSBbXG4gICAgJ2JhdGNoLWFkZCcsXG4gICAgJ3VuYXBwcm92ZScsXG4gICAgJ2dyYSdcbiAgXTtcblxuICAvL01ldGhvZCB0byBjaGVjayBjdXN0b20gaWNvbnNcbiAgaXNDdXN0b21JY29uKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1c3RvbUljb25MaXN0LmluY2x1ZGVzKG5hbWUpO1xuICB9XG5cbiAgLy8gTWFwIGxvZ2ljYWwgbmFtZXMgdG8gQ1NTIGNsYXNzZXNcbiAgcHJpdmF0ZSBpY29uTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGFkZDogJ2ZhcyBmYS1wbHVzJyxcbiAgICB2aWV3OiAnZmFzIGZhLWV5ZScsXG4gICAgZWRpdDogJ2ZhcyBmYS1wZW4nLFxuICAgIGRlbGV0ZTogJ2ZhcyBmYS10cmFzaCcsXG4gICAgaW1wb3J0OiAnZmFzIGZhLWZpbGUtaW1wb3J0JyxcbiAgICBleHBvcnQ6ICdmYXMgZmEtZmlsZS1leGNlbCcsXG4gICAgcHJpbnQ6ICdmYXMgZmEtcHJpbnQnLFxuICAgIHBkZjogJ2ZhcyBmYS1maWxlLXBkZicsXG4gICAgaGlzdG9yeTogJ2ZhcyBmYS1jbG9jaycsXG4gICAgY29weTogJ2ZhcyBmYS1jb3B5JyxcbiAgICBhY3RpdmF0ZTogJ2ZhcyBmYS1jaGVjay1jaXJjbGUnLFxuICAgIGRlYWN0aXZhdGU6ICdmYXMgZmEtc3RvcC1jaXJjbGUnLFxuICAgIGVtYWlsOiAnZmFyIGZhLWVudmVsb3BlJyxcbiAgICBhcHByb3ZlOiAnZmFzIGZhLWNoZWNrJyxcbiAgICByZWplY3Q6ICdmYXMgZmEtdGltZXMnLFxuICAgIGNhbGVuZGFyOiAnZmFzIGZhLWNhbGVuZGFyJyxcbiAgICB0YWJsZTogJ2ZhcyBmYS10YWJsZScsXG4gICAgbXVsdGlfY2FsZW5kYXI6ICdmYXMgZmEtY2FsZW5kYXItYWx0JyxcbiAgICBsaW5rOiAnZmFzIGZhLWxpbmsnLFxuICAgIHJlc2V0OiAnZmFzIGZhLXJlZG8nLFxuICAgIHBob25lOiAnZmFzIGZhLXBob25lJyxcbiAgICBsb2NhdGlvbjogJ2ZhcyBmYS1tYXAtbWFya2VyLWFsdCcsXG4gICAgdW5saW5rOiAnZmFzIGZhLXVubGluaycsXG4gICAgZGlzYWJsZV91c2VyOiAnZmFzIGZhLXVzZXItc2xhc2gnLFxuICAgIHN3YXA6ICdmYXMgZmEtcmV0d2VldCdcbiAgfTtcblxuICAvLyBNYXAgc2l6ZSBpbnB1dCB0byBDU1MgY2xhc3Nlc1xuICBwcml2YXRlIHNpemVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgeHM6ICdmYS14cycsXG4gICAgc206ICdmYS1zbScsXG4gICAgbWQ6ICdmYS1tZCcsXG4gICAgbGc6ICdmYS1sZycsXG4gICAgeGw6ICdmYS0yeCdcbiAgfTtcbn0iLCI8IS0tICBDdXN0b20gaWNvbiAtLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0N1c3RvbUljb24obmFtZSk7IGVsc2UgZmFJY29uXCI+XG4gICAgPGFwcC1jdXN0b20taWNvbiBbbmFtZV09XCJuYW1lXCI+PC9hcHAtY3VzdG9tLWljb24+XG48L25nLWNvbnRhaW5lcj5cblxuPCEtLSBGb250IEF3ZXNvbWUgLS0+XG48bmctdGVtcGxhdGUgI2ZhSWNvbj5cbiAgICA8aSBbbmdDbGFzc109XCJpY29uQ2xhc3NcIj48L2k+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -439,9 +439,10 @@ class RequestHelperService {
|
|
|
439
439
|
/**
|
|
440
440
|
* Convert the object to form data for the request.
|
|
441
441
|
* @param data Data Object
|
|
442
|
+
* @param config Optional
|
|
442
443
|
* @return Object
|
|
443
444
|
*/
|
|
444
|
-
convertToFormData(data) {
|
|
445
|
+
convertToFormData(data, config) {
|
|
445
446
|
const newData = {};
|
|
446
447
|
for (const prop in data) {
|
|
447
448
|
if (Object.prototype.hasOwnProperty.call(data, prop)) {
|
|
@@ -449,7 +450,7 @@ class RequestHelperService {
|
|
|
449
450
|
// convert array to comma separated string
|
|
450
451
|
newData[prop] = data[prop].join(',');
|
|
451
452
|
}
|
|
452
|
-
else if (!Number.isInteger(Number.parseInt(data[prop])) && !isNaN(Date.parse(data[prop]))) {
|
|
453
|
+
else if (!config?.[prop]?.text && !Number.isInteger(Number.parseInt(data[prop])) && !isNaN(Date.parse(data[prop]))) {
|
|
453
454
|
// check if value is date and not a number
|
|
454
455
|
const date = moment(data[prop]).toISOString();
|
|
455
456
|
newData[prop] = moment(date).format('Y-MM-DD');
|
|
@@ -551,7 +552,7 @@ let TechlifyListComponent = class TechlifyListComponent {
|
|
|
551
552
|
this.selectedModelIds = [];
|
|
552
553
|
this.isAllSelected = false;
|
|
553
554
|
this.page = 1;
|
|
554
|
-
this.perPage =
|
|
555
|
+
this.perPage = 50;
|
|
555
556
|
this.lastPage = 0;
|
|
556
557
|
this.isWorking = false;
|
|
557
558
|
this.isViewLoaded = false;
|
|
@@ -580,7 +581,7 @@ let TechlifyListComponent = class TechlifyListComponent {
|
|
|
580
581
|
.subscribe(_ => {
|
|
581
582
|
if (this.isFilterPatchFromRoute) {
|
|
582
583
|
const unformatedFilters = JSON.parse(JSON.stringify(this.filterForm.value));
|
|
583
|
-
this.filters = this.requestHelperService.convertToFormData(unformatedFilters);
|
|
584
|
+
this.filters = this.requestHelperService.convertToFormData(unformatedFilters, this.filterFormConfiguration);
|
|
584
585
|
this.requestHelperService.updateQueryParams(this.filters);
|
|
585
586
|
}
|
|
586
587
|
this.reload();
|
|
@@ -606,7 +607,7 @@ let TechlifyListComponent = class TechlifyListComponent {
|
|
|
606
607
|
* Convert to form data gives flexibility to convert the form array values to string
|
|
607
608
|
* No need to override the loadData method in child class to convert array values to string.
|
|
608
609
|
* */
|
|
609
|
-
filters = this.requestHelperService.convertToFormData(JSON.parse(JSON.stringify(this.filterForm.value)));
|
|
610
|
+
filters = this.requestHelperService.convertToFormData(JSON.parse(JSON.stringify(this.filterForm.value)), this.filterFormConfiguration);
|
|
610
611
|
filters.perPage = this.perPage;
|
|
611
612
|
filters.page = this.page;
|
|
612
613
|
}
|
|
@@ -766,7 +767,7 @@ let TechlifyListComponent = class TechlifyListComponent {
|
|
|
766
767
|
if (view) {
|
|
767
768
|
//If there is a view, then set it.
|
|
768
769
|
//Setup view filters
|
|
769
|
-
this.filterForm.setValue(this.requestHelperService.convertToFormData(view?.filters));
|
|
770
|
+
this.filterForm.setValue(this.requestHelperService.convertToFormData(view?.filters, this.filterFormConfiguration));
|
|
770
771
|
//Setup view columns
|
|
771
772
|
this.columnConfigs.forEach(column => {
|
|
772
773
|
column.isSelected = (view?.columns).some(col => col === column.def);
|
|
@@ -3560,7 +3561,18 @@ const CUSTOM_ICONS = {
|
|
|
3560
3561
|
transform="translate(0,960)"
|
|
3561
3562
|
/>
|
|
3562
3563
|
</g>
|
|
3563
|
-
</svg
|
|
3564
|
+
</svg>`,
|
|
3565
|
+
'gra': `
|
|
3566
|
+
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
3567
|
+
<rect width="30" height="30" fill="url(#pattern0_1076_92)"/>
|
|
3568
|
+
<defs>
|
|
3569
|
+
<pattern id="pattern0_1076_92" patternContentUnits="objectBoundingBox" width="1" height="1">
|
|
3570
|
+
<use xlink:href="#image0_1076_92" transform="scale(0.00666667)"/>
|
|
3571
|
+
</pattern>
|
|
3572
|
+
<image id="image0_1076_92" width="150" height="150" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>
|
|
3573
|
+
</defs>
|
|
3574
|
+
</svg>
|
|
3575
|
+
`
|
|
3564
3576
|
};
|
|
3565
3577
|
|
|
3566
3578
|
class CustomIconRegistryService {
|
|
@@ -3608,7 +3620,11 @@ class TechlifyIconComponent {
|
|
|
3608
3620
|
this.name = '';
|
|
3609
3621
|
this.size = 'md';
|
|
3610
3622
|
//Custom icon list
|
|
3611
|
-
this.customIconList = [
|
|
3623
|
+
this.customIconList = [
|
|
3624
|
+
'batch-add',
|
|
3625
|
+
'unapprove',
|
|
3626
|
+
'gra'
|
|
3627
|
+
];
|
|
3612
3628
|
// Map logical names to CSS classes
|
|
3613
3629
|
this.iconMap = {
|
|
3614
3630
|
add: 'fas fa-plus',
|
|
@@ -4522,6 +4538,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4522
4538
|
class ExportExcelButtonComponent {
|
|
4523
4539
|
constructor() {
|
|
4524
4540
|
this.isCSV = false;
|
|
4541
|
+
this.iconName = 'export';
|
|
4525
4542
|
this.fileName = 'Export_Data';
|
|
4526
4543
|
this.data = [];
|
|
4527
4544
|
this.isExportingToExcel = new EventEmitter();
|
|
@@ -4572,13 +4589,15 @@ class ExportExcelButtonComponent {
|
|
|
4572
4589
|
}
|
|
4573
4590
|
}
|
|
4574
4591
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportExcelButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4575
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ExportExcelButtonComponent, selector: "app-export-excel-button", inputs: { isCSV: "isCSV", fileName: "fileName", data: "data", tableId: "tableId" }, outputs: { isExportingToExcel: "isExportingToExcel" }, ngImport: i0, template: "<app-techlify-icon
|
|
4592
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ExportExcelButtonComponent, selector: "app-export-excel-button", inputs: { isCSV: "isCSV", iconName: "iconName", fileName: "fileName", data: "data", tableId: "tableId" }, outputs: { isExportingToExcel: "isExportingToExcel" }, ngImport: i0, template: "<app-techlify-icon class=\"clickable d-print-none\" *ngIf=\"!isWorking\" [name]=\"iconName\" (click)=\"exportToExcel()\"\n matTooltip=\"Excel Export\">\n</app-techlify-icon>", styles: [".icon-md{height:24px!important;width:24px!important;font-size:24px!important;margin:0 1px}.icon-sm{height:20px!important;width:20px!important;font-size:20px!important}.icon-xs{height:16px!important;width:16px!important;font-size:16px!important}.fl-md{width:200px!important}.fl-md .mat-mdc-form-field{width:100%!important}.fl-sm{width:150px!important}.fl-sm .mat-mdc-form-field{width:100%!important}.mat-btn-md{height:25px!important;padding:0 8px!important}.fs-12{font-size:12px!important}.fs-16{font-size:16px!important}.fs-13{font-size:13px!important}.fs-18{font-size:18px!important}.clickable:hover{cursor:pointer}.mat-mdc-form-field-hint-wrapper{padding:0 4px!important}.nil-subscript-wrapper .mat-mdc-form-field-subscript-wrapper{height:0!important}.create-another .mat-mdc-checkbox label{margin:0!important}.create-another .mdc-checkbox{padding:0!important}.create-another .mdc-checkbox__background{position:relative;top:0;left:0}:host{display:flex;align-content:center}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }] }); }
|
|
4576
4593
|
}
|
|
4577
4594
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportExcelButtonComponent, decorators: [{
|
|
4578
4595
|
type: Component,
|
|
4579
|
-
args: [{ selector: 'app-export-excel-button', template: "<app-techlify-icon
|
|
4596
|
+
args: [{ selector: 'app-export-excel-button', template: "<app-techlify-icon class=\"clickable d-print-none\" *ngIf=\"!isWorking\" [name]=\"iconName\" (click)=\"exportToExcel()\"\n matTooltip=\"Excel Export\">\n</app-techlify-icon>", styles: [".icon-md{height:24px!important;width:24px!important;font-size:24px!important;margin:0 1px}.icon-sm{height:20px!important;width:20px!important;font-size:20px!important}.icon-xs{height:16px!important;width:16px!important;font-size:16px!important}.fl-md{width:200px!important}.fl-md .mat-mdc-form-field{width:100%!important}.fl-sm{width:150px!important}.fl-sm .mat-mdc-form-field{width:100%!important}.mat-btn-md{height:25px!important;padding:0 8px!important}.fs-12{font-size:12px!important}.fs-16{font-size:16px!important}.fs-13{font-size:13px!important}.fs-18{font-size:18px!important}.clickable:hover{cursor:pointer}.mat-mdc-form-field-hint-wrapper{padding:0 4px!important}.nil-subscript-wrapper .mat-mdc-form-field-subscript-wrapper{height:0!important}.create-another .mat-mdc-checkbox label{margin:0!important}.create-another .mdc-checkbox{padding:0!important}.create-another .mdc-checkbox__background{position:relative;top:0;left:0}:host{display:flex;align-content:center}\n"] }]
|
|
4580
4597
|
}], ctorParameters: () => [], propDecorators: { isCSV: [{
|
|
4581
4598
|
type: Input
|
|
4599
|
+
}], iconName: [{
|
|
4600
|
+
type: Input
|
|
4582
4601
|
}], fileName: [{
|
|
4583
4602
|
type: Input
|
|
4584
4603
|
}], data: [{
|
|
@@ -4734,7 +4753,7 @@ let AuditLogListComponent = class AuditLogListComponent extends TechlifyListComp
|
|
|
4734
4753
|
super.loadData(filters);
|
|
4735
4754
|
}
|
|
4736
4755
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuditLogListComponent, deps: [{ token: i1$2.Router }, { token: i1$6.DomSanitizer }, { token: i1$5.FormBuilder }, { token: AuditLogService }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
4737
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AuditLogListComponent, selector: "app-audit-log-list", inputs: { objectId: "objectId", objectType: "objectType", showFilter: "showFilter", showExportButtons: "showExportButtons", userId: "userId", disableFilterPatchingFromUrl: "disableFilterPatchingFromUrl", scrollContainer: "scrollContainer" }, usesInheritance: true, ngImport: i0, template: "<div class=\"m-2\">\n <mat-card>\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\" style=\"min-width: 200px\">\n <h5 class=\"mb-0\"> Audit Logs </h5>\n <app-export-excel-button *ngIf=\"showExportButtons\" matTooltip=\"Export\" elementId=\"audit-logs-table\"\n class=\"mt-1\" name=\"AuditLogs\" [data]=\"excelData\">\n </app-export-excel-button>\n </div>\n\n <app-audit-log-list-filter class=\"w-100\" *ngIf=\"showFilter\" [filterForm]=\"filterForm\" [objectType]=\"objectType\"\n [objectId]=\"objectId\"></app-audit-log-list-filter>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-2\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" matSort class=\"w-100\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\" (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\" (matSortChange)=\"sortColumn($event)\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let i = index\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> Log # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_type\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Model Type </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog.object_type }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_id\">\n <th mat-header-cell *matHeaderCellDef> Model # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.object_id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Action </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog?.action }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created At </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.created_at | date:'medium'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"user.email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created By </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <p class=\"mb-0\">{{auditLog?.user?.name}}</p>\n <small class=\"text-secondary\">{{ auditLog?.user?.email }}</small>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"changes\">\n <th mat-header-cell *matHeaderCellDef> Changes</th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"px-3\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(getTransformedChanges(auditLog))\">\n </div>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"text-secondary\">\n <app-techlify-icon role=\"button\" name=\"view\" class=\"clickable\"\n (click)=\"logClicked(auditLog);$event.stopPropagation();\" matTooltip=\"View\"></app-techlify-icon>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>", styles: ["tr.row-hover:hover{background-color:#dcdcdc}.scroll-container{height:800px;overflow-y:auto}:host ::ng-deep #old-value{margin-right:5px;background-color:#f08080}:host ::ng-deep #new-value{background-color:#98fb98}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ExportExcelButtonComponent, selector: "app-export-excel-button", inputs: ["isCSV", "fileName", "data", "tableId"], outputs: ["isExportingToExcel"] }, { kind: "directive", type: i11.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i11.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i12.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i6$2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: AuditLogListFilterComponent, selector: "app-audit-log-list-filter", inputs: ["filterForm", "objectId", "objectType"], outputs: ["valueChange"] }, { kind: "component", type: TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
|
|
4756
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AuditLogListComponent, selector: "app-audit-log-list", inputs: { objectId: "objectId", objectType: "objectType", showFilter: "showFilter", showExportButtons: "showExportButtons", userId: "userId", disableFilterPatchingFromUrl: "disableFilterPatchingFromUrl", scrollContainer: "scrollContainer" }, usesInheritance: true, ngImport: i0, template: "<div class=\"m-2\">\n <mat-card>\n <mat-card-content>\n <div class=\"d-flex justify-content-between align-items-center gap-3\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\" style=\"min-width: 200px\">\n <h5 class=\"mb-0\"> Audit Logs </h5>\n <app-export-excel-button *ngIf=\"showExportButtons\" matTooltip=\"Export\" elementId=\"audit-logs-table\"\n class=\"mt-1\" name=\"AuditLogs\" [data]=\"excelData\">\n </app-export-excel-button>\n </div>\n\n <app-audit-log-list-filter class=\"w-100\" *ngIf=\"showFilter\" [filterForm]=\"filterForm\" [objectType]=\"objectType\"\n [objectId]=\"objectId\"></app-audit-log-list-filter>\n </div>\n </mat-card-content>\n </mat-card>\n\n <mat-card class=\"mt-2\">\n <mat-card-content>\n <table mat-table [dataSource]=\"models\" matSort class=\"w-100\" infiniteScroll [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\" [infiniteScrollContainer]=\"scrollContainer\" (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\" (matSortChange)=\"sortColumn($event)\">\n\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef> # </th>\n <td mat-cell *matCellDef=\"let i = index\"> {{ i+1 }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"id\">\n <th mat-header-cell *matHeaderCellDef> Log # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_type\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Model Type </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog.object_type }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"object_id\">\n <th mat-header-cell *matHeaderCellDef> Model # </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.object_id}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Action </th>\n <td mat-cell *matCellDef=\"let auditLog;\"> {{ auditLog?.action }} </td>\n </ng-container>\n\n <ng-container matColumnDef=\"created_at\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created At </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n {{auditLog?.created_at | date:'medium'}}\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"user.email\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header> Created By </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <p class=\"mb-0\">{{auditLog?.user?.name}}</p>\n <small class=\"text-secondary\">{{ auditLog?.user?.email }}</small>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"changes\">\n <th mat-header-cell *matHeaderCellDef> Changes</th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"px-3\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(getTransformedChanges(auditLog))\">\n </div>\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef> Actions </th>\n <td mat-cell *matCellDef=\"let auditLog\">\n <div class=\"text-secondary\">\n <app-techlify-icon role=\"button\" name=\"view\" class=\"clickable\"\n (click)=\"logClicked(auditLog);$event.stopPropagation();\" matTooltip=\"View\"></app-techlify-icon>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n </mat-card>\n</div>", styles: ["tr.row-hover:hover{background-color:#dcdcdc}.scroll-container{height:800px;overflow-y:auto}:host ::ng-deep #old-value{margin-right:5px;background-color:#f08080}:host ::ng-deep #new-value{background-color:#98fb98}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ExportExcelButtonComponent, selector: "app-export-excel-button", inputs: ["isCSV", "iconName", "fileName", "data", "tableId"], outputs: ["isExportingToExcel"] }, { kind: "directive", type: i11.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i11.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "component", type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i12.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11$1.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i6$2.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: AuditLogListFilterComponent, selector: "app-audit-log-list-filter", inputs: ["filterForm", "objectId", "objectType"], outputs: ["valueChange"] }, { kind: "component", type: TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] }); }
|
|
4738
4757
|
};
|
|
4739
4758
|
AuditLogListComponent = __decorate([
|
|
4740
4759
|
UntilDestroy()
|
|
@@ -16069,6 +16088,8 @@ class TechlifyAutoCompleteSelectComponent {
|
|
|
16069
16088
|
this.isAllowDynamicOptionsAdd = false;
|
|
16070
16089
|
//Output to watch for selected items change
|
|
16071
16090
|
this.selectedItemsChange = new EventEmitter();
|
|
16091
|
+
//Default false
|
|
16092
|
+
this.readonly = false;
|
|
16072
16093
|
this.filteredOptions = [];
|
|
16073
16094
|
this.onChange = (_) => { };
|
|
16074
16095
|
this.onTouched = () => { };
|
|
@@ -16171,11 +16192,11 @@ class TechlifyAutoCompleteSelectComponent {
|
|
|
16171
16192
|
this.onTouched = fn;
|
|
16172
16193
|
}
|
|
16173
16194
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TechlifyAutoCompleteSelectComponent, deps: [{ token: i1$5.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16174
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TechlifyAutoCompleteSelectComponent, isStandalone: true, selector: "app-techlify-auto-complete-select", inputs: { service: "service", titleField: "titleField", valueField: "valueField", placeholder: "placeholder", perPage: "perPage", sortBy: "sortBy", displaySelectedDir: "displaySelectedDir", options: "options", selectedItems: "selectedItems", isAllowDynamicOptionsAdd: "isAllowDynamicOptionsAdd" }, outputs: { selectedItemsChange: "selectedItemsChange" }, providers: [{
|
|
16195
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TechlifyAutoCompleteSelectComponent, isStandalone: true, selector: "app-techlify-auto-complete-select", inputs: { service: "service", titleField: "titleField", valueField: "valueField", placeholder: "placeholder", perPage: "perPage", sortBy: "sortBy", displaySelectedDir: "displaySelectedDir", options: "options", selectedItems: "selectedItems", isAllowDynamicOptionsAdd: "isAllowDynamicOptionsAdd", readonly: "readonly" }, outputs: { selectedItemsChange: "selectedItemsChange" }, providers: [{
|
|
16175
16196
|
provide: NG_VALUE_ACCESSOR,
|
|
16176
16197
|
useExisting: forwardRef(() => TechlifyAutoCompleteSelectComponent),
|
|
16177
16198
|
multi: true
|
|
16178
|
-
}], queries: [{ propertyName: "itemTemplate", first: true, predicate: ["itemTemplate"], descendants: true }, { propertyName: "selectedTemplate", first: true, predicate: ["selectedTemplate"], descendants: true }], ngImport: i0, template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8$4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8$3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i8$3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$5.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: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.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: "ngmodule", type: TechlifyIconModule }, { kind: "component", type: TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
16199
|
+
}], queries: [{ propertyName: "itemTemplate", first: true, predicate: ["itemTemplate"], descendants: true }, { propertyName: "selectedTemplate", first: true, predicate: ["selectedTemplate"], descendants: true }], ngImport: i0, template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon *ngIf=\"!readonly\" name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\" *ngIf=\"!readonly\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8$4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8$4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8$3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i8$3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$5.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: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.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: "ngmodule", type: TechlifyIconModule }, { kind: "component", type: TechlifyIconComponent, selector: "app-techlify-icon", inputs: ["name", "size"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
16179
16200
|
}
|
|
16180
16201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TechlifyAutoCompleteSelectComponent, decorators: [{
|
|
16181
16202
|
type: Component,
|
|
@@ -16191,7 +16212,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
16191
16212
|
provide: NG_VALUE_ACCESSOR,
|
|
16192
16213
|
useExisting: forwardRef(() => TechlifyAutoCompleteSelectComponent),
|
|
16193
16214
|
multi: true
|
|
16194
|
-
}], template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"] }]
|
|
16215
|
+
}], template: "<!-- Selected Items -->\n<div class=\"my-2\"\n [ngClass]=\"{'selected-container-column':displaySelectedDir=='column','selected-container-row':displaySelectedDir=='row' }\">\n <ng-container *ngFor=\"let item of selectedItems\">\n\n <!-- Custom Selected Template -->\n <ng-container *ngIf=\"selectedTemplate; else defaultSelectedTemplate\" [ngTemplateOutlet]=\"selectedTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: item,remove: removeItem.bind(this)}\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultSelectedTemplate>\n <div class=\"selected-card\" [class.custom]=\"item.__isCustom\">\n <span>{{ getTitle(item) }}</span>\n <app-techlify-icon *ngIf=\"!readonly\" name=\"reject\" class=\"ms-2 clickable\" (click)=\"removeItem(item)\">\n </app-techlify-icon>\n </div>\n </ng-template>\n\n </ng-container>\n</div>\n\n<!-- Selected Items -->\n<form [formGroup]=\"form\">\n <mat-form-field class=\"w-100\" *ngIf=\"!readonly\">\n <input matInput [placeholder]=\"placeholder\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n (keydown.enter)=\"handleEnter($event)\" />\n <mat-icon class=\"material-symbols-outlined\" matSuffix>\n search\n </mat-icon>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selectItem($event.option.value)\">\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"itemTemplate; else defaultTemplate\" [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n\n <!-- Default Template -->\n <ng-template #defaultTemplate>\n {{ option[titleField] }}\n </ng-template>\n\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n</form>", styles: [".selected-container-column{display:flex;flex-direction:column;gap:8px;align-items:start}.selected-container-row{display:flex;flex-wrap:wrap;gap:8px}.selected-card{padding:6px 10px;border-radius:5px;background:#f2f2f2}.custom{border-style:dashed;opacity:.8}\n"] }]
|
|
16195
16216
|
}], ctorParameters: () => [{ type: i1$5.FormBuilder }], propDecorators: { service: [{
|
|
16196
16217
|
type: Input
|
|
16197
16218
|
}], titleField: [{
|
|
@@ -16220,6 +16241,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
16220
16241
|
}], selectedTemplate: [{
|
|
16221
16242
|
type: ContentChild,
|
|
16222
16243
|
args: ['selectedTemplate']
|
|
16244
|
+
}], readonly: [{
|
|
16245
|
+
type: Input
|
|
16223
16246
|
}] } });
|
|
16224
16247
|
|
|
16225
16248
|
/*
|