brainloper-ui 14.0.17 → 14.0.18
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/esm2020/brainloper-ui.mjs +5 -0
- package/esm2020/public_api.mjs +53 -0
- package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +305 -0
- package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +29 -0
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +23 -0
- package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +83 -0
- package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +31 -0
- package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +176 -0
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +691 -0
- package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +118 -0
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +185 -0
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +2 -0
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +2 -0
- package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +2 -0
- package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +222 -0
- package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +80 -0
- package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +81 -0
- package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +108 -0
- package/esm2020/src/app/modules/data/rolesAndPermissions.mjs +491 -0
- package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/common/Permissions.mjs +8 -0
- package/esm2020/src/app/modules/interfaces/data-table/params.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +7 -0
- package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +8 -0
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +8 -0
- package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +2 -0
- package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +2 -0
- package/esm2020/src/app/modules/services/crypto.service.mjs +37 -0
- package/esm2020/src/app/modules/services/export-data.service.mjs +166 -0
- package/esm2020/src/app/modules/services/file-forms.service.mjs +24 -0
- package/esm2020/src/app/modules/services/functions.service.mjs +54 -0
- package/esm2020/src/app/modules/services/generate-pdf.service.mjs +58 -0
- package/esm2020/src/app/modules/services/http.service.mjs +154 -0
- package/esm2020/src/app/modules/services/loading/loading.component.mjs +28 -0
- package/esm2020/src/app/modules/services/local-storage.service.mjs +115 -0
- package/esm2020/src/app/modules/services/message.service.mjs +200 -0
- package/esm2020/src/app/modules/services/screen-size-util.mjs +6 -0
- package/esm2020/src/app/modules/services/session.service.mjs +42 -0
- package/fesm2015/brainloper-ui.mjs +3443 -0
- package/fesm2015/brainloper-ui.mjs.map +1 -0
- package/fesm2020/brainloper-ui.mjs +3404 -0
- package/fesm2020/brainloper-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +1 -5
- package/public_api.d.ts +52 -0
- package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +73 -0
- package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +13 -0
- package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +10 -0
- package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +24 -0
- package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +12 -0
- package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +46 -0
- package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +121 -0
- package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +21 -0
- package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +42 -0
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +2 -0
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +2 -0
- package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +2 -0
- package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +30 -0
- package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +35 -0
- package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +36 -0
- package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +26 -0
- package/src/app/modules/data/rolesAndPermissions.d.ts +2 -0
- package/src/app/modules/interfaces/buttons/button-icon.d.ts +9 -0
- package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +6 -0
- package/src/app/modules/interfaces/combos/combos-configuration.d.ts +13 -0
- package/src/app/modules/interfaces/common/Permissions.d.ts +40 -0
- package/src/app/modules/interfaces/data-table/params.d.ts +7 -0
- package/src/app/modules/interfaces/data-table/rules.d.ts +8 -0
- package/src/app/modules/interfaces/data-table/table-columns.d.ts +25 -0
- package/src/app/modules/interfaces/data-table/table-configuration.d.ts +25 -0
- package/src/app/modules/interfaces/enum/enumActions.d.ts +5 -0
- package/src/app/modules/interfaces/enum/enumRules.d.ts +6 -0
- package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +4 -0
- package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +13 -0
- package/src/app/modules/interfaces/filters/header-filters.d.ts +13 -0
- package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +10 -0
- package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +19 -0
- package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +20 -0
- package/src/app/modules/services/crypto.service.d.ts +10 -0
- package/src/app/modules/services/export-data.service.d.ts +18 -0
- package/src/app/modules/services/file-forms.service.d.ts +7 -0
- package/src/app/modules/services/functions.service.d.ts +13 -0
- package/src/app/modules/services/generate-pdf.service.d.ts +12 -0
- package/src/app/modules/services/http.service.d.ts +21 -0
- package/src/app/modules/services/loading/loading.component.d.ts +15 -0
- package/src/app/modules/services/local-storage.service.d.ts +49 -0
- package/src/app/modules/services/message.service.d.ts +23 -0
- package/src/app/modules/services/screen-size-util.d.ts +3 -0
- package/src/app/modules/services/session.service.d.ts +14 -0
package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/forms";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@angular/material/progress-spinner";
|
|
6
|
+
import * as i4 from "@angular/material/input";
|
|
7
|
+
export class SelectFilterComponent {
|
|
8
|
+
constructor(fb) {
|
|
9
|
+
this.showSpinner = true;
|
|
10
|
+
this.noResultsMessage = 'No results';
|
|
11
|
+
this.noResults = false;
|
|
12
|
+
this.localSpinner = false;
|
|
13
|
+
this.filteredReturn = new EventEmitter();
|
|
14
|
+
this.filteredItems = [];
|
|
15
|
+
this.searchForm = fb.group({
|
|
16
|
+
value: ''
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this.searchFormValueChangesSubscription = this.searchForm.valueChanges.subscribe(value => {
|
|
21
|
+
const searchValue = value['value'] ? value['value'].toLowerCase() : '';
|
|
22
|
+
if (this.showSpinner) {
|
|
23
|
+
this.localSpinner = true;
|
|
24
|
+
}
|
|
25
|
+
if (searchValue) {
|
|
26
|
+
if (this.displayMember == null) {
|
|
27
|
+
this.filteredItems = this.array.filter(name => name.toLowerCase().includes(searchValue));
|
|
28
|
+
}
|
|
29
|
+
else if (this.hasGroup && this.groupArrayName && this.displayMember) {
|
|
30
|
+
this.filteredItems = this.array.map(a => {
|
|
31
|
+
const objCopy = { ...a };
|
|
32
|
+
objCopy[this.groupArrayName] = objCopy[this.groupArrayName].filter(g => g[this.displayMember].toLowerCase().includes(searchValue));
|
|
33
|
+
return objCopy;
|
|
34
|
+
}).filter(x => x[this.groupArrayName].length > 0);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this.filteredItems = this.array.filter(name => name[this.displayMember].toLowerCase().includes(searchValue));
|
|
38
|
+
}
|
|
39
|
+
this.noResults = this.filteredItems.length === 0;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.filteredItems = [...this.array];
|
|
43
|
+
this.noResults = false;
|
|
44
|
+
}
|
|
45
|
+
this.filteredReturn.emit(this.filteredItems);
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
if (this.showSpinner) {
|
|
48
|
+
this.localSpinner = false;
|
|
49
|
+
}
|
|
50
|
+
}, 2000);
|
|
51
|
+
});
|
|
52
|
+
setTimeout(() => {
|
|
53
|
+
this.input.nativeElement.focus();
|
|
54
|
+
}, 500);
|
|
55
|
+
if (!this.placeholder) {
|
|
56
|
+
this.placeholder = 'Search...';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
handleKeydown(event) {
|
|
60
|
+
const isAlphanumeric = (event.key && event.key.length === 1) ||
|
|
61
|
+
(event.code >= 'KeyA' && event.code <= 'KeyZ') ||
|
|
62
|
+
(event.code >= 'Digit0' && event.code <= 'Digit9') ||
|
|
63
|
+
(event.code === 'Space');
|
|
64
|
+
if (isAlphanumeric) {
|
|
65
|
+
event.stopPropagation();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
ngOnDestroy() {
|
|
69
|
+
this.filteredReturn.emit(this.array);
|
|
70
|
+
this.searchFormValueChangesSubscription.unsubscribe();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
SelectFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectFilterComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
74
|
+
SelectFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectFilterComponent, selector: "app-select-filter", inputs: { array: "array", placeholder: "placeholder", color: "color", displayMember: "displayMember", showSpinner: "showSpinner", noResultsMessage: "noResultsMessage", hasGroup: "hasGroup", groupArrayName: "groupArrayName" }, outputs: { filteredReturn: "filteredReturn" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, static: true }], ngImport: i0, template: "<form [formGroup]=\"searchForm\" class=\"mat-filter\" [ngStyle]=\"{'background-color': color ? color : 'white'}\">\n <div>\n <input #input class=\"mat-filter-input\" matInput placeholder=\"{{placeholder}}\" formControlName=\"value\" (keydown)=\"handleKeydown($event)\">\n <mat-spinner *ngIf=\"localSpinner\" class=\"spinner\" diameter=\"16\"></mat-spinner>\n </div>\n <div *ngIf=\"noResults\"\n class=\"noResultsMessage\">\n {{noResultsMessage}}\n</div>\n</form>\n", styles: [".mat-filter{position:sticky;top:0;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:gray;z-index:100;font-size:inherit;box-shadow:none;border-radius:0;padding:16px;box-sizing:border-box}.mat-filter-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;border:0;background-color:transparent;background-color:initial;color:gray;width:100%}.spinner{position:absolute;right:16px;top:calc(50% - 8px)}.noResultsMessage{margin-top:10px;font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.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: "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"] }] });
|
|
75
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectFilterComponent, decorators: [{
|
|
76
|
+
type: Component,
|
|
77
|
+
args: [{ selector: 'app-select-filter', template: "<form [formGroup]=\"searchForm\" class=\"mat-filter\" [ngStyle]=\"{'background-color': color ? color : 'white'}\">\n <div>\n <input #input class=\"mat-filter-input\" matInput placeholder=\"{{placeholder}}\" formControlName=\"value\" (keydown)=\"handleKeydown($event)\">\n <mat-spinner *ngIf=\"localSpinner\" class=\"spinner\" diameter=\"16\"></mat-spinner>\n </div>\n <div *ngIf=\"noResults\"\n class=\"noResultsMessage\">\n {{noResultsMessage}}\n</div>\n</form>\n", styles: [".mat-filter{position:sticky;top:0;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:gray;z-index:100;font-size:inherit;box-shadow:none;border-radius:0;padding:16px;box-sizing:border-box}.mat-filter-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;border:0;background-color:transparent;background-color:initial;color:gray;width:100%}.spinner{position:absolute;right:16px;top:calc(50% - 8px)}.noResultsMessage{margin-top:10px;font-family:Roboto,Helvetica Neue,sans-serif;font-size:16px}\n"] }]
|
|
78
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { input: [{
|
|
79
|
+
type: ViewChild,
|
|
80
|
+
args: ['input', { static: true }]
|
|
81
|
+
}], array: [{
|
|
82
|
+
type: Input,
|
|
83
|
+
args: ['array']
|
|
84
|
+
}], placeholder: [{
|
|
85
|
+
type: Input,
|
|
86
|
+
args: ['placeholder']
|
|
87
|
+
}], color: [{
|
|
88
|
+
type: Input,
|
|
89
|
+
args: ['color']
|
|
90
|
+
}], displayMember: [{
|
|
91
|
+
type: Input,
|
|
92
|
+
args: ['displayMember']
|
|
93
|
+
}], showSpinner: [{
|
|
94
|
+
type: Input,
|
|
95
|
+
args: ['showSpinner']
|
|
96
|
+
}], noResultsMessage: [{
|
|
97
|
+
type: Input,
|
|
98
|
+
args: ['noResultsMessage']
|
|
99
|
+
}], hasGroup: [{
|
|
100
|
+
type: Input,
|
|
101
|
+
args: ['hasGroup']
|
|
102
|
+
}], groupArrayName: [{
|
|
103
|
+
type: Input,
|
|
104
|
+
args: ['groupArrayName']
|
|
105
|
+
}], filteredReturn: [{
|
|
106
|
+
type: Output
|
|
107
|
+
}] } });
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL3NlbGVjdC1maWx0ZXIvc2VsZWN0LWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvYnJhaW5sb3Blci11aS9jb21wb25lbnRzL3NlbGVjdC1maWx0ZXIvc2VsZWN0LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWdCckcsTUFBTSxPQUFPLHFCQUFxQjtJQXNCaEMsWUFBWSxFQUFlO1FBYkwsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDZCxxQkFBZ0IsR0FBRyxZQUFZLENBQUM7UUFJM0QsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNYLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU1QyxrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQUk3QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDekIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckYsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxD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UUFBUSxDQUFDO1lBQ2xELENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQztRQUU3QixJQUFJLGNBQWMsRUFBRTtZQUNoQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUMsV0FBVztRQUNULElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEQsQ0FBQzs7a0hBeEZVLHFCQUFxQjtzR0FBckIscUJBQXFCLHdiQ2hCbEMsOGRBVUE7MkZETWEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjtrR0FPUyxLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXBCLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTztnQkFDUSxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBQ0osS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNVLGFBQWE7c0JBQXBDLEtBQUs7dUJBQUMsZUFBZTtnQkFDQSxXQUFXO3NCQUFoQyxLQUFLO3VCQUFDLGFBQWE7Z0JBQ08sZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGtCQUFrQjtnQkFDTixRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1EsY0FBYztzQkFBdEMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBS2IsY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBBLFxuICBaLFxuICBaRVJPLFxuICBOSU5FLFxuICBTUEFDRSwgRU5ELCBIT01FLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtc2VsZWN0LWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWZpbHRlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95ICB7XG5cbiAgcHJpdmF0ZSBzZWFyY2hGb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXQ7XG5cbiAgQElucHV0KCdhcnJheScpIGFycmF5OiBhbnk7XG4gIEBJbnB1dCgncGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoJ2NvbG9yJykgY29sb3I6IHN0cmluZztcbiAgQElucHV0KCdkaXNwbGF5TWVtYmVyJykgZGlzcGxheU1lbWJlcjogc3RyaW5nO1xuICBASW5wdXQoJ3Nob3dTcGlubmVyJykgc2hvd1NwaW5uZXIgPSB0cnVlO1xuICBASW5wdXQoJ25vUmVzdWx0c01lc3NhZ2UnKSBub1Jlc3VsdHNNZXNzYWdlID0gJ05vIHJlc3VsdHMnO1xuICBASW5wdXQoJ2hhc0dyb3VwJykgaGFzR3JvdXA6IGJvb2xlYW47XG4gIEBJbnB1dCgnZ3JvdXBBcnJheU5hbWUnKSBncm91cEFycmF5TmFtZTogc3RyaW5nO1xuXG4gIG5vUmVzdWx0cyA9IGZhbHNlO1xuXG4gIGxvY2FsU3Bpbm5lciA9IGZhbHNlO1xuICBAT3V0cHV0KCkgZmlsdGVyZWRSZXR1cm4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBwdWJsaWMgZmlsdGVyZWRJdGVtczogYW55ID0gW107XG4gIHB1YmxpYyBzZWFyY2hGb3JtOiBGb3JtR3JvdXA7XG5cbiAgY29uc3RydWN0b3IoZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zZWFyY2hGb3JtID0gZmIuZ3JvdXAoe1xuICAgICAgdmFsdWU6ICcnXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaEZvcm1WYWx1ZUNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdmFsdWVbJ3ZhbHVlJ10gPyB2YWx1ZVsndmFsdWUnXS50b0xvd2VyQ2FzZSgpIDogJyc7XG4gICAgICAgIGlmICh0aGlzLnNob3dTcGlubmVyKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsU3Bpbm5lciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VhcmNoVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlNZW1iZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuYXJyYXkuZmlsdGVyKG5hbWUgPT4gbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzR3JvdXAgJiYgdGhpcy5ncm91cEFycmF5TmFtZSAmJiB0aGlzLmRpc3BsYXlNZW1iZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLmFycmF5Lm1hcChhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqQ29weSA9IHsgLi4uYSB9O1xuICAgICAgICAgICAgICAgICAgICBvYmpDb3B5W3RoaXMuZ3JvdXBBcnJheU5hbWVdID0gb2JqQ29weVt0aGlzLmdyb3VwQXJyYXlOYW1lXS5maWx0ZXIoZyA9PiBnW3RoaXMuZGlzcGxheU1lbWJlcl0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqQ29weTtcbiAgICAgICAgICAgICAgICB9KS5maWx0ZXIoeCA9PiB4W3RoaXMuZ3JvdXBBcnJheU5hbWVdLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLmFycmF5LmZpbHRlcihuYW1lID0+IG5hbWVbdGhpcy5kaXNwbGF5TWVtYmVyXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubm9SZXN1bHRzID0gdGhpcy5maWx0ZXJlZEl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLmFycmF5XTtcbiAgICAgICAgICAgIHRoaXMubm9SZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmVkUmV0dXJuLmVtaXQodGhpcy5maWx0ZXJlZEl0ZW1zKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTcGlubmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbFNwaW5uZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMjAwMCk7XG4gICAgfSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSwgNTAwKTtcblxuICAgIGlmICghdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gJ1NlYXJjaC4uLic7XG4gICAgfVxufVxuXG5cblxuICBoYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaXNBbHBoYW51bWVyaWMgPSAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHx8XG4gICAgICAgIChldmVudC5jb2RlID49ICdLZXlBJyAmJiBldmVudC5jb2RlIDw9ICdLZXlaJykgfHxcbiAgICAgICAgKGV2ZW50LmNvZGUgPj0gJ0RpZ2l0MCcgJiYgZXZlbnQuY29kZSA8PSAnRGlnaXQ5JykgfHxcbiAgICAgICAgKGV2ZW50LmNvZGUgPT09ICdTcGFjZScpO1xuXG4gICAgaWYgKGlzQWxwaGFudW1lcmljKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbn1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmZpbHRlcmVkUmV0dXJuLmVtaXQodGhpcy5hcnJheSk7XG4gICAgdGhpcy5zZWFyY2hGb3JtVmFsdWVDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgY2xhc3M9XCJtYXQtZmlsdGVyXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogY29sb3IgPyBjb2xvciA6ICd3aGl0ZSd9XCI+XG4gIDxkaXY+XG4gIDxpbnB1dCAjaW5wdXQgY2xhc3M9XCJtYXQtZmlsdGVyLWlucHV0XCIgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIChrZXlkb3duKT1cImhhbmRsZUtleWRvd24oJGV2ZW50KVwiPlxuICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cImxvY2FsU3Bpbm5lclwiIGNsYXNzPVwic3Bpbm5lclwiIGRpYW1ldGVyPVwiMTZcIj48L21hdC1zcGlubmVyPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIm5vUmVzdWx0c1wiXG4gICAgIGNsYXNzPVwibm9SZXN1bHRzTWVzc2FnZVwiPlxuICB7e25vUmVzdWx0c01lc3NhZ2V9fVxuPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|