verben-ng-ui 0.0.2 → 0.0.3

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 (39) hide show
  1. package/esm2022/lib/Verbena-input/verbena-input.component.mjs +55 -10
  2. package/esm2022/lib/components/card-data-view/card-data-view.component.mjs +1 -1
  3. package/esm2022/lib/components/chip/chip.component.mjs +1 -1
  4. package/esm2022/lib/components/data-export/data-export.component.mjs +158 -90
  5. package/esm2022/lib/components/data-export/data-export.module.mjs +34 -5
  6. package/esm2022/lib/components/data-export/data-export.service.mjs +12 -5
  7. package/esm2022/lib/components/data-export/data-export.types.mjs +11 -2
  8. package/esm2022/lib/components/data-table/data-table.component.mjs +89 -39
  9. package/esm2022/lib/components/data-table/style.types.mjs +1 -1
  10. package/esm2022/lib/components/data-view/data-view.component.mjs +1 -1
  11. package/esm2022/lib/components/date-picker/date-picker.component.mjs +1 -1
  12. package/esm2022/lib/components/drop-down/drop-down-item/drop-down-item.component.mjs +1 -1
  13. package/esm2022/lib/components/drop-down/drop-down.component.mjs +2 -2
  14. package/esm2022/lib/components/notification/notification.component.mjs +82 -5
  15. package/esm2022/lib/components/notification/notification.module.mjs +5 -4
  16. package/esm2022/lib/components/sort-table/sort-table.component.mjs +1 -1
  17. package/esm2022/lib/components/svg/svg.component.mjs +41 -4
  18. package/esm2022/lib/components/table-filter/table-filter.component.mjs +3 -15
  19. package/esm2022/lib/components/tooltip/tooltip.component.mjs +3 -3
  20. package/esm2022/lib/components/verben-mail/verben-mail.component.mjs +1 -1
  21. package/esm2022/lib/components/visible-column/visible-column.component.mjs +1 -1
  22. package/esm2022/lib/verbena-button/verbena-button.component.mjs +8 -5
  23. package/esm2022/public-api.mjs +2 -1
  24. package/fesm2022/verben-ng-ui.mjs +627 -326
  25. package/fesm2022/verben-ng-ui.mjs.map +1 -1
  26. package/lib/Verbena-input/verbena-input.component.d.ts +14 -3
  27. package/lib/components/data-export/data-export.component.d.ts +49 -19
  28. package/lib/components/data-export/data-export.module.d.ts +6 -1
  29. package/lib/components/data-export/data-export.types.d.ts +10 -1
  30. package/lib/components/data-table/data-table.component.d.ts +10 -3
  31. package/lib/components/data-table/style.types.d.ts +33 -9
  32. package/lib/components/notification/notification.component.d.ts +17 -17
  33. package/lib/components/notification/notification.module.d.ts +2 -1
  34. package/lib/components/svg/svg.component.d.ts +5 -3
  35. package/lib/components/table-filter/table-filter.component.d.ts +0 -2
  36. package/lib/components/tooltip/tooltip.component.d.ts +2 -2
  37. package/lib/verbena-button/verbena-button.component.d.ts +4 -3
  38. package/package.json +1 -1
  39. package/public-api.d.ts +1 -0
@@ -1,119 +1,162 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
+ import { Operators, } from './data-export.types';
3
4
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/forms";
5
- import * as i2 from "./data-export.service";
5
+ import * as i1 from "./data-export.service";
6
+ import * as i2 from "@angular/forms";
6
7
  import * as i3 from "@angular/common";
8
+ import * as i4 from "../svg/svg.component";
9
+ import * as i5 from "../card/card.component";
10
+ import * as i6 from "../drop-down/drop-down.component";
11
+ import * as i7 from "../../Verbena-input/verbena-input.component";
7
12
  export class DataExportComponent {
8
- fb;
9
13
  exportService;
14
+ fb;
10
15
  data;
11
16
  exportDataEvent = new EventEmitter();
12
- profileForm;
13
- operationForm;
14
- profileSelectionForm;
15
- baseProperties = [];
16
- allProperties = [];
17
- constructor(fb, exportService) {
18
- this.fb = fb;
17
+ profiles = [];
18
+ groupItems = [];
19
+ newGroupForm;
20
+ newOperation = {
21
+ id: '',
22
+ name: '',
23
+ field1: '',
24
+ operator: Operators.add,
25
+ field2: '',
26
+ };
27
+ numericProperties = [];
28
+ stringProperties = [];
29
+ isEditingOperation = false;
30
+ showAllProfiles = false;
31
+ showAllGroups = false;
32
+ operatorsNumeric = [
33
+ Operators.add,
34
+ Operators.subtract,
35
+ Operators.multiply,
36
+ Operators.divide,
37
+ ];
38
+ operatorsString = [
39
+ Operators.concatenateSpace,
40
+ Operators.concatenateCommaSpace,
41
+ Operators.concatenateComma,
42
+ ];
43
+ constructor(exportService, fb) {
19
44
  this.exportService = exportService;
45
+ this.fb = fb;
46
+ this.newGroupForm = this.fb.group({
47
+ name: ['', Validators.required],
48
+ });
20
49
  }
21
50
  ngOnInit() {
22
- this.initForms();
23
- this.updateProperties();
24
- }
25
- initForms() {
26
- this.initProfileForm();
27
- this.initOperationForm();
28
- this.initProfileSelectionForm();
51
+ this.initializeGroupItems();
52
+ this.updateProfiles();
29
53
  }
30
- initProfileForm() {
31
- const itemControls = this.exportService.getAllItems().map(() => false);
32
- this.profileForm = this.fb.group({
33
- name: ['', Validators.required],
34
- items: this.fb.array(itemControls),
35
- });
54
+ ngOnChanges() {
55
+ if (this.data) {
56
+ this.initializeGroupItems();
57
+ }
36
58
  }
37
- initOperationForm() {
38
- this.operationForm = this.fb.group({
39
- name: ['', Validators.required],
40
- field1: ['', Validators.required],
41
- operator: ['', Validators.required],
42
- field2: ['', Validators.required],
43
- });
59
+ get visibleProfiles() {
60
+ return this.showAllProfiles ? this.profiles : this.profiles.slice(0, 3);
44
61
  }
45
- initProfileSelectionForm() {
46
- const profileControls = this.exportService.getProfiles().map(() => false);
47
- this.profileSelectionForm = this.fb.group({
48
- selectedProfiles: this.fb.array(profileControls),
49
- });
62
+ get visibleGroups() {
63
+ return this.showAllGroups ? this.groupItems : this.groupItems.slice(0, 3);
50
64
  }
51
- updateProperties() {
65
+ initializeGroupItems() {
52
66
  if (this.data && this.data.length > 0) {
53
- const baseProperties = Object.keys(this.data[0]);
54
- this.exportService.setBaseProperties(baseProperties);
55
- }
56
- this.allProperties = this.exportService
57
- .getAllItems()
58
- .map((item) => item.id);
59
- this.initProfileForm();
60
- }
61
- onSubmitOperation() {
62
- if (this.operationForm.valid) {
63
- const operation = {
64
- id: Date.now().toString(),
65
- ...this.operationForm.value,
66
- };
67
- this.exportService.addOperation(operation);
68
- this.operationForm.reset();
69
- this.updateProperties();
67
+ const properties = Object.keys(this.data[0]);
68
+ this.exportService.setBaseProperties(properties);
69
+ this.numericProperties = properties.filter((prop) => typeof this.data[0][prop] === 'number');
70
+ this.stringProperties = properties.filter((prop) => typeof this.data[0][prop] === 'string');
71
+ this.updateGroupItems();
70
72
  }
71
73
  }
72
- onSubmitProfile() {
73
- if (this.profileForm.valid) {
74
- const formValue = this.profileForm.value;
75
- const selectedItems = this.exportService
76
- .getAllItems()
77
- .filter((_, i) => formValue.items[i]);
78
- const newProfile = {
79
- id: Date.now().toString(),
80
- name: formValue.name,
81
- items: selectedItems,
82
- };
83
- this.exportService.addProfile(newProfile);
84
- this.profileForm.reset();
85
- this.initProfileSelectionForm();
74
+ updateProfiles() {
75
+ this.profiles = this.exportService.getProfiles().map((profile) => ({
76
+ ...profile,
77
+ selected: false,
78
+ }));
79
+ }
80
+ updateGroupItems() {
81
+ this.groupItems = this.exportService.getAllItems().map((item) => ({
82
+ ...item,
83
+ selected: false,
84
+ }));
85
+ }
86
+ addGroup() {
87
+ console.log('in');
88
+ if (this.newGroupForm.valid) {
89
+ const selectedItems = this.groupItems.filter((item) => item.selected);
90
+ if (selectedItems.length > 0) {
91
+ const newProfile = {
92
+ id: Date.now().toString(),
93
+ name: this.newGroupForm.get('name')?.value,
94
+ items: selectedItems,
95
+ };
96
+ this.exportService.addProfile(newProfile);
97
+ this.updateProfiles();
98
+ this.groupItems.forEach((item) => (item.selected = false));
99
+ this.newGroupForm.reset();
100
+ console.log('SELECTED');
101
+ }
102
+ console.log('VALID');
86
103
  }
87
104
  }
88
105
  editProfile(profile) {
89
- this.profileForm.patchValue({
90
- name: profile.name,
91
- items: this.exportService
92
- .getAllItems()
93
- .map((item) => profile.items.some((profileItem) => profileItem.id === item.id)),
106
+ this.groupItems.forEach((item) => {
107
+ item.selected = profile.items.some((profileItem) => profileItem.id === item.id);
94
108
  });
109
+ this.removeProfile(profile);
110
+ }
111
+ removeProfile(profile) {
112
+ this.exportService.removeProfile(profile.id);
113
+ this.updateProfiles();
114
+ }
115
+ addOrUpdateOperation() {
116
+ if (this.newOperation.name &&
117
+ this.newOperation.field1 &&
118
+ this.newOperation.field2) {
119
+ if (this.isEditingOperation) {
120
+ this.exportService.updateOperation(this.newOperation.id, this.newOperation);
121
+ }
122
+ else {
123
+ const operation = {
124
+ ...this.newOperation,
125
+ id: Date.now().toString(),
126
+ };
127
+ this.exportService.addOperation(operation);
128
+ }
129
+ this.updateGroupItems();
130
+ this.resetOperationForm();
131
+ }
95
132
  }
96
133
  editOperation(operation) {
97
- this.operationForm.patchValue(operation);
134
+ this.newOperation = { ...operation };
135
+ this.isEditingOperation = true;
98
136
  }
99
- removeOperation(id) {
100
- this.exportService.removeOperation(id);
101
- this.updateProperties();
137
+ removeOperation(operation) {
138
+ this.exportService.removeOperation(operation.id);
139
+ this.updateGroupItems();
102
140
  }
103
- removeProfile(id) {
104
- this.exportService.removeProfile(id);
105
- this.initProfileSelectionForm();
141
+ resetOperationForm() {
142
+ this.newOperation = {
143
+ id: '',
144
+ name: '',
145
+ field1: '',
146
+ operator: Operators.add,
147
+ field2: '',
148
+ };
149
+ this.isEditingOperation = false;
106
150
  }
107
151
  resetAll() {
108
152
  this.exportService.resetAll();
109
- this.initForms();
110
- this.updateProperties();
153
+ this.initializeGroupItems();
154
+ this.updateProfiles();
155
+ this.resetOperationForm();
156
+ this.newGroupForm.reset();
111
157
  }
112
158
  exportData() {
113
- const selectedProfiles = this.exportService
114
- .getProfiles()
115
- .filter((_, i) => this.profileSelectionForm.get('selectedProfiles').at(i)
116
- .value);
159
+ const selectedProfiles = this.profiles.filter((profile) => profile.selected);
117
160
  if (selectedProfiles.length > 0) {
118
161
  const exportedData = this.exportService.exportData(this.data, selectedProfiles);
119
162
  this.exportDataEvent.emit(exportedData);
@@ -122,15 +165,40 @@ export class DataExportComponent {
122
165
  console.log('No profiles selected for export');
123
166
  }
124
167
  }
125
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DataExportService }], target: i0.ɵɵFactoryTarget.Component });
126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: DataExportComponent, selector: "lib-data-export", inputs: { data: "data" }, outputs: { exportDataEvent: "exportDataEvent" }, ngImport: i0, template: "<h2>Export Configuration</h2>\n\n<h3>Create Operation</h3>\n<form [formGroup]=\"operationForm\" (ngSubmit)=\"onSubmitOperation()\">\n <input formControlName=\"name\" placeholder=\"Operation Name\" />\n <select formControlName=\"field1\">\n <option value=\"\">Select Field 1</option>\n <option *ngFor=\"let prop of baseProperties\" [value]=\"prop\">\n {{ prop }}\n </option>\n </select>\n <select formControlName=\"operator\">\n <option value=\"\">Select Operator</option>\n <option value=\"add\">+</option>\n <option value=\"subtract\">-</option>\n <option value=\"multiply\">*</option>\n <option value=\"divide\">/</option>\n </select>\n <select formControlName=\"field2\">\n <option value=\"\">Select Field 2</option>\n <option *ngFor=\"let prop of baseProperties\" [value]=\"prop\">\n {{ prop }}\n </option>\n </select>\n <button type=\"submit\" [disabled]=\"!operationForm.valid\">Add Operation</button>\n</form>\n\n<h3>Operations</h3>\n<div\n *ngFor=\"let operation of exportService.getOperations()\"\n class=\"operation-item\"\n>\n <span\n >{{ operation.name }}: {{ operation.field1 }} {{ operation.operator }}\n {{ operation.field2 }}</span\n >\n <div>\n <button (click)=\"editOperation(operation)\">Edit</button>\n <button (click)=\"removeOperation(operation.id)\">Remove</button>\n </div>\n</div>\n\n<h3>Create Profile</h3>\n<form [formGroup]=\"profileForm\" (ngSubmit)=\"onSubmitProfile()\">\n <input formControlName=\"name\" placeholder=\"Profile Name\" />\n <div formArrayName=\"items\" class=\"checkbox-group\">\n <label\n *ngFor=\"let item of exportService.getAllItems(); let i = index\"\n class=\"checkbox-label\"\n >\n <input type=\"checkbox\" [formControlName]=\"i\" />\n {{ item.name }} ({{ item.type }})\n </label>\n </div>\n <button type=\"submit\" [disabled]=\"!profileForm.valid\">Save Profile</button>\n</form>\n\n<h3>Profiles</h3>\n<ul>\n <li *ngFor=\"let profile of exportService.getProfiles()\">\n <span>{{ profile.name }}</span>\n <div>\n <button *ngIf=\"profile.id !== 'default'\" (click)=\"editProfile(profile)\">\n Edit\n </button>\n <button\n *ngIf=\"profile.id !== 'default'\"\n (click)=\"removeProfile(profile.id)\"\n >\n Remove\n </button>\n </div>\n </li>\n</ul>\n\n<button (click)=\"resetAll()\">Reset All</button>\n\n<h3>Export</h3>\n<form [formGroup]=\"profileSelectionForm\">\n <div formArrayName=\"selectedProfiles\" class=\"checkbox-group\">\n <label\n *ngFor=\"let profile of exportService.getProfiles(); let i = index\"\n class=\"checkbox-label\"\n >\n <input type=\"checkbox\" [formControlName]=\"i\" />\n {{ profile.name }}\n </label>\n </div>\n</form>\n<button (click)=\"exportData()\">Export Selected Profiles</button>\n", styles: [""], dependencies: [{ 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: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { 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: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
168
+ onField1Change() {
169
+ this.newOperation.field2 = '';
170
+ this.newOperation.operator = this.isNumericField(this.newOperation.field1)
171
+ ? Operators.add
172
+ : Operators.concatenateSpace;
173
+ }
174
+ isNumericField(field) {
175
+ return this.numericProperties.includes(field);
176
+ }
177
+ get availableOperators() {
178
+ return this.isNumericField(this.newOperation.field1)
179
+ ? this.operatorsNumeric
180
+ : this.operatorsString;
181
+ }
182
+ get availableFields2() {
183
+ return this.isNumericField(this.newOperation.field1)
184
+ ? this.numericProperties
185
+ : this.stringProperties;
186
+ }
187
+ toggleShowAllProfiles() {
188
+ this.showAllProfiles = !this.showAllProfiles;
189
+ }
190
+ toggleShowAllGroups() {
191
+ this.showAllGroups = !this.showAllGroups;
192
+ }
193
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportComponent, deps: [{ token: i1.DataExportService }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
194
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: DataExportComponent, selector: "lib-data-export", inputs: { data: "data" }, outputs: { exportDataEvent: "exportDataEvent" }, usesOnChanges: true, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"20px\"\n pd=\"4px 6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n <div class=\"operation-grid\">\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select field\"\n [options]=\"numericProperties.concat(stringProperties)\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n [(ngModel)]=\"newOperation.operator\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"exportData()\">Export</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem}.card-header{display:flex;justify-content:space-between;align-items:center}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:1rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}\n"], dependencies: [{ 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: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "size"] }, { kind: "component", type: i5.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i7.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "inputWrapperClass", "customErrorMessages"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
127
195
  }
128
196
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportComponent, decorators: [{
129
197
  type: Component,
130
- args: [{ selector: 'lib-data-export', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h2>Export Configuration</h2>\n\n<h3>Create Operation</h3>\n<form [formGroup]=\"operationForm\" (ngSubmit)=\"onSubmitOperation()\">\n <input formControlName=\"name\" placeholder=\"Operation Name\" />\n <select formControlName=\"field1\">\n <option value=\"\">Select Field 1</option>\n <option *ngFor=\"let prop of baseProperties\" [value]=\"prop\">\n {{ prop }}\n </option>\n </select>\n <select formControlName=\"operator\">\n <option value=\"\">Select Operator</option>\n <option value=\"add\">+</option>\n <option value=\"subtract\">-</option>\n <option value=\"multiply\">*</option>\n <option value=\"divide\">/</option>\n </select>\n <select formControlName=\"field2\">\n <option value=\"\">Select Field 2</option>\n <option *ngFor=\"let prop of baseProperties\" [value]=\"prop\">\n {{ prop }}\n </option>\n </select>\n <button type=\"submit\" [disabled]=\"!operationForm.valid\">Add Operation</button>\n</form>\n\n<h3>Operations</h3>\n<div\n *ngFor=\"let operation of exportService.getOperations()\"\n class=\"operation-item\"\n>\n <span\n >{{ operation.name }}: {{ operation.field1 }} {{ operation.operator }}\n {{ operation.field2 }}</span\n >\n <div>\n <button (click)=\"editOperation(operation)\">Edit</button>\n <button (click)=\"removeOperation(operation.id)\">Remove</button>\n </div>\n</div>\n\n<h3>Create Profile</h3>\n<form [formGroup]=\"profileForm\" (ngSubmit)=\"onSubmitProfile()\">\n <input formControlName=\"name\" placeholder=\"Profile Name\" />\n <div formArrayName=\"items\" class=\"checkbox-group\">\n <label\n *ngFor=\"let item of exportService.getAllItems(); let i = index\"\n class=\"checkbox-label\"\n >\n <input type=\"checkbox\" [formControlName]=\"i\" />\n {{ item.name }} ({{ item.type }})\n </label>\n </div>\n <button type=\"submit\" [disabled]=\"!profileForm.valid\">Save Profile</button>\n</form>\n\n<h3>Profiles</h3>\n<ul>\n <li *ngFor=\"let profile of exportService.getProfiles()\">\n <span>{{ profile.name }}</span>\n <div>\n <button *ngIf=\"profile.id !== 'default'\" (click)=\"editProfile(profile)\">\n Edit\n </button>\n <button\n *ngIf=\"profile.id !== 'default'\"\n (click)=\"removeProfile(profile.id)\"\n >\n Remove\n </button>\n </div>\n </li>\n</ul>\n\n<button (click)=\"resetAll()\">Reset All</button>\n\n<h3>Export</h3>\n<form [formGroup]=\"profileSelectionForm\">\n <div formArrayName=\"selectedProfiles\" class=\"checkbox-group\">\n <label\n *ngFor=\"let profile of exportService.getProfiles(); let i = index\"\n class=\"checkbox-label\"\n >\n <input type=\"checkbox\" [formControlName]=\"i\" />\n {{ profile.name }}\n </label>\n </div>\n</form>\n<button (click)=\"exportData()\">Export Selected Profiles</button>\n" }]
131
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DataExportService }], propDecorators: { data: [{
198
+ args: [{ selector: 'lib-data-export', changeDetection: ChangeDetectionStrategy.OnPush, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Export</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Profiles</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <div *ngFor=\"let profile of visibleProfiles; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'profile-' + i\"\n [(ngModel)]=\"profile.selected\"\n />\n <label [for]=\"'profile-' + i\" class=\"checkbox-label\">\n {{ profile.name }}\n </label>\n </div>\n <div class=\"item-actions\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editProfile(profile)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeProfile(profile)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"profiles.length > 3\"\n (click)=\"toggleShowAllProfiles()\"\n class=\"show-more\"\n >\n <span>{{ showAllProfiles ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Group</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <form [formGroup]=\"newGroupForm\" (ngSubmit)=\"addGroup()\">\n <verbena-input\n placeholder=\"Group name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"20px\"\n pd=\"4px 6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n formControlName=\"name\"\n ></verbena-input>\n </form>\n <div *ngFor=\"let item of visibleGroups; let i = index\" class=\"item\">\n <div class=\"item-label\">\n <input\n type=\"checkbox\"\n [id]=\"'group-' + i\"\n [(ngModel)]=\"item.selected\"\n />\n <label [for]=\"'group-' + i\" class=\"checkbox-label\">\n {{ item.name }}\n </label>\n </div>\n <div class=\"item-actions\" *ngIf=\"item.type === 'operation'\">\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#3479E9\"\n fill=\"white\"\n (click)=\"editOperation(item)\"\n ></verben-svg>\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"#E20000\"\n (click)=\"removeOperation(item)\"\n ></verben-svg>\n </div>\n </div>\n <div\n *ngIf=\"groupItems.length > 3\"\n (click)=\"toggleShowAllGroups()\"\n class=\"show-more\"\n >\n <span>{{ showAllGroups ? \"Show less\" : \"Show more\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </div>\n <button class=\"add-button\" (click)=\"addGroup()\">+ Add</button>\n </section>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n <verbena-input\n placeholder=\"Operation name\"\n border=\"1px solid #ccc\"\n borderRadius=\"5px\"\n textColor=\"black\"\n width=\"100%\"\n height=\"20px\"\n pd=\"2px 6px\"\n [showBorder]=\"true\"\n [showErrorMessage]=\"true\"\n [errorPosition]=\"'bottom'\"\n [(ngModel)]=\"newOperation.name\"\n ></verbena-input>\n <div class=\"operation-grid\">\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select field\"\n [options]=\"numericProperties.concat(stringProperties)\"\n [(ngModel)]=\"newOperation.field1\"\n (ngModelChange)=\"onField1Change()\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n [(ngModel)]=\"newOperation.operator\"\n >\n </verben-drop-down>\n <verben-drop-down\n width=\"'8rem'\"\n placeholder=\"Select field\"\n [options]=\"availableFields2\"\n [(ngModel)]=\"newOperation.field2\"\n >\n </verben-drop-down>\n </div>\n <button class=\"add-button\" (click)=\"addOrUpdateOperation()\">\n {{ isEditingOperation ? \"Update\" : \"+ Add\" }}\n </button>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"exportData()\">Export</button>\n </div>\n</verben-card>\n", styles: [".export-card{font-size:.75rem}.card-header{display:flex;justify-content:space-between;align-items:center}.header-title{font-weight:600;font-size:.8125rem}.card-body,.section{display:flex;flex-direction:column;gap:1rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.export-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}\n"] }]
199
+ }], ctorParameters: () => [{ type: i1.DataExportService }, { type: i2.FormBuilder }], propDecorators: { data: [{
132
200
  type: Input
133
201
  }], exportDataEvent: [{
134
202
  type: Output
135
203
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0L2RhdGEtZXhwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBVS9FLE1BQU0sT0FBTyxtQkFBbUI7SUFXcEI7SUFDRDtJQVhBLElBQUksQ0FBUztJQUNaLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBeUIsQ0FBQztJQUV0RSxXQUFXLENBQWE7SUFDeEIsYUFBYSxDQUFhO0lBQzFCLG9CQUFvQixDQUFhO0lBQ2pDLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFDOUIsYUFBYSxHQUFhLEVBQUUsQ0FBQztJQUU3QixZQUNVLEVBQWUsRUFDaEIsYUFBZ0M7UUFEL0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7SUFDdEMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFD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QUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDeEMsV0FBVyxFQUFFO2FBQ2IsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkUsS0FBSyxDQUNYLENBQUM7UUFFSixJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDaEQsSUFBSSxDQUFDLElBQUksRUFDVCxnQkFBZ0IsQ0FDakIsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO3VHQTNJVSxtQkFBbUI7MkZBQW5CLG1CQUFtQixrSUNqQmhDLGt6RkEwRkE7OzJGRHpFYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07Z0hBR3RDLElBQUk7c0JBQVosS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGFFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydFByb2ZpbGUsIE9wZXJhdGlvbiB9IGZyb20gJy4vZGF0YS1leHBvcnQudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS1leHBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YS1leHBvcnQuY29tcG9uZW50LmNzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhRXhwb3J0Q29tcG9uZW50IHtcbiAgQElucHV0KCkgZGF0YSE6IGFueVtdO1xuICBAT3V0cHV0KCkgZXhwb3J0RGF0YUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+W10+KCk7XG5cbiAgcHJvZmlsZUZvcm0hOiBGb3JtR3JvdXA7XG4gIG9wZXJhdGlvbkZvcm0hOiBGb3JtR3JvdXA7XG4gIHByb2ZpbGVTZWxlY3Rpb25Gb3JtITogRm9ybUdyb3VwO1xuICBiYXNlUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcbiAgYWxsUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwdWJsaWMgZXhwb3J0U2VydmljZTogRGF0YUV4cG9ydFNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdEZvcm1zKCk7XG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtcygpIHtcbiAgICB0aGlzLmluaXRQcm9maWxlRm9ybSgpO1xuICAgIHRoaXMuaW5pdE9wZXJhdGlvbkZvcm0oKTtcbiAgICB0aGlzLmluaXRQcm9maWxlU2VsZWN0aW9uRm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0UHJvZmlsZUZvcm0oKSB7XG4gICAgY29uc3QgaXRlbUNvbnRyb2xzID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldEFsbEl0ZW1zKCkubWFwKCgpID0+IGZhbHNlKTtcbiAgICB0aGlzLnByb2ZpbGVGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgaXRlbXM6IHRoaXMuZmIuYXJyYXkoaXRlbUNvbnRyb2xzKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9wZXJhdGlvbkZvcm0oKSB7XG4gICAgdGhpcy5vcGVyYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZmllbGQxOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgb3BlcmF0b3I6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBmaWVsZDI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRQcm9maWxlU2VsZWN0aW9uRm9ybSgpIHtcbiAgICBjb25zdCBwcm9maWxlQ29udHJvbHMgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2V0UHJvZmlsZXMoKS5tYXAoKCkgPT4gZmFsc2UpO1xuICAgIHRoaXMucHJvZmlsZVNlbGVjdGlvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHNlbGVjdGVkUHJvZmlsZXM6IHRoaXMuZmIuYXJyYXkocHJvZmlsZUNvbnRyb2xzKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUHJvcGVydGllcygpIHtcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBiYXNlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXSk7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2Uuc2V0QmFzZVByb3BlcnRpZXMoYmFzZVByb3BlcnRpZXMpO1xuICAgIH1cbiAgICB0aGlzLmFsbFByb3BlcnRpZXMgPSB0aGlzLmV4cG9ydFNlcnZpY2VcbiAgICAgIC5nZXRBbGxJdGVtcygpXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLmlkKTtcbiAgICB0aGlzLmluaXRQcm9maWxlRm9ybSgpO1xuICB9XG5cbiAgb25TdWJtaXRPcGVyYXRpb24oKSB7XG4gICAgaWYgKHRoaXMub3BlcmF0aW9uRm9ybS52YWxpZCkge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uOiBPcGVyYXRpb24gPSB7XG4gICAgICAgIGlkOiBEYXRlLm5vdygpLnRvU3RyaW5nKCksXG4gICAgICAgIC4uLnRoaXMub3BlcmF0aW9uRm9ybS52YWx1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgICB0aGlzLm9wZXJhdGlvbkZvcm0ucmVzZXQoKTtcbiAgICAgIHRoaXMudXBkYXRlUHJvcGVydGllcygpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VibWl0UHJvZmlsZSgpIHtcbiAgICBpZiAodGhpcy5wcm9maWxlRm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5wcm9maWxlRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmV4cG9ydFNlcnZpY2VcbiAgICAgICAgLmdldEFsbEl0ZW1zKClcbiAgICAgICAgLmZpbHRlcigoXywgaSkgPT4gZm9ybVZhbHVlLml0ZW1zW2ldKTtcbiAgICAgIGNvbnN0IG5ld1Byb2ZpbGU6IEV4cG9ydFByb2ZpbGUgPSB7XG4gICAgICAgIGlkOiBEYXRlLm5vdygpLnRvU3RyaW5nKCksXG4gICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxuICAgICAgICBpdGVtczogc2VsZWN0ZWRJdGVtcyxcbiAgICAgIH07XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuYWRkUHJvZmlsZShuZXdQcm9maWxlKTtcbiAgICAgIHRoaXMucHJvZmlsZUZvcm0ucmVzZXQoKTtcbiAgICAgIHRoaXMuaW5pdFByb2ZpbGVTZWxlY3Rpb25Gb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgZWRpdFByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSkge1xuICAgIHRoaXMucHJvZmlsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBuYW1lOiBwcm9maWxlLm5hbWUsXG4gICAgICBpdGVtczogdGhpcy5leHBvcnRTZXJ2aWNlXG4gICAgICAgIC5nZXRBbGxJdGVtcygpXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+XG4gICAgICAgICAgcHJvZmlsZS5pdGVtcy5zb21lKChwcm9maWxlSXRlbSkgPT4gcHJvZmlsZUl0ZW0uaWQgPT09IGl0ZW0uaWQpXG4gICAgICAgICksXG4gICAgfSk7XG4gIH1cblxuICBlZGl0T3BlcmF0aW9uKG9wZXJhdGlvbjogT3BlcmF0aW9uKSB7XG4gICAgdGhpcy5vcGVyYXRpb25Gb3JtLnBhdGNoVmFsdWUob3BlcmF0aW9uKTtcbiAgfVxuXG4gIHJlbW92ZU9wZXJhdGlvbihpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLnJlbW92ZU9wZXJhdGlvbihpZCk7XG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKCk7XG4gIH1cblxuICByZW1vdmVQcm9maWxlKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVtb3ZlUHJvZmlsZShpZCk7XG4gICAgdGhpcy5pbml0UHJvZmlsZVNlbGVjdGlvbkZvcm0oKTtcbiAgfVxuXG4gIHJlc2V0QWxsKCkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZXNldEFsbCgpO1xuICAgIHRoaXMuaW5pdEZvcm1zKCk7XG4gICAgdGhpcy51cGRhdGVQcm9wZXJ0aWVzKCk7XG4gIH1cblxuICBleHBvcnREYXRhKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUHJvZmlsZXMgPSB0aGlzLmV4cG9ydFNlcnZpY2VcbiAgICAgIC5nZXRQcm9maWxlcygpXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoXywgaSkgPT5cbiAgICAgICAgICAodGhpcy5wcm9maWxlU2VsZWN0aW9uRm9ybS5nZXQoJ3NlbGVjdGVkUHJvZmlsZXMnKSBhcyBGb3JtQXJyYXkpLmF0KGkpXG4gICAgICAgICAgICAudmFsdWVcbiAgICAgICk7XG5cbiAgICBpZiAoc2VsZWN0ZWRQcm9maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHBvcnRlZERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RGF0YShcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICBzZWxlY3RlZFByb2ZpbGVzXG4gICAgICApO1xuICAgICAgdGhpcy5leHBvcnREYXRhRXZlbnQuZW1pdChleHBvcnRlZERhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnTm8gcHJvZmlsZXMgc2VsZWN0ZWQgZm9yIGV4cG9ydCcpO1xuICAgIH1cbiAgfVxufVxuIiwiPGgyPkV4cG9ydCBDb25maWd1cmF0aW9uPC9oMj5cblxuPGgzPkNyZWF0ZSBPcGVyYXRpb248L2gzPlxuPGZvcm0gW2Zvcm1Hcm91cF09XCJvcGVyYXRpb25Gb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0T3BlcmF0aW9uKClcIj5cbiAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIiBwbGFjZWhvbGRlcj1cIk9wZXJhdGlvbiBOYW1lXCIgLz5cbiAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmaWVsZDFcIj5cbiAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IEZpZWxkIDE8L29wdGlvbj5cbiAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwcm9wIG9mIGJhc2VQcm9wZXJ0aWVzXCIgW3ZhbHVlXT1cInByb3BcIj5cbiAgICAgIHt7IHByb3AgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG4gIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwib3BlcmF0b3JcIj5cbiAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IE9wZXJhdG9yPC9vcHRpb24+XG4gICAgPG9wdGlvbiB2YWx1ZT1cImFkZFwiPis8L29wdGlvbj5cbiAgICA8b3B0aW9uIHZhbHVlPVwic3VidHJhY3RcIj4tPC9vcHRpb24+XG4gICAgPG9wdGlvbiB2YWx1ZT1cIm11bHRpcGx5XCI+Kjwvb3B0aW9uPlxuICAgIDxvcHRpb24gdmFsdWU9XCJkaXZpZGVcIj4vPC9vcHRpb24+XG4gIDwvc2VsZWN0PlxuICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpZWxkMlwiPlxuICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgRmllbGQgMjwvb3B0aW9uPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHByb3Agb2YgYmFzZVByb3BlcnRpZXNcIiBbdmFsdWVdPVwicHJvcFwiPlxuICAgICAge3sgcHJvcCB9fVxuICAgIDwvb3B0aW9uPlxuICA8L3NlbGVjdD5cbiAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2Rpc2FibGVkXT1cIiFvcGVyYXRpb25Gb3JtLnZhbGlkXCI+QWRkIE9wZXJhdGlvbjwvYnV0dG9uPlxuPC9mb3JtPlxuXG48aDM+T3BlcmF0aW9uczwvaDM+XG48ZGl2XG4gICpuZ0Zvcj1cImxldCBvcGVyYXRpb24gb2YgZXhwb3J0U2VydmljZS5nZXRPcGVyYXRpb25zKClcIlxuICBjbGFzcz1cIm9wZXJhdGlvbi1pdGVtXCJcbj5cbiAgPHNwYW5cbiAgICA+e3sgb3BlcmF0aW9uLm5hbWUgfX06IHt7IG9wZXJhdGlvbi5maWVsZDEgfX0ge3sgb3BlcmF0aW9uLm9wZXJhdG9yIH19XG4gICAge3sgb3BlcmF0aW9uLmZpZWxkMiB9fTwvc3BhblxuICA+XG4gIDxkaXY+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdE9wZXJhdGlvbihvcGVyYXRpb24pXCI+RWRpdDwvYnV0dG9uPlxuICAgIDxidXR0b24gKGNsaWNrKT1cInJlbW92ZU9wZXJhdGlvbihvcGVyYXRpb24uaWQpXCI+UmVtb3ZlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxoMz5DcmVhdGUgUHJvZmlsZTwvaDM+XG48Zm9ybSBbZm9ybUdyb3VwXT1cInByb2ZpbGVGb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0UHJvZmlsZSgpXCI+XG4gIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJQcm9maWxlIE5hbWVcIiAvPlxuICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJpdGVtc1wiIGNsYXNzPVwiY2hlY2tib3gtZ3JvdXBcIj5cbiAgICA8bGFiZWxcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGV4cG9ydFNlcnZpY2UuZ2V0QWxsSXRlbXMoKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCJcbiAgICA+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJpXCIgLz5cbiAgICAgIHt7IGl0ZW0ubmFtZSB9fSAoe3sgaXRlbS50eXBlIH19KVxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiIXByb2ZpbGVGb3JtLnZhbGlkXCI+U2F2ZSBQcm9maWxlPC9idXR0b24+XG48L2Zvcm0+XG5cbjxoMz5Qcm9maWxlczwvaDM+XG48dWw+XG4gIDxsaSAqbmdGb3I9XCJsZXQgcHJvZmlsZSBvZiBleHBvcnRTZXJ2aWNlLmdldFByb2ZpbGVzKClcIj5cbiAgICA8c3Bhbj57eyBwcm9maWxlLm5hbWUgfX08L3NwYW4+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJwcm9maWxlLmlkICE9PSAnZGVmYXVsdCdcIiAoY2xpY2spPVwiZWRpdFByb2ZpbGUocHJvZmlsZSlcIj5cbiAgICAgICAgRWRpdFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwicHJvZmlsZS5pZCAhPT0gJ2RlZmF1bHQnXCJcbiAgICAgICAgKGNsaWNrKT1cInJlbW92ZVByb2ZpbGUocHJvZmlsZS5pZClcIlxuICAgICAgPlxuICAgICAgICBSZW1vdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2xpPlxuPC91bD5cblxuPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRBbGwoKVwiPlJlc2V0IEFsbDwvYnV0dG9uPlxuXG48aDM+RXhwb3J0PC9oMz5cbjxmb3JtIFtmb3JtR3JvdXBdPVwicHJvZmlsZVNlbGVjdGlvbkZvcm1cIj5cbiAgPGRpdiBmb3JtQXJyYXlOYW1lPVwic2VsZWN0ZWRQcm9maWxlc1wiIGNsYXNzPVwiY2hlY2tib3gtZ3JvdXBcIj5cbiAgICA8bGFiZWxcbiAgICAgICpuZ0Zvcj1cImxldCBwcm9maWxlIG9mIGV4cG9ydFNlcnZpY2UuZ2V0UHJvZmlsZXMoKTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCJcbiAgICA+XG4gICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJpXCIgLz5cbiAgICAgIHt7IHByb2ZpbGUubmFtZSB9fVxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuPC9mb3JtPlxuPGJ1dHRvbiAoY2xpY2spPVwiZXhwb3J0RGF0YSgpXCI+RXhwb3J0IFNlbGVjdGVkIFByb2ZpbGVzPC9idXR0b24+XG4iXX0=
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0L2RhdGEtZXhwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0UsT0FBTyxFQUlMLFNBQVMsR0FDVixNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUFRN0IsTUFBTSxPQUFPLG1CQUFtQjtJQWlDcEI7SUFDQTtJQWpDRCxJQUFJLENBQVM7SUFDWixlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFdEUsUUFBUSxHQUE4QyxFQUFFLENBQUM7SUFDekQsVUFBVSxHQUEyQyxFQUFFLENBQUM7SUFDeEQsWUFBWSxDQUFZO0lBQ3hCLFlBQVksR0FBYztRQUN4QixFQUFFLEVBQUUsRUFBRTtRQUNOLElBQUksRUFBRSxFQUFFO1FBQ1IsTUFBTSxFQUFFLEVBQUU7UUFDVixRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDdkIsTUFBTSxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBQ0YsaUJBQWlCLEdBQWEsRUFBRSxDQUFDO0lBQ2pDLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUNoQyxrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxhQUFhLEdBQVksS0FBSyxD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QW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNO2dIQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEYXRhRXhwb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBFeHBvcnRJdGVtLFxuICBFeHBvcnRQcm9maWxlLFxuICBPcGVyYXRpb24sXG4gIE9wZXJhdG9ycyxcbn0gZnJvbSAnLi9kYXRhLWV4cG9ydC50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWV4cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWV4cG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWV4cG9ydC5jb21wb25lbnQuY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFFeHBvcnRDb21wb25lbnQge1xuICBASW5wdXQoKSBkYXRhITogYW55W107XG4gIEBPdXRwdXQoKSBleHBvcnREYXRhRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIGFueT5bXT4oKTtcblxuICBwcm9maWxlczogKEV4cG9ydFByb2ZpbGUgJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgZ3JvdXBJdGVtczogKEV4cG9ydEl0ZW0gJiB7IHNlbGVjdGVkOiBib29sZWFuIH0pW10gPSBbXTtcbiAgbmV3R3JvdXBGb3JtOiBGb3JtR3JvdXA7XG4gIG5ld09wZXJhdGlvbjogT3BlcmF0aW9uID0ge1xuICAgIGlkOiAnJyxcbiAgICBuYW1lOiAnJyxcbiAgICBmaWVsZDE6ICcnLFxuICAgIG9wZXJhdG9yOiBPcGVyYXRvcnMuYWRkLFxuICAgIGZpZWxkMjogJycsXG4gIH07XG4gIG51bWVyaWNQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzdHJpbmdQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0VkaXRpbmdPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FsbFByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBbGxHcm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBvcGVyYXRvcnNOdW1lcmljOiBPcGVyYXRvcnNbXSA9IFtcbiAgICBPcGVyYXRvcnMuYWRkLFxuICAgIE9wZXJhdG9ycy5zdWJ0cmFjdCxcbiAgICBPcGVyYXRvcnMubXVsdGlwbHksXG4gICAgT3BlcmF0b3JzLmRpdmlkZSxcbiAgXTtcbiAgb3BlcmF0b3JzU3RyaW5nOiBPcGVyYXRvcnNbXSA9IFtcbiAgICBPcGVyYXRvcnMuY29uY2F0ZW5hdGVTcGFjZSxcbiAgICBPcGVyYXRvcnMuY29uY2F0ZW5hdGVDb21tYVNwYWNlLFxuICAgIE9wZXJhdG9ycy5jb25jYXRlbmF0ZUNvbW1hLFxuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRGF0YUV4cG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5uZXdHcm91cEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVHcm91cEl0ZW1zKCk7XG4gICAgdGhpcy51cGRhdGVQcm9maWxlcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplR3JvdXBJdGVtcygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB2aXNpYmxlUHJvZmlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0FsbFByb2ZpbGVzID8gdGhpcy5wcm9maWxlcyA6IHRoaXMucHJvZmlsZXMuc2xpY2UoMCwgMyk7XG4gIH1cblxuICBnZXQgdmlzaWJsZUdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93QWxsR3JvdXBzID8gdGhpcy5ncm91cEl0ZW1zIDogdGhpcy5ncm91cEl0ZW1zLnNsaWNlKDAsIDMpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZUdyb3VwSXRlbXMoKSB7XG4gICAgaWYgKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXSk7XG4gICAgICB0aGlzLmV4cG9ydFNlcnZpY2Uuc2V0QmFzZVByb3BlcnRpZXMocHJvcGVydGllcyk7XG4gICAgICB0aGlzLm51bWVyaWNQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PiB0eXBlb2YgdGhpcy5kYXRhWzBdW3Byb3BdID09PSAnbnVtYmVyJ1xuICAgICAgKTtcbiAgICAgIHRoaXMuc3RyaW5nUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT4gdHlwZW9mIHRoaXMuZGF0YVswXVtwcm9wXSA9PT0gJ3N0cmluZydcbiAgICAgICk7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQcm9maWxlcygpIHtcbiAgICB0aGlzLnByb2ZpbGVzID0gdGhpcy5leHBvcnRTZXJ2aWNlLmdldFByb2ZpbGVzKCkubWFwKChwcm9maWxlKSA9PiAoe1xuICAgICAgLi4ucHJvZmlsZSxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICB9KSk7XG4gIH1cblxuICB1cGRhdGVHcm91cEl0ZW1zKCkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcyA9IHRoaXMuZXhwb3J0U2VydmljZS5nZXRBbGxJdGVtcygpLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgfSkpO1xuICB9XG5cbiAgYWRkR3JvdXAoKSB7XG4gICAgY29uc29sZS5sb2coJ2luJyk7XG4gICAgaWYgKHRoaXMubmV3R3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5ncm91cEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCk7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1Byb2ZpbGU6IEV4cG9ydFByb2ZpbGUgPSB7XG4gICAgICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgICAgICBuYW1lOiB0aGlzLm5ld0dyb3VwRm9ybS5nZXQoJ25hbWUnKT8udmFsdWUsXG4gICAgICAgICAgaXRlbXM6IHNlbGVjdGVkSXRlbXMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5hZGRQcm9maWxlKG5ld1Byb2ZpbGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVByb2ZpbGVzKCk7XG4gICAgICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5zZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMubmV3R3JvdXBGb3JtLnJlc2V0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTRUxFQ1RFRCcpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ1ZBTElEJyk7XG4gICAgfVxuICB9XG5cbiAgZWRpdFByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZ3JvdXBJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gcHJvZmlsZS5pdGVtcy5zb21lKFxuICAgICAgICAocHJvZmlsZUl0ZW0pID0+IHByb2ZpbGVJdGVtLmlkID09PSBpdGVtLmlkXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMucmVtb3ZlUHJvZmlsZShwcm9maWxlKTtcbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUocHJvZmlsZTogRXhwb3J0UHJvZmlsZSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVQcm9maWxlKHByb2ZpbGUuaWQpO1xuICAgIHRoaXMudXBkYXRlUHJvZmlsZXMoKTtcbiAgfVxuXG4gIGFkZE9yVXBkYXRlT3BlcmF0aW9uKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLm5hbWUgJiZcbiAgICAgIHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSAmJlxuICAgICAgdGhpcy5uZXdPcGVyYXRpb24uZmllbGQyXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5pc0VkaXRpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnVwZGF0ZU9wZXJhdGlvbihcbiAgICAgICAgICB0aGlzLm5ld09wZXJhdGlvbi5pZCxcbiAgICAgICAgICB0aGlzLm5ld09wZXJhdGlvblxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0aW9uOiBPcGVyYXRpb24gPSB7XG4gICAgICAgICAgLi4udGhpcy5uZXdPcGVyYXRpb24sXG4gICAgICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmFkZE9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVHcm91cEl0ZW1zKCk7XG4gICAgICB0aGlzLnJlc2V0T3BlcmF0aW9uRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRPcGVyYXRpb24ob3BlcmF0aW9uOiBFeHBvcnRJdGVtICYgeyBzZWxlY3RlZDogYm9vbGVhbiB9KSB7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24gPSB7IC4uLihvcGVyYXRpb24gYXMgdW5rbm93biBhcyBPcGVyYXRpb24pIH07XG4gICAgdGhpcy5pc0VkaXRpbmdPcGVyYXRpb24gPSB0cnVlO1xuICB9XG5cbiAgcmVtb3ZlT3BlcmF0aW9uKG9wZXJhdGlvbjogRXhwb3J0SXRlbSAmIHsgc2VsZWN0ZWQ6IGJvb2xlYW4gfSkge1xuICAgIHRoaXMuZXhwb3J0U2VydmljZS5yZW1vdmVPcGVyYXRpb24ob3BlcmF0aW9uLmlkKTtcbiAgICB0aGlzLnVwZGF0ZUdyb3VwSXRlbXMoKTtcbiAgfVxuXG4gIHJlc2V0T3BlcmF0aW9uRm9ybSgpIHtcbiAgICB0aGlzLm5ld09wZXJhdGlvbiA9IHtcbiAgICAgIGlkOiAnJyxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgZmllbGQxOiAnJyxcbiAgICAgIG9wZXJhdG9yOiBPcGVyYXRvcnMuYWRkLFxuICAgICAgZmllbGQyOiAnJyxcbiAgICB9O1xuICAgIHRoaXMuaXNFZGl0aW5nT3BlcmF0aW9uID0gZmFsc2U7XG4gIH1cblxuICByZXNldEFsbCgpIHtcbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UucmVzZXRBbGwoKTtcbiAgICB0aGlzLmluaXRpYWxpemVHcm91cEl0ZW1zKCk7XG4gICAgdGhpcy51cGRhdGVQcm9maWxlcygpO1xuICAgIHRoaXMucmVzZXRPcGVyYXRpb25Gb3JtKCk7XG4gICAgdGhpcy5uZXdHcm91cEZvcm0ucmVzZXQoKTtcbiAgfVxuXG4gIGV4cG9ydERhdGEoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQcm9maWxlcyA9IHRoaXMucHJvZmlsZXMuZmlsdGVyKFxuICAgICAgKHByb2ZpbGUpID0+IHByb2ZpbGUuc2VsZWN0ZWRcbiAgICApO1xuICAgIGlmIChzZWxlY3RlZFByb2ZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkRGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnREYXRhKFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHNlbGVjdGVkUHJvZmlsZXNcbiAgICAgICk7XG4gICAgICB0aGlzLmV4cG9ydERhdGFFdmVudC5lbWl0KGV4cG9ydGVkRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdObyBwcm9maWxlcyBzZWxlY3RlZCBmb3IgZXhwb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgb25GaWVsZDFDaGFuZ2UoKSB7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24uZmllbGQyID0gJyc7XG4gICAgdGhpcy5uZXdPcGVyYXRpb24ub3BlcmF0b3IgPSB0aGlzLmlzTnVtZXJpY0ZpZWxkKHRoaXMubmV3T3BlcmF0aW9uLmZpZWxkMSlcbiAgICAgID8gT3BlcmF0b3JzLmFkZFxuICAgICAgOiBPcGVyYXRvcnMuY29uY2F0ZW5hdGVTcGFjZTtcbiAgfVxuXG4gIGlzTnVtZXJpY0ZpZWxkKGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5udW1lcmljUHJvcGVydGllcy5pbmNsdWRlcyhmaWVsZCk7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlT3BlcmF0b3JzKCk6IE9wZXJhdG9yc1tdIHtcbiAgICByZXR1cm4gdGhpcy5pc051bWVyaWNGaWVsZCh0aGlzLm5ld09wZXJhdGlvbi5maWVsZDEpXG4gICAgICA/IHRoaXMub3BlcmF0b3JzTnVtZXJpY1xuICAgICAgOiB0aGlzLm9wZXJhdG9yc1N0cmluZztcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVGaWVsZHMyKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5pc051bWVyaWNGaWVsZCh0aGlzLm5ld09wZXJhdGlvbi5maWVsZDEpXG4gICAgICA/IHRoaXMubnVtZXJpY1Byb3BlcnRpZXNcbiAgICAgIDogdGhpcy5zdHJpbmdQcm9wZXJ0aWVzO1xuICB9XG5cbiAgdG9nZ2xlU2hvd0FsbFByb2ZpbGVzKCkge1xuICAgIHRoaXMuc2hvd0FsbFByb2ZpbGVzID0gIXRoaXMuc2hvd0FsbFByb2ZpbGVzO1xuICB9XG5cbiAgdG9nZ2xlU2hvd0FsbEdyb3VwcygpIHtcbiAgICB0aGlzLnNob3dBbGxHcm91cHMgPSAhdGhpcy5zaG93QWxsR3JvdXBzO1xuICB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgI0Q0QTAwNydcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+RXhwb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJyMzNDc5RTknXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0QWxsKClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Qcm9maWxlczwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwcm9maWxlIG9mIHZpc2libGVQcm9maWxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1sYWJlbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtpZF09XCIncHJvZmlsZS0nICsgaVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb2ZpbGUuc2VsZWN0ZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ3Byb2ZpbGUtJyArIGlcIiBjbGFzcz1cImNoZWNrYm94LWxhYmVsXCI+XG4gICAgICAgICAgICB7eyBwcm9maWxlLm5hbWUgfX1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tYWN0aW9uc1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZWRpdFwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICBzdHJva2U9XCIjMzQ3OUU5XCJcbiAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZWRpdFByb2ZpbGUocHJvZmlsZSlcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI0UyMDAwMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUHJvZmlsZShwcm9maWxlKVwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJwcm9maWxlcy5sZW5ndGggPiAzXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNob3dBbGxQcm9maWxlcygpXCJcbiAgICAgICAgY2xhc3M9XCJzaG93LW1vcmVcIlxuICAgICAgPlxuICAgICAgICA8c3Bhbj57eyBzaG93QWxsUHJvZmlsZXMgPyBcIlNob3cgbGVzc1wiIDogXCJTaG93IG1vcmVcIiB9fTwvc3Bhbj5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiY2hldnJvblwiXG4gICAgICAgICAgW3dpZHRoXT1cIjhcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiNlwiXG4gICAgICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAgICAgICBzdHJva2U9XCJibGFja1wiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICAgPGhyIGNsYXNzPVwiZGl2aWRlclwiIC8+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkdyb3VwPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwiZ3JleVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibmV3R3JvdXBGb3JtXCIgKG5nU3VibWl0KT1cImFkZEdyb3VwKClcIj5cbiAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkdyb3VwIG5hbWVcIlxuICAgICAgICAgIGJvcmRlcj1cIjFweCBzb2xpZCAjY2NjXCJcbiAgICAgICAgICBib3JkZXJSYWRpdXM9XCI1cHhcIlxuICAgICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGhlaWdodD1cIjIwcHhcIlxuICAgICAgICAgIHBkPVwiNHB4IDZweFwiXG4gICAgICAgICAgW3Nob3dCb3JkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW3Nob3dFcnJvck1lc3NhZ2VdPVwidHJ1ZVwiXG4gICAgICAgICAgW2Vycm9yUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgPC9mb3JtPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2aXNpYmxlR3JvdXBzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxhYmVsXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2lkXT1cIidncm91cC0nICsgaVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGxhYmVsIFtmb3JdPVwiJ2dyb3VwLScgKyBpXCIgY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWFjdGlvbnNcIiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ29wZXJhdGlvbidcIj5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImVkaXRcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NzlFOVwiXG4gICAgICAgICAgICBmaWxsPVwid2hpdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRPcGVyYXRpb24oaXRlbSlcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI0UyMDAwMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlT3BlcmF0aW9uKGl0ZW0pXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImdyb3VwSXRlbXMubGVuZ3RoID4gM1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTaG93QWxsR3JvdXBzKClcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHNob3dBbGxHcm91cHMgPyBcIlNob3cgbGVzc1wiIDogXCJTaG93IG1vcmVcIiB9fTwvc3Bhbj5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiY2hldnJvblwiXG4gICAgICAgICAgW3dpZHRoXT1cIjhcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiNlwiXG4gICAgICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAgICAgICBzdHJva2U9XCJibGFja1wiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uXCIgKGNsaWNrKT1cImFkZEdyb3VwKClcIj4rIEFkZDwvYnV0dG9uPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8aHIgY2xhc3M9XCJkaXZpZGVyXCIgLz5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+T3BlcmF0aW9uPC9oMz5cbiAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICBpY29uPVwiaW5mb1wiXG4gICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICBmaWxsPVwiZ3JleVwiXG4gICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiT3BlcmF0aW9uIG5hbWVcIlxuICAgICAgICBib3JkZXI9XCIxcHggc29saWQgI2NjY1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjVweFwiXG4gICAgICAgIHRleHRDb2xvcj1cImJsYWNrXCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgaGVpZ2h0PVwiMjBweFwiXG4gICAgICAgIHBkPVwiMnB4IDZweFwiXG4gICAgICAgIFtzaG93Qm9yZGVyXT1cInRydWVcIlxuICAgICAgICBbc2hvd0Vycm9yTWVzc2FnZV09XCJ0cnVlXCJcbiAgICAgICAgW2Vycm9yUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5uYW1lXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8ZGl2IGNsYXNzPVwib3BlcmF0aW9uLWdyaWRcIj5cbiAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICB3aWR0aD1cIic4cmVtJ1wiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZmllbGRcIlxuICAgICAgICAgIFtvcHRpb25zXT1cIm51bWVyaWNQcm9wZXJ0aWVzLmNvbmNhdChzdHJpbmdQcm9wZXJ0aWVzKVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdPcGVyYXRpb24uZmllbGQxXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkMUNoYW5nZSgpXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCInOHJlbSdcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IG9wZXJhdG9yXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVPcGVyYXRvcnNcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3T3BlcmF0aW9uLm9wZXJhdG9yXCJcbiAgICAgICAgPlxuICAgICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCInOHJlbSdcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGZpZWxkXCJcbiAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVGaWVsZHMyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld09wZXJhdGlvbi5maWVsZDJcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b25cIiAoY2xpY2spPVwiYWRkT3JVcGRhdGVPcGVyYXRpb24oKVwiPlxuICAgICAgICB7eyBpc0VkaXRpbmdPcGVyYXRpb24gPyBcIlVwZGF0ZVwiIDogXCIrIEFkZFwiIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJleHBvcnREYXRhKClcIj5FeHBvcnQ8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuIl19
@@ -1,20 +1,49 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
+ import { DataExportService } from './data-export.service';
3
4
  import { DataExportComponent } from './data-export.component';
4
5
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
6
+ import { SvgModule } from '../svg/svg.module';
7
+ import { CardModule } from '../card/card.module';
8
+ import { DropDownModule } from '../drop-down/drop-down.module';
9
+ import { TooltipModule } from '../tooltip/tooltip.module';
10
+ import { VerbenaInputModule } from '../../Verbena-input/verbena-input.module';
5
11
  import * as i0 from "@angular/core";
6
12
  export class DataExportModule {
7
13
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: DataExportModule, declarations: [DataExportComponent], imports: [CommonModule, FormsModule, ReactiveFormsModule], exports: [DataExportComponent] });
9
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportModule, imports: [CommonModule, FormsModule, ReactiveFormsModule] });
14
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: DataExportModule, declarations: [DataExportComponent], imports: [CommonModule,
15
+ FormsModule,
16
+ ReactiveFormsModule,
17
+ SvgModule,
18
+ CardModule,
19
+ DropDownModule,
20
+ TooltipModule,
21
+ VerbenaInputModule], exports: [DataExportComponent] });
22
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportModule, providers: [DataExportService], imports: [CommonModule,
23
+ FormsModule,
24
+ ReactiveFormsModule,
25
+ SvgModule,
26
+ CardModule,
27
+ DropDownModule,
28
+ TooltipModule,
29
+ VerbenaInputModule] });
10
30
  }
11
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportModule, decorators: [{
12
32
  type: NgModule,
13
33
  args: [{
14
34
  declarations: [DataExportComponent],
15
- imports: [CommonModule, FormsModule, ReactiveFormsModule],
16
- providers: [],
35
+ imports: [
36
+ CommonModule,
37
+ FormsModule,
38
+ ReactiveFormsModule,
39
+ SvgModule,
40
+ CardModule,
41
+ DropDownModule,
42
+ TooltipModule,
43
+ VerbenaInputModule,
44
+ ],
45
+ providers: [DataExportService],
17
46
  exports: [DataExportComponent],
18
47
  }]
19
48
  }] });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVFsRSxNQUFNLE9BQU8sZ0JBQWdCO3VHQUFoQixnQkFBZ0I7d0dBQWhCLGdCQUFnQixpQkFMWixtQkFBbUIsYUFDeEIsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsYUFFOUMsbUJBQW1CO3dHQUVsQixnQkFBZ0IsWUFKakIsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUI7OzJGQUk3QyxnQkFBZ0I7a0JBTjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUM7b0JBQ3pELFNBQVMsRUFBRSxFQUFFO29CQUNiLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0YUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuL2RhdGEtZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YUV4cG9ydENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS1leHBvcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtEYXRhRXhwb3J0Q29tcG9uZW50XSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxuICBwcm92aWRlcnM6IFtdLFxuICBleHBvcnRzOiBbRGF0YUV4cG9ydENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFFeHBvcnRNb2R1bGUge31cbiJdfQ==
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFpQjlFLE1BQU0sT0FBTyxnQkFBZ0I7dUdBQWhCLGdCQUFnQjt3R0FBaEIsZ0JBQWdCLGlCQWRaLG1CQUFtQixhQUVoQyxZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixTQUFTO1lBQ1QsVUFBVTtZQUNWLGNBQWM7WUFDZCxhQUFhO1lBQ2Isa0JBQWtCLGFBR1YsbUJBQW1CO3dHQUVsQixnQkFBZ0IsYUFIaEIsQ0FBQyxpQkFBaUIsQ0FBQyxZQVQ1QixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixTQUFTO1lBQ1QsVUFBVTtZQUNWLGNBQWM7WUFDZCxhQUFhO1lBQ2Isa0JBQWtCOzsyRkFLVCxnQkFBZ0I7a0JBZjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxhQUFhO3dCQUNiLGtCQUFrQjtxQkFDbkI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzlCLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRGF0YUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuL2RhdGEtZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YUV4cG9ydENvbXBvbmVudCB9IGZyb20gJy4vZGF0YS1leHBvcnQuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ZnTW9kdWxlIH0gZnJvbSAnLi4vc3ZnL3N2Zy5tb2R1bGUnO1xuaW1wb3J0IHsgQ2FyZE1vZHVsZSB9IGZyb20gJy4uL2NhcmQvY2FyZC5tb2R1bGUnO1xuaW1wb3J0IHsgRHJvcERvd25Nb2R1bGUgfSBmcm9tICcuLi9kcm9wLWRvd24vZHJvcC1kb3duLm1vZHVsZSc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLm1vZHVsZSc7XG5pbXBvcnQgeyBWZXJiZW5hSW5wdXRNb2R1bGUgfSBmcm9tICcuLi8uLi9WZXJiZW5hLWlucHV0L3ZlcmJlbmEtaW5wdXQubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRGF0YUV4cG9ydENvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBTdmdNb2R1bGUsXG4gICAgQ2FyZE1vZHVsZSxcbiAgICBEcm9wRG93bk1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFZlcmJlbmFJbnB1dE1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbRGF0YUV4cG9ydFNlcnZpY2VdLFxuICBleHBvcnRzOiBbRGF0YUV4cG9ydENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFFeHBvcnRNb2R1bGUge31cbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
+ import { Operators, } from './data-export.types';
2
3
  import * as i0 from "@angular/core";
3
4
  export class DataExportService {
4
5
  profiles = [];
@@ -107,14 +108,20 @@ export class DataExportService {
107
108
  const value1 = Number(item[operation.field1]);
108
109
  const value2 = Number(item[operation.field2]);
109
110
  switch (operation.operator) {
110
- case 'add':
111
+ case Operators.add:
111
112
  return value1 + value2;
112
- case 'subtract':
113
+ case Operators.subtract:
113
114
  return value1 - value2;
114
- case 'multiply':
115
+ case Operators.multiply:
115
116
  return value1 * value2;
116
- case 'divide':
117
+ case Operators.divide:
117
118
  return value2 !== 0 ? value1 / value2 : NaN;
119
+ case Operators.concatenateSpace:
120
+ return `${value1} ${value2}`;
121
+ case Operators.concatenateCommaSpace:
122
+ return `${value1}, ${value2}`;
123
+ case Operators.concatenateComma:
124
+ return `${value1},${value2}`;
118
125
  default:
119
126
  return NaN;
120
127
  }
@@ -125,4 +132,4 @@ export class DataExportService {
125
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DataExportService, decorators: [{
126
133
  type: Injectable
127
134
  }], ctorParameters: () => [] });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQvZGF0YS1leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVMzQyxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLFFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBQy9CLFVBQVUsR0FBZ0IsRUFBRSxDQUFDO0lBQzdCLGNBQWMsR0FBYSxFQUFFLENBQUM7SUFFdEM7UUFDRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZDtnQkFDRSxFQUFFLEVBQUUsU0FBUztnQkFDYixJQUFJLEVBQUUsS0FBSztnQkFDWCxLQUFLLEVBQUUsRUFBRTthQUNWO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsT0FBc0I7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFVLEVBQUUsY0FBNkI7UUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gs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TUFBTSxHQUFHLE1BQU0sQ0FBRSxJQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkQsUUFBUSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsS0FBSyxLQUFLO2dCQUNSLE9BQU8sTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN6QixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLEtBQUssVUFBVTtnQkFDYixPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDekIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzlDO2dCQUNFLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7dUdBN0lVLGlCQUFpQjsyR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRXhwb3J0UHJvZmlsZSxcbiAgT3BlcmF0aW9uLFxuICBFeHBvcnRJdGVtLFxuICBFeHBvcnRJdGVtVHlwZSxcbn0gZnJvbSAnLi9kYXRhLWV4cG9ydC50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRXhwb3J0U2VydmljZSB7XG4gIHByaXZhdGUgcHJvZmlsZXM6IEV4cG9ydFByb2ZpbGVbXSA9IFtdO1xuICBwcml2YXRlIG9wZXJhdGlvbnM6IE9wZXJhdGlvbltdID0gW107XG4gIHByaXZhdGUgYmFzZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdFByb2ZpbGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURlZmF1bHRQcm9maWxlKCkge1xuICAgIHRoaXMucHJvZmlsZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGVmYXVsdCcsXG4gICAgICAgIG5hbWU6ICdBbGwnLFxuICAgICAgICBpdGVtczogW10sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBhZGRQcm9maWxlKHByb2ZpbGU6IEV4cG9ydFByb2ZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLnByb2ZpbGVzLnB1c2gocHJvZmlsZSk7XG4gIH1cblxuICBnZXRQcm9maWxlcygpOiBFeHBvcnRQcm9maWxlW10ge1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGVzO1xuICB9XG5cbiAgdXBkYXRlUHJvZmlsZShpZDogc3RyaW5nLCB1cGRhdGVkUHJvZmlsZTogRXhwb3J0UHJvZmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9maWxlcy5maW5kSW5kZXgoKHApID0+IHAuaWQgPT09IGlkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLnByb2ZpbGVzW2luZGV4XSA9IHVwZGF0ZWRQcm9maWxlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzLmZpbHRlcigocCkgPT4gcC5pZCAhPT0gaWQpO1xuICB9XG5cbiAgYWRkT3BlcmF0aW9uKG9wZXJhdGlvbjogT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZURlZmF1bHRQcm9maWxlKCk7XG4gIH1cblxuICBnZXRPcGVyYXRpb25zKCk6IE9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25zO1xuICB9XG5cbiAgdXBkYXRlT3BlcmF0aW9uKGlkOiBzdHJpbmcsIHVwZGF0ZWRPcGVyYXRpb246IE9wZXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcGVyYXRpb25zLmZpbmRJbmRleCgobykgPT4gby5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uc1tpbmRleF0gPSB1cGRhdGVkT3BlcmF0aW9uO1xuICAgICAgdGhpcy51cGRhdGVEZWZhdWx0UHJvZmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU9wZXJhdGlvbihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gdGhpcy5vcGVyYXRpb25zLmZpbHRlcigobykgPT4gby5pZCAhPT0gaWQpO1xuICAgIHRoaXMudXBkYXRlRGVmYXVsdFByb2ZpbGUoKTtcbiAgICAvLyBSZW1vdmUgb3BlcmF0aW9uIGZyb20gYWxsIHByb2ZpbGVzXG4gICAgdGhpcy5wcm9maWxlcy5mb3JFYWNoKChwcm9maWxlKSA9PiB7XG4gICAgICBwcm9maWxlLml0ZW1zID0gcHJvZmlsZS5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IFtdO1xuICAgIHRoaXMuYmFzZVByb3BlcnRpZXMgPSBbXTtcbiAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0UHJvZmlsZSgpO1xuICB9XG5cbiAgZ2V0QWxsSXRlbXMoKTogRXhwb3J0SXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5iYXNlUHJvcGVydGllcy5tYXAoKHByb3ApID0+ICh7XG4gICAgICAgIGlkOiBwcm9wLFxuICAgICAgICBuYW1lOiBwcm9wLFxuICAgICAgICB0eXBlOiAncHJvcGVydHknIGFzIEV4cG9ydEl0ZW1UeXBlLFxuICAgICAgfSkpLFxuICAgICAgLi4udGhpcy5vcGVyYXRpb25zLm1hcCgob3ApID0+ICh7XG4gICAgICAgIGlkOiBvcC5pZCxcbiAgICAgICAgbmFtZTogb3AubmFtZSxcbiAgICAgICAgdHlwZTogJ29wZXJhdGlvbicgYXMgRXhwb3J0SXRlbVR5cGUsXG4gICAgICB9KSksXG4gICAgXTtcbiAgfVxuXG4gIGdldEJhc2VQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlUHJvcGVydGllcztcbiAgfVxuXG4gIHNldEJhc2VQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlUHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy51cGRhdGVEZWZhdWx0UHJvZmlsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEZWZhdWx0UHJvZmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2ZpbGVzWzBdLml0ZW1zID0gdGhpcy5nZXRBbGxJdGVtcygpO1xuICB9XG5cbiAgZXhwb3J0RGF0YTxUPihcbiAgICBkYXRhOiBUW10sXG4gICAgc2VsZWN0ZWRQcm9maWxlczogRXhwb3J0UHJvZmlsZVtdXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT5bXSB7XG4gICAgY29uc3QgdW5pcXVlSXRlbXMgPSBuZXcgU2V0PEV4cG9ydEl0ZW0+KCk7XG4gICAgc2VsZWN0ZWRQcm9maWxlcy5mb3JFYWNoKChwcm9maWxlKSA9PiB7XG4gICAgICBwcm9maWxlLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHVuaXF1ZUl0ZW1zLmFkZChpdGVtKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkSXRlbTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgdW5pcXVlSXRlbXMuZm9yRWFjaCgoZXhwb3J0SXRlbSkgPT4ge1xuICAgICAgICBpZiAoZXhwb3J0SXRlbS50eXBlID09PSAncHJvcGVydHknKSB7XG4gICAgICAgICAgZXhwb3J0ZWRJdGVtW2V4cG9ydEl0ZW0uaWRdID0gKGl0ZW0gYXMgYW55KVtleHBvcnRJdGVtLmlkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLm9wZXJhdGlvbnMuZmluZCgobykgPT4gby5pZCA9PT0gZXhwb3J0SXRlbS5pZCk7XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbikge1xuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtW2V4cG9ydEl0ZW0uaWRdID0gdGhpcy5jYWxjdWxhdGVPcGVyYXRpb24oXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIG9wZXJhdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGV4cG9ydGVkSXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlT3BlcmF0aW9uPFQ+KGl0ZW06IFQsIG9wZXJhdGlvbjogT3BlcmF0aW9uKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZTEgPSBOdW1iZXIoKGl0ZW0gYXMgYW55KVtvcGVyYXRpb24uZmllbGQxXSk7XG4gICAgY29uc3QgdmFsdWUyID0gTnVtYmVyKChpdGVtIGFzIGFueSlbb3BlcmF0aW9uLmZpZWxkMl0pO1xuICAgIHN3aXRjaCAob3BlcmF0aW9uLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICdhZGQnOlxuICAgICAgICByZXR1cm4gdmFsdWUxICsgdmFsdWUyO1xuICAgICAgY2FzZSAnc3VidHJhY3QnOlxuICAgICAgICByZXR1cm4gdmFsdWUxIC0gdmFsdWUyO1xuICAgICAgY2FzZSAnbXVsdGlwbHknOlxuICAgICAgICByZXR1cm4gdmFsdWUxICogdmFsdWUyO1xuICAgICAgY2FzZSAnZGl2aWRlJzpcbiAgICAgICAgcmV0dXJuIHZhbHVlMiAhPT0gMCA/IHZhbHVlMSAvIHZhbHVlMiA6IE5hTjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuICB9XG59XG4iXX0=
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1leHBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQvZGF0YS1leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFLTCxTQUFTLEdBQ1YsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHN0IsTUFBTSxPQUFPLGlCQUFpQjtJQUNwQixRQUFRLEdBQW9CLEVBQUUsQ0FBQztJQUMvQixVQUFVLEdBQWdCLEVBQUUsQ0FBQztJQUM3QixjQUFjLEdBQWEsRUFBRSxDQUFDO0lBRXRDO1FBQ0UsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2Q7Z0JBQ0UsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsS0FBSyxFQUFFLEVBQUU7YUFDVjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQXNCO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBVSxFQUFFLGNBQTZCO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FB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QUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFFLElBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN2RCxRQUFRLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQixLQUFLLFNBQVMsQ0FBQyxHQUFHO2dCQUNoQixPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDekIsS0FBSyxTQUFTLENBQUMsUUFBUTtnQkFDckIsT0FBTyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLEtBQUssU0FBUyxDQUFDLFFBQVE7Z0JBQ3JCLE9BQU8sTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN6QixLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNuQixPQUFPLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM5QyxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0I7Z0JBQzdCLE9BQU8sR0FBRyxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDL0IsS0FBSyxTQUFTLENBQUMscUJBQXFCO2dCQUNsQyxPQUFPLEdBQUcsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLEtBQUssU0FBUyxDQUFDLGdCQUFnQjtnQkFDN0IsT0FBTyxHQUFHLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMvQjtnQkFDRSxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO3VHQXRKVSxpQkFBaUI7MkdBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEV4cG9ydFByb2ZpbGUsXG4gIE9wZXJhdGlvbixcbiAgRXhwb3J0SXRlbSxcbiAgRXhwb3J0SXRlbVR5cGUsXG4gIE9wZXJhdG9ycyxcbn0gZnJvbSAnLi9kYXRhLWV4cG9ydC50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRXhwb3J0U2VydmljZSB7XG4gIHByaXZhdGUgcHJvZmlsZXM6IEV4cG9ydFByb2ZpbGVbXSA9IFtdO1xuICBwcml2YXRlIG9wZXJhdGlvbnM6IE9wZXJhdGlvbltdID0gW107XG4gIHByaXZhdGUgYmFzZVByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdFByb2ZpbGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURlZmF1bHRQcm9maWxlKCkge1xuICAgIHRoaXMucHJvZmlsZXMgPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnZGVmYXVsdCcsXG4gICAgICAgIG5hbWU6ICdBbGwnLFxuICAgICAgICBpdGVtczogW10sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBhZGRQcm9maWxlKHByb2ZpbGU6IEV4cG9ydFByb2ZpbGUpOiB2b2lkIHtcbiAgICB0aGlzLnByb2ZpbGVzLnB1c2gocHJvZmlsZSk7XG4gIH1cblxuICBnZXRQcm9maWxlcygpOiBFeHBvcnRQcm9maWxlW10ge1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGVzO1xuICB9XG5cbiAgdXBkYXRlUHJvZmlsZShpZDogc3RyaW5nLCB1cGRhdGVkUHJvZmlsZTogRXhwb3J0UHJvZmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9maWxlcy5maW5kSW5kZXgoKHApID0+IHAuaWQgPT09IGlkKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLnByb2ZpbGVzW2luZGV4XSA9IHVwZGF0ZWRQcm9maWxlO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVByb2ZpbGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvZmlsZXMgPSB0aGlzLnByb2ZpbGVzLmZpbHRlcigocCkgPT4gcC5pZCAhPT0gaWQpO1xuICB9XG5cbiAgYWRkT3BlcmF0aW9uKG9wZXJhdGlvbjogT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKTtcbiAgICB0aGlzLnVwZGF0ZURlZmF1bHRQcm9maWxlKCk7XG4gIH1cblxuICBnZXRPcGVyYXRpb25zKCk6IE9wZXJhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRpb25zO1xuICB9XG5cbiAgdXBkYXRlT3BlcmF0aW9uKGlkOiBzdHJpbmcsIHVwZGF0ZWRPcGVyYXRpb246IE9wZXJhdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcGVyYXRpb25zLmZpbmRJbmRleCgobykgPT4gby5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMub3BlcmF0aW9uc1tpbmRleF0gPSB1cGRhdGVkT3BlcmF0aW9uO1xuICAgICAgdGhpcy51cGRhdGVEZWZhdWx0UHJvZmlsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZU9wZXJhdGlvbihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5vcGVyYXRpb25zID0gdGhpcy5vcGVyYXRpb25zLmZpbHRlcigobykgPT4gby5pZCAhPT0gaWQpO1xuICAgIHRoaXMudXBkYXRlRGVmYXVsdFByb2ZpbGUoKTtcbiAgICAvLyBSZW1vdmUgb3BlcmF0aW9uIGZyb20gYWxsIHByb2ZpbGVzXG4gICAgdGhpcy5wcm9maWxlcy5mb3JFYWNoKChwcm9maWxlKSA9PiB7XG4gICAgICBwcm9maWxlLml0ZW1zID0gcHJvZmlsZS5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgIT09IGlkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMub3BlcmF0aW9ucyA9IFtdO1xuICAgIHRoaXMuYmFzZVByb3BlcnRpZXMgPSBbXTtcbiAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0UHJvZmlsZSgpO1xuICB9XG5cbiAgZ2V0QWxsSXRlbXMoKTogRXhwb3J0SXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5iYXNlUHJvcGVydGllcy5tYXAoKHByb3ApID0+ICh7XG4gICAgICAgIGlkOiBwcm9wLFxuICAgICAgICBuYW1lOiBwcm9wLFxuICAgICAgICB0eXBlOiAncHJvcGVydHknIGFzIEV4cG9ydEl0ZW1UeXBlLFxuICAgICAgfSkpLFxuICAgICAgLi4udGhpcy5vcGVyYXRpb25zLm1hcCgob3ApID0+ICh7XG4gICAgICAgIGlkOiBvcC5pZCxcbiAgICAgICAgbmFtZTogb3AubmFtZSxcbiAgICAgICAgdHlwZTogJ29wZXJhdGlvbicgYXMgRXhwb3J0SXRlbVR5cGUsXG4gICAgICB9KSksXG4gICAgXTtcbiAgfVxuXG4gIGdldEJhc2VQcm9wZXJ0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlUHJvcGVydGllcztcbiAgfVxuXG4gIHNldEJhc2VQcm9wZXJ0aWVzKHByb3BlcnRpZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5iYXNlUHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgdGhpcy51cGRhdGVEZWZhdWx0UHJvZmlsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEZWZhdWx0UHJvZmlsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2ZpbGVzWzBdLml0ZW1zID0gdGhpcy5nZXRBbGxJdGVtcygpO1xuICB9XG5cbiAgZXhwb3J0RGF0YTxUPihcbiAgICBkYXRhOiBUW10sXG4gICAgc2VsZWN0ZWRQcm9maWxlczogRXhwb3J0UHJvZmlsZVtdXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT5bXSB7XG4gICAgY29uc3QgdW5pcXVlSXRlbXMgPSBuZXcgU2V0PEV4cG9ydEl0ZW0+KCk7XG4gICAgc2VsZWN0ZWRQcm9maWxlcy5mb3JFYWNoKChwcm9maWxlKSA9PiB7XG4gICAgICBwcm9maWxlLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHVuaXF1ZUl0ZW1zLmFkZChpdGVtKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkSXRlbTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgdW5pcXVlSXRlbXMuZm9yRWFjaCgoZXhwb3J0SXRlbSkgPT4ge1xuICAgICAgICBpZiAoZXhwb3J0SXRlbS50eXBlID09PSAncHJvcGVydHknKSB7XG4gICAgICAgICAgZXhwb3J0ZWRJdGVtW2V4cG9ydEl0ZW0uaWRdID0gKGl0ZW0gYXMgYW55KVtleHBvcnRJdGVtLmlkXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLm9wZXJhdGlvbnMuZmluZCgobykgPT4gby5pZCA9PT0gZXhwb3J0SXRlbS5pZCk7XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbikge1xuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtW2V4cG9ydEl0ZW0uaWRdID0gdGhpcy5jYWxjdWxhdGVPcGVyYXRpb24oXG4gICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgIG9wZXJhdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGV4cG9ydGVkSXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlT3BlcmF0aW9uPFQ+KFxuICAgIGl0ZW06IFQsXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb25cbiAgKTogbnVtYmVyIHwgc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZTEgPSBOdW1iZXIoKGl0ZW0gYXMgYW55KVtvcGVyYXRpb24uZmllbGQxXSk7XG4gICAgY29uc3QgdmFsdWUyID0gTnVtYmVyKChpdGVtIGFzIGFueSlbb3BlcmF0aW9uLmZpZWxkMl0pO1xuICAgIHN3aXRjaCAob3BlcmF0aW9uLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIE9wZXJhdG9ycy5hZGQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTEgKyB2YWx1ZTI7XG4gICAgICBjYXNlIE9wZXJhdG9ycy5zdWJ0cmFjdDpcbiAgICAgICAgcmV0dXJuIHZhbHVlMSAtIHZhbHVlMjtcbiAgICAgIGNhc2UgT3BlcmF0b3JzLm11bHRpcGx5OlxuICAgICAgICByZXR1cm4gdmFsdWUxICogdmFsdWUyO1xuICAgICAgY2FzZSBPcGVyYXRvcnMuZGl2aWRlOlxuICAgICAgICByZXR1cm4gdmFsdWUyICE9PSAwID8gdmFsdWUxIC8gdmFsdWUyIDogTmFOO1xuICAgICAgY2FzZSBPcGVyYXRvcnMuY29uY2F0ZW5hdGVTcGFjZTpcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlMX0gJHt2YWx1ZTJ9YDtcbiAgICAgIGNhc2UgT3BlcmF0b3JzLmNvbmNhdGVuYXRlQ29tbWFTcGFjZTpcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlMX0sICR7dmFsdWUyfWA7XG4gICAgICBjYXNlIE9wZXJhdG9ycy5jb25jYXRlbmF0ZUNvbW1hOlxuICAgICAgICByZXR1cm4gYCR7dmFsdWUxfSwke3ZhbHVlMn1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==