@tetacom/ng-components 1.4.15 → 1.4.17

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.
@@ -3,191 +3,61 @@ import PropertyGridStories from '../src/component/property-grid/PropertyGrid.sto
3
3
 
4
4
  <Meta of={PropertyGridStories} />
5
5
 
6
- <div class="column gap-24">
7
- <h1>Property grid</h1>
8
- <div class="column">
9
- <p>
10
- Property grid (сетка свойств) - это элемент пользовательского интерфейса в программировании, который предоставляет
11
- способ отображения и редактирования свойств объектов. Это особенно полезно при создании приложений с графическим
12
- интерфейсом, где пользователь может настраивать параметры объектов или элементов интерфейса.
13
- </p>
14
- </div>
15
- <h3>Как использовать</h3>
16
- <div class="column">
17
- <p>
18
- Для начала нужно создать <code> &lt;teta-property-grid&gt;</code>.
19
- </p>
20
- <p>Для создания сетки свойств в компонент необходимо передать свойства:</p>
21
- <ul>
22
- <li>
23
- <code>item</code> - данные для формирования сетки.
24
- </li>
25
- <li>
26
- <code>columns</code> - каркас данных для сетки.
27
- </li>
28
- </ul>
29
- <p>
30
- <code>columns</code> принимает в себя массив объектов типа <code>TableColumn</code>. Он состоит из:
31
- </p>
32
- <ul>
33
- <li>
34
- <code>width</code> - ширина блока
35
- </li>
36
- <li>
37
- <code>filterType</code> - тип поля (select,datepicker,string и т.д.)
38
- </li>
39
- <li>
40
- <code>unit</code> - единицы измерения
41
- </li>
42
- <li>
43
- <code>unitMeasureParameterId</code> - id измеряемого параметра{' '}
44
- </li>
45
- <li>
46
- <code>unitId</code> - id единицы измерения
47
- </li>
48
- <li>
49
- <code>editable</code> - флаг включения/отключения редактирования поля
50
- </li>
51
- <li>
52
- <code>defaultValue</code> - данные которые будут выводится при отсутствии данных.
53
- </li>
54
- <li>
55
- <code>maxValue</code> - максимальное значение в поле
56
- </li>
57
- <li>
58
- <code>minValue</code> - минимальное значение в поле
59
- </li>
60
- <li>
61
- <code>required</code> - флаг обязательности ввода данных в поле
62
- </li>
63
- <li>
64
- <code>validators</code> - валидаторы для полей
65
- </li>
66
- <li>
67
- <code>name</code> - название поля
68
- </li>
69
- <li>
70
- <code>caption</code> - описание поля
71
- </li>
72
- <li>
73
- <code>hint</code> - указанный текст появляется при наведении описание поля.
74
- </li>
75
- <li>
76
- <code>strict</code> - строгое сравнение{' '}
77
- </li>
78
- </ul>
79
- <p>
80
- При выборе листа в качестве типа поля, то необходимо добавить свойство <code>dict</code>, которое отвечает за
81
- отображаемые элементы списка.
82
- </p>
83
- <p>
84
- Также можно сделать кастомное отображение сетки по названию свойства в форме при помощи директивы{' '}
85
- <code>tetaPropertyGridItemDescription</code>.
86
- </p>
87
- </div>
88
- <h3>Пример кода кастомной сетки</h3>
89
- <p>
90
- <pre>
91
- <code>
92
- &lt;teta-property-grid class="scrollable padding-h-3 row_auto" style="width: 100%"
93
- (controlValueChange)="save($event)" [item]="item" [horizontal]="true" [columns]="columns" [dict]="dict"&gt;
94
- &nbsp;&nbsp;&lt;ng-template [tetaPropertyGridItemDescription]="'ram'" let-control&gt;
95
- &nbsp;&nbsp;&nbsp;&nbsp;&lt;input [formControl]="control" class="input" /&gt; &nbsp;&nbsp;&lt;/ng-template&gt;
96
- &nbsp;&lt;/teta-property-grid&gt;
97
- </code>
98
- </pre>
99
- </p>
100
- <h3>Свойства</h3>
101
- <table>
102
- <thead>
103
- <tr>
104
- <th>Свойство</th>
105
- <th>Tип</th>
106
- <th>Описание</th>
107
- </tr>
108
- </thead>
109
- <tbody>
110
- <tr>
111
- <td class="text-align-center">
112
- <p>item</p>
113
- </td>
114
- <td class="text-align-center">
115
- <code>any</code>
116
- </td>
117
- <td class="text-align-center">
118
- <p>Данные для формирования сетки.</p>
119
- </td>
120
- </tr>
121
- <tr>
122
- <td class="text-align-center">
123
- <p>columns</p>
124
- </td>
125
- <td class="text-align-center">
126
- <code>TableColumns[]</code>
127
- </td>
128
- <td class="text-align-center">
129
- <p>Шаблон сетки</p>
130
- </td>
131
- </tr>
132
- <tr>
133
- <td class="text-align-center">
134
- <p>horizontal</p>
135
- </td>
136
- <td class="text-align-center">
137
- <code>boolean</code>
138
- </td>
139
- <td class="text-align-center">
140
- <p>Флаг для отображения сетки горизотально</p>
141
- </td>
142
- </tr>
143
- <tr>
144
- <td class="text-align-center">
145
- <p>hideNonEditable</p>
146
- </td>
147
- <td class="text-align-center">
148
- <code>boolean</code>
149
- </td>
150
- <td class="text-align-center">
151
- <p>Флаг для скрытия нередактируемых полей</p>
152
- </td>
153
- </tr>
154
- <tr>
155
- <td class="text-align-center">
156
- <p>decimalPart</p>
157
- </td>
158
- <td class="text-align-center">
159
- <code>number</code>
160
- </td>
161
- <td class="text-align-center">
162
- <p>Количество знаков после запятой</p>
163
- </td>
164
- </tr>
165
- <tr>
166
- <td class="text-align-center">
167
- <p>controlValueChange</p>
168
- </td>
169
- <td class="text-align-center">
170
- <code>function</code>
171
- </td>
172
- <td class="text-align-center">
173
- <p>Функция,которая срабатывает при изменении поля сетки.</p>
174
- </td>
175
- </tr>
176
- <tr>
177
- <td class="text-align-center">
178
- <p>dict</p>
179
- </td>
180
- <td class="text-align-center">
181
- <code>any[]</code>
182
- </td>
183
- <td class="text-align-center">
184
- <p>
185
- Массив выбираемых элементов. Каждое свойство имеет название, которое должно совпадать с соответствующим
186
- свойством в <code>data</code>. В качестве значения принимает массив объектов id,name.Требуется если вы
187
- добавляете сетку типа лист.
188
- </p>
189
- </td>
190
- </tr>
191
- </tbody>
192
- </table>
193
- </div>
6
+ # Property grid
7
+
8
+ Property grid (сетка свойств) - это элемент пользовательского интерфейса в программировании, который предоставляет
9
+ способ отображения и редактирования свойств объектов. Это особенно полезно при создании приложений с графическим
10
+ интерфейсом, где пользователь может настраивать параметры объектов или элементов интерфейса.
11
+
12
+ ### Как использовать
13
+
14
+ Для начала нужно создать `<teta-property-grid>`.
15
+
16
+ Для создания сетки свойств в компонент необходимо передать свойства:
17
+
18
+ - `item` - данные для формирования сетки.
19
+ - `columns` - каркас данных для сетки.
20
+
21
+ `columns` принимает в себя массив объектов типа `TableColumn`. Он состоит из:
22
+
23
+ - `width` - ширина блока
24
+ - `filterType` - тип поля (select,datepicker,string и т.д.)
25
+ - `unit` - единицы измерения
26
+ - `unitMeasureParameterId` - id измеряемого параметра
27
+ - `unitId` - id единицы измерения
28
+ - `editable` - флаг включения/отключения редактирования поля
29
+ - `defaultValue` - данные которые будут выводится при отсутствии данных.
30
+ - `maxValue` - максимальное значение в поле
31
+ - `minValue` - минимальное значение в поле
32
+ - `required` - флаг обязательности ввода данных в поле
33
+ - `validators` - валидаторы для полей
34
+ - `name` - название поля
35
+ - `caption` - описание поля
36
+ - `hint` - указанный текст появляется при наведении описание поля.
37
+ - `strict` - строгое сравнение
38
+
39
+ При выборе листа в качестве типа поля, то необходимо добавить свойство `dict`, которое отвечает за отображаемые элементы списка.
40
+
41
+ Также можно сделать кастомное отображение сетки по названию свойства в форме при помощи директивы `tetaPropertyGridItemDescription`.
42
+
43
+ ### Пример кода кастомной сетки
44
+
45
+ ```
46
+ <teta-property-grid class="scrollable padding-h-3 row_auto" style="width: 100%" (controlValueChange)="save($event)" [item]="item" [horizontal]="true" [columns]="columns" [dict]="dict">
47
+ <ng-template [tetaPropertyGridItemDescription]="'ram'" let-control>
48
+ <input [formControl]="control" class="input" />
49
+ </ng-template>
50
+ </teta-property-grid>
51
+ ```
52
+
53
+ ### Свойства
54
+
55
+ | Свойство | Тип | Описание |
56
+ | :----------------: | :------------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
57
+ | item | any | Данные для формирования сетки. |
58
+ | columns | TableColumns[] | Шаблон сетки |
59
+ | horizontal | boolean | Флаг для отображения сетки горизонтально. |
60
+ | hideNonEditable | boolean | Флаг для скрытия нередактируемых полей. |
61
+ | decimalPart | number | Количество знаков после запятой. |
62
+ | controlValueChange | function | Функция, которая срабатывает при изменении поля сетки. |
63
+ | dict | any[] | Массив выбираемых элементов. Каждое свойство имеет название, которое должно совпадать с соответствующим свойством в `data`. В качестве значения принимает массив объектов id,name. Требуется если вы добавляете сетку типа лист. |
@@ -31,12 +31,16 @@ export class PropertyGridComponent {
31
31
  effect(() => {
32
32
  if (this.item() && this.formGroup) {
33
33
  for (const key in this.item()) {
34
- if (this.item().hasOwnProperty(key)) {
34
+ if (Object.prototype.hasOwnProperty.call(this.item(), key)) {
35
35
  if (!this.formGroup.get(key)) {
36
- this.formGroup.setControl(key, new UntypedFormControl(this.item()[key]));
36
+ this.formGroup.setControl(key, new UntypedFormControl(this.item()[key], { updateOn: 'blur' }), {
37
+ emitEvent: false,
38
+ });
37
39
  }
38
40
  else {
39
- this.formGroup.patchValue(this.item());
41
+ this.formGroup.patchValue(this.item(), {
42
+ emitEvent: false,
43
+ });
40
44
  }
41
45
  }
42
46
  }
@@ -70,15 +74,15 @@ export class PropertyGridComponent {
70
74
  return this.dict()[name]?.find((_) => _.id === value);
71
75
  }
72
76
  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 }); }
73
- 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) { @for (column of columns(); track column.name) { @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], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
77
+ 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) { @for (column of columns(); track column.name) { @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], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
78
  }
75
79
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridComponent, decorators: [{
76
80
  type: Component,
77
- args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], standalone: true, imports: [PropertyGridItemComponent, FormsModule, ReactiveFormsModule, PropertyGridGroupComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (columns().length) { @for (column of columns(); track column.name) { @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"] }]
81
+ args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], standalone: true, imports: [PropertyGridItemComponent, FormsModule, ReactiveFormsModule, PropertyGridGroupComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (columns()?.length) { @for (column of columns(); track column.name) { @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"] }]
78
82
  }], ctorParameters: () => [{ type: i1.ControlContainer, decorators: [{
79
83
  type: Optional
80
84
  }] }], propDecorators: { formClass: [{
81
85
  type: HostBinding,
82
86
  args: ['class.form-container']
83
87
  }] } });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7QUFXOUYsTUFBTSxPQUFPLHFCQUFxQjtJQWFoQyxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJ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QUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFVLEVBQUUsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs4R0FsRVUscUJBQXFCO2tHQUFyQixxQkFBcUIsa2dDQUVBLG9DQUFvQyw2Q0N2Q3RFLHEvQkE0QkEsbUZETVkseUJBQXlCLHlNQUFFLFdBQVcsMExBQUUsbUJBQW1CLGdMQUFFLDBCQUEwQixnTUFGbEYsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDOzsyRkFLNUIscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMseUJBQXlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDLG1CQUNqRix1QkFBdUIsQ0FBQyxNQUFNOzswQkF5QmxDLFFBQVE7eUNBdEJnQixTQUFTO3NCQUE3QyxXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBIb3N0QmluZGluZyxcbiAgaW5wdXQsXG4gIE9wdGlvbmFsLFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbENvbnRhaW5lcixcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgTmdGb3JtLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IGJvb2xPckZ1bmNDYWxsYmFjayB9IGZyb20gJy4uLy4uLy4uL3V0aWwvYm9vbC1vci1mdW5jJztcbmltcG9ydCB7IEZvcm1zVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZm9ybXMtdXRpbCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL3Byb3BlcnR5LWdyaWQtaXRlbS1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL3Byb3BlcnR5LWdyaWQtZ3JvdXAvcHJvcGVydHktZ3JpZC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vcHJvcGVydHktZ3JpZC1pdGVtL3Byb3BlcnR5LWdyaWQtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXByb3BlcnR5LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvcGVydHktZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0Zvcm1zVXRpbC5mb3JtUHJvdmlkZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUHJvcGVydHlHcmlkSXRlbUNvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFByb3BlcnR5R3JpZEdyb3VwQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudDxUPiB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZm9ybS1jb250YWluZXInKSBmb3JtQ2xhc3MgPSB0cnVlO1xuICBpdGVtVGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKFByb3BlcnR5R3JpZEl0ZW1EZXNjcmlwdGlvbkRpcmVjdGl2ZSk7XG4gIGhpZGVOb25FZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGNvbHVtbnMgPSBpbnB1dDxUYWJsZUNvbHVtbltdPigpO1xuICBkaWN0ID0gaW5wdXQ8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PigpO1xuICBpdGVtID0gaW5wdXQ8VD4oKTtcblxuICBob3Jpem9udGFsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZGVjaW1hbFBhcnQgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgY29udHJvbFZhbHVlQ2hhbmdlID0gb3V0cHV0PElJZE5hbWU8YW55Pj4oKTtcblxuICBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKHRoaXMuX2Zvcm1Hcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2Zvcm1Hcm91cCBpbnN0YW5jZW9mIE5nRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cC5mb3JtO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm1Hcm91cDogQ29udHJvbENvbnRhaW5lcikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pdGVtKCkgJiYgdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5pdGVtKCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5pdGVtKCkuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmZvcm1Hcm91cC5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGtleSwgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLml0ZW0oKVtrZXldKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuaXRlbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEVkaXRhYmxlKGNvbHVtbjogVGFibGVDb2x1bW4pIHtcbiAgICByZXR1cm4gYm9vbE9yRnVuY0NhbGxiYWNrKGNvbHVtbi5lZGl0YWJsZSkoe1xuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICByb3c6IHRoaXMuZm9ybUdyb3VwPy5nZXRSYXdWYWx1ZSgpLFxuICAgIH0pO1xuICB9XG5cbiAgb25Db250cm9sVmFsdWVDaGFuZ2UoZXZlbnQ6IElJZE5hbWU8YW55Pikge1xuICAgIGNvbnN0IGFmZmVjdGVkID0gdGhpcy5jb2x1bW5zKCkuZmlsdGVyKChfKSA9PiBfLnBhcmVudE5hbWUgPT09IGV2ZW50Lm5hbWUpO1xuICAgIGlmIChhZmZlY3RlZD8ubGVuZ3RoKSB7XG4gICAgICBhZmZlY3RlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKVtpdGVtLm5hbWVdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBkaWN0VmFsdWUgPSB0aGlzLmdldERpY3RWYWx1ZSh2YWx1ZSwgaXRlbS5uYW1lKTtcbiAgICAgICAgICBpZiAoZGljdFZhbHVlICYmIGRpY3RWYWx1ZS5wYXJlbnRJZCAhPT0gZXZlbnQuaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHt9O1xuICAgICAgICAgICAgbmV3T2JqW2l0ZW0ubmFtZV0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShuZXdPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY29udHJvbFZhbHVlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREaWN0VmFsdWUodmFsdWU6IGFueSwgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZGljdCgpW25hbWVdPy5maW5kKChfKSA9PiBfLmlkID09PSB2YWx1ZSk7XG4gIH1cbn1cbiIsIkBpZiAoY29sdW1ucygpLmxlbmd0aCkgeyBAZm9yIChjb2x1bW4gb2YgY29sdW1ucygpOyB0cmFjayBjb2x1bW4ubmFtZSkgeyBAaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPCAxICYmXG4oZ2V0RWRpdGFibGUoY29sdW1uKSB8fCAhaGlkZU5vbkVkaXRhYmxlKCkpKSB7XG48dGV0YS1wcm9wZXJ0eS1ncmlkLWl0ZW1cbiAgW2RpY3RdPVwiZGljdCgpXCJcbiAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICBbaXRlbV09XCJpdGVtKClcIlxuICBbaWRdPVwiY29sdW1uLm5hbWVcIlxuICBbaXRlbVRlbXBsYXRlc109XCJpdGVtVGVtcGxhdGVzKClcIlxuICBbZGVjaW1hbFBhcnRdPVwiZGVjaW1hbFBhcnQoKVwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgW2hvcml6b250YWxdPVwiaG9yaXpvbnRhbCgpXCJcbiAgKGNvbnRyb2xWYWx1ZUNoYW5nZSk9XCJvbkNvbnRyb2xWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgW2hpZGVOb25FZGl0YWJsZV09XCJoaWRlTm9uRWRpdGFibGUoKVwiXG4+PC90ZXRhLXByb3BlcnR5LWdyaWQtaXRlbT5cbn0gQGlmIChjb2x1bW4uY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoZ2V0RWRpdGFibGUoY29sdW1uKSB8fCAhaGlkZU5vbkVkaXRhYmxlKCkpKSB7XG48dGV0YS1wcm9wZXJ0eS1ncmlkLWdyb3VwXG4gIFtpZF09XCJjb2x1bW4ubmFtZVwiXG4gIFtkaWN0XT1cImRpY3QoKVwiXG4gIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgW2l0ZW1UZW1wbGF0ZXNdPVwiaXRlbVRlbXBsYXRlcygpXCJcbiAgW2RlY2ltYWxQYXJ0XT1cImRlY2ltYWxQYXJ0KClcIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gIFtob3Jpem9udGFsXT1cImhvcml6b250YWwoKVwiXG4gIChjb250cm9sVmFsdWVDaGFuZ2UpPVwib25Db250cm9sVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtoaWRlTm9uRWRpdGFibGVdPVwiaGlkZU5vbkVkaXRhYmxlKClcIlxuPjwvdGV0YS1wcm9wZXJ0eS1ncmlkLWdyb3VwPlxufSB9IH1cbiJdfQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3Byb3BlcnR5LWdyaWQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvcHJvcGVydHktZ3JpZC9wcm9wZXJ0eS1ncmlkL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLE1BQU0sRUFDTixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsa0JBQWtCLEdBQ25CLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDOzs7QUFXOUYsTUFBTSxPQUFPLHFCQUFxQjtJQWFoQyxJQUFJLFNBQVM7UUFDWCxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksU0FBUyxFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUM5QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsWUFBZ0MsVUFBNEI7UUFBNUIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUF0QnZCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEQsa0JBQWEsR0FBRyxlQUFlLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUN0RSxvQkFBZSxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQ25DLFlBQU8sR0FBRyxLQUFLLEVBQWlCLENBQUM7UUFDakMsU0FBSSxHQUFHLEtBQUssRUFBK0IsQ0FBQztRQUM1QyxTQUFJLEdBQUcsS0FBSyxFQUFLLENBQUM7UUFFbEIsZUFBVSxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQzlCLGdCQUFXLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFFOUIsdUJBQWtCLEdBQUcsTUFBTSxFQUFnQixDQUFDO1FBYTFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7b0JBQzlCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0NBQzdGLFNBQVMsRUFBRSxLQUFLOzZCQUNqQixDQUFDLENBQUM7d0JBQ0wsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQ0FDckMsU0FBUyxFQUFFLEtBQUs7NkJBQ2pCLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBbUI7UUFDN0IsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUU7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW1CO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0RCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3QkFDakQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO3dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFVLEVBQUUsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs4R0F0RVUscUJBQXFCO2tHQUFyQixxQkFBcUIsa2dDQUVBLG9DQUFvQyw2Q0N2Q3RFLHMvQkE0QkEsbUZETVkseUJBQXlCLHlNQUFFLFdBQVcsMExBQUUsbUJBQW1CLGdMQUFFLDBCQUEwQixnTUFGbEYsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDOzsyRkFLNUIscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLG9CQUFvQixpQkFHZixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsY0FDM0IsSUFBSSxXQUNQLENBQUMseUJBQXlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLDBCQUEwQixDQUFDLG1CQUNqRix1QkFBdUIsQ0FBQyxNQUFNOzswQkF5QmxDLFFBQVE7eUNBdEJnQixTQUFTO3NCQUE3QyxXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgZWZmZWN0LFxuICBIb3N0QmluZGluZyxcbiAgaW5wdXQsXG4gIE9wdGlvbmFsLFxuICBvdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbENvbnRhaW5lcixcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgTmdGb3JtLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1kaWN0aW9uYXJ5JztcbmltcG9ydCB7IElJZE5hbWUgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7IGJvb2xPckZ1bmNDYWxsYmFjayB9IGZyb20gJy4uLy4uLy4uL3V0aWwvYm9vbC1vci1mdW5jJztcbmltcG9ydCB7IEZvcm1zVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWwvZm9ybXMtdXRpbCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL2NvbnRyYWN0L3RhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBQcm9wZXJ0eUdyaWRJdGVtRGVzY3JpcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL3Byb3BlcnR5LWdyaWQtaXRlbS1kZXNjcmlwdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL3Byb3BlcnR5LWdyaWQtZ3JvdXAvcHJvcGVydHktZ3JpZC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvcGVydHlHcmlkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vcHJvcGVydHktZ3JpZC1pdGVtL3Byb3BlcnR5LWdyaWQtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXByb3BlcnR5LWdyaWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvcGVydHktZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Byb3BlcnR5LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW0Zvcm1zVXRpbC5mb3JtUHJvdmlkZXJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUHJvcGVydHlHcmlkSXRlbUNvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFByb3BlcnR5R3JpZEdyb3VwQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5R3JpZENvbXBvbmVudDxUPiB7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZm9ybS1jb250YWluZXInKSBmb3JtQ2xhc3MgPSB0cnVlO1xuICBpdGVtVGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKFByb3BlcnR5R3JpZEl0ZW1EZXNjcmlwdGlvbkRpcmVjdGl2ZSk7XG4gIGhpZGVOb25FZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIGNvbHVtbnMgPSBpbnB1dDxUYWJsZUNvbHVtbltdPigpO1xuICBkaWN0ID0gaW5wdXQ8SURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+PigpO1xuICBpdGVtID0gaW5wdXQ8VD4oKTtcblxuICBob3Jpem9udGFsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgZGVjaW1hbFBhcnQgPSBpbnB1dDxudW1iZXI+KCk7XG5cbiAgY29udHJvbFZhbHVlQ2hhbmdlID0gb3V0cHV0PElJZE5hbWU8YW55Pj4oKTtcblxuICBnZXQgZm9ybUdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgaWYgKHRoaXMuX2Zvcm1Hcm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2Zvcm1Hcm91cCBpbnN0YW5jZW9mIE5nRm9ybSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cC5mb3JtO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2Zvcm1Hcm91cDogQ29udHJvbENvbnRhaW5lcikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pdGVtKCkgJiYgdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5pdGVtKCkpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuaXRlbSgpLCBrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldChrZXkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woa2V5LCBuZXcgVW50eXBlZEZvcm1Db250cm9sKHRoaXMuaXRlbSgpW2tleV0sIHsgdXBkYXRlT246ICdibHVyJyB9KSwge1xuICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh0aGlzLml0ZW0oKSwge1xuICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RWRpdGFibGUoY29sdW1uOiBUYWJsZUNvbHVtbikge1xuICAgIHJldHVybiBib29sT3JGdW5jQ2FsbGJhY2soY29sdW1uLmVkaXRhYmxlKSh7XG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgIHJvdzogdGhpcy5mb3JtR3JvdXA/LmdldFJhd1ZhbHVlKCksXG4gICAgfSk7XG4gIH1cblxuICBvbkNvbnRyb2xWYWx1ZUNoYW5nZShldmVudDogSUlkTmFtZTxhbnk+KSB7XG4gICAgY29uc3QgYWZmZWN0ZWQgPSB0aGlzLmNvbHVtbnMoKS5maWx0ZXIoKF8pID0+IF8ucGFyZW50TmFtZSA9PT0gZXZlbnQubmFtZSk7XG4gICAgaWYgKGFmZmVjdGVkPy5sZW5ndGgpIHtcbiAgICAgIGFmZmVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpW2l0ZW0ubmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGRpY3RWYWx1ZSA9IHRoaXMuZ2V0RGljdFZhbHVlKHZhbHVlLCBpdGVtLm5hbWUpO1xuICAgICAgICAgIGlmIChkaWN0VmFsdWUgJiYgZGljdFZhbHVlLnBhcmVudElkICE9PSBldmVudC5pZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3T2JqID0ge307XG4gICAgICAgICAgICBuZXdPYmpbaXRlbS5uYW1lXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKG5ld09iaik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sVmFsdWVDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGdldERpY3RWYWx1ZSh2YWx1ZTogYW55LCBuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kaWN0KClbbmFtZV0/LmZpbmQoKF8pID0+IF8uaWQgPT09IHZhbHVlKTtcbiAgfVxufVxuIiwiQGlmIChjb2x1bW5zKCk/Lmxlbmd0aCkgeyBAZm9yIChjb2x1bW4gb2YgY29sdW1ucygpOyB0cmFjayBjb2x1bW4ubmFtZSkgeyBAaWYgKGNvbHVtbi5jb2x1bW5zPy5sZW5ndGggPCAxICYmXG4oZ2V0RWRpdGFibGUoY29sdW1uKSB8fCAhaGlkZU5vbkVkaXRhYmxlKCkpKSB7XG48dGV0YS1wcm9wZXJ0eS1ncmlkLWl0ZW1cbiAgW2RpY3RdPVwiZGljdCgpXCJcbiAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICBbaXRlbV09XCJpdGVtKClcIlxuICBbaWRdPVwiY29sdW1uLm5hbWVcIlxuICBbaXRlbVRlbXBsYXRlc109XCJpdGVtVGVtcGxhdGVzKClcIlxuICBbZGVjaW1hbFBhcnRdPVwiZGVjaW1hbFBhcnQoKVwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgW2hvcml6b250YWxdPVwiaG9yaXpvbnRhbCgpXCJcbiAgKGNvbnRyb2xWYWx1ZUNoYW5nZSk9XCJvbkNvbnRyb2xWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgW2hpZGVOb25FZGl0YWJsZV09XCJoaWRlTm9uRWRpdGFibGUoKVwiXG4+PC90ZXRhLXByb3BlcnR5LWdyaWQtaXRlbT5cbn0gQGlmIChjb2x1bW4uY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoZ2V0RWRpdGFibGUoY29sdW1uKSB8fCAhaGlkZU5vbkVkaXRhYmxlKCkpKSB7XG48dGV0YS1wcm9wZXJ0eS1ncmlkLWdyb3VwXG4gIFtpZF09XCJjb2x1bW4ubmFtZVwiXG4gIFtkaWN0XT1cImRpY3QoKVwiXG4gIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgW2l0ZW1UZW1wbGF0ZXNdPVwiaXRlbVRlbXBsYXRlcygpXCJcbiAgW2RlY2ltYWxQYXJ0XT1cImRlY2ltYWxQYXJ0KClcIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gIFtob3Jpem9udGFsXT1cImhvcml6b250YWwoKVwiXG4gIChjb250cm9sVmFsdWVDaGFuZ2UpPVwib25Db250cm9sVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gIFtoaWRlTm9uRWRpdGFibGVdPVwiaGlkZU5vbkVkaXRhYmxlKClcIlxuPjwvdGV0YS1wcm9wZXJ0eS1ncmlkLWdyb3VwPlxufSB9IH1cbiJdfQ==
@@ -6249,12 +6249,16 @@ class PropertyGridComponent {
6249
6249
  effect(() => {
6250
6250
  if (this.item() && this.formGroup) {
6251
6251
  for (const key in this.item()) {
6252
- if (this.item().hasOwnProperty(key)) {
6252
+ if (Object.prototype.hasOwnProperty.call(this.item(), key)) {
6253
6253
  if (!this.formGroup.get(key)) {
6254
- this.formGroup.setControl(key, new UntypedFormControl(this.item()[key]));
6254
+ this.formGroup.setControl(key, new UntypedFormControl(this.item()[key], { updateOn: 'blur' }), {
6255
+ emitEvent: false,
6256
+ });
6255
6257
  }
6256
6258
  else {
6257
- this.formGroup.patchValue(this.item());
6259
+ this.formGroup.patchValue(this.item(), {
6260
+ emitEvent: false,
6261
+ });
6258
6262
  }
6259
6263
  }
6260
6264
  }
@@ -6288,11 +6292,11 @@ class PropertyGridComponent {
6288
6292
  return this.dict()[name]?.find((_) => _.id === value);
6289
6293
  }
6290
6294
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridComponent, deps: [{ token: i2.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
6291
- 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) { @for (column of columns(); track column.name) { @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: 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: "component", type: PropertyGridGroupComponent, selector: "teta-property-grid-group", inputs: ["column", "hideNonEditable", "dict", "item", "horizontal", "decimalPart", "itemTemplates"], outputs: ["controlValueChange"] }], viewProviders: [FormsUtil.formProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6295
+ 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) { @for (column of columns(); track column.name) { @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: 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: "component", type: PropertyGridGroupComponent, selector: "teta-property-grid-group", inputs: ["column", "hideNonEditable", "dict", "item", "horizontal", "decimalPart", "itemTemplates"], outputs: ["controlValueChange"] }], viewProviders: [FormsUtil.formProvider], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6292
6296
  }
6293
6297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: PropertyGridComponent, decorators: [{
6294
6298
  type: Component,
6295
- args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], standalone: true, imports: [PropertyGridItemComponent, FormsModule, ReactiveFormsModule, PropertyGridGroupComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (columns().length) { @for (column of columns(); track column.name) { @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"] }]
6299
+ args: [{ selector: 'teta-property-grid', viewProviders: [FormsUtil.formProvider], standalone: true, imports: [PropertyGridItemComponent, FormsModule, ReactiveFormsModule, PropertyGridGroupComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (columns()?.length) { @for (column of columns(); track column.name) { @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"] }]
6296
6300
  }], ctorParameters: () => [{ type: i2.ControlContainer, decorators: [{
6297
6301
  type: Optional
6298
6302
  }] }], propDecorators: { formClass: [{