@tetacom/ng-components 1.4.5 → 1.4.8

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.
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Optional, Output, QueryList, } from '@angular/core';
1
+ import { Component, computed, inject, input, output, } from '@angular/core';
2
2
  import { ControlContainer, FormGroup, NgForm, FormsModule, ReactiveFormsModule } from '@angular/forms';
3
3
  import { TranslocoService } from '@ngneat/transloco';
4
4
  import { takeWhile } from 'rxjs/operators';
@@ -6,7 +6,6 @@ import { Align } from '../../../../common/enum/align.enum';
6
6
  import { boolOrFuncCallback } from '../../../../util/bool-or-func';
7
7
  import { FormsUtil } from '../../../../util/forms-util';
8
8
  import { FilterType } from '../../../filter/enum/filter-type.enum';
9
- import { TableColumn } from '../../../table/contract/table-column';
10
9
  import { TextFieldComponent } from '../../../input/text-field/text-field.component';
11
10
  import { ToggleComponent } from '../../../toggle/toggle/toggle.component';
12
11
  import { DatePickerComponent } from '../../../date-picker/date-picker/date-picker.component';
@@ -15,12 +14,8 @@ import { NgTemplateOutlet } from '@angular/common';
15
14
  import { InputComponent } from '../../../input/input/input.component';
16
15
  import { DisableControlDirective } from '../../../../directive/disable-control/disable-control.directive';
17
16
  import * as i0 from "@angular/core";
18
- import * as i1 from "@ngneat/transloco";
19
- import * as i2 from "@angular/forms";
17
+ import * as i1 from "@angular/forms";
20
18
  export class PropertyGridItemComponent {
21
- get template() {
22
- return this.itemTemplates.find((item) => item.name === this.column.name);
23
- }
24
19
  get formGroup() {
25
20
  if (this._formGroup instanceof FormGroup) {
26
21
  return this._formGroup;
@@ -30,30 +25,40 @@ export class PropertyGridItemComponent {
30
25
  }
31
26
  return null;
32
27
  }
33
- get editable() {
34
- return boolOrFuncCallback(this.column.editable)({
35
- column: this.column,
36
- row: this.formGroup?.getRawValue(),
28
+ constructor() {
29
+ this.transloco = inject(TranslocoService);
30
+ this._formGroup = inject(ControlContainer);
31
+ this.column = input();
32
+ this.hideNonEditable = input();
33
+ this.dict = input();
34
+ this.decimalPart = input();
35
+ this.item = input();
36
+ this.itemTemplates = input();
37
+ this.template = computed(() => {
38
+ return this.itemTemplates().find((item) => item.name === this.column().name);
37
39
  });
38
- }
39
- get caption() {
40
- if (this.column.filterType === FilterType.boolean) {
41
- return '';
42
- }
43
- return `${this.column.caption}${this.column.unit ? `, ${this.column.unit}` : ''}`;
44
- }
45
- constructor(_transloco, _formGroup) {
46
- this._transloco = _transloco;
47
- this._formGroup = _formGroup;
48
- this.controlValueChange = new EventEmitter();
40
+ this.editable = computed(() => {
41
+ return boolOrFuncCallback(this.column().editable)({
42
+ column: this.column(),
43
+ row: this.formGroup?.getRawValue(),
44
+ });
45
+ });
46
+ this.horizontal = input();
47
+ this.controlValueChange = output();
49
48
  this.align = Align;
50
49
  this.filterTypeEnum = FilterType;
50
+ this.caption = computed(() => {
51
+ if (this.column().filterType === FilterType.boolean) {
52
+ return '';
53
+ }
54
+ return `${this.column().caption}${this.column().unit ? `, ${this.column().unit}` : ''}`;
55
+ });
51
56
  this._alive = true;
52
57
  }
53
58
  getDict() {
54
- const dict = this.dict ? this.dict[this.column.name] : [];
55
- if (this.column.parentName?.length > 0) {
56
- return dict?.filter((dictItem) => dictItem.parentId === this.formGroup?.getRawValue()[this.column.parentName]);
59
+ const dict = this.dict() ? this.dict()[this.column().name] : [];
60
+ if (this.column().parentName?.length > 0) {
61
+ return dict?.filter((dictItem) => dictItem.parentId === this.formGroup?.getRawValue()[this.column().parentName]);
57
62
  }
58
63
  return dict;
59
64
  }
@@ -63,20 +68,20 @@ export class PropertyGridItemComponent {
63
68
  getError(column) {
64
69
  const control = this.formGroup?.get(column.name);
65
70
  if (control?.hasError('required')) {
66
- return this._transloco.translate('errors.field_is_required');
71
+ return this.transloco.translate('errors.field_is_required');
67
72
  }
68
73
  if (control?.hasError('min')) {
69
- return this._transloco.translate('errors.min_value', {
74
+ return this.transloco.translate('errors.min_value', {
70
75
  value: column.minValue,
71
76
  });
72
77
  }
73
78
  if (control?.hasError('max')) {
74
- return this._transloco.translate('errors.max_value', {
79
+ return this.transloco.translate('errors.max_value', {
75
80
  value: column.maxValue,
76
81
  });
77
82
  }
78
83
  if (control?.hasError('maxlength')) {
79
- return this._transloco.translate('errors.max_length', {
84
+ return this.transloco.translate('errors.max_length', {
80
85
  value: column.maxLength,
81
86
  });
82
87
  }
@@ -87,21 +92,21 @@ export class PropertyGridItemComponent {
87
92
  this._formSub?.unsubscribe();
88
93
  }
89
94
  ngOnChanges(changes) {
90
- if (this.column && this.item) {
91
- this.formGroup.registerControl(this.column.name, FormsUtil.initControlFromColumn(this.column, this.item));
95
+ if (this.column() && this.item()) {
96
+ this.formGroup.setControl(this.column().name, FormsUtil.initControlFromColumn(this.column(), this.item()));
92
97
  this._formSub?.unsubscribe();
93
- this._formSub = this.formGroup?.controls[this.column.name]?.valueChanges
98
+ this._formSub = this.formGroup?.controls[this.column().name]?.valueChanges
94
99
  .pipe(takeWhile(() => this._alive))
95
100
  .subscribe((_) => {
96
101
  this.controlValueChange.emit({
97
102
  id: _,
98
- name: this.column.name,
103
+ name: this.column().name,
99
104
  });
100
105
  });
101
106
  }
102
107
  }
103
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridItemComponent, deps: [{ token: i1.TranslocoService }, { token: i2.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
104
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: PropertyGridItemComponent, isStandalone: true, selector: "teta-property-grid-item", inputs: { column: "column", hideNonEditable: "hideNonEditable", dict: "dict", decimalPart: "decimalPart", item: "item", itemTemplates: "itemTemplates", horizontal: "horizontal" }, outputs: { controlValueChange: "controlValueChange" }, usesOnChanges: true, ngImport: i0, template: "@if (editable || !hideNonEditable) {\n<teta-input\n [label]=\"caption\"\n [hint]=\"column.hint\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n [required]=\"column.required\"\n>\n @if (template) {\n <ng-container\n *ngTemplateOutlet=\"template.template; context: { $implicit: formGroup?.get(column.name) }\"\n ></ng-container>\n } @else { @if (formGroup?.get(column.name)) { @switch (column.filterType) { @case (filterTypeEnum.list) {\n <teta-select\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"\n ></teta-select>\n } @case (filterTypeEnum.date) {\n <teta-date-picker\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [tetaDisableControl]=\"!editable\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n ></teta-date-picker>\n } @case (filterTypeEnum.boolean) {\n <teta-toggle [tetaDisableControl]=\"!editable\" [formControlName]=\"column.name\">\n {{ column.caption }}\n </teta-toggle>\n } @default {\n <teta-text-field\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable\"\n [decimalPart]=\"column.filterType === filterTypeEnum.number ? decimalPart : null\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n ></teta-text-field>\n } } } }\n <ng-template #default>\n @if (formGroup?.get(column.name)) { @switch (column.filterType) { @case (filterTypeEnum.list) {\n <teta-select\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"\n ></teta-select>\n } @case (filterTypeEnum.date) {\n <teta-date-picker\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [tetaDisableControl]=\"!editable\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n ></teta-date-picker>\n } @case (filterTypeEnum.boolean) {\n <teta-toggle [tetaDisableControl]=\"!editable\" [formControlName]=\"column.name\">\n {{ column.caption }}\n </teta-toggle>\n } @default {\n <teta-text-field\n class=\"row_auto\"\n [decimalPart]=\"column.filterType === filterTypeEnum.number ? decimalPart : null\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [tetaDisableControl]=\"!editable\"\n [formControlName]=\"column.name\"\n ></teta-text-field>\n } } }\n </ng-template>\n @if (controlIsInvalid(column.name)) {\n <div ngProjectAs=\"message\" class=\"color-red-50\">\n {{ getError(column) }}\n </div>\n }\n</teta-input>\n}\n", styles: [""], dependencies: [{ kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "hint", "viewType", "horizontal", "required"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SelectComponent, selector: "teta-select", inputs: ["multiple", "options", "invalid", "align", "verticalAlign", "autoClose", "autoCloseIgnore", "disabled", "itemSize", "virtual", "icon", "placeholder", "appendToBody", "allowNull", "viewType", "notFoundText", "valueRef", "textRef", "searchRef"] }, { kind: "component", type: DatePickerComponent, selector: "teta-date-picker", inputs: ["date", "showTime", "minDate", "maxDate", "invalid", "disabled", "align", "verticalAlign", "viewType", "appendToBody", "backdrop", "allowNull", "firstDayOfWeek", "disabledDates", "disabledPeriods", "disabledDays", "minYearDate", "maxYearDate"], outputs: ["selectDate"] }, { kind: "component", type: ToggleComponent, selector: "teta-toggle", inputs: ["palette", "noLabel", "disabled"] }, { kind: "component", type: TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: DisableControlDirective, selector: "[tetaDisableControl]", inputs: ["tetaDisableControl"] }], viewProviders: [FormsUtil.formProvider] }); }
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: PropertyGridItemComponent, isStandalone: true, selector: "teta-property-grid-item", inputs: { column: { classPropertyName: "column", publicName: "column", isSignal: true, isRequired: false, transformFunction: null }, hideNonEditable: { classPropertyName: "hideNonEditable", publicName: "hideNonEditable", isSignal: true, isRequired: false, transformFunction: null }, dict: { classPropertyName: "dict", publicName: "dict", isSignal: true, isRequired: false, transformFunction: null }, decimalPart: { classPropertyName: "decimalPart", publicName: "decimalPart", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, itemTemplates: { classPropertyName: "itemTemplates", publicName: "itemTemplates", isSignal: true, isRequired: false, transformFunction: null }, horizontal: { classPropertyName: "horizontal", publicName: "horizontal", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { controlValueChange: "controlValueChange" }, usesOnChanges: true, ngImport: i0, template: "@if (editable() || !hideNonEditable()) {\n <teta-input\n [label]=\"caption()\"\n [hint]=\"column().hint\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal()\"\n [required]=\"column().required\">\n @if (template()) {\n <ng-container\n *ngTemplateOutlet=\"template().template; context: { $implicit: formGroup?.get(column().name) }\"></ng-container>\n } @else {\n @if (formGroup?.get(column().name)) {\n {{column().filterType}} -- {{ filterTypeEnum.list}}\n @switch (column().filterType) {\n @case (filterTypeEnum.list) {\n <teta-select\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable()\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column().required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column().name)\"\n [formControlName]=\"column().name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n }\n @case (filterTypeEnum.date) {\n <teta-date-picker\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [tetaDisableControl]=\"!editable()\"\n [invalid]=\"controlIsInvalid(column().name)\"\n [formControlName]=\"column().name\"></teta-date-picker>\n }\n @case (filterTypeEnum.boolean) {\n <teta-toggle [tetaDisableControl]=\"!editable()\" [formControlName]=\"column().name\">\n {{ column().caption }}\n </teta-toggle>\n }\n @default {\n <teta-text-field\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable()\"\n [decimalPart]=\"column().filterType === filterTypeEnum.number ? decimalPart() : null\"\n [onlyNumber]=\"column().filterType === filterTypeEnum.number\"\n [placeholder]=\"column().caption\"\n [invalid]=\"controlIsInvalid(column().name)\"\n [formControlName]=\"column().name\"\n ></teta-text-field>\n }\n }\n }\n }\n @if (controlIsInvalid(column().name)) {\n <div ngProjectAs=\"message\" class=\"color-red-50\">\n {{ getError(column()) }}\n </div>\n }\n </teta-input>\n}\n", styles: [""], dependencies: [{ kind: "component", type: InputComponent, selector: "teta-input", inputs: ["label", "hint", "viewType", "horizontal", "required"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SelectComponent, selector: "teta-select", inputs: ["multiple", "options", "invalid", "align", "verticalAlign", "autoClose", "autoCloseIgnore", "disabled", "itemSize", "virtual", "icon", "placeholder", "appendToBody", "allowNull", "viewType", "notFoundText", "valueRef", "textRef", "searchRef"] }, { kind: "component", type: DatePickerComponent, selector: "teta-date-picker", inputs: ["date", "showTime", "minDate", "maxDate", "invalid", "disabled", "align", "verticalAlign", "viewType", "appendToBody", "backdrop", "allowNull", "firstDayOfWeek", "disabledDates", "disabledPeriods", "disabledDays", "minYearDate", "maxYearDate"], outputs: ["selectDate"] }, { kind: "component", type: ToggleComponent, selector: "teta-toggle", inputs: ["palette", "noLabel", "disabled"] }, { kind: "component", type: TextFieldComponent, selector: "teta-text-field", inputs: ["placeholder", "leftIconName", "disabled", "onlyNumber", "decimalPart", "invalid"] }, { kind: "directive", type: DisableControlDirective, selector: "[tetaDisableControl]", inputs: ["tetaDisableControl"] }], viewProviders: [FormsUtil.formProvider] }); }
105
110
  }
106
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridItemComponent, decorators: [{
107
112
  type: Component,
@@ -115,24 +120,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImpor
115
120
  ToggleComponent,
116
121
  TextFieldComponent,
117
122
  DisableControlDirective,
118
- ], template: "@if (editable || !hideNonEditable) {\n<teta-input\n [label]=\"caption\"\n [hint]=\"column.hint\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n [required]=\"column.required\"\n>\n @if (template) {\n <ng-container\n *ngTemplateOutlet=\"template.template; context: { $implicit: formGroup?.get(column.name) }\"\n ></ng-container>\n } @else { @if (formGroup?.get(column.name)) { @switch (column.filterType) { @case (filterTypeEnum.list) {\n <teta-select\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"\n ></teta-select>\n } @case (filterTypeEnum.date) {\n <teta-date-picker\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [tetaDisableControl]=\"!editable\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n ></teta-date-picker>\n } @case (filterTypeEnum.boolean) {\n <teta-toggle [tetaDisableControl]=\"!editable\" [formControlName]=\"column.name\">\n {{ column.caption }}\n </teta-toggle>\n } @default {\n <teta-text-field\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable\"\n [decimalPart]=\"column.filterType === filterTypeEnum.number ? decimalPart : null\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n ></teta-text-field>\n } } } }\n <ng-template #default>\n @if (formGroup?.get(column.name)) { @switch (column.filterType) { @case (filterTypeEnum.list) {\n <teta-select\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column.required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"\n ></teta-select>\n } @case (filterTypeEnum.date) {\n <teta-date-picker\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [tetaDisableControl]=\"!editable\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [formControlName]=\"column.name\"\n ></teta-date-picker>\n } @case (filterTypeEnum.boolean) {\n <teta-toggle [tetaDisableControl]=\"!editable\" [formControlName]=\"column.name\">\n {{ column.caption }}\n </teta-toggle>\n } @default {\n <teta-text-field\n class=\"row_auto\"\n [decimalPart]=\"column.filterType === filterTypeEnum.number ? decimalPart : null\"\n [onlyNumber]=\"column.filterType === filterTypeEnum.number\"\n [placeholder]=\"column.caption\"\n [invalid]=\"controlIsInvalid(column.name)\"\n [tetaDisableControl]=\"!editable\"\n [formControlName]=\"column.name\"\n ></teta-text-field>\n } } }\n </ng-template>\n @if (controlIsInvalid(column.name)) {\n <div ngProjectAs=\"message\" class=\"color-red-50\">\n {{ getError(column) }}\n </div>\n }\n</teta-input>\n}\n" }]
119
- }], ctorParameters: () => [{ type: i1.TranslocoService }, { type: i2.ControlContainer, decorators: [{
120
- type: Optional
121
- }] }], propDecorators: { column: [{
122
- type: Input
123
- }], hideNonEditable: [{
124
- type: Input
125
- }], dict: [{
126
- type: Input
127
- }], decimalPart: [{
128
- type: Input
129
- }], item: [{
130
- type: Input
131
- }], itemTemplates: [{
132
- type: Input
133
- }], horizontal: [{
134
- type: Input
135
- }], controlValueChange: [{
136
- type: Output
137
- }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQtaXRlbS9wcm9wZXJ0eS1ncmlkLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC1pdGVtL3Byb3BlcnR5LWdyaWQtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUNBQXlDLENB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O3dCQUNsQix1QkFBdUI7cUJBQ3hCOzswQkErQ2tELFFBQVE7eUNBNUNsRCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkF1QkcsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwLCBOZ0Zvcm0sIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVdoaWxlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgSUlkTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHsgQWxpZ24gfSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtJztcbmltcG9ydCB7IGJvb2xPckZ1bmNDYWxsYmFjayB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvYm9vbC1vci1mdW5jJztcbmltcG9ydCB7IEZvcm1zVXRpbCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWwvZm9ybXMtdXRpbCc7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uLy4uL3RhYmxlL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9wcm9wZXJ0eS1ncmlkLWl0ZW0tZGVzY3JpcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2lucHV0L3RleHQtZmllbGQvdGV4dC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdG9nZ2xlL3RvZ2dsZS90b2dnbGUuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9pbnB1dC9pbnB1dC9pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzYWJsZUNvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmUvZGlzYWJsZS1jb250cm9sL2Rpc2FibGUtY29udHJvbC5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXByb3BlcnR5LWdyaWQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9wZXJ0eS1ncmlkLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9wZXJ0eS1ncmlkLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0Zvcm1zVXRpbC5mb3JtUHJvdmlkZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFNlbGVjdENvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICAgIFRvZ2dsZUNvbXBvbmVudCxcbiAgICBUZXh0RmllbGRDb21wb25lbnQsXG4gICAgRGlzYWJsZUNvbnRyb2xEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZEl0ZW1Db21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGNvbHVtbjogVGFibGVDb2x1bW47XG4gIEBJbnB1dCgpIGhpZGVOb25FZGl0YWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBASW5wdXQoKSBkZWNpbWFsUGFydDogbnVtYmVyO1xuICBASW5wdXQoKSBpdGVtOiBUO1xuICBASW5wdXQoKSBpdGVtVGVtcGxhdGVzOiBRdWVyeUxpc3Q8UHJvcGVydHlHcmlkSXRlbURlc2NyaXB0aW9uRGlyZWN0aXZlPjtcblxuICBnZXQgdGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbVRlbXBsYXRlcy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHRoaXMuY29sdW1uLm5hbWUpO1xuICB9XG5cbiAgZ2V0IGZvcm1Hcm91cCgpOiBGb3JtR3JvdXAge1xuICAgIGlmICh0aGlzLl9mb3JtR3JvdXAgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtR3JvdXA7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mb3JtR3JvdXAgaW5zdGFuY2VvZiBOZ0Zvcm0pIHtcbiAgICAgIHJldHVybiB0aGlzLl9mb3JtR3JvdXAuZm9ybTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgZWRpdGFibGUoKSB7XG4gICAgcmV0dXJuIGJvb2xPckZ1bmNDYWxsYmFjayh0aGlzLmNvbHVtbi5lZGl0YWJsZSkoe1xuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgIHJvdzogdGhpcy5mb3JtR3JvdXA/LmdldFJhd1ZhbHVlKCksXG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKSBob3Jpem9udGFsOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY29udHJvbFZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJSWROYW1lPGFueT4+KCk7XG4gIGFsaWduID0gQWxpZ247XG4gIGZpbHRlclR5cGVFbnVtID0gRmlsdGVyVHlwZTtcblxuICBwcml2YXRlIF9mb3JtU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgZ2V0IGNhcHRpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5jb2x1bW4uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZS5ib29sZWFuKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmNvbHVtbi5jYXB0aW9ufSR7dGhpcy5jb2x1bW4udW5pdCA/IGAsICR7dGhpcy5jb2x1bW4udW5pdH1gIDogJyd9YDtcbiAgfVxuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90cmFuc2xvY286IFRyYW5zbG9jb1NlcnZpY2UsIEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm1Hcm91cDogQ29udHJvbENvbnRhaW5lcikge31cblxuICBnZXREaWN0KCkge1xuICAgIGNvbnN0IGRpY3QgPSB0aGlzLmRpY3QgPyB0aGlzLmRpY3RbdGhpcy5jb2x1bW4ubmFtZV0gOiBbXTtcbiAgICBpZiAodGhpcy5jb2x1bW4ucGFyZW50TmFtZT8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRpY3Q/LmZpbHRlcihcbiAgICAgICAgKGRpY3RJdGVtOiBJSWROYW1lPGFueT4pID0+IGRpY3RJdGVtLnBhcmVudElkID09PSB0aGlzLmZvcm1Hcm91cD8uZ2V0UmF3VmFsdWUoKVt0aGlzLmNvbHVtbi5wYXJlbnROYW1lXVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBjb250cm9sSXNJbnZhbGlkKGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gRm9ybXNVdGlsLmNvbnRyb2xJc0ludmFsaWQodGhpcy5mb3JtR3JvdXAsIGNvbnRyb2xOYW1lKTtcbiAgfVxuXG4gIGdldEVycm9yKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXA/LmdldChjb2x1bW4ubmFtZSk7XG4gICAgaWYgKGNvbnRyb2w/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsb2NvLnRyYW5zbGF0ZSgnZXJyb3JzLmZpZWxkX2lzX3JlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmIChjb250cm9sPy5oYXNFcnJvcignbWluJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xvY28udHJhbnNsYXRlKCdlcnJvcnMubWluX3ZhbHVlJywge1xuICAgICAgICB2YWx1ZTogY29sdW1uLm1pblZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb250cm9sPy5oYXNFcnJvcignbWF4JykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xvY28udHJhbnNsYXRlKCdlcnJvcnMubWF4X3ZhbHVlJywge1xuICAgICAgICB2YWx1ZTogY29sdW1uLm1heFZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb250cm9sPy5oYXNFcnJvcignbWF4bGVuZ3RoJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xvY28udHJhbnNsYXRlKCdlcnJvcnMubWF4X2xlbmd0aCcsIHtcbiAgICAgICAgdmFsdWU6IGNvbHVtbi5tYXhMZW5ndGgsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2Zvcm1TdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuY29sdW1uICYmIHRoaXMuaXRlbSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucmVnaXN0ZXJDb250cm9sKHRoaXMuY29sdW1uLm5hbWUsIEZvcm1zVXRpbC5pbml0Q29udHJvbEZyb21Db2x1bW4odGhpcy5jb2x1bW4sIHRoaXMuaXRlbSkpO1xuICAgICAgdGhpcy5fZm9ybVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX2Zvcm1TdWIgPSB0aGlzLmZvcm1Hcm91cD8uY29udHJvbHNbdGhpcy5jb2x1bW4ubmFtZV0/LnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb250cm9sVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBpZDogXyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuY29sdW1uLm5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiQGlmIChlZGl0YWJsZSB8fCAhaGlkZU5vbkVkaXRhYmxlKSB7XG48dGV0YS1pbnB1dFxuICBbbGFiZWxdPVwiY2FwdGlvblwiXG4gIFtoaW50XT1cImNvbHVtbi5oaW50XCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICBbaG9yaXpvbnRhbF09XCJob3Jpem9udGFsXCJcbiAgW3JlcXVpcmVkXT1cImNvbHVtbi5yZXF1aXJlZFwiXG4+XG4gIEBpZiAodGVtcGxhdGUpIHtcbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGUudGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmb3JtR3JvdXA/LmdldChjb2x1bW4ubmFtZSkgfVwiXG4gID48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSB7IEBpZiAoZm9ybUdyb3VwPy5nZXQoY29sdW1uLm5hbWUpKSB7IEBzd2l0Y2ggKGNvbHVtbi5maWx0ZXJUeXBlKSB7IEBjYXNlIChmaWx0ZXJUeXBlRW51bS5saXN0KSB7XG4gIDx0ZXRhLXNlbGVjdFxuICAgIGNsYXNzPVwicm93X2F1dG9cIlxuICAgIFt0ZXRhRGlzYWJsZUNvbnRyb2xdPVwiIWVkaXRhYmxlXCJcbiAgICBbc2VhcmNoUmVmXT1cImdldERpY3QoKT8ubGVuZ3RoID4gMTAgPyAnbmFtZScgOiAnJ1wiXG4gICAgW2FsbG93TnVsbF09XCIhY29sdW1uLnJlcXVpcmVkXCJcbiAgICBbYXBwZW5kVG9Cb2R5XT1cInRydWVcIlxuICAgIFtpbnZhbGlkXT1cImNvbnRyb2xJc0ludmFsaWQoY29sdW1uLm5hbWUpXCJcbiAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICBbb3B0aW9uc109XCJnZXREaWN0KClcIlxuICAgIFt2YWx1ZVJlZl09XCInaWQnXCJcbiAgICBbdGV4dFJlZl09XCInbmFtZSdcIlxuICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gID48L3RldGEtc2VsZWN0PlxuICB9IEBjYXNlIChmaWx0ZXJUeXBlRW51bS5kYXRlKSB7XG4gIDx0ZXRhLWRhdGUtcGlja2VyXG4gICAgY2xhc3M9XCJyb3dfYXV0b1wiXG4gICAgW2FwcGVuZFRvQm9keV09XCJ0cnVlXCJcbiAgICBbdGV0YURpc2FibGVDb250cm9sXT1cIiFlZGl0YWJsZVwiXG4gICAgW2ludmFsaWRdPVwiY29udHJvbElzSW52YWxpZChjb2x1bW4ubmFtZSlcIlxuICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxuICA+PC90ZXRhLWRhdGUtcGlja2VyPlxuICB9IEBjYXNlIChmaWx0ZXJUeXBlRW51bS5ib29sZWFuKSB7XG4gIDx0ZXRhLXRvZ2dsZSBbdGV0YURpc2FibGVDb250cm9sXT1cIiFlZGl0YWJsZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIj5cbiAgICB7eyBjb2x1bW4uY2FwdGlvbiB9fVxuICA8L3RldGEtdG9nZ2xlPlxuICB9IEBkZWZhdWx0IHtcbiAgPHRldGEtdGV4dC1maWVsZFxuICAgIGNsYXNzPVwicm93X2F1dG9cIlxuICAgIFt0ZXRhRGlzYWJsZUNvbnRyb2xdPVwiIWVkaXRhYmxlXCJcbiAgICBbZGVjaW1hbFBhcnRdPVwiY29sdW1uLmZpbHRlclR5cGUgPT09IGZpbHRlclR5cGVFbnVtLm51bWJlciA/IGRlY2ltYWxQYXJ0IDogbnVsbFwiXG4gICAgW29ubHlOdW1iZXJdPVwiY29sdW1uLmZpbHRlclR5cGUgPT09IGZpbHRlclR5cGVFbnVtLm51bWJlclwiXG4gICAgW3BsYWNlaG9sZGVyXT1cImNvbHVtbi5jYXB0aW9uXCJcbiAgICBbaW52YWxpZF09XCJjb250cm9sSXNJbnZhbGlkKGNvbHVtbi5uYW1lKVwiXG4gICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXG4gID48L3RldGEtdGV4dC1maWVsZD5cbiAgfSB9IH0gfVxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgQGlmIChmb3JtR3JvdXA/LmdldChjb2x1bW4ubmFtZSkpIHsgQHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUpIHsgQGNhc2UgKGZpbHRlclR5cGVFbnVtLmxpc3QpIHtcbiAgICA8dGV0YS1zZWxlY3RcbiAgICAgIGNsYXNzPVwicm93X2F1dG9cIlxuICAgICAgW3RldGFEaXNhYmxlQ29udHJvbF09XCIhZWRpdGFibGVcIlxuICAgICAgW3NlYXJjaFJlZl09XCJnZXREaWN0KCk/Lmxlbmd0aCA+IDEwID8gJ25hbWUnIDogJydcIlxuICAgICAgW2FsbG93TnVsbF09XCIhY29sdW1uLnJlcXVpcmVkXCJcbiAgICAgIFthcHBlbmRUb0JvZHldPVwidHJ1ZVwiXG4gICAgICBbaW52YWxpZF09XCJjb250cm9sSXNJbnZhbGlkKGNvbHVtbi5uYW1lKVwiXG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgIFtvcHRpb25zXT1cImdldERpY3QoKVwiXG4gICAgICBbdmFsdWVSZWZdPVwiJ2lkJ1wiXG4gICAgICBbdGV4dFJlZl09XCInbmFtZSdcIlxuICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICA+PC90ZXRhLXNlbGVjdD5cbiAgICB9IEBjYXNlIChmaWx0ZXJUeXBlRW51bS5kYXRlKSB7XG4gICAgPHRldGEtZGF0ZS1waWNrZXJcbiAgICAgIGNsYXNzPVwicm93X2F1dG9cIlxuICAgICAgW2FwcGVuZFRvQm9keV09XCJ0cnVlXCJcbiAgICAgIFt0ZXRhRGlzYWJsZUNvbnRyb2xdPVwiIWVkaXRhYmxlXCJcbiAgICAgIFtpbnZhbGlkXT1cImNvbnRyb2xJc0ludmFsaWQoY29sdW1uLm5hbWUpXCJcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxuICAgID48L3RldGEtZGF0ZS1waWNrZXI+XG4gICAgfSBAY2FzZSAoZmlsdGVyVHlwZUVudW0uYm9vbGVhbikge1xuICAgIDx0ZXRhLXRvZ2dsZSBbdGV0YURpc2FibGVDb250cm9sXT1cIiFlZGl0YWJsZVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIj5cbiAgICAgIHt7IGNvbHVtbi5jYXB0aW9uIH19XG4gICAgPC90ZXRhLXRvZ2dsZT5cbiAgICB9IEBkZWZhdWx0IHtcbiAgICA8dGV0YS10ZXh0LWZpZWxkXG4gICAgICBjbGFzcz1cInJvd19hdXRvXCJcbiAgICAgIFtkZWNpbWFsUGFydF09XCJjb2x1bW4uZmlsdGVyVHlwZSA9PT0gZmlsdGVyVHlwZUVudW0ubnVtYmVyID8gZGVjaW1hbFBhcnQgOiBudWxsXCJcbiAgICAgIFtvbmx5TnVtYmVyXT1cImNvbHVtbi5maWx0ZXJUeXBlID09PSBmaWx0ZXJUeXBlRW51bS5udW1iZXJcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbHVtbi5jYXB0aW9uXCJcbiAgICAgIFtpbnZhbGlkXT1cImNvbnRyb2xJc0ludmFsaWQoY29sdW1uLm5hbWUpXCJcbiAgICAgIFt0ZXRhRGlzYWJsZUNvbnRyb2xdPVwiIWVkaXRhYmxlXCJcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxuICAgID48L3RldGEtdGV4dC1maWVsZD5cbiAgICB9IH0gfVxuICA8L25nLXRlbXBsYXRlPlxuICBAaWYgKGNvbnRyb2xJc0ludmFsaWQoY29sdW1uLm5hbWUpKSB7XG4gIDxkaXYgbmdQcm9qZWN0QXM9XCJtZXNzYWdlXCIgY2xhc3M9XCJjb2xvci1yZWQtNTBcIj5cbiAgICB7eyBnZXRFcnJvcihjb2x1bW4pIH19XG4gIDwvZGl2PlxuICB9XG48L3RldGEtaW5wdXQ+XG59XG4iXX0=
123
+ ], template: "@if (editable() || !hideNonEditable()) {\n <teta-input\n [label]=\"caption()\"\n [hint]=\"column().hint\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal()\"\n [required]=\"column().required\">\n @if (template()) {\n <ng-container\n *ngTemplateOutlet=\"template().template; context: { $implicit: formGroup?.get(column().name) }\"></ng-container>\n } @else {\n @if (formGroup?.get(column().name)) {\n {{column().filterType}} -- {{ filterTypeEnum.list}}\n @switch (column().filterType) {\n @case (filterTypeEnum.list) {\n <teta-select\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable()\"\n [searchRef]=\"getDict()?.length > 10 ? 'name' : ''\"\n [allowNull]=\"!column().required\"\n [appendToBody]=\"true\"\n [invalid]=\"controlIsInvalid(column().name)\"\n [formControlName]=\"column().name\"\n [options]=\"getDict()\"\n [valueRef]=\"'id'\"\n [textRef]=\"'name'\"\n [multiple]=\"false\"></teta-select>\n }\n @case (filterTypeEnum.date) {\n <teta-date-picker\n class=\"row_auto\"\n [appendToBody]=\"true\"\n [tetaDisableControl]=\"!editable()\"\n [invalid]=\"controlIsInvalid(column().name)\"\n [formControlName]=\"column().name\"></teta-date-picker>\n }\n @case (filterTypeEnum.boolean) {\n <teta-toggle [tetaDisableControl]=\"!editable()\" [formControlName]=\"column().name\">\n {{ column().caption }}\n </teta-toggle>\n }\n @default {\n <teta-text-field\n class=\"row_auto\"\n [tetaDisableControl]=\"!editable()\"\n [decimalPart]=\"column().filterType === filterTypeEnum.number ? decimalPart() : null\"\n [onlyNumber]=\"column().filterType === filterTypeEnum.number\"\n [placeholder]=\"column().caption\"\n [invalid]=\"controlIsInvalid(column().name)\"\n [formControlName]=\"column().name\"\n ></teta-text-field>\n }\n }\n }\n }\n @if (controlIsInvalid(column().name)) {\n <div ngProjectAs=\"message\" class=\"color-red-50\">\n {{ getError(column()) }}\n </div>\n }\n </teta-input>\n}\n" }]
124
+ }], ctorParameters: () => [] });
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQtaXRlbS9wcm9wZXJ0eS1ncmlkLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC1pdGVtL3Byb3BlcnR5LWdyaWQtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLFFBQVEsRUFDbkIsTUFBTSxFQUFFLEtBQUssRUFHYixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSXpDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDdEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBR2pFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUMz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QkFBeUI7a0dBQXpCLHlCQUF5Qix1a0NDL0N0Qyw0NEVBOERBLDBERDFCSSxjQUFjLHVIQUNkLFdBQVcsa1NBQ1gsbUJBQW1CLGdWQUNuQixnQkFBZ0Isb0pBQ2hCLGVBQWUscVRBQ2YsbUJBQW1CLG9WQUNuQixlQUFlLG9HQUNmLGtCQUFrQix5SkFDbEIsdUJBQXVCLHNGQVhWLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQzs7MkZBYzVCLHlCQUF5QjtrQkFsQnJDLFNBQVM7K0JBQ0UseUJBQXlCLGlCQUdwQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FDM0IsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQix1QkFBdUI7cUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBjb21wdXRlZCxcbiAgaW5qZWN0LCBpbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIG91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cCwgTmdGb3JtLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFuc2xvY29TZXJ2aWNlfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0lEaWN0aW9uYXJ5fSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29tbW9uL2NvbnRyYWN0L2ktaWQtbmFtZSc7XG5pbXBvcnQge0FsaWdufSBmcm9tICcuLi8uLi8uLi8uLi9jb21tb24vZW51bS9hbGlnbi5lbnVtJztcbmltcG9ydCB7Ym9vbE9yRnVuY0NhbGxiYWNrfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL2Jvb2wtb3ItZnVuYyc7XG5pbXBvcnQge0Zvcm1zVXRpbH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbC9mb3Jtcy11dGlsJztcbmltcG9ydCB7RmlsdGVyVHlwZX0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL2VudW0vZmlsdGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge1RhYmxlQ29sdW1ufSBmcm9tICcuLi8uLi8uLi90YWJsZS9jb250cmFjdC90YWJsZS1jb2x1bW4nO1xuaW1wb3J0IHtQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmV9IGZyb20gJy4uL3Byb3BlcnR5LWdyaWQtaXRlbS1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtUZXh0RmllbGRDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2lucHV0L3RleHQtZmllbGQvdGV4dC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHtUb2dnbGVDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3RvZ2dsZS90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudCc7XG5pbXBvcnQge0RhdGVQaWNrZXJDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQge1NlbGVjdENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vc2VsZWN0L3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7TmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7SW5wdXRDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL2lucHV0L2lucHV0L2lucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQge0Rpc2FibGVDb250cm9sRGlyZWN0aXZlfSBmcm9tICcuLi8uLi8uLi8uLi9kaXJlY3RpdmUvZGlzYWJsZS1jb250cm9sL2Rpc2FibGUtY29udHJvbC5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXByb3BlcnR5LWdyaWQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9wZXJ0eS1ncmlkLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcm9wZXJ0eS1ncmlkLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0Zvcm1zVXRpbC5mb3JtUHJvdmlkZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgSW5wdXRDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFNlbGVjdENvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICAgIFRvZ2dsZUNvbXBvbmVudCxcbiAgICBUZXh0RmllbGRDb21wb25lbnQsXG4gICAgRGlzYWJsZUNvbnRyb2xEaXJlY3RpdmUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZEl0ZW1Db21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgdHJhbnNsb2NvID0gaW5qZWN0KFRyYW5zbG9jb1NlcnZpY2UpXG4gIHByaXZhdGUgX2Zvcm1Hcm91cCA9IGluamVjdChDb250cm9sQ29udGFpbmVyKTtcblxuICBjb2x1bW4gPSBpbnB1dDxUYWJsZUNvbHVtbj4oKTtcbiAgaGlkZU5vbkVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZGljdCA9IGlucHV0PElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPj4oKTtcbiAgZGVjaW1hbFBhcnQgPSBpbnB1dDxudW1iZXI+KCk7XG4gIGl0ZW0gPSBpbnB1dDxUPigpO1xuICBpdGVtVGVtcGxhdGVzID0gaW5wdXQ8cmVhZG9ubHkgUHJvcGVydHlHcmlkSXRlbURlc2NyaXB0aW9uRGlyZWN0aXZlW10+KCk7XG4gIHRlbXBsYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1UZW1wbGF0ZXMoKS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHRoaXMuY29sdW1uKCkubmFtZSk7XG4gIH0pO1xuXG4gIGdldCBmb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgTmdGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwLmZvcm07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZWRpdGFibGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIGJvb2xPckZ1bmNDYWxsYmFjayh0aGlzLmNvbHVtbigpLmVkaXRhYmxlKSh7XG4gICAgICBjb2x1bW46IHRoaXMuY29sdW1uKCksXG4gICAgICByb3c6IHRoaXMuZm9ybUdyb3VwPy5nZXRSYXdWYWx1ZSgpLFxuICAgIH0pXG4gIH0pXG5cbiAgaG9yaXpvbnRhbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGNvbnRyb2xWYWx1ZUNoYW5nZSA9IG91dHB1dDxJSWROYW1lPGFueT4+KCk7XG4gIGFsaWduID0gQWxpZ247XG4gIGZpbHRlclR5cGVFbnVtID0gRmlsdGVyVHlwZTtcblxuICBwcml2YXRlIF9mb3JtU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgY2FwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5jb2x1bW4oKS5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlLmJvb2xlYW4pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuY29sdW1uKCkuY2FwdGlvbn0ke3RoaXMuY29sdW1uKCkudW5pdCA/IGAsICR7dGhpcy5jb2x1bW4oKS51bml0fWAgOiAnJ31gO1xuICB9KVxuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIGdldERpY3QoKSB7XG4gICAgY29uc3QgZGljdCA9IHRoaXMuZGljdCgpID8gdGhpcy5kaWN0KClbdGhpcy5jb2x1bW4oKS5uYW1lXSA6IFtdO1xuICAgIGlmICh0aGlzLmNvbHVtbigpLnBhcmVudE5hbWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBkaWN0Py5maWx0ZXIoXG4gICAgICAgIChkaWN0SXRlbTogSUlkTmFtZTxhbnk+KSA9PiBkaWN0SXRlbS5wYXJlbnRJZCA9PT0gdGhpcy5mb3JtR3JvdXA/LmdldFJhd1ZhbHVlKClbdGhpcy5jb2x1bW4oKS5wYXJlbnROYW1lXVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBjb250cm9sSXNJbnZhbGlkKGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gRm9ybXNVdGlsLmNvbnRyb2xJc0ludmFsaWQodGhpcy5mb3JtR3JvdXAsIGNvbnRyb2xOYW1lKTtcbiAgfVxuXG4gIGdldEVycm9yKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXA/LmdldChjb2x1bW4ubmFtZSk7XG4gICAgaWYgKGNvbnRyb2w/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdlcnJvcnMuZmllbGRfaXNfcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2w/Lmhhc0Vycm9yKCdtaW4nKSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvLnRyYW5zbGF0ZSgnZXJyb3JzLm1pbl92YWx1ZScsIHtcbiAgICAgICAgdmFsdWU6IGNvbHVtbi5taW5WYWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY29udHJvbD8uaGFzRXJyb3IoJ21heCcpKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xvY28udHJhbnNsYXRlKCdlcnJvcnMubWF4X3ZhbHVlJywge1xuICAgICAgICB2YWx1ZTogY29sdW1uLm1heFZhbHVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb250cm9sPy5oYXNFcnJvcignbWF4bGVuZ3RoJykpIHtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbG9jby50cmFuc2xhdGUoJ2Vycm9ycy5tYXhfbGVuZ3RoJywge1xuICAgICAgICB2YWx1ZTogY29sdW1uLm1heExlbmd0aCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy5fZm9ybVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAodGhpcy5jb2x1bW4oKSAmJiB0aGlzLml0ZW0oKSkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbCh0aGlzLmNvbHVtbigpLm5hbWUsIEZvcm1zVXRpbC5pbml0Q29udHJvbEZyb21Db2x1bW4odGhpcy5jb2x1bW4oKSwgdGhpcy5pdGVtKCkpKTtcbiAgICAgIHRoaXMuX2Zvcm1TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9mb3JtU3ViID0gdGhpcy5mb3JtR3JvdXA/LmNvbnRyb2xzW3RoaXMuY29sdW1uKCkubmFtZV0/LnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgdGhpcy5jb250cm9sVmFsdWVDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBpZDogXyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuY29sdW1uKCkubmFtZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKGVkaXRhYmxlKCkgfHwgIWhpZGVOb25FZGl0YWJsZSgpKSB7XG4gIDx0ZXRhLWlucHV0XG4gICAgW2xhYmVsXT1cImNhcHRpb24oKVwiXG4gICAgW2hpbnRdPVwiY29sdW1uKCkuaGludFwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgIFtob3Jpem9udGFsXT1cImhvcml6b250YWwoKVwiXG4gICAgW3JlcXVpcmVkXT1cImNvbHVtbigpLnJlcXVpcmVkXCI+XG4gICAgQGlmICh0ZW1wbGF0ZSgpKSB7XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGUoKS50ZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZvcm1Hcm91cD8uZ2V0KGNvbHVtbigpLm5hbWUpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBpZiAoZm9ybUdyb3VwPy5nZXQoY29sdW1uKCkubmFtZSkpIHtcbiAgICAgICAge3tjb2x1bW4oKS5maWx0ZXJUeXBlfX0gLS0ge3sgZmlsdGVyVHlwZUVudW0ubGlzdH19XG4gICAgICAgIEBzd2l0Y2ggKGNvbHVtbigpLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICBAY2FzZSAoZmlsdGVyVHlwZUVudW0ubGlzdCkge1xuICAgICAgICAgICAgPHRldGEtc2VsZWN0XG4gICAgICAgICAgICAgIGNsYXNzPVwicm93X2F1dG9cIlxuICAgICAgICAgICAgICBbdGV0YURpc2FibGVDb250cm9sXT1cIiFlZGl0YWJsZSgpXCJcbiAgICAgICAgICAgICAgW3NlYXJjaFJlZl09XCJnZXREaWN0KCk/Lmxlbmd0aCA+IDEwID8gJ25hbWUnIDogJydcIlxuICAgICAgICAgICAgICBbYWxsb3dOdWxsXT1cIiFjb2x1bW4oKS5yZXF1aXJlZFwiXG4gICAgICAgICAgICAgIFthcHBlbmRUb0JvZHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImNvbnRyb2xJc0ludmFsaWQoY29sdW1uKCkubmFtZSlcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbigpLm5hbWVcIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJnZXREaWN0KClcIlxuICAgICAgICAgICAgICBbdmFsdWVSZWZdPVwiJ2lkJ1wiXG4gICAgICAgICAgICAgIFt0ZXh0UmVmXT1cIiduYW1lJ1wiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiPjwvdGV0YS1zZWxlY3Q+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlIChmaWx0ZXJUeXBlRW51bS5kYXRlKSB7XG4gICAgICAgICAgICA8dGV0YS1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd19hdXRvXCJcbiAgICAgICAgICAgICAgW2FwcGVuZFRvQm9keV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3RldGFEaXNhYmxlQ29udHJvbF09XCIhZWRpdGFibGUoKVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImNvbnRyb2xJc0ludmFsaWQoY29sdW1uKCkubmFtZSlcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbigpLm5hbWVcIj48L3RldGEtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlIChmaWx0ZXJUeXBlRW51bS5ib29sZWFuKSB7XG4gICAgICAgICAgICA8dGV0YS10b2dnbGUgW3RldGFEaXNhYmxlQ29udHJvbF09XCIhZWRpdGFibGUoKVwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uKCkubmFtZVwiPlxuICAgICAgICAgICAgICB7eyBjb2x1bW4oKS5jYXB0aW9uIH19XG4gICAgICAgICAgICA8L3RldGEtdG9nZ2xlPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICA8dGV0YS10ZXh0LWZpZWxkXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93X2F1dG9cIlxuICAgICAgICAgICAgICBbdGV0YURpc2FibGVDb250cm9sXT1cIiFlZGl0YWJsZSgpXCJcbiAgICAgICAgICAgICAgW2RlY2ltYWxQYXJ0XT1cImNvbHVtbigpLmZpbHRlclR5cGUgPT09IGZpbHRlclR5cGVFbnVtLm51bWJlciA/IGRlY2ltYWxQYXJ0KCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgW29ubHlOdW1iZXJdPVwiY29sdW1uKCkuZmlsdGVyVHlwZSA9PT0gZmlsdGVyVHlwZUVudW0ubnVtYmVyXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbHVtbigpLmNhcHRpb25cIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJjb250cm9sSXNJbnZhbGlkKGNvbHVtbigpLm5hbWUpXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4oKS5uYW1lXCJcbiAgICAgICAgICAgID48L3RldGEtdGV4dC1maWVsZD5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChjb250cm9sSXNJbnZhbGlkKGNvbHVtbigpLm5hbWUpKSB7XG4gICAgICA8ZGl2IG5nUHJvamVjdEFzPVwibWVzc2FnZVwiIGNsYXNzPVwiY29sb3ItcmVkLTUwXCI+XG4gICAgICAgIHt7IGdldEVycm9yKGNvbHVtbigpKSB9fVxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L3RldGEtaW5wdXQ+XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
- import { Component, ContentChildren, EventEmitter, HostBinding, Input, Optional, Output, QueryList, } from '@angular/core';
2
- import { ControlContainer, FormGroup, NgForm, FormsModule, ReactiveFormsModule } from '@angular/forms';
1
+ import { Component, contentChildren, effect, HostBinding, input, Optional, output, } from '@angular/core';
2
+ import { ControlContainer, FormGroup, NgForm, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
3
3
  import { boolOrFuncCallback } from '../../../util/bool-or-func';
4
4
  import { FormsUtil } from '../../../util/forms-util';
5
5
  import { PropertyGridItemDescriptionDirective } from './property-grid-item-description.directive';
@@ -8,17 +8,6 @@ import { PropertyGridItemComponent } from './property-grid-item/property-grid-it
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/forms";
10
10
  export class PropertyGridComponent {
11
- set item(item) {
12
- this._item = item;
13
- if (this.formGroup) {
14
- this.formGroup.patchValue(item, {
15
- emitEvent: false,
16
- });
17
- }
18
- }
19
- get item() {
20
- return this._item;
21
- }
22
11
  get formGroup() {
23
12
  if (this._formGroup instanceof FormGroup) {
24
13
  return this._formGroup;
@@ -31,8 +20,23 @@ export class PropertyGridComponent {
31
20
  constructor(_formGroup) {
32
21
  this._formGroup = _formGroup;
33
22
  this.formClass = true;
34
- this.controlValueChange = new EventEmitter();
35
- this._alive = true;
23
+ this.itemTemplates = contentChildren(PropertyGridItemDescriptionDirective);
24
+ this.hideNonEditable = input();
25
+ this.columns = input();
26
+ this.dict = input();
27
+ this.item = input();
28
+ this.horizontal = input();
29
+ this.decimalPart = input();
30
+ this.controlValueChange = output();
31
+ effect(() => {
32
+ if (this.item() && this.formGroup) {
33
+ for (const key in this.item()) {
34
+ if (this.item().hasOwnProperty(key)) {
35
+ this.formGroup.setControl(key, new UntypedFormControl(this.item()[key]));
36
+ }
37
+ }
38
+ }
39
+ });
36
40
  }
37
41
  getEditable(column) {
38
42
  return boolOrFuncCallback(column.editable)({
@@ -41,7 +45,7 @@ export class PropertyGridComponent {
41
45
  });
42
46
  }
43
47
  onControlValueChange(event) {
44
- const affected = this.columns.filter((_) => _.parentName === event.name);
48
+ const affected = this.columns().filter((_) => _.parentName === event.name);
45
49
  if (affected?.length) {
46
50
  affected.forEach((item) => {
47
51
  const value = this.formGroup.getRawValue()[item.name];
@@ -57,42 +61,19 @@ export class PropertyGridComponent {
57
61
  }
58
62
  this.controlValueChange.emit(event);
59
63
  }
60
- ngOnDestroy() {
61
- this._alive = false;
62
- }
63
- trackColumns(index, column) {
64
- return column.name;
65
- }
66
64
  getDictValue(value, name) {
67
- return this.dict[name]?.find((_) => _.id === value);
65
+ return this.dict()[name]?.find((_) => _.id === value);
68
66
  }
69
67
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridComponent, deps: [{ token: i1.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
70
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: PropertyGridComponent, isStandalone: true, selector: "teta-property-grid", inputs: { hideNonEditable: "hideNonEditable", columns: "columns", dict: "dict", item: "item", horizontal: "horizontal", decimalPart: "decimalPart" }, outputs: { controlValueChange: "controlValueChange" }, host: { properties: { "class.form-container": "this.formClass" } }, queries: [{ propertyName: "itemTemplates", predicate: PropertyGridItemDescriptionDirective }], ngImport: i0, template: "@if (columns?.length) { @for (column of columns; track trackColumns($index, column)) { @if (column.columns?.length < 1\n&& (getEditable(column) || !hideNonEditable)) {\n<teta-property-grid-item\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"\n></teta-property-grid-item>\n} @if (column.columns?.length > 0 && (getEditable(column) || !hideNonEditable)) {\n<teta-property-grid-group\n [id]=\"column.name\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"\n></teta-property-grid-group>\n} } }\n", styles: [":host{padding:12px 8px}\n"], dependencies: [{ kind: "component", type: PropertyGridItemComponent, selector: "teta-property-grid-item", inputs: ["column", "hideNonEditable", "dict", "decimalPart", "item", "itemTemplates", "horizontal"], outputs: ["controlValueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PropertyGridGroupComponent, selector: "teta-property-grid-group", inputs: ["column", "hideNonEditable", "dict", "item", "horizontal", "decimalPart", "itemTemplates"], outputs: ["controlValueChange"] }], viewProviders: [FormsUtil.formProvider] }); }
68
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.1", type: PropertyGridComponent, isStandalone: true, selector: "teta-property-grid", inputs: { hideNonEditable: { classPropertyName: "hideNonEditable", publicName: "hideNonEditable", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, dict: { classPropertyName: "dict", publicName: "dict", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, horizontal: { classPropertyName: "horizontal", publicName: "horizontal", isSignal: true, isRequired: false, transformFunction: null }, decimalPart: { classPropertyName: "decimalPart", publicName: "decimalPart", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { controlValueChange: "controlValueChange" }, host: { properties: { "class.form-container": "this.formClass" } }, queries: [{ propertyName: "itemTemplates", predicate: PropertyGridItemDescriptionDirective, isSignal: true }], ngImport: i0, template: "@if (columns().length) {\n @for (column of columns(); track column.name) {\n @if (column.columns?.length < 1 && (getEditable(column) || !hideNonEditable())) {\n <teta-property-grid-item\n [dict]=\"dict()\"\n [column]=\"column\"\n [item]=\"item()\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates()\"\n [decimalPart]=\"decimalPart()\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal()\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable()\"\n ></teta-property-grid-item>\n }\n @if (column.columns?.length > 0 && (getEditable(column) || !hideNonEditable())) {\n <teta-property-grid-group\n [id]=\"column.name\"\n [dict]=\"dict()\"\n [column]=\"column\"\n [item]=\"item()\"\n [itemTemplates]=\"itemTemplates()\"\n [decimalPart]=\"decimalPart()\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal()\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable()\"\n ></teta-property-grid-group>\n }\n }\n}\n", styles: [":host{padding:12px 8px}\n"], dependencies: [{ kind: "component", type: PropertyGridItemComponent, selector: "teta-property-grid-item", inputs: ["column", "hideNonEditable", "dict", "decimalPart", "item", "itemTemplates", "horizontal"], outputs: ["controlValueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PropertyGridGroupComponent, selector: "teta-property-grid-group", inputs: ["column", "hideNonEditable", "dict", "item", "horizontal", "decimalPart", "itemTemplates"], outputs: ["controlValueChange"] }], viewProviders: [FormsUtil.formProvider] }); }
71
69
  }
72
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridComponent, decorators: [{
73
71
  type: Component,
74
- args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], standalone: true, imports: [PropertyGridItemComponent, FormsModule, ReactiveFormsModule, PropertyGridGroupComponent], template: "@if (columns?.length) { @for (column of columns; track trackColumns($index, column)) { @if (column.columns?.length < 1\n&& (getEditable(column) || !hideNonEditable)) {\n<teta-property-grid-item\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"\n></teta-property-grid-item>\n} @if (column.columns?.length > 0 && (getEditable(column) || !hideNonEditable)) {\n<teta-property-grid-group\n [id]=\"column.name\"\n [dict]=\"dict\"\n [column]=\"column\"\n [item]=\"item\"\n [itemTemplates]=\"itemTemplates\"\n [decimalPart]=\"decimalPart\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable\"\n></teta-property-grid-group>\n} } }\n", styles: [":host{padding:12px 8px}\n"] }]
72
+ args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], standalone: true, imports: [PropertyGridItemComponent, FormsModule, ReactiveFormsModule, PropertyGridGroupComponent], template: "@if (columns().length) {\n @for (column of columns(); track column.name) {\n @if (column.columns?.length < 1 && (getEditable(column) || !hideNonEditable())) {\n <teta-property-grid-item\n [dict]=\"dict()\"\n [column]=\"column\"\n [item]=\"item()\"\n [id]=\"column.name\"\n [itemTemplates]=\"itemTemplates()\"\n [decimalPart]=\"decimalPart()\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal()\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable()\"\n ></teta-property-grid-item>\n }\n @if (column.columns?.length > 0 && (getEditable(column) || !hideNonEditable())) {\n <teta-property-grid-group\n [id]=\"column.name\"\n [dict]=\"dict()\"\n [column]=\"column\"\n [item]=\"item()\"\n [itemTemplates]=\"itemTemplates()\"\n [decimalPart]=\"decimalPart()\"\n [formGroup]=\"formGroup\"\n [horizontal]=\"horizontal()\"\n (controlValueChange)=\"onControlValueChange($event)\"\n [hideNonEditable]=\"hideNonEditable()\"\n ></teta-property-grid-group>\n }\n }\n}\n", styles: [":host{padding:12px 8px}\n"] }]
75
73
  }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
76
74
  type: Optional
77
75
  }] }], propDecorators: { formClass: [{
78
76
  type: HostBinding,
79
77
  args: ['class.form-container']
80
- }], itemTemplates: [{
81
- type: ContentChildren,
82
- args: [PropertyGridItemDescriptionDirective]
83
- }], hideNonEditable: [{
84
- type: Input
85
- }], columns: [{
86
- type: Input
87
- }], dict: [{
88
- type: Input
89
- }], item: [{
90
- type: Input
91
- }], horizontal: [{
92
- type: Input
93
- }], decimalPart: [{
94
- type: Input
95
- }], controlValueChange: [{
96
- type: Output
97
78
  }] } });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7QUFVOUYsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxJQUFhLElBQUksQ0FBQyxJQUFPO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDOUIsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQyxDQUFD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QUNFLG9CQUFvQixpQkFHZixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMseUJBQXlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDOzswQkFzQ3JGLFFBQVE7eUNBbkNnQixTQUFTO3NCQUE3QyxXQUFXO3VCQUFDLHNCQUFzQjtnQkFFbkMsYUFBYTtzQkFEWixlQUFlO3VCQUFDLG9DQUFvQztnQkFFNUMsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNPLElBQUk7c0JBQWhCLEtBQUs7Z0JBV0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgRm9ybUdyb3VwLCBOZ0Zvcm0sIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHsgSUlkTmFtZSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWUnO1xuaW1wb3J0IHsgYm9vbE9yRnVuY0NhbGxiYWNrIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9ib29sLW9yLWZ1bmMnO1xuaW1wb3J0IHsgRm9ybXNVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9mb3Jtcy11dGlsJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7IFByb3BlcnR5R3JpZEl0ZW1EZXNjcmlwdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vcHJvcGVydHktZ3JpZC1pdGVtLWRlc2NyaXB0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRHcm91cENvbXBvbmVudCB9IGZyb20gJy4vcHJvcGVydHktZ3JpZC1ncm91cC9wcm9wZXJ0eS1ncmlkLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9wZXJ0eS1ncmlkLWl0ZW0vcHJvcGVydHktZ3JpZC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtcHJvcGVydHktZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJvcGVydHktZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbRm9ybXNVdGlsLmZvcm1Qcm92aWRlcl0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtQcm9wZXJ0eUdyaWRJdGVtQ29tcG9uZW50LCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgUHJvcGVydHlHcmlkR3JvdXBDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eUdyaWRDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvcm0tY29udGFpbmVyJykgZm9ybUNsYXNzID0gdHJ1ZTtcbiAgQENvbnRlbnRDaGlsZHJlbihQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUpXG4gIGl0ZW1UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmU+O1xuICBASW5wdXQoKSBoaWRlTm9uRWRpdGFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbHVtbnM6IFRhYmxlQ29sdW1uW107XG4gIEBJbnB1dCgpIGRpY3Q6IElEaWN0aW9uYXJ5PElJZE5hbWU8YW55PltdPjtcbiAgQElucHV0KCkgc2V0IGl0ZW0oaXRlbTogVCkge1xuICAgIHRoaXMuX2l0ZW0gPSBpdGVtO1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShpdGVtLCB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW07XG4gIH1cbiAgQElucHV0KCkgaG9yaXpvbnRhbDogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVjaW1hbFBhcnQ6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgY29udHJvbFZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJSWROYW1lPGFueT4+KCk7XG5cbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuICBwcml2YXRlIF9pdGVtOiBUO1xuXG4gIGdldCBmb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgTmdGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwLmZvcm07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybUdyb3VwOiBDb250cm9sQ29udGFpbmVyKSB7fVxuXG4gIGdldEVkaXRhYmxlKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gYm9vbE9yRnVuY0NhbGxiYWNrKGNvbHVtbi5lZGl0YWJsZSkoe1xuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICByb3c6IHRoaXMuZm9ybUdyb3VwPy5nZXRSYXdWYWx1ZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgb25Db250cm9sVmFsdWVDaGFuZ2UoZXZlbnQ6IElJZE5hbWU8YW55Pikge1xuICAgIGNvbnN0IGFmZmVjdGVkID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoXykgPT4gXy5wYXJlbnROYW1lID09PSBldmVudC5uYW1lKTtcbiAgICBpZiAoYWZmZWN0ZWQ/Lmxlbmd0aCkge1xuICAgICAgYWZmZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbaXRlbS5uYW1lXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZGljdFZhbHVlID0gdGhpcy5nZXREaWN0VmFsdWUodmFsdWUsIGl0ZW0ubmFtZSk7XG4gICAgICAgICAgaWYgKGRpY3RWYWx1ZSAmJiBkaWN0VmFsdWUucGFyZW50SWQgIT09IGV2ZW50LmlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICAgICAgICAgIG5ld09ialtpdGVtLm5hbWVdID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3T2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xWYWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICB0cmFja0NvbHVtbnMoaW5kZXg6IG51bWJlciwgY29sdW1uOiBUYWJsZUNvbHVtbik6IGFueSB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaWN0VmFsdWUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGljdFtuYW1lXT8uZmluZCgoXykgPT4gXy5pZCA9PT0gdmFsdWUpO1xuICB9XG59XG4iLCJAaWYgKGNvbHVtbnM/Lmxlbmd0aCkgeyBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgdHJhY2tDb2x1bW5zKCRpbmRleCwgY29sdW1uKSkgeyBAaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPCAxXG4mJiAoZ2V0RWRpdGFibGUoY29sdW1uKSB8fCAhaGlkZU5vbkVkaXRhYmxlKSkge1xuPHRldGEtcHJvcGVydHktZ3JpZC1pdGVtXG4gIFtkaWN0XT1cImRpY3RcIlxuICBbY29sdW1uXT1cImNvbHVtblwiXG4gIFtpdGVtXT1cIml0ZW1cIlxuICBbaWRdPVwiY29sdW1uLm5hbWVcIlxuICBbaXRlbVRlbXBsYXRlc109XCJpdGVtVGVtcGxhdGVzXCJcbiAgW2RlY2ltYWxQYXJ0XT1cImRlY2ltYWxQYXJ0XCJcbiAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICBbaG9yaXpvbnRhbF09XCJob3Jpem9udGFsXCJcbiAgKGNvbnRyb2xWYWx1ZUNoYW5nZSk9XCJvbkNvbnRyb2xWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgW2hpZGVOb25FZGl0YWJsZV09XCJoaWRlTm9uRWRpdGFibGVcIlxuPjwvdGV0YS1wcm9wZXJ0eS1ncmlkLWl0ZW0+XG59IEBpZiAoY29sdW1uLmNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGdldEVkaXRhYmxlKGNvbHVtbikgfHwgIWhpZGVOb25FZGl0YWJsZSkpIHtcbjx0ZXRhLXByb3BlcnR5LWdyaWQtZ3JvdXBcbiAgW2lkXT1cImNvbHVtbi5uYW1lXCJcbiAgW2RpY3RdPVwiZGljdFwiXG4gIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgW2l0ZW1dPVwiaXRlbVwiXG4gIFtpdGVtVGVtcGxhdGVzXT1cIml0ZW1UZW1wbGF0ZXNcIlxuICBbZGVjaW1hbFBhcnRdPVwiZGVjaW1hbFBhcnRcIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gIFtob3Jpem9udGFsXT1cImhvcml6b250YWxcIlxuICAoY29udHJvbFZhbHVlQ2hhbmdlKT1cIm9uQ29udHJvbFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICBbaGlkZU5vbkVkaXRhYmxlXT1cImhpZGVOb25FZGl0YWJsZVwiXG4+PC90ZXRhLXByb3BlcnR5LWdyaWQtZ3JvdXA+XG59IH0gfVxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxlQUFlLEVBQzFCLE1BQU0sRUFDTixXQUFXLEVBQUUsS0FBSyxFQUNsQixRQUFRLEVBQUUsTUFBTSxHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxNQUFNLEVBQ04sV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFFbkQsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sNENBQTRDLENBQUM7QUFDaEcsT0FBTyxFQUFDLDBCQUEwQixFQUFDLE1BQU0scURBQXFELENBQUM7QUFDL0YsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbURBQW1ELENBQUM7OztBQVU1RixNQUFNLE9BQU8scUJBQXFCO0lBYWhDLElBQUksU0FBUztRQUNYLElBQUksSUFBSSxDQUFDLFVBQVUsWUFBWSxTQUFTLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsWUFBWSxNQUFNLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQzlCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFnQyxVQUE0QjtRQUE1QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQXRCdkIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUN0RCxrQkFBYSxHQUFHLGVBQWUsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3RFLG9CQUFlLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDbkMsWUFBTyxHQUFHLEtBQUssRUFBaUIsQ0FBQztRQUNqQyxTQUFJLEdBQUcsS0FBSyxFQUErQixDQUFDO1FBQzVDLFNBQUksR0FBRyxLQUFLLEVBQUssQ0FBQztRQUVsQixlQUFVLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDOUIsZ0JBQVcsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUU5Qix1QkFBa0IsR0FBRyxNQUFNLEVBQWdCLENBQUM7UUFhMUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNFLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBbUI7UUFDN0IsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW1CO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0RCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDakQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO3dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFVLEVBQUUsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs4R0E5RFUscUJBQXFCO2tHQUFyQixxQkFBcUIsa2dDQUVBLG9DQUFvQyw2Q0NsQ3RFLDZwQ0FnQ0EsbUZERlkseUJBQXlCLHlNQUFFLFdBQVcsMExBQUUsbUJBQW1CLGdMQUFFLDBCQUEwQixnTUFGbEYsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDOzsyRkFJNUIscUJBQXFCO2tCQVJqQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMseUJBQXlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDOzswQkF5QnJGLFFBQVE7eUNBdEJnQixTQUFTO3NCQUE3QyxXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgY29udGVudENoaWxkcmVuLFxuICBlZmZlY3QsXG4gIEhvc3RCaW5kaW5nLCBpbnB1dCxcbiAgT3B0aW9uYWwsIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sQ29udGFpbmVyLFxuICBGb3JtR3JvdXAsXG4gIE5nRm9ybSxcbiAgRm9ybXNNb2R1bGUsXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gIFVudHlwZWRGb3JtQ29udHJvbFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7Ym9vbE9yRnVuY0NhbGxiYWNrfSBmcm9tICcuLi8uLi8uLi91dGlsL2Jvb2wtb3ItZnVuYyc7XG5pbXBvcnQge0Zvcm1zVXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9mb3Jtcy11dGlsJztcbmltcG9ydCB7VGFibGVDb2x1bW59IGZyb20gJy4uLy4uL3RhYmxlL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQge1Byb3BlcnR5R3JpZEl0ZW1EZXNjcmlwdGlvbkRpcmVjdGl2ZX0gZnJvbSAnLi9wcm9wZXJ0eS1ncmlkLWl0ZW0tZGVzY3JpcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7UHJvcGVydHlHcmlkR3JvdXBDb21wb25lbnR9IGZyb20gJy4vcHJvcGVydHktZ3JpZC1ncm91cC9wcm9wZXJ0eS1ncmlkLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQge1Byb3BlcnR5R3JpZEl0ZW1Db21wb25lbnR9IGZyb20gJy4vcHJvcGVydHktZ3JpZC1pdGVtL3Byb3BlcnR5LWdyaWQtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXByb3BlcnR5LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvcGVydHktZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0Zvcm1zVXRpbC5mb3JtUHJvdmlkZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUHJvcGVydHlHcmlkSXRlbUNvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFByb3BlcnR5R3JpZEdyb3VwQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGVydHlHcmlkQ29tcG9uZW50PFQ+IHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb3JtLWNvbnRhaW5lcicpIGZvcm1DbGFzcyA9IHRydWU7XG4gIGl0ZW1UZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oUHJvcGVydHlHcmlkSXRlbURlc2NyaXB0aW9uRGlyZWN0aXZlKTtcbiAgaGlkZU5vbkVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgY29sdW1ucyA9IGlucHV0PFRhYmxlQ29sdW1uW10+KCk7XG4gIGRpY3QgPSBpbnB1dDxJRGljdGlvbmFyeTxJSWROYW1lPGFueT5bXT4+KCk7XG4gIGl0ZW0gPSBpbnB1dDxUPigpO1xuXG4gIGhvcml6b250YWwgPSBpbnB1dDxib29sZWFuPigpO1xuICBkZWNpbWFsUGFydCA9IGlucHV0PG51bWJlcj4oKTtcblxuICBjb250cm9sVmFsdWVDaGFuZ2UgPSBvdXRwdXQ8SUlkTmFtZTxhbnk+PigpO1xuXG4gIGdldCBmb3JtR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZm9ybUdyb3VwIGluc3RhbmNlb2YgTmdGb3JtKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwLmZvcm07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybUdyb3VwOiBDb250cm9sQ29udGFpbmVyKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLml0ZW0oKSAmJiB0aGlzLmZvcm1Hcm91cCkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW0oKSkge1xuICAgICAgICAgIGlmICh0aGlzLml0ZW0oKS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGtleSwgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLml0ZW0oKVtrZXldKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRFZGl0YWJsZShjb2x1bW46IFRhYmxlQ29sdW1uKSB7XG4gICAgcmV0dXJuIGJvb2xPckZ1bmNDYWxsYmFjayhjb2x1bW4uZWRpdGFibGUpKHtcbiAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgcm93OiB0aGlzLmZvcm1Hcm91cD8uZ2V0UmF3VmFsdWUoKSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ29udHJvbFZhbHVlQ2hhbmdlKGV2ZW50OiBJSWROYW1lPGFueT4pIHtcbiAgICBjb25zdCBhZmZlY3RlZCA9IHRoaXMuY29sdW1ucygpLmZpbHRlcigoXykgPT4gXy5wYXJlbnROYW1lID09PSBldmVudC5uYW1lKTtcbiAgICBpZiAoYWZmZWN0ZWQ/Lmxlbmd0aCkge1xuICAgICAgYWZmZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKClbaXRlbS5uYW1lXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZGljdFZhbHVlID0gdGhpcy5nZXREaWN0VmFsdWUodmFsdWUsIGl0ZW0ubmFtZSk7XG4gICAgICAgICAgaWYgKGRpY3RWYWx1ZSAmJiBkaWN0VmFsdWUucGFyZW50SWQgIT09IGV2ZW50LmlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICAgICAgICAgIG5ld09ialtpdGVtLm5hbWVdID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3T2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xWYWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGljdFZhbHVlKHZhbHVlOiBhbnksIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRpY3QoKVtuYW1lXT8uZmluZCgoXykgPT4gXy5pZCA9PT0gdmFsdWUpO1xuICB9XG59XG4iLCJAaWYgKGNvbHVtbnMoKS5sZW5ndGgpIHtcbiAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLm5hbWUpIHtcbiAgICBAaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPCAxICYmIChnZXRFZGl0YWJsZShjb2x1bW4pIHx8ICFoaWRlTm9uRWRpdGFibGUoKSkpIHtcbiAgICAgIDx0ZXRhLXByb3BlcnR5LWdyaWQtaXRlbVxuICAgICAgICBbZGljdF09XCJkaWN0KClcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtpdGVtXT1cIml0ZW0oKVwiXG4gICAgICAgIFtpZF09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgIFtpdGVtVGVtcGxhdGVzXT1cIml0ZW1UZW1wbGF0ZXMoKVwiXG4gICAgICAgIFtkZWNpbWFsUGFydF09XCJkZWNpbWFsUGFydCgpXCJcbiAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJob3Jpem9udGFsKClcIlxuICAgICAgICAoY29udHJvbFZhbHVlQ2hhbmdlKT1cIm9uQ29udHJvbFZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbaGlkZU5vbkVkaXRhYmxlXT1cImhpZGVOb25FZGl0YWJsZSgpXCJcbiAgICAgID48L3RldGEtcHJvcGVydHktZ3JpZC1pdGVtPlxuICAgIH1cbiAgICBAaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPiAwICYmIChnZXRFZGl0YWJsZShjb2x1bW4pIHx8ICFoaWRlTm9uRWRpdGFibGUoKSkpIHtcbiAgICAgIDx0ZXRhLXByb3BlcnR5LWdyaWQtZ3JvdXBcbiAgICAgICAgW2lkXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgW2RpY3RdPVwiZGljdCgpXCJcbiAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICBbaXRlbV09XCJpdGVtKClcIlxuICAgICAgICBbaXRlbVRlbXBsYXRlc109XCJpdGVtVGVtcGxhdGVzKClcIlxuICAgICAgICBbZGVjaW1hbFBhcnRdPVwiZGVjaW1hbFBhcnQoKVwiXG4gICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgW2hvcml6b250YWxdPVwiaG9yaXpvbnRhbCgpXCJcbiAgICAgICAgKGNvbnRyb2xWYWx1ZUNoYW5nZSk9XCJvbkNvbnRyb2xWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2hpZGVOb25FZGl0YWJsZV09XCJoaWRlTm9uRWRpdGFibGUoKVwiXG4gICAgICA+PC90ZXRhLXByb3BlcnR5LWdyaWQtZ3JvdXA+XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,5 +1,4 @@
1
- export * from './property-grid.module';
2
1
  export * from './property-grid/property-grid.component';
3
2
  export * from './property-grid/property-grid-item/property-grid-item.component';
4
3
  export * from './property-grid/property-grid-item-description.directive';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsMERBQTBELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5LWdyaWQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC1pdGVtL3Byb3BlcnR5LWdyaWQtaXRlbS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQtaXRlbS1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDBEQUEwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLWl0ZW0vcHJvcGVydHktZ3JpZC1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC1pdGVtLWRlc2NyaXB0aW9uLmRpcmVjdGl2ZSc7XG4iXX0=