brainloper-ui 14.0.14 → 14.0.16

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.
Files changed (97) hide show
  1. package/package.json +5 -1
  2. package/esm2020/brainloper-ui.mjs +0 -5
  3. package/esm2020/public_api.mjs +0 -52
  4. package/esm2020/src/app/modules/brainloper-ui/brainloper-ui.module.mjs +0 -305
  5. package/esm2020/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.mjs +0 -29
  6. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.mjs +0 -23
  7. package/esm2020/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.mjs +0 -83
  8. package/esm2020/src/app/modules/brainloper-ui/components/carousel/carousel.component.mjs +0 -31
  9. package/esm2020/src/app/modules/brainloper-ui/components/combos/combos.component.mjs +0 -176
  10. package/esm2020/src/app/modules/brainloper-ui/components/data-table/data-table.component.mjs +0 -652
  11. package/esm2020/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.mjs +0 -118
  12. package/esm2020/src/app/modules/brainloper-ui/components/file-input/file-input.component.mjs +0 -185
  13. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.mjs +0 -2
  14. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.mjs +0 -2
  15. package/esm2020/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.mjs +0 -2
  16. package/esm2020/src/app/modules/brainloper-ui/components/filters/filters.component.mjs +0 -222
  17. package/esm2020/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.mjs +0 -80
  18. package/esm2020/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.mjs +0 -81
  19. package/esm2020/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.mjs +0 -108
  20. package/esm2020/src/app/modules/data/rolesAndPermissions.mjs +0 -486
  21. package/esm2020/src/app/modules/interfaces/buttons/button-icon.mjs +0 -2
  22. package/esm2020/src/app/modules/interfaces/buttons/button-lavel-edit.mjs +0 -2
  23. package/esm2020/src/app/modules/interfaces/combos/combos-configuration.mjs +0 -2
  24. package/esm2020/src/app/modules/interfaces/common/Permissions.mjs +0 -6
  25. package/esm2020/src/app/modules/interfaces/data-table/params.mjs +0 -2
  26. package/esm2020/src/app/modules/interfaces/data-table/rules.mjs +0 -2
  27. package/esm2020/src/app/modules/interfaces/data-table/table-columns.mjs +0 -2
  28. package/esm2020/src/app/modules/interfaces/data-table/table-configuration.mjs +0 -2
  29. package/esm2020/src/app/modules/interfaces/enum/enumActions.mjs +0 -7
  30. package/esm2020/src/app/modules/interfaces/enum/enumRules.mjs +0 -8
  31. package/esm2020/src/app/modules/interfaces/file-forms-service/file-forms-params.mjs +0 -2
  32. package/esm2020/src/app/modules/interfaces/file-forms-service/file-input-params.mjs +0 -2
  33. package/esm2020/src/app/modules/interfaces/filters/header-filters.mjs +0 -2
  34. package/esm2020/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.mjs +0 -8
  35. package/esm2020/src/app/modules/interfaces/report/template-pdf-ot.mjs +0 -2
  36. package/esm2020/src/app/modules/interfaces/report/template-pfd-fo.mjs +0 -2
  37. package/esm2020/src/app/modules/services/crypto.service.mjs +0 -37
  38. package/esm2020/src/app/modules/services/export-data.service.mjs +0 -78055
  39. package/esm2020/src/app/modules/services/file-forms.service.mjs +0 -24
  40. package/esm2020/src/app/modules/services/functions.service.mjs +0 -54
  41. package/esm2020/src/app/modules/services/generate-pdf.service.mjs +0 -58
  42. package/esm2020/src/app/modules/services/http.service.mjs +0 -154
  43. package/esm2020/src/app/modules/services/loading/loading.component.mjs +0 -28
  44. package/esm2020/src/app/modules/services/local-storage.service.mjs +0 -115
  45. package/esm2020/src/app/modules/services/message.service.mjs +0 -200
  46. package/esm2020/src/app/modules/services/screen-size-util.mjs +0 -6
  47. package/esm2020/src/app/modules/services/session.service.mjs +0 -42
  48. package/fesm2015/brainloper-ui.mjs +0 -81277
  49. package/fesm2015/brainloper-ui.mjs.map +0 -1
  50. package/fesm2020/brainloper-ui.mjs +0 -81240
  51. package/fesm2020/brainloper-ui.mjs.map +0 -1
  52. package/index.d.ts +0 -5
  53. package/public_api.d.ts +0 -51
  54. package/src/app/modules/brainloper-ui/brainloper-ui.module.d.ts +0 -73
  55. package/src/app/modules/brainloper-ui/components/bread-crumb/bread-crumb.component.d.ts +0 -13
  56. package/src/app/modules/brainloper-ui/components/buttons/button-icon/button-icon.component.d.ts +0 -10
  57. package/src/app/modules/brainloper-ui/components/buttons/button-label/button-label.component.d.ts +0 -24
  58. package/src/app/modules/brainloper-ui/components/carousel/carousel.component.d.ts +0 -12
  59. package/src/app/modules/brainloper-ui/components/combos/combos.component.d.ts +0 -46
  60. package/src/app/modules/brainloper-ui/components/data-table/data-table.component.d.ts +0 -119
  61. package/src/app/modules/brainloper-ui/components/data-table/table-modal/table-modal.component.d.ts +0 -21
  62. package/src/app/modules/brainloper-ui/components/file-input/file-input.component.d.ts +0 -42
  63. package/src/app/modules/brainloper-ui/components/file-input/imagenes/doc.d.ts +0 -2
  64. package/src/app/modules/brainloper-ui/components/file-input/imagenes/fondoTransparente.d.ts +0 -2
  65. package/src/app/modules/brainloper-ui/components/file-input/imagenes/pdf.d.ts +0 -2
  66. package/src/app/modules/brainloper-ui/components/filters/filters.component.d.ts +0 -30
  67. package/src/app/modules/brainloper-ui/components/report/generate-pdf/generate-pdf.component.d.ts +0 -35
  68. package/src/app/modules/brainloper-ui/components/report/template-fuel/template-fuel.component.d.ts +0 -36
  69. package/src/app/modules/brainloper-ui/components/select-filter/select-filter.component.d.ts +0 -26
  70. package/src/app/modules/data/rolesAndPermissions.d.ts +0 -2
  71. package/src/app/modules/interfaces/buttons/button-icon.d.ts +0 -9
  72. package/src/app/modules/interfaces/buttons/button-lavel-edit.d.ts +0 -6
  73. package/src/app/modules/interfaces/combos/combos-configuration.d.ts +0 -13
  74. package/src/app/modules/interfaces/common/Permissions.d.ts +0 -34
  75. package/src/app/modules/interfaces/data-table/params.d.ts +0 -7
  76. package/src/app/modules/interfaces/data-table/rules.d.ts +0 -8
  77. package/src/app/modules/interfaces/data-table/table-columns.d.ts +0 -25
  78. package/src/app/modules/interfaces/data-table/table-configuration.d.ts +0 -25
  79. package/src/app/modules/interfaces/enum/enumActions.d.ts +0 -5
  80. package/src/app/modules/interfaces/enum/enumRules.d.ts +0 -6
  81. package/src/app/modules/interfaces/file-forms-service/file-forms-params.d.ts +0 -4
  82. package/src/app/modules/interfaces/file-forms-service/file-input-params.d.ts +0 -13
  83. package/src/app/modules/interfaces/filters/header-filters.d.ts +0 -13
  84. package/src/app/modules/interfaces/menu-break-crumb/menu-break-crumb.d.ts +0 -10
  85. package/src/app/modules/interfaces/report/template-pdf-ot.d.ts +0 -19
  86. package/src/app/modules/interfaces/report/template-pfd-fo.d.ts +0 -20
  87. package/src/app/modules/services/crypto.service.d.ts +0 -10
  88. package/src/app/modules/services/export-data.service.d.ts +0 -18
  89. package/src/app/modules/services/file-forms.service.d.ts +0 -7
  90. package/src/app/modules/services/functions.service.d.ts +0 -13
  91. package/src/app/modules/services/generate-pdf.service.d.ts +0 -12
  92. package/src/app/modules/services/http.service.d.ts +0 -21
  93. package/src/app/modules/services/loading/loading.component.d.ts +0 -15
  94. package/src/app/modules/services/local-storage.service.d.ts +0 -49
  95. package/src/app/modules/services/message.service.d.ts +0 -23
  96. package/src/app/modules/services/screen-size-util.d.ts +0 -3
  97. package/src/app/modules/services/session.service.d.ts +0 -14
@@ -1,108 +0,0 @@
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=