@yuuvis/client-framework 2.0.0 → 2.0.1
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,28 +1,27 @@
|
|
|
1
|
-
import { CdkMenu, CdkMenuTrigger, CdkMenuItem } from '@angular/cdk/menu';
|
|
2
|
-
import * as i5 from '@angular/cdk/table';
|
|
3
|
-
import { CdkTableModule } from '@angular/cdk/table';
|
|
4
1
|
import * as i1$1 from '@angular/common';
|
|
5
2
|
import { CommonModule, DecimalPipe, NgClass } from '@angular/common';
|
|
6
3
|
import * as i0 from '@angular/core';
|
|
7
4
|
import { inject, signal, input, forwardRef, ChangeDetectionStrategy, Component, computed, effect, untracked, viewChild, DestroyRef, Input, output, ElementRef, NgModule } from '@angular/core';
|
|
8
5
|
import * as i1 from '@angular/forms';
|
|
9
6
|
import { FormBuilder, Validators, ReactiveFormsModule, NG_VALUE_ACCESSOR, FormsModule, FormGroup, FormControl } from '@angular/forms';
|
|
10
|
-
import * as i3$1 from '@angular/material/button';
|
|
11
7
|
import { MatButtonModule } from '@angular/material/button';
|
|
12
|
-
import * as i2 from '@angular/material/dialog';
|
|
13
8
|
import { MAT_DIALOG_DATA, MatDialogRef, MatDialogModule, MatDialog } from '@angular/material/dialog';
|
|
14
9
|
import * as i2$1 from '@angular/material/icon';
|
|
15
10
|
import { MatIconModule } from '@angular/material/icon';
|
|
16
|
-
import
|
|
11
|
+
import { MatMenu, MatMenuTrigger } from '@angular/material/menu';
|
|
12
|
+
import * as i3 from '@angular/material/table';
|
|
13
|
+
import { MatTableModule } from '@angular/material/table';
|
|
14
|
+
import * as i2 from '@yuuvis/client-core';
|
|
17
15
|
import { SystemService, ObjectFormTranslateService, Situation, TranslateModule, ClipboardService, TranslateService, Operator, OperatorLabel, LocaleNumberPipe, FileSizePipe, Classification, Utils, UserService, YuvUser, SearchUtils, LocaleDatePipe, ClassificationPrefix } from '@yuuvis/client-core';
|
|
18
16
|
import { YUV_ICONS } from '@yuuvis/client-framework/icons';
|
|
19
17
|
import { map, of, forkJoin } from 'rxjs';
|
|
20
18
|
import { MatFormFieldModule, MatFormFieldControl } from '@angular/material/form-field';
|
|
19
|
+
import { DialogComponent, AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';
|
|
21
20
|
import { MetadataFormFieldComponent } from '@yuuvis/client-framework/metadata-form';
|
|
21
|
+
import { YmtButtonDirective } from '@yuuvis/material';
|
|
22
22
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
23
23
|
import { MatInputModule } from '@angular/material/input';
|
|
24
24
|
import { TranslateService as TranslateService$1 } from '@ngx-translate/core';
|
|
25
|
-
import { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';
|
|
26
25
|
import * as i2$2 from '@yuuvis/client-framework/datepicker';
|
|
27
26
|
import { DatepickerComponent, YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';
|
|
28
27
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
@@ -30,7 +29,7 @@ import * as i1$2 from '@angular/material/select';
|
|
|
30
29
|
import { MatSelectModule } from '@angular/material/select';
|
|
31
30
|
import * as i4 from '@angular/material/tooltip';
|
|
32
31
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
33
|
-
import * as i3$
|
|
32
|
+
import * as i3$1 from '@yuuvis/client-framework/autocomplete';
|
|
34
33
|
import { YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';
|
|
35
34
|
import { map as map$1, catchError, finalize } from 'rxjs/operators';
|
|
36
35
|
import { marker } from '@colsen1991/ngx-translate-extract-marker';
|
|
@@ -68,7 +67,7 @@ class EditTableDataComponent {
|
|
|
68
67
|
#dialogRef;
|
|
69
68
|
#elementData;
|
|
70
69
|
cancel() {
|
|
71
|
-
this.#dialogRef.close(
|
|
70
|
+
this.#dialogRef.close(null);
|
|
72
71
|
}
|
|
73
72
|
submit() {
|
|
74
73
|
if (this.tableForm.valid && this.#dialogRef)
|
|
@@ -118,17 +117,27 @@ class EditTableDataComponent {
|
|
|
118
117
|
useExisting: forwardRef(() => EditTableDataComponent),
|
|
119
118
|
multi: true
|
|
120
119
|
}
|
|
121
|
-
], ngImport: i0, template: "<
|
|
120
|
+
], ngImport: i0, template: "<yuv-dialog [headertitel]=\"'yuv.form.element.data.grid.edit.headline' | translate: { headline: header }\">\n <main>\n <div [formGroup]=\"tableForm\">\n <div class=\"fields\">\n @for (element of columns; track $index) {\n <div [attr.data-name]=\"element.name\" class=\"form-field\">\n <yuv-metadata-form-field [field]=\"element\" [formControlName]=\"element.name\" [situation]=\"situation\"></yuv-metadata-form-field>\n\n @let errorsGroup = errorMessage();\n @if (errorsGroup && tableForm.errors) {\n <div class=\"err-msg\">\n @for (errors of errorsGroup; track $index) {\n @for (error of errors; track $index) {\n {{ error[element.name] }}\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.form.element.data.grid.edit.cancel' | translate }}</button>\n <button ymtButton=\"primary\" (click)=\"submit()\" [disabled]=\"!tableForm.dirty && !tableForm.valid\">\n @if (adding) {\n {{ 'yuv.form.element.data.grid.edit.add' | translate }}\n } @else {\n {{ 'yuv.form.element.data.grid.edit' | translate }}\n }\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host .fields{padding:var(--ymt-spacing-m)}:host .err-msg{font:var(--ymt-font-body-subtle);color:var(--ymt-danger);padding:var(--ymt-spacing-2xs) 0;border:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DialogComponent, selector: "yuv-dialog", inputs: ["headertitel"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: MetadataFormFieldComponent, selector: "yuv-metadata-form-field", inputs: ["field", "situation"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: YmtButtonDirective, selector: "button[ymtButton], a[ymtButton]", inputs: ["ymtButton", "disabled", "aria-disabled", "disableRipple", "disabledInteractive", "button-size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
122
121
|
}
|
|
123
122
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: EditTableDataComponent, decorators: [{
|
|
124
123
|
type: Component,
|
|
125
|
-
args: [{ selector: 'yuv-edit-table-data', standalone: true, imports: [
|
|
124
|
+
args: [{ selector: 'yuv-edit-table-data', standalone: true, imports: [
|
|
125
|
+
CommonModule,
|
|
126
|
+
ReactiveFormsModule,
|
|
127
|
+
DialogComponent,
|
|
128
|
+
MatDialogModule,
|
|
129
|
+
MatButtonModule,
|
|
130
|
+
MatFormFieldModule,
|
|
131
|
+
MetadataFormFieldComponent,
|
|
132
|
+
TranslateModule,
|
|
133
|
+
YmtButtonDirective
|
|
134
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
126
135
|
{
|
|
127
136
|
provide: NG_VALUE_ACCESSOR,
|
|
128
137
|
useExisting: forwardRef(() => EditTableDataComponent),
|
|
129
138
|
multi: true
|
|
130
139
|
}
|
|
131
|
-
], template: "<
|
|
140
|
+
], template: "<yuv-dialog [headertitel]=\"'yuv.form.element.data.grid.edit.headline' | translate: { headline: header }\">\n <main>\n <div [formGroup]=\"tableForm\">\n <div class=\"fields\">\n @for (element of columns; track $index) {\n <div [attr.data-name]=\"element.name\" class=\"form-field\">\n <yuv-metadata-form-field [field]=\"element\" [formControlName]=\"element.name\" [situation]=\"situation\"></yuv-metadata-form-field>\n\n @let errorsGroup = errorMessage();\n @if (errorsGroup && tableForm.errors) {\n <div class=\"err-msg\">\n @for (errors of errorsGroup; track $index) {\n @for (error of errors; track $index) {\n {{ error[element.name] }}\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.form.element.data.grid.edit.cancel' | translate }}</button>\n <button ymtButton=\"primary\" (click)=\"submit()\" [disabled]=\"!tableForm.dirty && !tableForm.valid\">\n @if (adding) {\n {{ 'yuv.form.element.data.grid.edit.add' | translate }}\n } @else {\n {{ 'yuv.form.element.data.grid.edit' | translate }}\n }\n </button>\n </footer>\n</yuv-dialog>\n", styles: [":host .fields{padding:var(--ymt-spacing-m)}:host .err-msg{font:var(--ymt-font-body-subtle);color:var(--ymt-danger);padding:var(--ymt-spacing-2xs) 0;border:0}\n"] }]
|
|
132
141
|
}] });
|
|
133
142
|
|
|
134
143
|
var DataGridSizeType;
|
|
@@ -140,13 +149,12 @@ var DataGridSizeType;
|
|
|
140
149
|
DataGridSizeType["AUTO"] = "auto";
|
|
141
150
|
})(DataGridSizeType || (DataGridSizeType = {}));
|
|
142
151
|
|
|
143
|
-
const CDK_IMPORT = [CdkMenu, CdkTableModule, CdkMenuTrigger, CdkMenuItem];
|
|
144
152
|
class DataGridComponent {
|
|
145
153
|
constructor() {
|
|
146
154
|
this.#dialog = inject(MatDialog);
|
|
147
155
|
this.#clipboardService = inject(ClipboardService);
|
|
148
156
|
this.#decimalPipe = inject(DecimalPipe);
|
|
149
|
-
this.
|
|
157
|
+
this.translate = inject(TranslateService);
|
|
150
158
|
this.situation = input(Situation.EDIT);
|
|
151
159
|
this.formElement = input(undefined);
|
|
152
160
|
this.formControl = input(undefined);
|
|
@@ -219,9 +227,11 @@ class DataGridComponent {
|
|
|
219
227
|
this.#openEditOverlay(null, true).subscribe((result) => {
|
|
220
228
|
const currentData = this.dataSource();
|
|
221
229
|
const data = [...currentData];
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
230
|
+
if (result) {
|
|
231
|
+
data.push(result);
|
|
232
|
+
const formElement = this.formElement();
|
|
233
|
+
formElement && this.#updateTable(formElement['elements'], data);
|
|
234
|
+
}
|
|
225
235
|
});
|
|
226
236
|
}
|
|
227
237
|
removeRow(element) {
|
|
@@ -229,13 +239,13 @@ class DataGridComponent {
|
|
|
229
239
|
const formElement = this.formElement();
|
|
230
240
|
formElement && this.#updateTable(formElement['elements'], updatedData);
|
|
231
241
|
}
|
|
232
|
-
#
|
|
242
|
+
#cellValue(element, value) {
|
|
233
243
|
switch (element.type) {
|
|
234
244
|
case 'string':
|
|
235
245
|
return value;
|
|
236
246
|
break;
|
|
237
247
|
case 'decimal':
|
|
238
|
-
return this.#decimalPipe.transform(value, '1.2-4', this.
|
|
248
|
+
return this.#decimalPipe.transform(value, '1.2-4', this.translate.currentLang);
|
|
239
249
|
break;
|
|
240
250
|
default:
|
|
241
251
|
return value;
|
|
@@ -248,7 +258,7 @@ class DataGridComponent {
|
|
|
248
258
|
acc.push({
|
|
249
259
|
columnDef: el.label,
|
|
250
260
|
header: el.label,
|
|
251
|
-
cell: (element) => (element.isAddRow ? '' : this.#
|
|
261
|
+
cell: (element) => (element.isAddRow ? '' : this.#cellValue(el, element[el.label]))
|
|
252
262
|
});
|
|
253
263
|
return acc;
|
|
254
264
|
}, []));
|
|
@@ -256,7 +266,9 @@ class DataGridComponent {
|
|
|
256
266
|
else {
|
|
257
267
|
this.displayedColumns.set([]);
|
|
258
268
|
}
|
|
259
|
-
|
|
269
|
+
const displayedColumns = [...this.displayedColumns().map((col) => col.columnDef)];
|
|
270
|
+
!this.readonly() && displayedColumns.push('actions');
|
|
271
|
+
this.displayedColumnsWithActions.set(displayedColumns);
|
|
260
272
|
this.dataSource.set(data);
|
|
261
273
|
}
|
|
262
274
|
writeValue(obj) {
|
|
@@ -282,11 +294,11 @@ class DataGridComponent {
|
|
|
282
294
|
multi: true
|
|
283
295
|
},
|
|
284
296
|
DecimalPipe
|
|
285
|
-
], ngImport: i0, template: "<header>\n <h3>{{ tableLabel() }}</h3>\n @if (!readonly()) {\n <button
|
|
297
|
+
], ngImport: i0, template: "<header>\n <h3>{{ tableLabel() }}</h3>\n @if (!readonly()) {\n <button (click)=\"addRow()\" class=\"table-options-add-row\">\n <mat-icon>add</mat-icon>\n </button>\n }\n</header>\n@let displayedCol = displayedColumns();\n@let displayedColActions = displayedColumnsWithActions();\n<div class=\"table-wrapper\" [ngClass]=\"size()\">\n <table mat-table [dataSource]=\"dataSource()\" class=\"mat-elevation-z8\">\n @for (column of displayedCol; track column) {\n <ng-container [matColumnDef]=\"column.columnDef\">\n <th mat-header-cell *matHeaderCellDef [attr.aria-label]=\"column.header\" [title]=\"column.header\">{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ column.cell(element) }}</td>\n </ng-container>\n }\n\n @if (!readonly()) {\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions-row\" aria-label=\"row actions\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"actions-row\">\n <!-- Only show the button in the last (empty) row -->\n <button class=\"table-options-menu-bar-item\" [matMenuTriggerFor]=\"menu\" (click)=\"onMenuTriggert(element)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColActions; sticky: ['header-1']\"></tr>\n @if (!readonly()) {\n <tr (dblclick)=\"editRow(row)\" [class.selected-row]=\"row === selectedRow()\" mat-row *matRowDef=\"let row; columns: displayedColActions\"></tr>\n } @else {\n <tr mat-row *matRowDef=\"let row; columns: displayedColActions\"></tr>\n }\n </table>\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"copyLine(selectedRow())\">{{ 'yuv.form.element.data.grid.copy' | translate }}</button>\n <button mat-menu-item (click)=\"editRow(selectedRow())\">{{ 'yuv.form.element.data.grid.edit' | translate }}</button>\n <button mat-menu-item (click)=\"removeRow(selectedRow())\">{{ 'yuv.form.element.data.grid.remove' | translate }}</button>\n</mat-menu>\n", styles: [":host{--table-size-small: 200px;--table-size-medium: 400px;--table-size-large: 600px;--table-size-extra-large: 800px;border:1px solid var(--ymt-outline-variant);max-width:100%;overflow:auto}:host header{display:flex;justify-content:space-between;background-color:var(--ymt-surface-panel-grey)}:host header h3{text-align:start;-webkit-user-select:none;user-select:none;flex:0 1 auto;padding:1rem;margin:0;color:var(--ymt-text-color-subtle);border-radius:2px;font:var(--ymt-font-body-subtle);font-weight:400}:host .actions-row{max-width:34px;padding:0}:host.yuv-data-grid{display:block}:host.yuv-data-grid .table-wrapper{overflow:auto;position:relative;white-space:nowrap}:host.yuv-data-grid .table-wrapper.small{height:var(--table-size-small)}:host.yuv-data-grid .table-wrapper.medium{height:var(--table-size-medium)}:host.yuv-data-grid .table-wrapper.large{height:var(--table-size-large)}:host.yuv-data-grid .table-wrapper.extra-large{height:var(--table-size-extra-large)}:host.yuv-data-grid ::ng-deep .cdk-header-cell:not(:last-child){padding:.5rem 1rem}:host.yuv-data-grid ::ng-deep table{border-spacing:0}:host.yuv-data-grid ::ng-deep th{border-bottom:1px solid var(--ymt-outline-variant);border-right:1px solid var(--ymt-outline-variant);padding:.5rem 0}:host.yuv-data-grid ::ng-deep thead{background-color:var(--ymt-surface-panel)}:host.yuv-data-grid ::ng-deep tr.cdk-row{cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease-in-out}:host.yuv-data-grid ::ng-deep tr.cdk-row:hover td{border-top:1px solid var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-surface-panel)}:host.yuv-data-grid ::ng-deep tr.cdk-row:hover:has(.actions-row) td.cdk-cell.actions-row.sticky{opacity:1}:host.yuv-data-grid ::ng-deep tr.cdk-row.selected-row{color:var(--ymt-text-color-subtle)}:host.yuv-data-grid ::ng-deep tr.cdk-row td{border-bottom:1px solid transparent;border-top:1px solid transparent}:host.yuv-data-grid ::ng-deep tr.cdk-row td:not(:last-child){padding:.5rem 1rem}:host.yuv-data-grid ::ng-deep .cdk-table .cdk-header-row th[role=columnheader]{font-weight:500}:host.yuv-data-grid th.cdk-header-cell.sticky-column{position:sticky;top:0;background-color:var(--ymt-surface-panel)}:host.yuv-data-grid td.cdk-cell.actions-row.sticky{position:sticky;right:0;opacity:0;background-color:var(--ymt-surface-panel);transition:opacity .2s ease-in-out}:host .table-options-menu-bar-item,:host .table-options-add-row{cursor:pointer;border:none;-webkit-user-select:none;user-select:none;min-width:34px;line-height:26px;padding:0;display:flex;align-items:center;justify-content:center}.mat-column-actions{background-color:#f0f0f0;width:40px}.table-options-menu{display:inline-flex;flex-direction:column;max-width:280px;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-3xs) 0}.table-options-menu .table-options-menu-item{background-color:transparent;cursor:pointer;border:none;border-radius:0;-webkit-user-select:none;user-select:none;display:flex;align-items:center;flex-direction:row;flex:1}.table-options-menu .table-options-menu-item:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}.table-options-menu .table-options-menu-item>span{display:flex;flex-direction:row;flex:1;justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
286
298
|
}
|
|
287
299
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DataGridComponent, decorators: [{
|
|
288
300
|
type: Component,
|
|
289
|
-
args: [{ selector: 'yuv-data-grid', standalone: true, imports: [CommonModule, NgClass, MatIconModule, MatButtonModule,
|
|
301
|
+
args: [{ selector: 'yuv-data-grid', standalone: true, imports: [CommonModule, NgClass, MatMenu, MatMenuTrigger, MatIconModule, MatButtonModule, MatTableModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
290
302
|
{
|
|
291
303
|
provide: NG_VALUE_ACCESSOR,
|
|
292
304
|
useExisting: forwardRef(() => DataGridComponent),
|
|
@@ -295,7 +307,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImpo
|
|
|
295
307
|
DecimalPipe
|
|
296
308
|
], host: {
|
|
297
309
|
class: 'yuv-data-grid'
|
|
298
|
-
}, template: "<header>\n <h3>{{ tableLabel() }}</h3>\n @if (!readonly()) {\n <button
|
|
310
|
+
}, template: "<header>\n <h3>{{ tableLabel() }}</h3>\n @if (!readonly()) {\n <button (click)=\"addRow()\" class=\"table-options-add-row\">\n <mat-icon>add</mat-icon>\n </button>\n }\n</header>\n@let displayedCol = displayedColumns();\n@let displayedColActions = displayedColumnsWithActions();\n<div class=\"table-wrapper\" [ngClass]=\"size()\">\n <table mat-table [dataSource]=\"dataSource()\" class=\"mat-elevation-z8\">\n @for (column of displayedCol; track column) {\n <ng-container [matColumnDef]=\"column.columnDef\">\n <th mat-header-cell *matHeaderCellDef [attr.aria-label]=\"column.header\" [title]=\"column.header\">{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ column.cell(element) }}</td>\n </ng-container>\n }\n\n @if (!readonly()) {\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions-row\" aria-label=\"row actions\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"actions-row\">\n <!-- Only show the button in the last (empty) row -->\n <button class=\"table-options-menu-bar-item\" [matMenuTriggerFor]=\"menu\" (click)=\"onMenuTriggert(element)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColActions; sticky: ['header-1']\"></tr>\n @if (!readonly()) {\n <tr (dblclick)=\"editRow(row)\" [class.selected-row]=\"row === selectedRow()\" mat-row *matRowDef=\"let row; columns: displayedColActions\"></tr>\n } @else {\n <tr mat-row *matRowDef=\"let row; columns: displayedColActions\"></tr>\n }\n </table>\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"copyLine(selectedRow())\">{{ 'yuv.form.element.data.grid.copy' | translate }}</button>\n <button mat-menu-item (click)=\"editRow(selectedRow())\">{{ 'yuv.form.element.data.grid.edit' | translate }}</button>\n <button mat-menu-item (click)=\"removeRow(selectedRow())\">{{ 'yuv.form.element.data.grid.remove' | translate }}</button>\n</mat-menu>\n", styles: [":host{--table-size-small: 200px;--table-size-medium: 400px;--table-size-large: 600px;--table-size-extra-large: 800px;border:1px solid var(--ymt-outline-variant);max-width:100%;overflow:auto}:host header{display:flex;justify-content:space-between;background-color:var(--ymt-surface-panel-grey)}:host header h3{text-align:start;-webkit-user-select:none;user-select:none;flex:0 1 auto;padding:1rem;margin:0;color:var(--ymt-text-color-subtle);border-radius:2px;font:var(--ymt-font-body-subtle);font-weight:400}:host .actions-row{max-width:34px;padding:0}:host.yuv-data-grid{display:block}:host.yuv-data-grid .table-wrapper{overflow:auto;position:relative;white-space:nowrap}:host.yuv-data-grid .table-wrapper.small{height:var(--table-size-small)}:host.yuv-data-grid .table-wrapper.medium{height:var(--table-size-medium)}:host.yuv-data-grid .table-wrapper.large{height:var(--table-size-large)}:host.yuv-data-grid .table-wrapper.extra-large{height:var(--table-size-extra-large)}:host.yuv-data-grid ::ng-deep .cdk-header-cell:not(:last-child){padding:.5rem 1rem}:host.yuv-data-grid ::ng-deep table{border-spacing:0}:host.yuv-data-grid ::ng-deep th{border-bottom:1px solid var(--ymt-outline-variant);border-right:1px solid var(--ymt-outline-variant);padding:.5rem 0}:host.yuv-data-grid ::ng-deep thead{background-color:var(--ymt-surface-panel)}:host.yuv-data-grid ::ng-deep tr.cdk-row{cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease-in-out}:host.yuv-data-grid ::ng-deep tr.cdk-row:hover td{border-top:1px solid var(--ymt-surface-panel);border-bottom:1px solid var(--ymt-surface-panel)}:host.yuv-data-grid ::ng-deep tr.cdk-row:hover:has(.actions-row) td.cdk-cell.actions-row.sticky{opacity:1}:host.yuv-data-grid ::ng-deep tr.cdk-row.selected-row{color:var(--ymt-text-color-subtle)}:host.yuv-data-grid ::ng-deep tr.cdk-row td{border-bottom:1px solid transparent;border-top:1px solid transparent}:host.yuv-data-grid ::ng-deep tr.cdk-row td:not(:last-child){padding:.5rem 1rem}:host.yuv-data-grid ::ng-deep .cdk-table .cdk-header-row th[role=columnheader]{font-weight:500}:host.yuv-data-grid th.cdk-header-cell.sticky-column{position:sticky;top:0;background-color:var(--ymt-surface-panel)}:host.yuv-data-grid td.cdk-cell.actions-row.sticky{position:sticky;right:0;opacity:0;background-color:var(--ymt-surface-panel);transition:opacity .2s ease-in-out}:host .table-options-menu-bar-item,:host .table-options-add-row{cursor:pointer;border:none;-webkit-user-select:none;user-select:none;min-width:34px;line-height:26px;padding:0;display:flex;align-items:center;justify-content:center}.mat-column-actions{background-color:#f0f0f0;width:40px}.table-options-menu{display:inline-flex;flex-direction:column;max-width:280px;background-color:var(--ymt-surface-panel);border:1px solid var(--ymt-outline-variant);padding:var(--ymt-spacing-3xs) 0}.table-options-menu .table-options-menu-item{background-color:transparent;cursor:pointer;border:none;border-radius:0;-webkit-user-select:none;user-select:none;display:flex;align-items:center;flex-direction:row;flex:1}.table-options-menu .table-options-menu-item:not(:last-child){border-block-end:1px solid var(--ymt-outline-variant)}.table-options-menu .table-options-menu-item>span{display:flex;flex-direction:row;flex:1;justify-content:flex-end}\n"] }]
|
|
299
311
|
}] });
|
|
300
312
|
|
|
301
313
|
class DatetimeComponent extends AbstractMatFormField {
|
|
@@ -1049,7 +1061,7 @@ class OrganizationComponent extends AbstractMatFormField {
|
|
|
1049
1061
|
super.onNgOnDestroy();
|
|
1050
1062
|
}
|
|
1051
1063
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: OrganizationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1052
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.12", type: OrganizationComponent, isStandalone: true, selector: "yuv-organization", inputs: { situation: { classPropertyName: "situation", publicName: "situation", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, classifications: { classPropertyName: "classifications", publicName: "classifications", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, excludeMe: { classPropertyName: "excludeMe", publicName: "excludeMe", isSignal: true, isRequired: false, transformFunction: null }, withMetadata: { classPropertyName: "withMetadata", publicName: "withMetadata", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: MatFormFieldControl, useExisting: OrganizationComponent }], usesInheritance: true, ngImport: i0, template: "<yuv-autocomplete\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n #autocomplete\n [placeholder]=\"placeholder\"\n [disabled]=\"readonly()\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n [maxItems]=\"multiselect() ? (-1) : 1\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #optionTemplate let-item>\n <span class=\"chip\">{{ item.value.user.title }}</span>\n </ng-template>\n\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\" [ngClass]=\"{ notFound: item.value.state.notFound }\" [matTooltip]=\"item.value.titleString\">\n {{ item.value.user.title || '...' }}\n </span>\n </ng-template>\n</yuv-autocomplete>\n\n<mat-icon [matTooltip]=\"'yuv.form.element.organization.classify.icon.title' | translate\">{{ multiselect() ? 'group' : 'person' }}</mat-icon>\n", styles: [":host{display:flex;align-items:center}:host .chip.notFound{color:var(--ymt-on-danger-container);text-decoration:line-through}:host .chip.notFound:before{content:\"!\";display:inline-block;background-color:var(--ymt-danger-container);color:#fff;border-radius:2px;padding-inline:.3em;text-decoration:none;margin-inline-end:.75em}:host yuv-autocomplete{flex:1}:host yuv-icon.classify{width:18px;height:18px;padding:var(--ymt-spacing-3xs);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: YuvAutocompleteModule }, { kind: "component", type: i3$
|
|
1064
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.12", type: OrganizationComponent, isStandalone: true, selector: "yuv-organization", inputs: { situation: { classPropertyName: "situation", publicName: "situation", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, classifications: { classPropertyName: "classifications", publicName: "classifications", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, excludeMe: { classPropertyName: "excludeMe", publicName: "excludeMe", isSignal: true, isRequired: false, transformFunction: null }, withMetadata: { classPropertyName: "withMetadata", publicName: "withMetadata", isSignal: true, isRequired: false, transformFunction: null } }, providers: [{ provide: MatFormFieldControl, useExisting: OrganizationComponent }], usesInheritance: true, ngImport: i0, template: "<yuv-autocomplete\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n #autocomplete\n [placeholder]=\"placeholder\"\n [disabled]=\"readonly()\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n [maxItems]=\"multiselect() ? (-1) : 1\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #optionTemplate let-item>\n <span class=\"chip\">{{ item.value.user.title }}</span>\n </ng-template>\n\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\" [ngClass]=\"{ notFound: item.value.state.notFound }\" [matTooltip]=\"item.value.titleString\">\n {{ item.value.user.title || '...' }}\n </span>\n </ng-template>\n</yuv-autocomplete>\n\n<mat-icon [matTooltip]=\"'yuv.form.element.organization.classify.icon.title' | translate\">{{ multiselect() ? 'group' : 'person' }}</mat-icon>\n", styles: [":host{display:flex;align-items:center}:host .chip.notFound{color:var(--ymt-on-danger-container);text-decoration:line-through}:host .chip.notFound:before{content:\"!\";display:inline-block;background-color:var(--ymt-danger-container);color:#fff;border-radius:2px;padding-inline:.3em;text-decoration:none;margin-inline-end:.75em}:host yuv-autocomplete{flex:1}:host yuv-icon.classify{width:18px;height:18px;padding:var(--ymt-spacing-3xs);color:var(--ymt-text-color-subtle)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: YuvAutocompleteModule }, { kind: "component", type: i3$1.AutocompleteComponent, selector: "yuv-autocomplete", inputs: ["ariaLabel", "busy", "multiple", "distinctValues", "addOnBlur", "minLength", "maxItems", "forceSelection", "autocompleteValues"], outputs: ["autocompleteFnc"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
1053
1065
|
}
|
|
1054
1066
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: OrganizationComponent, decorators: [{
|
|
1055
1067
|
type: Component,
|
|
@@ -1084,7 +1096,7 @@ class DateRangePickerComponent {
|
|
|
1084
1096
|
this.#dialogRef.close(this.form.value.range);
|
|
1085
1097
|
}
|
|
1086
1098
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DateRangePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1087
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.12", type: DateRangePickerComponent, isStandalone: true, selector: "yuv-date-range-picker", inputs: { range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rangeChange: "rangeChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"apply()\">\n <h2>{{ 'yuv.form.element.range-select-date.custom.overlay.title' | translate }}</h2>\n <yuv-datetime-range [withTime]=\"false\" formControlName=\"range\"></yuv-datetime-range>\n <button class=\"primary\" [disabled]=\"form.invalid\">{{ 'yuv.form.element.range-select-date.custom.overlay.button.apply' | translate }}</button>\n</form>\n", styles: [":host form{display:grid;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"title title\" \"input input\" \". button\";gap:var(--ymt-spacing-m);padding:var(--ymt-spacing-m)}:host form h2{grid-area:title;margin:0}:host form yuv-datetime-range{grid-area:input;border:1px solid var(--ymt-text-color-subtle);padding:1px 2px;border-radius:2px}:host form button{grid-area:button}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type:
|
|
1099
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.12", type: DateRangePickerComponent, isStandalone: true, selector: "yuv-date-range-picker", inputs: { range: { classPropertyName: "range", publicName: "range", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rangeChange: "rangeChange" }, ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"apply()\">\n <h2>{{ 'yuv.form.element.range-select-date.custom.overlay.title' | translate }}</h2>\n <yuv-datetime-range [withTime]=\"false\" formControlName=\"range\"></yuv-datetime-range>\n <button class=\"primary\" [disabled]=\"form.invalid\">{{ 'yuv.form.element.range-select-date.custom.overlay.button.apply' | translate }}</button>\n</form>\n", styles: [":host form{display:grid;grid-template-columns:1fr auto;grid-template-rows:repeat(3,auto);grid-template-areas:\"title title\" \"input input\" \". button\";gap:var(--ymt-spacing-m);padding:var(--ymt-spacing-m)}:host form h2{grid-area:title;margin:0}:host form yuv-datetime-range{grid-area:input;border:1px solid var(--ymt-text-color-subtle);padding:1px 2px;border-radius:2px}:host form button{grid-area:button}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: DatetimeRangeComponent, selector: "yuv-datetime-range", inputs: ["withTime", "readonly", "operator", "situation"] }] }); }
|
|
1088
1100
|
}
|
|
1089
1101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DateRangePickerComponent, decorators: [{
|
|
1090
1102
|
type: Component,
|
|
@@ -1589,11 +1601,11 @@ class StringComponent extends AbstractMatFormField {
|
|
|
1589
1601
|
super.onNgOnDestroy();
|
|
1590
1602
|
}
|
|
1591
1603
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: StringComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1592
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: StringComponent, isStandalone: true, selector: "yuv-string", inputs: { multiselect: "multiselect", rows: "rows", readonly: "readonly", autofocus: "autofocus", classifications: "classifications", situation: "situation", regex: "regex", minLength: "minLength", maxLength: "maxLength" }, providers: [{ provide: MatFormFieldControl, useExisting: StringComponent }], usesInheritance: true, ngImport: i0, template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input matInput type=\"text\" (blur)=\"onBlur()\" [disabled]=\"disabled\" [readonly]=\"readonly\" [formControl]=\"fc\" />\n} @else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <mat-chip-grid #chipGrid [formControl]=\"fc\" [disabled]=\"disabled\">\n @for (v of value; track v) {\n <mat-chip-row (removed)=\"chipsRemove(v)\" [editable]=\"true\" (edited)=\"chipsEdit(v, $event)\">\n {{ v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"disabled\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"chipsAdd($event)\"\n />\n </mat-chip-grid>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n matInput\n class=\"input-textarea\"\n (blur)=\"onBlur()\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [formControl]=\"fc\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <mat-icon>{{ classify.icon }}</mat-icon>\n </a>\n } @else {\n <mat-icon>{{ classify.icon }}</mat-icon>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-flow:row nowrap;flex:1;align-items:center
|
|
1604
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: StringComponent, isStandalone: true, selector: "yuv-string", inputs: { multiselect: "multiselect", rows: "rows", readonly: "readonly", autofocus: "autofocus", classifications: "classifications", situation: "situation", regex: "regex", minLength: "minLength", maxLength: "maxLength" }, providers: [{ provide: MatFormFieldControl, useExisting: StringComponent }], usesInheritance: true, ngImport: i0, template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input matInput type=\"text\" (blur)=\"onBlur()\" [disabled]=\"disabled\" [readonly]=\"readonly\" [formControl]=\"fc\" />\n} @else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <mat-chip-grid #chipGrid [formControl]=\"fc\" [disabled]=\"disabled\">\n @for (v of value; track v) {\n <mat-chip-row (removed)=\"chipsRemove(v)\" [editable]=\"true\" (edited)=\"chipsEdit(v, $event)\">\n {{ v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"disabled\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"chipsAdd($event)\"\n />\n </mat-chip-grid>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n matInput\n class=\"input-textarea\"\n (blur)=\"onBlur()\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [formControl]=\"fc\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <mat-icon>{{ classify.icon }}</mat-icon>\n </a>\n } @else {\n <mat-icon>{{ classify.icon }}</mat-icon>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-flow:row nowrap;flex:1;align-items:center}:host:has(mat-chip-grid){overflow-x:auto}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;border:0;outline:0}:host input{display:flex;flex-wrap:wrap;align-items:center;width:100%;border:0;outline:0;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$3.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i1$3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i1$3.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i1$3.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }] }); }
|
|
1593
1605
|
}
|
|
1594
1606
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: StringComponent, decorators: [{
|
|
1595
1607
|
type: Component,
|
|
1596
|
-
args: [{ selector: 'yuv-string', standalone: true, imports: [CommonModule, MatChipsModule, MatIconModule, ReactiveFormsModule, FormsModule], providers: [{ provide: MatFormFieldControl, useExisting: StringComponent }], template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input matInput type=\"text\" (blur)=\"onBlur()\" [disabled]=\"disabled\" [readonly]=\"readonly\" [formControl]=\"fc\" />\n} @else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <mat-chip-grid #chipGrid [formControl]=\"fc\" [disabled]=\"disabled\">\n @for (v of value; track v) {\n <mat-chip-row (removed)=\"chipsRemove(v)\" [editable]=\"true\" (edited)=\"chipsEdit(v, $event)\">\n {{ v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"disabled\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"chipsAdd($event)\"\n />\n </mat-chip-grid>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n matInput\n class=\"input-textarea\"\n (blur)=\"onBlur()\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [formControl]=\"fc\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <mat-icon>{{ classify.icon }}</mat-icon>\n </a>\n } @else {\n <mat-icon>{{ classify.icon }}</mat-icon>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-flow:row nowrap;flex:1;align-items:center
|
|
1608
|
+
args: [{ selector: 'yuv-string', standalone: true, imports: [CommonModule, MatChipsModule, MatIconModule, ReactiveFormsModule, FormsModule], providers: [{ provide: MatFormFieldControl, useExisting: StringComponent }], template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input matInput type=\"text\" (blur)=\"onBlur()\" [disabled]=\"disabled\" [readonly]=\"readonly\" [formControl]=\"fc\" />\n} @else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <mat-chip-grid #chipGrid [formControl]=\"fc\" [disabled]=\"disabled\">\n @for (v of value; track v) {\n <mat-chip-row (removed)=\"chipsRemove(v)\" [editable]=\"true\" (edited)=\"chipsEdit(v, $event)\">\n {{ v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"disabled\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"chipsAdd($event)\"\n />\n </mat-chip-grid>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n matInput\n class=\"input-textarea\"\n (blur)=\"onBlur()\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [formControl]=\"fc\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <mat-icon>{{ classify.icon }}</mat-icon>\n </a>\n } @else {\n <mat-icon>{{ classify.icon }}</mat-icon>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-flow:row nowrap;flex:1;align-items:center}:host:has(mat-chip-grid){overflow-x:auto}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;border:0;outline:0}:host input{display:flex;flex-wrap:wrap;align-items:center;width:100%;border:0;outline:0;background:transparent}\n"] }]
|
|
1597
1609
|
}], propDecorators: { multiselect: [{
|
|
1598
1610
|
type: Input
|
|
1599
1611
|
}], rows: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-client-framework-forms.mjs","sources":["../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/edit-table-data/edit-data.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/edit-table-data/edit-data.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/model/data-grid.interface.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/data-grid/data-grid.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/data-grid/data-grid.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime/datetime.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime/datetime.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime-range/datetime-range.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime-range/datetime-range.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/number/number.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/number-range/number-range.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/number-range/number-range.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/organization/organization.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/organization/organization.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/date-range-picker/date-range-picker.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/date-range-picker/date-range-picker.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/range-select-date.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/range-select-date.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-filesize/range-select-filesize.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-filesize/range-select-filesize.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/string/string.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/string/string.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/catalog/catalog.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/catalog/catalog.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/forms.module.ts","../../../../../libs/yuuvis/client-framework/forms/src/yuuvis-client-framework-forms.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, inject, input, OnInit, signal } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { ObjectFormTranslateService, ObjectTypeField, Situation, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { MetadataFormFieldComponent } from '@yuuvis/client-framework/metadata-form';\n\n@Component({\n selector: 'yuv-edit-table-data',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatDialogModule, MatButtonModule, MatFormFieldModule, MetadataFormFieldComponent, TranslateModule],\n templateUrl: './edit-data.component.html',\n styleUrl: './edit-data.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditTableDataComponent),\n multi: true\n }\n ]\n})\nexport class EditTableDataComponent<T = any> implements OnInit {\n readonly #fb = inject(FormBuilder);\n readonly #system = inject(SystemService);\n readonly #errorMessage = inject(ObjectFormTranslateService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<EditTableDataComponent>);\n\n errorMessage = signal<any[] | null>(null);\n tableForm: FormGroup = this.#fb.group({});\n\n isInnerTableForm = input(true);\n\n formElement: { [key: string]: any } = this.#dialogData.formElement || {};\n columns: ObjectTypeField[] = (this.formElement['elements'] || []).map((c: any) => {\n return {\n ...c,\n propertyType: c.type,\n _internalType: this.#system.getInternalFormElementType(c.type, c.classification)\n };\n });\n #elementData: T = this.#dialogData.elementData || ({} as T);\n situation: Situation = this.#dialogData.situation || Situation.EDIT;\n header = this.#dialogData.label || '';\n adding = this.#dialogData.adding;\n\n cancel() {\n this.#dialogRef.close({});\n }\n\n submit() {\n if (this.tableForm.valid && this.#dialogRef) this.#dialogRef.close(this.tableForm.getRawValue());\n }\n\n ngOnInit() {\n Object.values(this.formElement['elements']).forEach((element: any) => {\n return this.tableForm.addControl(\n element.name,\n this.#fb.control({ value: '', disabled: element.readonly }, element.required ? Validators.required : null)\n );\n });\n this.tableForm.setValidators(this.#globalErrorValidator());\n this.#elementData && this.tableForm.patchValue(this.#elementData);\n\n this.tableForm.valueChanges.subscribe((v) => {\n this.errorMessage.set(\n this.tableForm.errors\n ? Object.keys(this.tableForm.errors).map((key) =>\n this.tableForm.errors && this.tableForm.errors[key]\n ? Object.keys(this.tableForm.errors[key]).map((k) => ({ [key]: this.#errorMessage.getErrorLabel(k, key) }))\n : null\n )\n : null\n );\n });\n }\n\n #globalErrorValidator() {\n return (control: AbstractControl): ValidationErrors | null => {\n const formGroup = control as FormGroup;\n const errors: ValidationErrors = {};\n\n Object.keys(formGroup.controls).forEach((key) => {\n const control = formGroup.get(key);\n if (control && control.invalid && control.dirty) {\n const controlErrors = control.errors;\n if (controlErrors) {\n // Ignore 'required' error if there are more errors\n if (Object.keys(controlErrors).length > 1 && controlErrors['required']) {\n const { required, ...otherErrors } = controlErrors;\n errors[key] = otherErrors;\n } else {\n errors[key] = controlErrors;\n }\n }\n }\n });\n\n return Object.keys(errors).length ? errors : null;\n };\n }\n}\n","<div [formGroup]=\"tableForm\">\n <h2 mat-dialog-title>{{ 'yuv.form.element.data.grid.edit.headline' | translate: { headline: header } }}</h2>\n\n <mat-dialog-content>\n <div class=\"fields\">\n @for (element of columns; track $index) {\n <div [attr.data-name]=\"element.name\" class=\"form-field\">\n <yuv-metadata-form-field [field]=\"element\" [formControlName]=\"element.name\" [situation]=\"situation\"></yuv-metadata-form-field>\n\n @let errorsGroup = errorMessage();\n @if (errorsGroup && tableForm.errors) {\n <div class=\"err-msg\">\n @for (errors of errorsGroup; track $index) {\n @for (error of errors; track $index) {\n {{ error[element.name] }}\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </mat-dialog-content>\n\n <mat-dialog-actions>\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.form.element.data.grid.edit.cancel' | translate }}</button>\n <button ymtButton=\"primary\" (click)=\"submit()\" [disabled]=\"!tableForm.dirty && !tableForm.valid\">\n @if (adding) {\n {{ 'yuv.form.element.data.grid.edit.add' | translate }}\n } @else {\n {{ 'yuv.form.element.data.grid.edit' | translate }}\n }\n </button>\n </mat-dialog-actions>\n</div>\n","export enum DataGridSizeType {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n XLARGE = 'extra-large',\n AUTO = 'auto'\n}\n\nexport interface DataGridSize {\n extralarge: DataGridSizeType.XLARGE;\n large: DataGridSizeType.LARGE;\n medium: DataGridSizeType.MEDIUM;\n small: DataGridSizeType.SMALL;\n auto: DataGridSizeType.AUTO;\n}\n","import { CdkMenu, CdkMenuItem, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule, DecimalPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, forwardRef, inject, input, signal, untracked } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { ClipboardService, Situation, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { map } from 'rxjs';\nimport { EditTableDataComponent } from '../edit-table-data/edit-data.component';\nimport { DataGridSizeType } from '../model/data-grid.interface';\n\nconst CDK_IMPORT = [CdkMenu, CdkTableModule, CdkMenuTrigger, CdkMenuItem];\n@Component({\n selector: 'yuv-data-grid',\n standalone: true,\n imports: [CommonModule, NgClass, MatIconModule, MatButtonModule, TranslateModule, ...CDK_IMPORT],\n templateUrl: './data-grid.component.html',\n styleUrl: './data-grid.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DataGridComponent),\n multi: true\n },\n DecimalPipe\n ],\n host: {\n class: 'yuv-data-grid'\n }\n})\nexport class DataGridComponent implements ControlValueAccessor {\n readonly #dialog = inject(MatDialog);\n readonly #clipboardService = inject(ClipboardService);\n readonly #decimalPipe = inject(DecimalPipe);\n readonly trnaslate = inject(TranslateService);\n\n situation = input<Situation>(Situation.EDIT);\n formElement = input<Record<string, any> | undefined>(undefined);\n formControl = input<any>(undefined);\n classifications = input<string[]>([]);\n readonly = input<boolean>(false);\n\n size = input<DataGridSizeType>(DataGridSizeType.AUTO);\n\n displayedColumns = signal<any[]>([]);\n displayedColumnsWithActions = signal<string[]>([]);\n dataSource = signal<any[]>([]);\n\n tableLabel = computed(() => this.formElement()?.['label'] ?? '');\n\n selectedRow = signal(null);\n\n initalTableUpdate = true;\n\n icons = {\n add: YUV_ICONS.add,\n more: YUV_ICONS.more\n };\n\n #loadData = effect(() => {\n const formElement = this.formElement();\n untracked(() => formElement && this.#updateTable(formElement['elements'], formElement['value'] || []));\n });\n\n #sourceData = effect(() => {\n const dataSource = this.dataSource();\n !this.initalTableUpdate && this.writeValue(dataSource.filter((row) => !row.isAddRow));\n this.initalTableUpdate = false;\n });\n\n #openEditOverlay(elementData: any | null, adding = false) {\n return this.#dialog\n .open(EditTableDataComponent, {\n data: {\n formElement: {\n ...this.formElement()\n },\n elementData,\n situation: this.situation(),\n adding,\n label: this.tableLabel()\n }\n })\n .afterClosed()\n .pipe(map((result: Record<string, unknown>) => result));\n }\n\n copyLine(element: any) {\n this.#clipboardService.addToNavigatorClipBoard(JSON.stringify(element));\n }\n\n onMenuTriggert(element: any | null) {\n this.selectedRow.set(element);\n }\n\n editRow(element: any) {\n this.selectedRow.set(element);\n this.#openEditOverlay(element).subscribe((result: any) => {\n if (result) {\n const updatedData = this.dataSource().map((item) => (JSON.stringify(item) === JSON.stringify(element) ? result : item));\n const formElement = this.formElement();\n formElement && this.#updateTable(formElement['elements'], [...updatedData]);\n }\n this.selectedRow.set(null);\n });\n }\n\n addRow() {\n this.#openEditOverlay(null, true).subscribe((result: any) => {\n const currentData = this.dataSource();\n const data = [...currentData];\n result && data.push(result);\n const formElement = this.formElement();\n formElement && this.#updateTable(formElement['elements'], data);\n });\n }\n\n removeRow(element: any) {\n const updatedData = this.dataSource().filter((item) => JSON.stringify(item) !== JSON.stringify(element));\n const formElement = this.formElement();\n formElement && this.#updateTable(formElement['elements'], updatedData);\n }\n\n #cellor(element: any, value: string) {\n switch (element.type) {\n case 'string':\n return value;\n break;\n case 'decimal':\n return this.#decimalPipe.transform(value, '1.2-4', this.trnaslate.currentLang);\n break;\n default:\n return value;\n break;\n }\n }\n\n #updateTable(elements: any, data: any[] = []) {\n if (elements.length > 0) {\n this.displayedColumns.set(\n elements.reduce((acc: any, el: any) => {\n acc.push({\n columnDef: el.label,\n header: el.label,\n cell: (element: any) => (element.isAddRow ? '' : this.#cellor(el, element[el.label]))\n });\n return acc;\n }, [])\n );\n } else {\n this.displayedColumns.set([]);\n }\n\n this.displayedColumnsWithActions.set([...this.displayedColumns().map((col) => col.columnDef), 'actions']);\n this.dataSource.set(data);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (fn: () => void) => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n validationChange = () => {};\n\n writeValue(obj: any): void {\n this.propagateChange(obj);\n }\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.validationChange = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n // console.log('setDisabledState: ', isDisabled);\n }\n\n onValueChange(e: any) {\n this.propagateChange(e);\n }\n}\n","<header>\n <h3>{{ tableLabel() }}</h3>\n @if (!readonly()) {\n <button mat-icon-button (click)=\"addRow()\" class=\"table-options-add-row\">\n <mat-icon>add</mat-icon>\n </button>\n }\n</header>\n@let displayedCol = displayedColumns();\n@let displayedColActions = displayedColumnsWithActions();\n<div class=\"table-wrapper\" [ngClass]=\"size()\">\n <table cdk-table [dataSource]=\"dataSource()\">\n <!-- Dynamic Columns -->\n @for (column of displayedCol; track $index) {\n <ng-container [cdkColumnDef]=\"column.columnDef\">\n <th class=\"sticky-column\" cdk-header-cell *cdkHeaderCellDef>{{ column.header }}</th>\n <td cdk-cell *cdkCellDef=\"let element\">{{ column.cell(element) }}</td>\n </ng-container>\n }\n\n <!-- Actions Column (Not in displayedColumns) -->\n <ng-container cdkColumnDef=\"actions\">\n <th class=\"actions-header sticky-column\" cdk-header-cell *cdkHeaderCellDef></th>\n <td class=\"actions-row sticky\" cdk-cell *cdkCellDef=\"let element\">\n <!-- Only show the button in the last (empty) row -->\n @if (!readonly()) {\n <button\n mat-icon-button\n class=\"table-options-menu-bar-item\"\n cdkMenuItem\n (cdkMenuOpened)=\"onMenuTriggert(element)\"\n (cdkMenuClosed)=\"onMenuTriggert(null)\"\n [cdkMenuTriggerFor]=\"options\"\n [cdkMenuTriggerData]=\"{ element: element }\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n }\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"displayedColActions\"></tr>\n @if (!readonly()) {\n <tr (dblclick)=\"editRow(row)\" [class.selected-row]=\"row === selectedRow()\" cdk-row *cdkRowDef=\"let row; columns: displayedColActions\"></tr>\n } @else {\n <tr cdk-row *cdkRowDef=\"let row; columns: displayedColActions\"></tr>\n }\n </table>\n</div>\n<ng-template #options let-element=\"element\">\n <div class=\"table-options-menu\" cdkMenu>\n <button class=\"table-options-menu-item\" (click)=\"copyLine(element)\" cdkMenuItem>{{ 'yuv.form.element.data.grid.copy' | translate }}</button>\n <button class=\"table-options-menu-item\" cdkMenuItem (click)=\"editRow(element)\">{{ 'yuv.form.element.data.grid.edit' | translate }}</button>\n <button class=\"table-options-menu-item\" cdkMenuItem (click)=\"removeRow(element)\">{{ 'yuv.form.element.data.grid.remove' | translate }}</button>\n </div>\n</ng-template>\n","import { Component, OnInit, effect, inject, input, signal, viewChild } from '@angular/core';\nimport { ControlValueAccessor, FormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { DatepickerComponent, DatepickerLabels, YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';\n@Component({\n selector: 'yuv-datetime',\n standalone: true,\n imports: [FormsModule, YuvDatepickerModule, MatInputModule, MatDatepickerModule],\n templateUrl: './datetime.component.html',\n styleUrl: './datetime.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: DatetimeComponent }]\n})\nexport class DatetimeComponent extends AbstractMatFormField<Date | null> implements ControlValueAccessor, OnInit {\n private translate = inject(TranslateService);\n\n pickerCmp = viewChild.required(DatepickerComponent);\n \n\n labels?: DatepickerLabels;\n override ngControl = injectNgControl(this);\n\n _locale = signal<string>(this.translate.currentLang);\n locale = input<string>(this.translate.currentLang);\n #localeEffect = effect(() => {\n this._locale.set(this.locale() || this.translate.currentLang);\n });\n /**\n * Whether or not to allow only values in the future (default: false)\n */\n onlyFutureDates = input<boolean>(false);\n /**\n * Will prevent the input from being changed (default: false)\n */\n readonly = input<boolean>(false);\n /**\n * Whether to show the calendar icon that opens the date picker calendar (default: true)\n */\n calendar = input<boolean>(true);\n\n /**\n * Enables setting time as well (default: false)\n */\n withTime = input<boolean>(false);\n\n #setLabels() {\n this.labels = {\n calendarApply: this.translate.instant('yuv.form.element.datetime.calendar.select'),\n calendarCancel: this.translate.instant('yuv.form.element.datetime.calendar.cancel'),\n shortcut: { today: this.translate.instant('yuv.form.element.datetime.calendar.today') }\n };\n }\n\n openCalendar() {\n this.pickerCmp().openCalendar();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (fn: () => void) => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n validationChange = () => {};\n\n writeValue(value: any): void {\n if (typeof value === 'string') {\n value = new Date(value);\n this.propagateChange(value);\n }\n this.value = value || null;\n }\n\n registerOnChange(fn: () => void): void {\n this.propagateChange = fn;\n }\n\n registerOnValidatorChange?(fn: () => void): void {\n this.validationChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n onValueChange(e: any) {\n this.propagateChange(this.withTime() ? e : e.toISOString().split('T')[0]);\n }\n\n ngOnInit(): void {\n this.focusHandled.set(true)\n this.#setLabels();\n this.translate.onLangChange.subscribe((e: LangChangeEvent) => this._locale.set(e.lang));\n }\n}\n","<yuv-datepicker\n [calendar]=\"calendar()\"\n [disabled]=\"readonly()\"\n [withTime]=\"withTime()\"\n [locale]=\"_locale()\"\n [labels]=\"labels!\"\n [onlyFutureDates]=\"onlyFutureDates()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"\n></yuv-datepicker>\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { Operator, OperatorLabel, RangeValue, Situation } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { DatetimeComponent } from '../datetime/datetime.component';\n\n@Component({\n selector: 'yuv-datetime-range',\n standalone: true,\n imports: [CommonModule, FormsModule, MatDatepickerModule, MatSelectModule, ReactiveFormsModule, DatetimeComponent],\n templateUrl: './datetime-range.component.html',\n styleUrl: './datetime-range.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: DatetimeRangeComponent }]\n})\nexport class DatetimeRangeComponent extends AbstractMatFormField<RangeValue> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n /**\n * Enables setting time as well (default: false)\n */\n @Input() withTime = false;\n /**\n * Will prevent the input from being changed (default: false)\n */\n @Input() readonly = false;\n @Input() operator = 'eq';\n @Input() situation?: string;\n\n private _isValid = true;\n override ngControl = injectNgControl(this);\n\n // options for search situation\n availableSearchOptions = [\n { label: OperatorLabel.EQUAL, value: Operator.EQUAL },\n { label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },\n { label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },\n { label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }\n ];\n\n public rangeForm = new FormGroup({\n dateValue: new FormControl<Date | undefined>(undefined, { nonNullable: true, validators: [Validators.required] }),\n operator: new FormControl<Operator>(this.availableSearchOptions[1].value, { nonNullable: true }),\n dateValueFrom: new FormControl<Date | undefined>(undefined, { nonNullable: true })\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: RangeValue): void {\n if (value && (value.firstValue || value.secondValue)) {\n const match = this.availableSearchOptions.find((o) => o.value === value.operator);\n this.value = value;\n this.rangeForm.patchValue({\n dateValueFrom: (value.secondValue as Date) && (value.firstValue as Date),\n operator: match ? match.value : this.availableSearchOptions[0].value,\n dateValue: (value.secondValue as Date) || (value.firstValue as Date)\n });\n } else {\n this.rangeForm.patchValue({\n operator: this.availableSearchOptions[0].value\n });\n this.value = null;\n this.rangeForm.reset();\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n #onValueChange() {\n const dateValue = this.rangeForm.value.dateValue || undefined;\n const operator = this.rangeForm.value.operator as Operator;\n if (operator === Operator.INTERVAL_INCLUDE_BOTH) {\n const dateValueFrom = this.rangeForm.value.dateValueFrom || undefined;\n\n if (dateValueFrom || dateValue) {\n this._isValid = this.rangeForm.valid && !!dateValueFrom && !!dateValue;\n this.value = !this._isValid\n ? null\n : {\n operator,\n firstValue: dateValueFrom,\n secondValue: dateValue\n };\n }\n } else {\n this._isValid = this.rangeForm.valid;\n this.value = !this._isValid\n ? null\n : {\n operator,\n firstValue: dateValue,\n secondValue: undefined\n };\n }\n\n this.propagateChange(this.value);\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n let err;\n const operator = control.value.operator as Operator;\n if (operator === Operator.EQUAL) {\n err = {\n datecontrol: {\n valid: false\n }\n };\n } else {\n // make sure that on ranges, the first value is earlier than the last\n if (operator === Operator.INTERVAL_INCLUDE_BOTH && control.value && control.value.firstValue && control.value.secondValue) {\n this._isValid = new Date(control.value.firstValue as Date).getTime() < new Date(control.value.secondValue as Date).getTime();\n err = {\n daterangeorder: {\n valid: false\n }\n };\n } else {\n err = {\n daterange: {\n valid: false\n }\n };\n }\n }\n return this.situation === Situation.SEARCH || this._isValid ? null : err;\n };\n }\n\n ngOnInit(): void {\n this.rangeForm.setValidators(this.#getValidator());\n this.rangeForm.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.situation === Situation.SEARCH || this._isValid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.rangeForm.errors);\n }\n });\n this.rangeForm.updateValueAndValidity();\n this.rangeForm.valueChanges.subscribe(() => this.#onValueChange());\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n @if (rangeForm.value.operator === 'gtelte') {\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValueFrom\"></yuv-datetime>\n }\n\n <mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" formControlName=\"operator\" [disabled]=\"readonly\">\n @for (o of availableSearchOptions; track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValue\"></yuv-datetime>\n</form>\n","import { Component, computed, DestroyRef, effect, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, FormControl, ReactiveFormsModule, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Classification, FileSizePipe, LocaleNumberPipe, TranslateService, Utils } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\n\n/**\n * Creates form input for number values.\n *\n * Implements `ControlValueAccessor` so it can be used within Angular forms.\n *\n * @example\n * <yuv-number [scale]=\"2\"></yuv-number>\n *\n */\n@Component({\n selector: 'yuv-number',\n standalone: true,\n imports: [ReactiveFormsModule],\n template: '<input type=\"string\" [formControl]=\"innerCtrl\" (focus)=\"unformat()\" (blur)=\"format()\" [readonly]=\"readonly()\" />',\n styleUrls: ['./number.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: NumberComponent }]\n})\nexport class NumberComponent extends AbstractMatFormField<number> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n readonly translate = inject(TranslateService);\n\n // innerValue: string | null = null;\n validationErrors: ValidationErrors[] = [];\n transformPipe: LocaleNumberPipe | FileSizePipe = new LocaleNumberPipe(this.translate);\n innerCtrl = new FormControl<string | null>(null);\n override ngControl = injectNgControl(this);\n\n /**\n * Number of decimal places\n */\n scale = input<number | undefined>(undefined);\n #scale = computed<number>(() => Math.min(this.scale() || 0, 30));\n\n /**\n * Overall amount of digits allowed (including decimal places)\n */\n precision = input<number | undefined>(undefined);\n #precision = computed<number>(() => Math.min(this.precision() || 100, 100));\n\n /**\n * Set to true to group number by pattern\n */\n grouping = input<boolean>(false);\n #grouping = computed(() => this.grouping() ?? true);\n\n /**\n * The pattern to group number value by\n */\n groupPattern = input<string | undefined>(undefined);\n\n /**\n * Will prevent the input from being changed (default: false)\n */\n readonly = input<boolean>(false);\n\n /**\n * set minimum input value\n */\n minValue = input<number | undefined>(undefined);\n\n /**\n * set maximum input value\n *\n */\n maxValue = input<number | undefined>(undefined);\n\n /**\n * classification property adds some semantics to the value of this component.\n * If you provide a value of `filesize` numbers typed into the control will be\n * handled like file sizes (calculates differnt units)\n */\n classifications = input<string[]>([]);\n #classificationsEffect = effect(() => {\n const classifications = this.classifications();\n this.transformPipe =\n classifications && classifications.includes(Classification.NUMBER_FILESIZE) ? new FileSizePipe(this.translate) : new LocaleNumberPipe(this.translate);\n });\n\n static betweenTwoNumbers(val: number, minVal: number | undefined, maxVal: number | undefined) {\n const min = !Utils.isEmpty(minVal) ? minVal : -Infinity;\n const max = !Utils.isEmpty(maxVal) ? maxVal : Infinity;\n return val >= (min as number) && val <= (max as number);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: any): void {\n this.value = value != null ? value : null;\n const innerValue = value != null ? this.transformPipe.numberToString(value, this.#grouping(), this.groupPattern(), this.#scale()) : null;\n this.innerCtrl.setValue(innerValue, { emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n // called when the input looses focus\n format() {\n if (!this.readonly() && typeof this.value === 'number' && this.validationErrors.length === 0) {\n this.innerCtrl.patchValue(this.transformPipe.numberToString(this.value, this.#grouping(), this.groupPattern(), this.#scale()), { emitEvent: false });\n }\n }\n\n // called when the input get focus\n unformat() {\n if (!this.readonly() && typeof this.value === 'number' && this.validationErrors.length === 0) {\n this.innerCtrl.patchValue(this.transformPipe.transform(this.value, false), {\n emitEvent: false\n });\n }\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n this.validationErrors = [];\n if (Utils.isEmpty(control.value)) return null;\n const val = this.transformPipe.stringToNumber(control.value);\n // general number validation\n if (isNaN(val) || typeof val !== 'number') {\n this.validationErrors.push({ key: 'number' });\n } else {\n const split = control.value.replaceAll(this.transformPipe.separator, '').split(this.transformPipe.decimalSeparator);\n // check precision\n if (this.#precision() !== undefined) {\n const prePointDigits = this.#precision() - this.#scale();\n if (split[0]?.length > prePointDigits) {\n this.validationErrors.push({ key: 'precision', params: { prePointDigits } });\n }\n }\n // check scale\n if (this.#scale() && split[1]?.length > this.#scale()) {\n this.validationErrors.push({ key: 'scale', params: { scale: this.#scale() } });\n }\n\n // min max\n if (!NumberComponent.betweenTwoNumbers(val, this.minValue(), this.maxValue())) {\n if (Utils.isEmpty(this.minValue())) {\n this.validationErrors.push({ key: 'maxvalue', params: { maxValue: this.maxValue() } });\n } else if (Utils.isEmpty(this.maxValue())) {\n this.validationErrors.push({ key: 'minvalue', params: { minValue: this.minValue() } });\n } else {\n this.validationErrors.push({ key: 'minmax', params: { minValue: this.minValue(), maxValue: this.maxValue() } });\n }\n }\n }\n const e: ValidationErrors = Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err }));\n return this.validationErrors.length ? e : null;\n };\n }\n\n ngOnInit(): void {\n // set up validators once all inputs are set\n this.innerCtrl.setValidators(this.#getValidator());\n this.innerCtrl.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.innerCtrl.invalid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.innerCtrl.errors);\n }\n });\n this.innerCtrl.updateValueAndValidity();\n this.innerCtrl.valueChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n if (Utils.isEmpty(v)) {\n this.value = null;\n this.propagateChange(this.value);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const val = this.transformPipe.stringToNumber(v!);\n if (this.validationErrors.length === 0 && this.value !== val) {\n this.value = val;\n this.propagateChange(this.value);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, forwardRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { Operator, OperatorLabel, RangeValue } from '@yuuvis/client-core';\nimport { NumberComponent } from '../number/number.component';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { AbstractMatFormField } from '@yuuvis/client-framework/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Creates form input for ranges of numeric values.\n *\n * Implements `ControlValueAccessor` so it can be used within Angular forms.\n *\n * @example\n * <yuv-number-range [scale]=\"2\"></yuv-number-range>\n *\n */\n@Component({\n selector: 'yuv-number-range',\n standalone: true,\n imports: [CommonModule, NumberComponent, MatSelectModule, FormsModule, ReactiveFormsModule],\n templateUrl: './number-range.component.html',\n styleUrls: ['./number-range.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: NumberRangeComponent }]\n})\nexport class NumberRangeComponent extends AbstractMatFormField<RangeValue> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n\n /**\n * Number of decimal places\n */\n @Input() scale?: number;\n /**\n * Overall amount of digits allowed (including decimal places)\n */\n @Input() precision?: number;\n /**\n * Set to true to group number by pattern\n */\n @Input() grouping = false;\n /**\n * The pattern to group number value by\n */\n @Input() pattern?: string;\n /**\n * Will prevent the input from being changed (default: false)\n */\n @Input() readonly = false;\n\n /**\n * classification property adds some semantics to the value of this component.\n * If you provide a value of `filesize` numbers typed into the control will be\n * handled like file sizes (calculates differnt units)\n */\n @Input() classifications: string[] = [];\n /**\n * set minimum input value\n */\n @Input() minValue?: number;\n /**\n * set maximum input value\n *\n */\n @Input() maxValue?: number;\n\n private isValid = true;\n\n // options for search situation\n public availableSearchOptions = [\n { label: OperatorLabel.EQUAL, value: Operator.EQUAL },\n { label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },\n { label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },\n { label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }\n ];\n\n public rangeForm = new FormGroup({\n numberValue: new FormControl<number | undefined>(undefined, { nonNullable: true, validators: [Validators.required] }),\n operator: new FormControl<Operator>(this.availableSearchOptions[1].value, { nonNullable: true }),\n numberValueFrom: new FormControl<number | undefined>(undefined, { nonNullable: true })\n });\n\n // constructor() {\n // this.rangeForm.valueChanges.forEach(() => {\n // this.#onValueChange();\n // });\n // }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: RangeValue): void {\n if (value && (value.firstValue != null || value.secondValue != null)) {\n const match = this.availableSearchOptions.find((o) => o.value === value.operator);\n\n this.value = value;\n if (value.secondValue == undefined) {\n this.rangeForm.setValue({\n numberValueFrom: undefined,\n operator: match ? match.value : this.availableSearchOptions[0].value,\n numberValue: (value.firstValue as number) || undefined\n });\n } else {\n this.rangeForm.setValue({\n numberValueFrom: (value.firstValue as number) || undefined,\n operator: match ? match.value : this.availableSearchOptions[0].value,\n numberValue: value.secondValue as number\n });\n }\n } else {\n this.rangeForm.patchValue({\n operator: this.availableSearchOptions[0].value\n });\n this.value = null;\n this.rangeForm.reset();\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n #onValueChange() {\n this.isValid = this.rangeForm.valid;\n const operator = this.rangeForm.value.operator as Operator;\n if (operator === Operator.INTERVAL_INCLUDE_BOTH) {\n this.isValid = this.rangeForm.valid && this.rangeForm.value.numberValueFrom != null && this.rangeForm.value.numberValue != null;\n this.value = !this.isValid\n ? {\n operator,\n firstValue: undefined,\n secondValue: undefined\n }\n : {\n operator,\n firstValue: this.rangeForm.value.numberValueFrom,\n secondValue: this.rangeForm.value.numberValue\n };\n } else {\n this.value = !this.isValid\n ? {\n operator,\n firstValue: undefined,\n secondValue: undefined\n }\n : {\n operator,\n firstValue: this.rangeForm.value.numberValue,\n secondValue: undefined\n };\n }\n this.propagateChange(this.value);\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n let err: any;\n const operator = control.value.operator;\n if (operator === Operator.EQUAL) {\n err = { number: { valid: false } };\n } else if (operator === Operator.INTERVAL_INCLUDE_BOTH && this.value?.firstValue && this.value?.secondValue) {\n // make sure that on ranges, the first value is earlier than the last\n this.isValid = this.value.firstValue < this.value.secondValue;\n err = { numberrangeorder: { valid: false } };\n } else {\n err = { numberrange: { valid: false } };\n }\n return this.isValid ? null : err;\n };\n }\n\n // returns null when valid else the validation object\n public validate() {\n let err: any;\n const operator = this.rangeForm.value.operator;\n if (operator === Operator.EQUAL) {\n err = { number: { valid: false } };\n } else if (operator === Operator.INTERVAL_INCLUDE_BOTH && this.value?.firstValue && this.value?.secondValue) {\n // make sure that on ranges, the first value is earlier than the last\n this.isValid = this.value.firstValue < this.value.secondValue;\n err = { numberrangeorder: { valid: false } };\n } else {\n err = { numberrange: { valid: false } };\n }\n return this.isValid ? null : err;\n }\n\n ngOnInit(): void {\n this.rangeForm.setValidators(this.#getValidator());\n this.rangeForm.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.rangeForm.invalid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.rangeForm.errors);\n }\n });\n this.rangeForm.updateValueAndValidity();\n this.rangeForm.valueChanges.subscribe(() => this.#onValueChange());\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<form class=\"yuv-number-range\" [formGroup]=\"rangeForm\">\n @if (rangeForm.value.operator === 'gtelte') {\n <yuv-number\n class=\"first\"\n [readonly]=\"readonly\"\n [scale]=\"scale\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValueFrom\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n ></yuv-number>\n }\n\n <mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" formControlName=\"operator\" [disabled]=\"readonly\">\n @for (o of availableSearchOptions; track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n\n <yuv-number\n [scale]=\"scale\"\n [readonly]=\"readonly\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValue\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n >\n </yuv-number>\n</form>\n","import { CommonModule } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, input, Input, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Classification, SystemService, TranslateModule, TranslateService, UserService, YuvUser } from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\ninterface UserNode {\n user: YuvUser;\n state: {\n notFound?: boolean;\n };\n titleString?: string;\n}\n\ntype FormControlValue =\n | string\n | {\n id: string;\n title: string;\n };\n\n/**\n * Creates form input for organisation values.\n *\n * @example\n * <yuv-organization [multiselect]=\"true\"></yuv-organization>\n */\n\n@Component({\n selector: 'yuv-organization',\n standalone: true,\n imports: [CommonModule, FormsModule, YuvAutocompleteModule, \n MatTooltipModule,\n MatIconModule, ReactiveFormsModule, TranslateModule],\n templateUrl: './organization.component.html',\n styleUrls: ['./organization.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: OrganizationComponent }]\n})\nexport class OrganizationComponent extends AbstractMatFormField<FormControlValue | FormControlValue[] | undefined> implements ControlValueAccessor, OnInit, OnDestroy {\n #system = inject(SystemService);\n #userService = inject(UserService);\n readonly translate = inject(TranslateService);\n\n minLength = 2;\n busy = signal<boolean>(false);\n\n acFormControl = new FormControl<AutocompleteItem | AutocompleteItem[] | undefined>(undefined);\n override ngControl = injectNgControl(this);\n\n _innerValue: UserNode[] = [];\n set innerValue(iv: UserNode[]) {\n this._innerValue = iv || [];\n }\n get innerValue() {\n return this._innerValue;\n }\n autocompleteRes: AutocompleteItem[] = [];\n #filterRoles: string[] = [];\n\n /**\n * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.\n */\n situation = input<string | undefined>(undefined);\n /**\n * Indicator that multiple strings could be inserted, they will be rendered as chips (default: false).\n */\n multiselect = input<boolean>(false);\n\n /**\n * Additional semantics for the form element.\n */\n private _classifications?: string[];\n @Input() set classifications(c: string[] | undefined) {\n this._classifications = c;\n if (c?.length) {\n const classifications = this.#system.getClassifications(c);\n if (classifications.has(Classification.STRING_ORGANIZATION)) {\n const options = classifications.get(Classification.STRING_ORGANIZATION)!.options;\n this.#filterRoles = options;\n }\n } else {\n this.#filterRoles = [];\n }\n }\n get classifications() {\n return this._classifications;\n }\n\n /**\n * Will prevent the input from being changed (default: false)\n */\n readonly = input<boolean>(false);\n\n /**\n * Whether or not to exclude the current user from autocomplete result\n */\n excludeMe = input<boolean>(false);\n\n /**\n * Whether or not the emitted value should be an object containing id and title\n * or, if set to false only the ID\n */\n withMetadata = input<boolean>(false);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: string | string[]): void {\n if (value) {\n this.value = value;\n this.resolveFn(value);\n } else {\n this.value = null;\n this.innerValue = [];\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n private propagate() {\n this.value = this.#getPropagateValue();\n this.propagateChange(this.value);\n }\n\n #getPropagateValue(): FormControlValue | FormControlValue[] | undefined{\n if (this.multiselect()) {\n return this.innerValue.map((v) => (this.withMetadata() ? { id: v.user.id, title: v.user.title } : v.user.id));\n } else if (this.innerValue.length) {\n return this.withMetadata() ? { id: this.innerValue[0].user.id, title: this.innerValue[0].user.title } : this.innerValue[0].user.id;\n } else return undefined;\n }\n\n resolveFn(value: any) {\n const obs: Observable<UserNode>[] = (value instanceof Array ? value : [value]).map((v) => {\n const valueID = typeof v === 'string' ? v : v.id;\n\n const match: UserNode | undefined = this.innerValue.find((iv) => iv.user.id === valueID);\n return match\n ? of(match)\n : this.#userService.getUserById(valueID).pipe(\n map((res: YuvUser) => ({\n user: res,\n state: {}\n })),\n catchError((e: HttpErrorResponse) => {\n const user = new YuvUser({\n id: typeof v === 'string' ? v : v.id\n });\n user.title = typeof v === 'string' ? v : v.title;\n return of({\n user,\n state: {\n notFound: e.status === 404\n },\n titleString: e.status === 404 ? this.translate.instant('yuv.form.element.organization.user.not-found') : undefined\n });\n })\n );\n });\n return forkJoin(obs).subscribe((data) => {\n this.innerValue = data;\n const mapped = this.innerValue.map((u) => ({\n label: u.user.title,\n value: u\n }));\n this.acFormControl.setValue(this.multiselect() ? mapped : [mapped[0]], { emitEvent: false });\n });\n }\n\n autocompleteFn(query: string) {\n if (query.length >= this.minLength) {\n this.busy.set(true);\n this.#userService\n .queryUser(query, this.excludeMe(), this.#filterRoles)\n .pipe(\n finalize(() => {\n this.busy.set(false);\n })\n )\n .subscribe({\n next: (users: YuvUser[]) => {\n this.autocompleteRes = users\n .filter((user) => !this.innerValue.some((value) => value.user.id === user.id))\n .map(\n (user) =>\n ({\n label: user.title,\n value: {\n user,\n state: {}\n }\n }) as AutocompleteItem\n );\n },\n error: () => {\n this.autocompleteRes = [];\n }\n });\n } else {\n this.autocompleteRes = [];\n }\n }\n\n ngOnInit() {\n this.acFormControl.valueChanges.subscribe((v) => {\n if (!Array.isArray(v)) v = v ? [v] : [];\n this.innerValue = (v as AutocompleteItem[]).map((i: AutocompleteItem) => i.value as UserNode);\n this.propagate();\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<yuv-autocomplete\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n #autocomplete\n [placeholder]=\"placeholder\"\n [disabled]=\"readonly()\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n [maxItems]=\"multiselect() ? (-1) : 1\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #optionTemplate let-item>\n <span class=\"chip\">{{ item.value.user.title }}</span>\n </ng-template>\n\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\" [ngClass]=\"{ notFound: item.value.state.notFound }\" [matTooltip]=\"item.value.titleString\">\n {{ item.value.user.title || '...' }}\n </span>\n </ng-template>\n</yuv-autocomplete>\n\n<mat-icon [matTooltip]=\"'yuv.form.element.organization.classify.icon.title' | translate\">{{ multiselect() ? 'group' : 'person' }}</mat-icon>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { RangeValue, TranslateModule } from '@yuuvis/client-core';\nimport { DatetimeRangeComponent } from '../../datetime-range/datetime-range.component';\n\n@Component({\n selector: 'yuv-date-range-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, TranslateModule, DatetimeRangeComponent],\n templateUrl: './date-range-picker.component.html',\n styleUrl: './date-range-picker.component.scss'\n})\nexport class DateRangePickerComponent {\n #fb = inject(FormBuilder);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DateRangePickerComponent>);\n\n form = this.#fb.group({\n range: this.#fb.control<RangeValue | undefined>(this.#dialogData.range, Validators.required)\n });\n\n range = input<RangeValue | undefined>(this.#dialogData.range);\n rangeChange = output<RangeValue | undefined>();\n #rangeEffect = effect(() => {\n const range = this.range();\n this.form.patchValue({ range });\n });\n\n apply() {\n this.rangeChange.emit(this.form.value.range || undefined);\n this.#dialogRef.close(this.form.value.range);\n }\n}\n","<form [formGroup]=\"form\" (ngSubmit)=\"apply()\">\n <h2>{{ 'yuv.form.element.range-select-date.custom.overlay.title' | translate }}</h2>\n <yuv-datetime-range [withTime]=\"false\" formControlName=\"range\"></yuv-datetime-range>\n <button class=\"primary\" [disabled]=\"form.invalid\">{{ 'yuv.form.element.range-select-date.custom.overlay.button.apply' | translate }}</button>\n</form>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, OnDestroy, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { DateRange, LocaleDatePipe, Operator, OperatorLabel, RangeValue, SearchUtils, TranslateService } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';\nimport { RangeSelectDateValue } from './range-select-date.interface';\n\n// marker for extracting translations for the available date range options\nmarker('yuv.form.element.range-select-date.option.any');\nmarker('yuv.form.element.range-select-date.option.today');\nmarker('yuv.form.element.range-select-date.option.yesterday');\nmarker('yuv.form.element.range-select-date.option.thisWeek');\nmarker('yuv.form.element.range-select-date.option.lastWeek');\nmarker('yuv.form.element.range-select-date.option.thisMonth');\nmarker('yuv.form.element.range-select-date.option.lastMonth');\nmarker('yuv.form.element.range-select-date.option.thisYear');\nmarker('yuv.form.element.range-select-date.option.lastYear');\nmarker('yuv.form.element.range-select-date.option.custom');\n\n/**\n * Component for selecting a date range based on pre-defined ranges like\n * 'today', 'this week', 'this month', etc.\n * It also allows to pick a custom date range.\n */\n@Component({\n selector: 'yuv-range-select-date',\n standalone: true,\n imports: [CommonModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './range-select-date.component.html',\n styleUrl: './range-select-date.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: RangeSelectDateComponent }]\n})\nexport class RangeSelectDateComponent extends AbstractMatFormField<RangeSelectDateValue> implements ControlValueAccessor, OnDestroy {\n private translate = inject(TranslateService);\n #dialog = inject(MatDialog);\n\n #ANY_OPTION = 'any';\n #CUSTOM_OPTION = 'custom';\n\n options = signal<{ label: string; value: unknown }[]>([]);\n #customDateRange?: RangeValue;\n\n readonly fc = new FormControl<string>(this.#ANY_OPTION, {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n override get shouldLabelFloat(): boolean {\n return true;\n }\n \n /**\n * Range values to be used in the dropdown.\n */\n ranges = input<DateRange[]>(['today', 'yesterday', 'thisWeek', 'thisMonth', 'thisYear']);\n /**\n * Whether to show the custom date range option.\n */\n customRange = input<boolean>(true);\n\n constructor() {\n super();\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.fc.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n #onFormValueChange(v: string | DateRange) {\n if (v === this.#CUSTOM_OPTION) {\n if (!this.#customDateRange || this.options().find((o) => o.value === this.#CUSTOM_OPTION)?.label === this.#customDateRangeToString())\n this.#openCustomRangeDialog();\n else\n this.value = {\n rangeValue: this.#customDateRange,\n label: this.#customDateRangeToString()\n };\n this.propagateChange(this.value);\n } else {\n const { start, end } = SearchUtils.dateRangeStartEnd(v as DateRange);\n this.value =\n v !== this.#ANY_OPTION\n ? {\n rangeValue: { operator: Operator.INTERVAL_INCLUDE_BOTH, firstValue: start, secondValue: end },\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${v}`)\n }\n : null;\n this.propagateChange(this.value);\n this.#customDateRange = undefined;\n this.#setupOptions();\n }\n }\n\n #openCustomRangeDialog() {\n // open date range picker\n const o = this.#dialog.open(DateRangePickerComponent, {\n data: {\n range: this.#customDateRange\n }\n });\n o.afterClosed().subscribe((res: RangeValue | undefined) => {\n this.#customDateRange = res;\n\n if (!res) {\n this.fc.patchValue(this.#ANY_OPTION);\n this.#setupOptions();\n } else {\n this.#onFormValueChange(this.fc.value);\n this.#setupOptions(this.#customDateRangeToString());\n\n setTimeout(() => {\n this.fc.patchValue(this.#CUSTOM_OPTION, {\n emitEvent: false\n });\n });\n }\n });\n }\n\n #setupOptions(custom?: string) {\n const options = this.ranges().map((value) => ({\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${value}`),\n value\n }));\n if (this.customRange())\n options.push({\n label: custom || this.translate.instant('yuv.form.element.range-select-date.option.custom'),\n value: this.#CUSTOM_OPTION as DateRange\n });\n\n this.options.set([\n {\n label: this.translate.instant('yuv.form.element.range-select-date.option.any'),\n value: this.#ANY_OPTION\n },\n ...options\n ]);\n }\n\n #customDateRangeToString(): string | undefined {\n if (!this.#customDateRange) return undefined;\n const dp = new LocaleDatePipe(this.translate);\n switch (this.#customDateRange.operator) {\n case Operator.EQUAL: {\n return dp.transform(this.#customDateRange.firstValue as Date, 'shortDate');\n }\n case Operator.GREATER_OR_EQUAL: {\n return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue as Date, 'shortDate')}`;\n }\n case Operator.LESS_OR_EQUAL: {\n return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue as Date, 'shortDate')}`;\n }\n case Operator.INTERVAL_INCLUDE_BOTH: {\n return `${dp.transform(this.#customDateRange.firstValue as Date, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue as Date, 'shortDate')}`;\n }\n }\n return undefined;\n }\n\n // ControlValueAccessor implementation\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value?: RangeSelectDateValue): void {\n this.value = value || null;\n if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {\n const dr: DateRange | undefined = SearchUtils.getMatchingDateRange(value.rangeValue);\n if (dr) {\n this.fc.patchValue(dr);\n \n } else {\n this.#customDateRange = value.rangeValue;\n this.fc.patchValue(this.#CUSTOM_OPTION);\n }\n } else {\n this.fc.patchValue(this.#ANY_OPTION);\n }\n }\n\n registerOnChange(fn: () => void): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: () => void): void {}\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<mat-select [formControl]=\"fc\" [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\">\n @for (o of options(); track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n</mat-select>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, OnDestroy, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FilesizeRange, RangeValue, SearchUtils } from '@yuuvis/client-core';\nimport { RangeSelectFilesizeValue } from './range-select-filesize.interface';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\n\n// marker for extracting translations for the available filesize range options\nmarker('yuv.form.element.range-select-filesize.option.any');\nmarker('yuv.form.element.range-select-filesize.option.small');\nmarker('yuv.form.element.range-select-filesize.option.medium');\nmarker('yuv.form.element.range-select-filesize.option.large');\nmarker('yuv.form.element.range-select-filesize.option.verylarge');\n/**\n * Component for selecting a range of filesizes based on pre-defined ranges like\n * 'today', 'this week', 'this month', etc.\n */\n@Component({\n selector: 'yuv-range-select-filesize',\n standalone: true,\n imports: [CommonModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './range-select-filesize.component.html',\n styleUrl: './range-select-filesize.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: RangeSelectFilesizeComponent }]\n})\nexport class RangeSelectFilesizeComponent extends AbstractMatFormField<RangeSelectFilesizeValue> implements ControlValueAccessor, OnDestroy {\n private translate = inject(TranslateService);\n\n #ANY_OPTION = 'any';\n\n options = signal<{ label: string; value: unknown }[]>([]);\n\n readonly fc = new FormControl<string>(this.#ANY_OPTION, {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n override get shouldLabelFloat(): boolean {\n return true;\n }\n\n /**\n * Range values to be used in the dropdown.\n */\n ranges = input<FilesizeRange[]>(['small', 'medium', 'large', 'verylarge']);\n\n constructor() {\n super();\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.fc.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n #onFormValueChange(v: string | FilesizeRange) {\n const rangeValue: RangeValue | undefined = v !== this.#ANY_OPTION ? SearchUtils.filesizeRangeToRangeValue(v as FilesizeRange) : undefined;\n const res: RangeSelectFilesizeValue | undefined = rangeValue && {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${v}`)\n };\n this.value = res || null;\n this.propagateChange(res);\n }\n\n #setupOptions() {\n const options = this.ranges().map((value) => ({\n label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${value}`),\n value\n }));\n\n this.options.set([\n {\n label: this.translate.instant('yuv.form.element.range-select-filesize.option.any'),\n value: this.#ANY_OPTION\n },\n ...options\n ]);\n }\n\n // ControlValueAccessor implementation\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value?: RangeSelectFilesizeValue): void {\n this.value = value || null;\n let patch: FilesizeRange | string = this.#ANY_OPTION;\n if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {\n const range: FilesizeRange | undefined = SearchUtils.getMatchingFilesizeRange(value.rangeValue);\n if (range) patch = range;\n }\n this.fc.patchValue(patch);\n }\n\n registerOnChange(fn: () => void): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: () => void): void {}\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" [formControl]=\"fc\">\n @for (o of options(); track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n</mat-select>\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, DestroyRef, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { MatChipEditedEvent, MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Classification, ClassificationPrefix, FormattedMailTo, Situation, Utils } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\n/**\n * Creates form input for strings. Based on the input values different kinds of inputs will be generated.\n *\n * Implements `ControlValueAccessor` so it can be used within Angular forms.\n *\n * @example\n * <!-- string input validating input to be between 5 and 10 characters -->\n * <yuv-string [minLength]=\"5\" [maxLength]=\"10\"></yuv-string>\n *\n * <!-- string input that only allow digits -->\n * <yuv-string [regex]=\"[0-9]*\"></yuv-string>\n *\n * <!-- string input rendering a large textarea -->\n * <yuv-string [rows]=\"10\"></yuv-string>\n *\n */\n@Component({\n selector: 'yuv-string',\n standalone: true,\n imports: [CommonModule, MatChipsModule, MatIconModule, ReactiveFormsModule, FormsModule],\n templateUrl: './string.component.html',\n styleUrls: ['./string.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: StringComponent }]\n})\nexport class StringComponent extends AbstractMatFormField<string | string[] | undefined> implements ControlValueAccessor, AfterViewInit, OnInit, OnDestroy {\n #elRef = inject(ElementRef);\n #dRef = inject(DestroyRef);\n\n readonly fc = new FormControl<string | string[] | undefined>(undefined);\n\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n classifiytionIcons = {\n email: 'email',\n url: 'language',\n phone: 'call'\n };\n maxEntryCountIfInvalid?: number;\n\n /**\n * Indicator that multiple strings could be inserted, they will be rendered as chips (default: false).\n */\n @Input() multiselect = false;\n /**\n * Setting rows to more than 1 will generate a textarea instead of an input tag\n * and apply the rows property to it\n */\n @Input() rows?: number;\n /**\n * Will prevent the input from being changed (default: false)\n */\n @Input() readonly = false;\n /**\n * Enable autofucus for the input (default: false)\n */\n @Input() autofocus = false;\n /**\n * Additional semantics for the form element. Possible values are\n * `email` (validates and creates a link to send an email once there\n * is a valid email address) and `url` (validates and creates a link\n * to an URL typed into the form element).\n */\n @Input()\n set classifications(c: string[]) {\n this.#classifications = c;\n if (c && c.length) {\n if (c.includes(Classification.STRING_EMAIL)) {\n this.classify = {\n hrefPrefix: ClassificationPrefix.EMAIL,\n icon: this.classifiytionIcons.email\n };\n } else if (c.includes(Classification.STRING_URL)) {\n this.classify = {\n hrefPrefix: ClassificationPrefix.URL,\n icon: this.classifiytionIcons.url\n };\n } else if (c.includes(Classification.STRING_PHONE)) {\n this.classify = {\n hrefPrefix: ClassificationPrefix.PHONE,\n icon: this.classifiytionIcons.phone\n };\n }\n }\n }\n\n get classifications() {\n return this.#classifications;\n }\n /**\n * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.\n */\n @Input() situation?: string;\n\n /**\n * Regular expression to validate the input value against\n */\n @Input() regex?: string;\n /**\n * Minimal number of characters\n */\n @Input() minLength?: number;\n /**\n * Maximum number of characters\n */\n @Input() maxLength?: number;\n\n formatedValue?: FormattedMailTo;\n valid = false;\n validationErrors: { [key: string]: any }[] = [];\n classify?: { hrefPrefix: string; icon: string | undefined };\n #classifications: string[] = [];\n override ngControl = injectNgControl(this);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n private propagate() {\n this.propagateChange(this.value);\n }\n\n writeValue(value: string | string[]): void {\n if (Array.isArray(value)) {\n value = value.filter((v) => typeof v === 'string' && v.trim().length > 0);\n } else {\n this.formatedValue = Utils.formatMailTo(value, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);\n }\n this.fc.patchValue(value);\n this.value = value || undefined;\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n #onValueChange(val: any) {\n this.value = val;\n this.empty = Utils.isEmpty(val);\n if (this.empty) {\n this.value = undefined;\n this.propagate();\n return;\n }\n this.formatedValue = Utils.formatMailTo(val, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);\n this.propagate();\n }\n\n onBlur() {\n if (!this.value) return;\n // only called by single item input\n const value = this.value as string;\n const lengthBefore = value.length;\n this.value = value.trim();\n if (this.value.length !== lengthBefore) {\n this.propagate();\n }\n }\n\n // chips for multiselect\n\n chipsAdd(event: MatChipInputEvent) {\n const value = (event.value || '').trim();\n if (value) {\n this.value = [...((this.value as string[]) || []), value];\n this.fc.patchValue(this.value);\n }\n // Clear the input value\n event.chipInput.clear();\n }\n\n chipsRemove(v: string) {\n const currValue = this.value as string[];\n const index = currValue.indexOf(v);\n if (index !== -1) {\n currValue.splice(index, 1);\n this.value = [...currValue];\n this.fc.patchValue(this.value);\n }\n }\n\n chipsEdit(v: string, event: MatChipEditedEvent) {\n const value = event.value.trim();\n if (!value) {\n this.chipsRemove(v);\n return;\n }\n const currValue = this.value as string[];\n const index = currValue.indexOf(v);\n if (index >= 0) {\n currValue[index] = value;\n this.value = [...currValue];\n this.fc.patchValue(this.value);\n }\n }\n\n private validateClassification(string: string, classification: string): boolean {\n if (this.situation === Situation.SEARCH) {\n return true;\n } else {\n let pattern;\n if (classification === Classification.STRING_EMAIL) {\n pattern =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n } else if (classification === Classification.STRING_URL) {\n pattern = /(http|ftp|https):\\/\\/[\\w-]+(\\.[\\w-]+)?([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?/;\n } else if (classification === Classification.STRING_PHONE) {\n pattern = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-x\\s\\./0-9]*$/g;\n }\n return pattern ? pattern.test(string) : true;\n }\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n this.maxEntryCountIfInvalid = undefined;\n this.validationErrors = [];\n const val = control.value;\n if(!val) return null;\n const multiCheck = (check: (s: string) => boolean) => !!(this.multiselect ? val : [val]).find((v: string) => check(v));\n\n // validate regular expression\n if (this.regex && multiCheck((v: string) => !RegExp(this.regex!).test(v))) {\n this.validationErrors.push({ key: 'regex' });\n }\n\n // validate classification settings\n if (this.classifications && this.classifications.length) {\n this.classifications.forEach((c) => {\n if (multiCheck((v) => !this.validateClassification(v, c))) {\n this.validationErrors.push({ key: 'classification' + c });\n }\n });\n }\n // validate min length\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (!Utils.isEmpty(this.minLength) && multiCheck((v) => v.length < this.minLength!)) {\n this.validationErrors.push({ key: 'minlength', params: { minLength: this.minLength } });\n }\n\n // validate max length\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (!Utils.isEmpty(this.maxLength) && multiCheck((v) => v.length > this.maxLength!)) {\n this.validationErrors.push({ key: 'maxlength', params: { maxLength: this.maxLength } });\n }\n\n // validate invalid if only whitespaces\n if (multiCheck((v) => v.length > 0 && !v.trim().length)) {\n this.validationErrors.push({ key: 'onlyWhitespaces' });\n }\n\n if (this.validationErrors.length && this.multiselect && this.value) {\n // Setting maxEntryCountIfInvalid to the actual length of the value array to prevent the user to add more entries.\n this.maxEntryCountIfInvalid = this.value.length;\n }\n\n if (this.validationErrors.length) {\n this.valid = false;\n return Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err }));\n } else {\n this.valid = true;\n return null;\n }\n };\n }\n\n ngOnInit(): void {\n this.fc.setValidators(this.#getValidator());\n this.fc.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.fc.invalid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.fc.errors);\n }\n });\n this.fc.updateValueAndValidity();\n this.fc.valueChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => this.#onValueChange(v));\n }\n\n ngAfterViewInit(): void {\n if (this.autofocus) {\n if (!this.multiselect) {\n const el = this.#elRef.nativeElement.querySelector(this.rows && this.rows > 1 ? 'textarea' : 'input');\n if (el) el.focus();\n }\n }\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","@if ((!rows || rows <= 1) && !multiselect) {\n <input matInput type=\"text\" (blur)=\"onBlur()\" [disabled]=\"disabled\" [readonly]=\"readonly\" [formControl]=\"fc\" />\n} @else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <mat-chip-grid #chipGrid [formControl]=\"fc\" [disabled]=\"disabled\">\n @for (v of value; track v) {\n <mat-chip-row (removed)=\"chipsRemove(v)\" [editable]=\"true\" (edited)=\"chipsEdit(v, $event)\">\n {{ v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"disabled\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"chipsAdd($event)\"\n />\n </mat-chip-grid>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n matInput\n class=\"input-textarea\"\n (blur)=\"onBlur()\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [formControl]=\"fc\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <mat-icon>{{ classify.icon }}</mat-icon>\n </a>\n } @else {\n <mat-icon>{{ classify.icon }}</mat-icon>\n }\n </div>\n}\n","import { Component, DestroyRef, effect, inject, Input, input, OnDestroy, OnInit, signal, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Classification, ClassificationEntry, SystemService } from '@yuuvis/client-core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'yuv-catalog',\n imports: [CommonModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './catalog.component.html',\n styleUrl: './catalog.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: CatalogComponent }]\n})\nexport class CatalogComponent extends AbstractMatFormField<string | string[]> implements ControlValueAccessor, OnInit, OnDestroy {\n #system = inject(SystemService);\n #dRef = inject(DestroyRef);\n\n readonly = input<boolean>(false);\n\n multiple = input<boolean>(false);\n\n _options = signal<string[]>([]);\n options = input<string[]>([]);\n #optionsEffect = effect(() => {\n untracked(() => {\n this._options.set(this.options() || []);\n });\n });\n\n /**\n * Additional semantics for the form element.\n */\n classifications = input<string[]>([]);\n #classificationEffect = effect(() => {\n const cls = this.classifications();\n untracked(() => {\n const ce: ClassificationEntry | undefined = this.#system.getClassifications(cls).get(Classification.STRING_CATALOG);\n if (ce && ce.options) {\n this._options.set(ce.options);\n }\n });\n });\n\n /**\n * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.\n */\n @Input() situation?: string;\n\n override ngControl = injectNgControl(this);\n readonly fc = new FormControl<string | string[] | undefined>(undefined);\n\n #onValueChange(val: any) {\n this.value = val;\n this.propagateChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: string | string[]): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n ngOnInit(): void {\n this.fc.valueChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => this.#onValueChange(v));\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<mat-select [multiple]=\"multiple()\" [disabled]=\"readonly()\" [formControl]=\"fc\">\n @for (o of _options(); track o) {\n <mat-option [value]=\"o\">{{ o }}</mat-option>\n }\n</mat-select>\n","import { NgModule } from '@angular/core';\nimport { DatetimeComponent, DatetimeRangeComponent, NumberRangeComponent, OrganizationComponent } from './elements';\nimport { CatalogComponent } from './elements/catalog/catalog.component';\nimport { NumberComponent } from './elements/number/number.component';\nimport { StringComponent } from './elements/string/string.component';\n\nconst formElementCmps = [\n StringComponent,\n NumberComponent,\n NumberRangeComponent,\n DatetimeComponent,\n DatetimeRangeComponent,\n OrganizationComponent,\n StringComponent,\n CatalogComponent\n];\n\n@NgModule({\n imports: [...formElementCmps],\n exports: [...formElementCmps]\n})\nexport class YuvFormsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3","i4","TranslateService","i2","map","i5","i6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwBa,sBAAsB,CAAA;AAfnC,IAAA,WAAA,GAAA;AAgBW,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAoC,EAAC;AAElE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAe,IAAI,CAAC;QACzC,IAAS,CAAA,SAAA,GAAc,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAEzC,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC;QAE9B,IAAW,CAAA,WAAA,GAA2B,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE;AACxE,QAAA,IAAA,CAAA,OAAO,GAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,KAAI;YAC/E,OAAO;AACL,gBAAA,GAAG,CAAC;gBACJ,YAAY,EAAE,CAAC,CAAC,IAAI;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,cAAc;aAChF;AACH,SAAC,CAAC;QACF,IAAY,CAAA,YAAA,GAAM,IAAI,CAAC,WAAW,CAAC,WAAW,IAAK,EAAQ;QAC3D,IAAS,CAAA,SAAA,GAAc,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI;QACnE,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;AACrC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;AAyDjC;AA/EU,IAAA,GAAG;AACH,IAAA,OAAO;AACP,IAAA,aAAa;AACtB,IAAA,WAAW;AACF,IAAA,UAAU;AAenB,IAAA,YAAY;IAKZ,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;;IAG3B,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;;IAGlG,QAAQ,GAAA;AACN,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAY,KAAI;AACnE,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAC9B,OAAO,CAAC,IAAI,EACZ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,CAC3G;AACH,SAAC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;QAEjE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CACnB,IAAI,CAAC,SAAS,CAAC;AACb,kBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KACzC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG;AAChD,sBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;sBACxG,IAAI;kBAEV,IAAI,CACT;AACH,SAAC,CAAC;;IAGJ,qBAAqB,GAAA;QACnB,OAAO,CAAC,OAAwB,KAA6B;YAC3D,MAAM,SAAS,GAAG,OAAoB;YACtC,MAAM,MAAM,GAAqB,EAAE;AAEnC,YAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;gBAClC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE;AAC/C,oBAAA,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM;oBACpC,IAAI,aAAa,EAAE;;AAEjB,wBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE;4BACtE,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,aAAa;AAClD,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW;;6BACpB;AACL,4BAAA,MAAM,CAAC,GAAG,CAAC,GAAG,aAAa;;;;AAInC,aAAC,CAAC;AAEF,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,IAAI;AACnD,SAAC;;+GA9EQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EARtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,sBAAsB,CAAC;AACrD,gBAAA,KAAK,EAAE;AACR;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBH,+1CAmCA,EAAA,MAAA,EAAA,CAAA,iKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDvBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,8DAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,0BAA0B,mGAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAYnI,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAflC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,eAAe,CAAC,EAG9H,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,4BAA4B,CAAC;AACrD,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,EAAA,QAAA,EAAA,+1CAAA,EAAA,MAAA,EAAA,CAAA,iKAAA,CAAA,EAAA;;;AEtBH,IAAY,gBAMX;AAND,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,aAAsB;AACtB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,GAM3B,EAAA,CAAA,CAAA;;ACQD,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,CAAC;MAoB5D,iBAAiB,CAAA;AAnB9B,IAAA,WAAA,GAAA;AAoBW,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE7C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAY,SAAS,CAAC,IAAI,CAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAkC,SAAS,CAAC;AAC/D,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAM,SAAS,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAW,EAAE,CAAC;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAmB,gBAAgB,CAAC,IAAI,CAAC;AAErD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAQ,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAW,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAQ,EAAE,CAAC;AAE9B,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;AAEhE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QAE1B,IAAiB,CAAA,iBAAA,GAAG,IAAI;AAExB,QAAA,IAAA,CAAA,KAAK,GAAG;YACN,GAAG,EAAE,SAAS,CAAC,GAAG;YAClB,IAAI,EAAE,SAAS,CAAC;SACjB;AAED,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,MAAK;AACtB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;YACtC,SAAS,CAAC,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACxG,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,MAAK;AACxB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACrF,YAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK;AAChC,SAAC,CAAC;;AA0FF,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,EAAc,KAAI,GAAG;;AAExC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAK,GAAG;AAkB5B;AAnJU,IAAA,OAAO;AACP,IAAA,iBAAiB;AACjB,IAAA,YAAY;AA0BrB,IAAA,SAAS;AAKT,IAAA,WAAW;AAMX,IAAA,gBAAgB,CAAC,WAAuB,EAAE,MAAM,GAAG,KAAK,EAAA;QACtD,OAAO,IAAI,CAAC;aACT,IAAI,CAAC,sBAAsB,EAAE;AAC5B,YAAA,IAAI,EAAE;AACJ,gBAAA,WAAW,EAAE;oBACX,GAAG,IAAI,CAAC,WAAW;AACpB,iBAAA;gBACD,WAAW;AACX,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;gBAC3B,MAAM;AACN,gBAAA,KAAK,EAAE,IAAI,CAAC,UAAU;AACvB;SACF;AACA,aAAA,WAAW;aACX,IAAI,CAAC,GAAG,CAAC,CAAC,MAA+B,KAAK,MAAM,CAAC,CAAC;;AAG3D,IAAA,QAAQ,CAAC,OAAY,EAAA;AACnB,QAAA,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGzE,IAAA,cAAc,CAAC,OAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG/B,IAAA,OAAO,CAAC,OAAY,EAAA;AAClB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,MAAW,KAAI;YACvD,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AACvH,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,gBAAA,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;;AAE7E,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,SAAC,CAAC;;IAGJ,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,MAAW,KAAI;AAC1D,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC;AAC7B,YAAA,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3B,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,YAAA,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;AACjE,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAC,OAAY,EAAA;AACpB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxG,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;;IAGxE,OAAO,CAAC,OAAY,EAAE,KAAa,EAAA;AACjC,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,KAAK;gBACZ;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC9E;AACF,YAAA;AACE,gBAAA,OAAO,KAAK;gBACZ;;;AAIN,IAAA,YAAY,CAAC,QAAa,EAAE,IAAA,GAAc,EAAE,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CACvB,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,EAAO,KAAI;gBACpC,GAAG,CAAC,IAAI,CAAC;oBACP,SAAS,EAAE,EAAE,CAAC,KAAK;oBACnB,MAAM,EAAE,EAAE,CAAC,KAAK;AAChB,oBAAA,IAAI,EAAE,CAAC,OAAY,MAAM,OAAO,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACrF,iBAAA,CAAC;AACF,gBAAA,OAAO,GAAG;AACZ,aAAC,EAAE,EAAE,CAAC,CACP;;aACI;AACL,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;;QAG/B,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AACzG,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;;AAQ3B,IAAA,UAAU,CAAC,GAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;;AAE3B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;AAE3B,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAE5B,IAAA,gBAAgB,CAAE,UAAmB,EAAA;;;AAIrC,IAAA,aAAa,CAAC,CAAM,EAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;;+GAlJd,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAZjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR,aAAA;YACD;AACD,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BH,i+EAwDA,EDtCY,MAAA,EAAA,CAAA,inGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAW,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,qLAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAJ9D,OAAO,EAAE,QAAA,EAAA,WAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,cAAc,sNAAE,WAAW,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,qBAAA,EAAA,2BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAoB3D,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnB7B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,EAG/E,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR,yBAAA;wBACD;qBACD,EACK,IAAA,EAAA;AACJ,wBAAA,KAAK,EAAE;AACR,qBAAA,EAAA,QAAA,EAAA,i+EAAA,EAAA,MAAA,EAAA,CAAA,inGAAA,CAAA,EAAA;;;AEhBG,MAAO,iBAAkB,SAAQ,oBAAiC,CAAA;AARxE,IAAA,WAAA,GAAA;;AASU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAACC,kBAAgB,CAAC;AAE5C,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAI1C,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;QAE1C,IAAO,CAAA,OAAA,GAAG,MAAM,CAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;QACpD,IAAM,CAAA,MAAA,GAAG,KAAK,CAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAClD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;AAC/D,SAAC,CAAC;AACF;;AAEG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,KAAK,CAAC;AACvC;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAChC;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,CAAC;AAE/B;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;;AAehC,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,EAAc,KAAI,GAAG;;AAExC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAK,GAAG;AA8B5B;AAlEC,IAAA,aAAa;IAqBb,UAAU,GAAA;QACR,IAAI,CAAC,MAAM,GAAG;YACZ,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2CAA2C,CAAC;YAClF,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,2CAA2C,CAAC;AACnF,YAAA,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,0CAA0C,CAAC;SACtF;;IAGH,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE;;AAQjC,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;;AAE7B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI;;AAG5B,IAAA,gBAAgB,CAAC,EAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;AAG3B,IAAA,yBAAyB,CAAE,EAAc,EAAA;AACvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;;AAI5B,IAAA,iBAAiB;AAEjB,IAAA,aAAa,CAAC,CAAM,EAAA;QAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;IAG3E,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAkB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;+GA3E9E,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFjB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAK9C,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,mBAAmB,ECnBpD,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8UAWA,EDAY,MAAA,EAAA,CAAA,mIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,8VAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKpE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAR7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EACP,OAAA,EAAA,CAAC,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,CAAC,EAGrE,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAmB,iBAAA,EAAE,CAAC,EAAA,QAAA,EAAA,8UAAA,EAAA,MAAA,EAAA,CAAA,mIAAA,CAAA,EAAA;;;AEezE,MAAO,sBAAuB,SAAQ,oBAAgC,CAAA;AAR5E,IAAA,WAAA,GAAA;;AASE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1B;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;AACzB;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;QAChB,IAAQ,CAAA,QAAA,GAAG,IAAI;QAGhB,IAAQ,CAAA,QAAA,GAAG,IAAI;AACd,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;;AAG1C,QAAA,IAAA,CAAA,sBAAsB,GAAG;YACvB,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;YACrD,EAAE,KAAK,EAAE,aAAa,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE;YAC3E,EAAE,KAAK,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAE;YACrE,EAAE,KAAK,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,QAAQ,CAAC,qBAAqB;SACpF;QAEM,IAAS,CAAA,SAAA,GAAG,IAAI,SAAS,CAAC;AAC/B,YAAA,SAAS,EAAE,IAAI,WAAW,CAAmB,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjH,YAAA,QAAQ,EAAE,IAAI,WAAW,CAAW,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAChG,aAAa,EAAE,IAAI,WAAW,CAAmB,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAClF,SAAA,CAAC;;AAGF,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;AAsGjC;AApIC,IAAA,KAAK;AAgCL,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;AACjF,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AACxB,gBAAA,aAAa,EAAG,KAAK,CAAC,WAAoB,IAAK,KAAK,CAAC,UAAmB;AACxE,gBAAA,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK;AACpE,gBAAA,SAAS,EAAG,KAAK,CAAC,WAAoB,IAAK,KAAK,CAAC;AAClD,aAAA,CAAC;;aACG;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBACxB,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAC1C,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;;AAI1B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAG3B,iBAAiB,CAAC,EAAO,EAAA;IAEzB,cAAc,GAAA;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAoB;AAC1D,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,qBAAqB,EAAE;YAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,IAAI,SAAS;AAErE,YAAA,IAAI,aAAa,IAAI,SAAS,EAAE;AAC9B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,SAAS;AACtE,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;AACjB,sBAAE;AACF,sBAAE;wBACE,QAAQ;AACR,wBAAA,UAAU,EAAE,aAAa;AACzB,wBAAA,WAAW,EAAE;qBACd;;;aAEF;YACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;AACjB,kBAAE;AACF,kBAAE;oBACE,QAAQ;AACR,oBAAA,UAAU,EAAE,SAAS;AACrB,oBAAA,WAAW,EAAE;iBACd;;AAGP,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGlC,aAAa,GAAA;QACX,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,IAAI,GAAG;AACP,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAoB;AACnD,YAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE;AAC/B,gBAAA,GAAG,GAAG;AACJ,oBAAA,WAAW,EAAE;AACX,wBAAA,KAAK,EAAE;AACR;iBACF;;iBACI;;gBAEL,IAAI,QAAQ,KAAK,QAAQ,CAAC,qBAAqB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE;AACzH,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAkB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAmB,CAAC,CAAC,OAAO,EAAE;AAC5H,oBAAA,GAAG,GAAG;AACJ,wBAAA,cAAc,EAAE;AACd,4BAAA,KAAK,EAAE;AACR;qBACF;;qBACI;AACL,oBAAA,GAAG,GAAG;AACJ,wBAAA,SAAS,EAAE;AACT,4BAAA,KAAK,EAAE;AACR;qBACF;;;AAGL,YAAA,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG;AAC1E,SAAC;;IAGH,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAChF,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;AACtE,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;AAE3D,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;;IAGpE,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GAnIZ,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAFtB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,iDC3BpF,4kBAaA,EAAA,MAAA,EAAA,CAAA,8KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKtG,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,EAGvG,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAwB,sBAAA,EAAE,CAAC,EAAA,QAAA,EAAA,4kBAAA,EAAA,MAAA,EAAA,CAAA,8KAAA,CAAA,EAAA;8BAOzE,QAAQ,EAAA,CAAA;sBAAhB;gBAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;;;;AEjCH;;;;;;;;AAQG;AASG,MAAO,eAAgB,SAAQ,oBAA4B,CAAA;AARjE,IAAA,WAAA,GAAA;;AASE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AACjB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;;QAG7C,IAAgB,CAAA,gBAAA,GAAuB,EAAE;QACzC,IAAa,CAAA,aAAA,GAAoC,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;AACrF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,WAAW,CAAgB,IAAI,CAAC;AACvC,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;AAE1C;;AAEG;AACH,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAqB,SAAS,CAAC;QAC5C,IAAM,CAAA,MAAA,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAEhE;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,CAAC;QAChD,IAAU,CAAA,UAAA,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;AAE3E;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAChC,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AAEnD;;AAEG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAqB,SAAS,CAAC;AAEnD;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAqB,SAAS,CAAC;AAE/C;;;AAGG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAqB,SAAS,CAAC;AAE/C;;;;AAIG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAW,EAAE,CAAC;AACrC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,MAAK;AACnC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAA,IAAI,CAAC,aAAa;AAChB,gBAAA,eAAe,IAAI,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;AACzJ,SAAC,CAAC;;AASF,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;AAiGjC;AApKC,IAAA,KAAK;AAaL,IAAA,MAAM;AAMN,IAAA,UAAU;AAMV,IAAA,SAAS;AA6BT,IAAA,sBAAsB;AAMtB,IAAA,OAAO,iBAAiB,CAAC,GAAW,EAAE,MAA0B,EAAE,MAA0B,EAAA;AAC1F,QAAA,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ;AACvD,QAAA,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,QAAQ;AACtD,QAAA,OAAO,GAAG,IAAK,GAAc,IAAI,GAAG,IAAK,GAAc;;AAMzD,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;AACzC,QAAA,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI;AACxI,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAG3D,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;AAI3B,IAAA,iBAAiB;;IAGjB,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5F,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;;;IAKxJ,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5F,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACzE,gBAAA,SAAS,EAAE;AACZ,aAAA,CAAC;;;IAIN,aAAa,GAAA;QACX,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC7C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC;;YAE5D,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;;iBACxC;gBACL,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;;AAEnH,gBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,EAAE;oBACnC,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;oBACxD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;AACrC,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,EAAE,CAAC;;;;AAIhF,gBAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE;oBACrD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;;;AAIhF,gBAAA,IAAI,CAAC,EAAe,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;oBAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;wBAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;;yBACjF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;wBACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;;yBACjF;AACL,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;;;;AAIrH,YAAA,MAAM,CAAC,GAAqB,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;AAClH,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI;AAChD,SAAC;;IAGH,QAAQ,GAAA;;QAEN,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YAChF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;AACxC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;AAE3D,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE;QACvC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC/E,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;iBAC3B;;gBAEL,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAE,CAAC;AACjD,gBAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG,EAAE;AAC5D,oBAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAGtC,SAAC,CAAC;;IAGJ,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GAnKZ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAFf,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,EAFjE,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kHAAkH,+JADlH,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;;4FAKlB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,cACV,IAAI,EAAA,OAAA,EACP,CAAC,mBAAmB,CAAC,YACpB,kHAAkH,EAAA,SAAA,EAEjH,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,eAAiB,EAAE,CAAC,EAAA,MAAA,EAAA,CAAA,wFAAA,CAAA,EAAA;;;ACE7E;;;;;;;;AAQG;AASG,MAAO,oBAAqB,SAAQ,oBAAgC,CAAA;AAR1E,IAAA,WAAA,GAAA;;AASE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAU1B;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;AAKzB;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;AAEzB;;;;AAIG;QACM,IAAe,CAAA,eAAA,GAAa,EAAE;QAW/B,IAAO,CAAA,OAAA,GAAG,IAAI;;AAGf,QAAA,IAAA,CAAA,sBAAsB,GAAG;YAC9B,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;YACrD,EAAE,KAAK,EAAE,aAAa,CAAC,gBAAgB,EAAE,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE;YAC3E,EAAE,KAAK,EAAE,aAAa,CAAC,aAAa,EAAE,KAAK,EAAE,QAAQ,CAAC,aAAa,EAAE;YACrE,EAAE,KAAK,EAAE,aAAa,CAAC,qBAAqB,EAAE,KAAK,EAAE,QAAQ,CAAC,qBAAqB;SACpF;QAEM,IAAS,CAAA,SAAA,GAAG,IAAI,SAAS,CAAC;AAC/B,YAAA,WAAW,EAAE,IAAI,WAAW,CAAqB,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AACrH,YAAA,QAAQ,EAAE,IAAI,WAAW,CAAW,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAChG,eAAe,EAAE,IAAI,WAAW,CAAqB,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AACtF,SAAA,CAAC;;;;;;;AASF,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;AAmHjC;AAjLC,IAAA,KAAK;AAgEL,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,KAAK,KAAK,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE;YACpE,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;AAEjF,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,KAAK,CAAC,WAAW,IAAI,SAAS,EAAE;AAClC,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACtB,oBAAA,eAAe,EAAE,SAAS;AAC1B,oBAAA,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK;AACpE,oBAAA,WAAW,EAAG,KAAK,CAAC,UAAqB,IAAI;AAC9C,iBAAA,CAAC;;iBACG;AACL,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACtB,oBAAA,eAAe,EAAG,KAAK,CAAC,UAAqB,IAAI,SAAS;AAC1D,oBAAA,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,KAAK;oBACpE,WAAW,EAAE,KAAK,CAAC;AACpB,iBAAA,CAAC;;;aAEC;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;gBACxB,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAC1C,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;;;AAI1B,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAG3B,iBAAiB,CAAC,EAAO,EAAA;IAEzB,cAAc,GAAA;QACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAoB;AAC1D,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,qBAAqB,EAAE;AAC/C,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI;AAC/H,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;AACjB,kBAAE;oBACE,QAAQ;AACR,oBAAA,UAAU,EAAE,SAAS;AACrB,oBAAA,WAAW,EAAE;AACd;AACH,kBAAE;oBACE,QAAQ;AACR,oBAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,eAAe;AAChD,oBAAA,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBACnC;;aACA;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC;AACjB,kBAAE;oBACE,QAAQ;AACR,oBAAA,UAAU,EAAE,SAAS;AACrB,oBAAA,WAAW,EAAE;AACd;AACH,kBAAE;oBACE,QAAQ;AACR,oBAAA,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW;AAC5C,oBAAA,WAAW,EAAE;iBACd;;AAEP,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGlC,aAAa,GAAA;QACX,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,IAAI,GAAQ;AACZ,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ;AACvC,YAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE;gBAC/B,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;AAC7B,iBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE;;AAE3G,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;gBAC7D,GAAG,GAAG,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;iBACvC;gBACL,GAAG,GAAG,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;YAEzC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,GAAG;AAClC,SAAC;;;IAII,QAAQ,GAAA;AACb,QAAA,IAAI,GAAQ;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ;AAC9C,QAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,KAAK,EAAE;YAC/B,GAAG,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;AAC7B,aAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE;;AAE3G,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;YAC7D,GAAG,GAAG,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;aACvC;YACL,GAAG,GAAG,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;;QAEzC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,GAAG;;IAGlC,QAAQ,GAAA;QACN,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YAChF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO;AACxC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;AAE3D,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;;IAGpE,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GAhLZ,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAFpB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,ECvClF,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,kkCAmCA,EDCY,MAAA,EAAA,CAAA,4KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,eAAe,yKAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAK/E,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAA,SAAA,EAGhF,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAsB,oBAAA,EAAE,CAAC,EAAA,QAAA,EAAA,kkCAAA,EAAA,MAAA,EAAA,CAAA,4KAAA,CAAA,EAAA;8BAQvE,KAAK,EAAA,CAAA;sBAAb;gBAIQ,SAAS,EAAA,CAAA;sBAAjB;gBAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBAIQ,OAAO,EAAA,CAAA;sBAAf;gBAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBAOQ,eAAe,EAAA,CAAA;sBAAvB;gBAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBAKQ,QAAQ,EAAA,CAAA;sBAAhB;;;AEnDH;;;;;AAKG;AAYG,MAAO,qBAAsB,SAAQ,oBAAuE,CAAA;AAVlH,IAAA,WAAA,GAAA;;AAWE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAE7C,IAAS,CAAA,SAAA,GAAG,CAAC;AACb,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAU,KAAK,CAAC;AAE7B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,WAAW,CAAoD,SAAS,CAAC;AACpF,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;QAE1C,IAAW,CAAA,WAAA,GAAe,EAAE;QAO5B,IAAe,CAAA,eAAA,GAAuB,EAAE;QACxC,IAAY,CAAA,YAAA,GAAa,EAAE;AAE3B;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,CAAC;AAChD;;AAEG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC;AAsBnC;;AAEG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;AAEjC;;;AAGG;AACH,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,KAAK,CAAC;;AAGpC,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;AAkHjC;AApLC,IAAA,OAAO;AACP,IAAA,YAAY;IAUZ,IAAI,UAAU,CAAC,EAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,IAAI,EAAE;;AAE7B,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;;AAGzB,IAAA,YAAY;IAeZ,IAAa,eAAe,CAAC,CAAuB,EAAA;AAClD,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,EAAE,MAAM,EAAE;YACb,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC1D,IAAI,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE;AAC3D,gBAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAE,CAAC,OAAO;AAChF,gBAAA,IAAI,CAAC,YAAY,GAAG,OAAO;;;aAExB;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;;;AAG1B,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAsB9B,IAAA,UAAU,CAAC,KAAwB,EAAA;QACjC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;;aAChB;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;;AAIxB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAI3B,iBAAiB,CAAC,EAAO,EAAA;IAEjB,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;IAGlC,kBAAkB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AACxG,aAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YACjC,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;;;AAC7H,YAAA,OAAO,SAAS;;AAGzB,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,MAAM,GAAG,GAA2B,CAAC,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,KAAI;AACvF,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;YAEhD,MAAM,KAAK,GAAyB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC;AACxF,YAAA,OAAO;AACL,kBAAE,EAAE,CAAC,KAAK;AACV,kBAAE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CACzCC,KAAG,CAAC,CAAC,GAAY,MAAM;AACrB,oBAAA,IAAI,EAAE,GAAG;AACT,oBAAA,KAAK,EAAE;AACR,iBAAA,CAAC,CAAC,EACH,UAAU,CAAC,CAAC,CAAoB,KAAI;AAClC,oBAAA,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;AACvB,wBAAA,EAAE,EAAE,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AACnC,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK;AAChD,oBAAA,OAAO,EAAE,CAAC;wBACR,IAAI;AACJ,wBAAA,KAAK,EAAE;AACL,4BAAA,QAAQ,EAAE,CAAC,CAAC,MAAM,KAAK;AACxB,yBAAA;wBACD,WAAW,EAAE,CAAC,CAAC,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,8CAA8C,CAAC,GAAG;AAC1G,qBAAA,CAAC;iBACH,CAAC,CACH;AACP,SAAC,CAAC;QACF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACtC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACzC,gBAAA,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;AACnB,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC9F,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE;AAClC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC;iBACF,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,YAAY;AACpD,iBAAA,IAAI,CACH,QAAQ,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACtB,aAAC,CAAC;AAEH,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,KAAgB,KAAI;oBACzB,IAAI,CAAC,eAAe,GAAG;AACpB,yBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAC5E,yBAAA,GAAG,CACF,CAAC,IAAI,MACF;wBACC,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,wBAAA,KAAK,EAAE;4BACL,IAAI;AACJ,4BAAA,KAAK,EAAE;AACR;AACF,qBAAA,CAAqB,CACzB;iBACJ;gBACD,KAAK,EAAE,MAAK;AACV,oBAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;AAE5B,aAAA,CAAC;;aACC;AACL,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAI7B,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AAC9C,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;AACvC,YAAA,IAAI,CAAC,UAAU,GAAI,CAAwB,CAAC,GAAG,CAAC,CAAC,CAAmB,KAAK,CAAC,CAAC,KAAiB,CAAC;YAC7F,IAAI,CAAC,SAAS,EAAE;AAClB,SAAC,CAAC;;IAGJ,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GAnLZ,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAFrB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3CnF,w7BA0BA,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDYY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxD,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAK1C,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,WAAW,EAAE,qBAAqB;wBACxD,gBAAgB;AAChB,wBAAA,aAAa,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAG3C,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,qBAAuB,EAAE,CAAC,EAAA,QAAA,EAAA,w7BAAA,EAAA,MAAA,EAAA,CAAA,0dAAA,CAAA,EAAA;8BAoCpE,eAAe,EAAA,CAAA;sBAA3B;;;MEjEU,wBAAwB,CAAA;AAPrC,IAAA,WAAA,GAAA;AAQE,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAM,eAAe,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,EAAC,YAAsC,EAAC;AAEpE,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAyB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ;AAC5F,SAAA,CAAC;QAEF,IAAK,CAAA,KAAA,GAAG,KAAK,CAAyB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAC7D,IAAW,CAAA,WAAA,GAAG,MAAM,EAA0B;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,MAAK;AACzB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AACjC,SAAC,CAAC;AAMH;AAnBC,IAAA,GAAG;AACH,IAAA,WAAW;AACF,IAAA,UAAU;AAQnB,IAAA,YAAY;IAKZ,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;AACzD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;+GAlBnC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdrC,wYAKA,EDKY,MAAA,EAAA,CAAA,4ZAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,8BAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIzE,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,wYAAA,EAAA,MAAA,EAAA,CAAA,4ZAAA,CAAA,EAAA;;;AEGvF;AACA,MAAM,CAAC,+CAA+C,CAAC;AACvD,MAAM,CAAC,iDAAiD,CAAC;AACzD,MAAM,CAAC,qDAAqD,CAAC;AAC7D,MAAM,CAAC,oDAAoD,CAAC;AAC5D,MAAM,CAAC,oDAAoD,CAAC;AAC5D,MAAM,CAAC,qDAAqD,CAAC;AAC7D,MAAM,CAAC,qDAAqD,CAAC;AAC7D,MAAM,CAAC,oDAAoD,CAAC;AAC5D,MAAM,CAAC,oDAAoD,CAAC;AAC5D,MAAM,CAAC,kDAAkD,CAAC;AAE1D;;;;AAIG;AASG,MAAO,wBAAyB,SAAQ,oBAA0C,CAAA;AAEtF,IAAA,OAAO;AAEP,IAAA,WAAW;AACX,IAAA,cAAc;AAGd,IAAA,gBAAgB;AAOhB,IAAA,IAAa,gBAAgB,GAAA;AAC3B,QAAA,OAAO,IAAI;;AAYb,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AA5BD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC5C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC;QAE3B,IAAW,CAAA,WAAA,GAAG,KAAK;QACnB,IAAc,CAAA,cAAA,GAAG,QAAQ;AAEzB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAsC,EAAE,CAAC;AAGhD,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,WAAW,CAAS,IAAI,CAAC,WAAW,EAAE;AACtD,YAAA,WAAW,EAAE;AACd,SAAA,CAAC;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;AAK1C;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAc,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AACxF;;AAEG;AACH,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,IAAI,CAAC;;;AAuGlC,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;QAnG9B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7F,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;;AAG9F,IAAA,kBAAkB,CAAC,CAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,wBAAwB,EAAE;gBAClI,IAAI,CAAC,sBAAsB,EAAE;;gBAE7B,IAAI,CAAC,KAAK,GAAG;oBACX,UAAU,EAAE,IAAI,CAAC,gBAAgB;AACjC,oBAAA,KAAK,EAAE,IAAI,CAAC,wBAAwB;iBACrC;AACH,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;aAC3B;AACL,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAc,CAAC;AACpE,YAAA,IAAI,CAAC,KAAK;gBACR,CAAC,KAAK,IAAI,CAAC;AACT,sBAAE;AACE,wBAAA,UAAU,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,qBAAqB,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE;wBAC7F,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,0CAAA,EAA6C,CAAC,CAAA,CAAE;AAC/E;sBACD,IAAI;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,YAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS;YACjC,IAAI,CAAC,aAAa,EAAE;;;IAIxB,sBAAsB,GAAA;;QAEpB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE;AACpD,YAAA,IAAI,EAAE;gBACJ,KAAK,EAAE,IAAI,CAAC;AACb;AACF,SAAA,CAAC;QACF,CAAC,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,GAA2B,KAAI;AACxD,YAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG;YAE3B,IAAI,CAAC,GAAG,EAAE;gBACR,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;gBACpC,IAAI,CAAC,aAAa,EAAE;;iBACf;gBACL,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAEnD,UAAU,CAAC,MAAK;oBACd,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE;AACtC,wBAAA,SAAS,EAAE;AACZ,qBAAA,CAAC;AACJ,iBAAC,CAAC;;AAEN,SAAC,CAAC;;AAGJ,IAAA,aAAa,CAAC,MAAe,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;YAC5C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,0CAAA,EAA6C,KAAK,CAAA,CAAE,CAAC;YACnF;AACD,SAAA,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kDAAkD,CAAC;gBAC3F,KAAK,EAAE,IAAI,CAAC;AACb,aAAA,CAAC;AAEJ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACf,YAAA;gBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,+CAA+C,CAAC;gBAC9E,KAAK,EAAE,IAAI,CAAC;AACb,aAAA;AACD,YAAA,GAAG;AACJ,SAAA,CAAC;;IAGJ,wBAAwB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,OAAO,SAAS;QAC5C,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,QAAA,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ;AACpC,YAAA,KAAK,QAAQ,CAAC,KAAK,EAAE;AACnB,gBAAA,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAkB,EAAE,WAAW,CAAC;;AAE5E,YAAA,KAAK,QAAQ,CAAC,gBAAgB,EAAE;AAC9B,gBAAA,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAI,CAAA,EAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAkB,EAAE,WAAW,CAAC,EAAE;;AAEnH,YAAA,KAAK,QAAQ,CAAC,aAAa,EAAE;AAC3B,gBAAA,OAAO,GAAG,aAAa,CAAC,aAAa,CAAI,CAAA,EAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAkB,EAAE,WAAW,CAAC,EAAE;;AAEhH,YAAA,KAAK,QAAQ,CAAC,qBAAqB,EAAE;AACnC,gBAAA,OAAO,CAAG,EAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAkB,EAAE,WAAW,CAAC,CAAI,CAAA,EAAA,aAAa,CAAC,qBAAqB,CAAI,CAAA,EAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAmB,EAAE,WAAW,CAAC,EAAE;;;AAGlM,QAAA,OAAO,SAAS;;AAQlB,IAAA,UAAU,CAAC,KAA4B,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI;AAC1B,QAAA,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE;YAChE,MAAM,EAAE,GAA0B,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC;YACpF,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;;iBAEjB;AACL,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,UAAU;gBACxC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;;;aAEpC;YACL,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;;;AAIxC,IAAA,gBAAgB,CAAC,EAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAI3B,iBAAiB,CAAC,EAAc,EAAA;IAEhC,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GA3JZ,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,qVAFxB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,iDCpCtF,gOAKA,EAAA,MAAA,EAAA,CAAA,+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED4BY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,mtBAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKjD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,aAGlD,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,wBAA0B,EAAE,CAAC,EAAA,QAAA,EAAA,gOAAA,EAAA,MAAA,EAAA,CAAA,+CAAA,CAAA,EAAA;;;AExBtF;AACA,MAAM,CAAC,mDAAmD,CAAC;AAC3D,MAAM,CAAC,qDAAqD,CAAC;AAC7D,MAAM,CAAC,sDAAsD,CAAC;AAC9D,MAAM,CAAC,qDAAqD,CAAC;AAC7D,MAAM,CAAC,yDAAyD,CAAC;AACjE;;;AAGG;AASG,MAAO,4BAA6B,SAAQ,oBAA8C,CAAA;AAG9F,IAAA,WAAW;AASX,IAAA,IAAa,gBAAgB,GAAA;AAC3B,QAAA,OAAO,IAAI;;AAQb,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AArBD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAACD,kBAAgB,CAAC;QAE5C,IAAW,CAAA,WAAA,GAAG,KAAK;AAEnB,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAsC,EAAE,CAAC;AAEhD,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,WAAW,CAAS,IAAI,CAAC,WAAW,EAAE;AACtD,YAAA,WAAW,EAAE;AACd,SAAA,CAAC;AAEO,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;AAK1C;;AAEG;AACH,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;;;AAqC1E,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;QAjC9B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7F,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;;AAG9F,IAAA,kBAAkB,CAAC,CAAyB,EAAA;QAC1C,MAAM,UAAU,GAA2B,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAkB,CAAC,GAAG,SAAS;QACzI,MAAM,GAAG,GAAyC,UAAU,IAAI;YAC9D,UAAU;YACV,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,8CAAA,EAAiD,CAAC,CAAA,CAAE;SACnF;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;;IAG3B,aAAa,GAAA;AACX,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;YAC5C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA,8CAAA,EAAiD,KAAK,CAAA,CAAE,CAAC;YACvF;AACD,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACf,YAAA;gBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mDAAmD,CAAC;gBAClF,KAAK,EAAE,IAAI,CAAC;AACb,aAAA;AACD,YAAA,GAAG;AACJ,SAAA,CAAC;;AAQJ,IAAA,UAAU,CAAC,KAAgC,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI;AAC1B,QAAA,IAAI,KAAK,GAA2B,IAAI,CAAC,WAAW;AACpD,QAAA,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE;YAChE,MAAM,KAAK,GAA8B,WAAW,CAAC,wBAAwB,CAAC,KAAK,CAAC,UAAU,CAAC;AAC/F,YAAA,IAAI,KAAK;gBAAE,KAAK,GAAG,KAAK;;AAE1B,QAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;;AAG3B,IAAA,gBAAgB,CAAC,EAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAI3B,iBAAiB,CAAC,EAAc,EAAA;IAEhC,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GA5EZ,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,4BAA4B,+MAF5B,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,iDC5B1F,gOAKA,EAAA,MAAA,EAAA,CAAA,+CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDoBY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,mtBAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKjD,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBARxC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,aAGlD,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,4BAA8B,EAAE,CAAC,EAAA,QAAA,EAAA,gOAAA,EAAA,MAAA,EAAA,CAAA,+CAAA,CAAA,EAAA;;;AElB1F;;;;;;;;;;;;;;;AAeG;AASG,MAAO,eAAgB,SAAQ,oBAAmD,CAAA;AARxF,IAAA,WAAA,GAAA;;AASE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjB,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,WAAW,CAAgC,SAAS,CAAC;AAE9D,QAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAU;AAErD,QAAA,IAAA,CAAA,kBAAkB,GAAG;AACnB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,GAAG,EAAE,UAAU;AACf,YAAA,KAAK,EAAE;SACR;AAGD;;AAEG;QACM,IAAW,CAAA,WAAA,GAAG,KAAK;AAM5B;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;AACzB;;AAEG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK;QAoD1B,IAAK,CAAA,KAAA,GAAG,KAAK;QACb,IAAgB,CAAA,gBAAA,GAA6B,EAAE;QAE/C,IAAgB,CAAA,gBAAA,GAAa,EAAE;AACtB,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;;AAG1C,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;AAiLjC;AA1QC,IAAA,MAAM;AACN,IAAA,KAAK;AA8BL;;;;;AAKG;IACH,IACI,eAAe,CAAC,CAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YACjB,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;gBAC3C,IAAI,CAAC,QAAQ,GAAG;oBACd,UAAU,EAAE,oBAAoB,CAAC,KAAK;AACtC,oBAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;iBAC/B;;iBACI,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;gBAChD,IAAI,CAAC,QAAQ,GAAG;oBACd,UAAU,EAAE,oBAAoB,CAAC,GAAG;AACpC,oBAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;iBAC/B;;iBACI,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;gBAClD,IAAI,CAAC,QAAQ,GAAG;oBACd,UAAU,EAAE,oBAAoB,CAAC,KAAK;AACtC,oBAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC;iBAC/B;;;;AAKP,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAwB9B,IAAA,gBAAgB;IAMR,SAAS,GAAA;AACf,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;AAGlC,IAAA,UAAU,CAAC,KAAwB,EAAA;AACjC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;;aACpE;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,KAAK,oBAAoB,CAAC,KAAK,CAAC;;AAE1G,QAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS;;AAGjC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;AAI3B,IAAA,iBAAiB;AAEjB,IAAA,cAAc,CAAC,GAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;YACtB,IAAI,CAAC,SAAS,EAAE;YAChB;;AAEF,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,KAAK,oBAAoB,CAAC,KAAK,CAAC;QACtG,IAAI,CAAC,SAAS,EAAE;;IAGlB,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;;AAEjB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAe;AAClC,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE;QACzB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE;YACtC,IAAI,CAAC,SAAS,EAAE;;;;AAMpB,IAAA,QAAQ,CAAC,KAAwB,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;QACxC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,IAAK,IAAI,CAAC,KAAkB,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;YACzD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;AAGhC,QAAA,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;;AAGzB,IAAA,WAAW,CAAC,CAAS,EAAA;AACnB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAiB;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAIlC,SAAS,CAAC,CAAS,EAAE,KAAyB,EAAA;QAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;QAChC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACnB;;AAEF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAiB;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,YAAA,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;IAI1B,sBAAsB,CAAC,MAAc,EAAE,cAAsB,EAAA;QACnE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,MAAM,EAAE;AACvC,YAAA,OAAO,IAAI;;aACN;AACL,YAAA,IAAI,OAAO;AACX,YAAA,IAAI,cAAc,KAAK,cAAc,CAAC,YAAY,EAAE;gBAClD,OAAO;AACL,oBAAA,wJAAwJ;;AACrJ,iBAAA,IAAI,cAAc,KAAK,cAAc,CAAC,UAAU,EAAE;gBACvD,OAAO,GAAG,uFAAuF;;AAC5F,iBAAA,IAAI,cAAc,KAAK,cAAc,CAAC,YAAY,EAAE;gBACzD,OAAO,GAAG,gDAAgD;;AAE5D,YAAA,OAAO,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI;;;IAIhD,aAAa,GAAA;QACX,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,IAAI,CAAC,sBAAsB,GAAG,SAAS;AACvC,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK;AACzB,YAAA,IAAG,CAAC,GAAG;AAAE,gBAAA,OAAO,IAAI;AACpB,YAAA,MAAM,UAAU,GAAG,CAAC,KAA6B,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;;YAGtH,IAAI,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC,CAAS,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACzE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;;;YAI9C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBACvD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACjC,oBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AACzD,wBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,CAAC,EAAE,CAAC;;AAE7D,iBAAC,CAAC;;;;YAIJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,SAAU,CAAC,EAAE;gBACnF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;;;;YAKzF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,SAAU,CAAC,EAAE;gBACnF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;;;YAIzF,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;gBACvD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC;;AAGxD,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE;;gBAElE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;;AAGjD,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;AAChC,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;gBAClB,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;;iBACxF;AACL,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,gBAAA,OAAO,IAAI;;AAEf,SAAC;;IAGH,QAAQ,GAAA;QACN,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;YACzE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO;AACjC,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3B,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;;AAEpD,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,EAAE,CAAC,sBAAsB,EAAE;AAChC,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;;IAGpG,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,UAAU,GAAG,OAAO,CAAC;AACrG,gBAAA,IAAI,EAAE;oBAAE,EAAE,CAAC,KAAK,EAAE;;;;IAKxB,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GAzQZ,eAAe,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAFf,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,EChC7E,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,w/CA6CA,EDhBY,MAAA,EAAA,CAAA,iTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,ovBAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAK5E,eAAe,EAAA,UAAA,EAAA,CAAA;kBAR3B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,CAAC,EAAA,SAAA,EAG7E,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAiB,eAAA,EAAE,CAAC,EAAA,QAAA,EAAA,w/CAAA,EAAA,MAAA,EAAA,CAAA,iTAAA,CAAA,EAAA;8BAoBlE,WAAW,EAAA,CAAA;sBAAnB;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBAIQ,SAAS,EAAA,CAAA;sBAAjB;gBAQG,eAAe,EAAA,CAAA;sBADlB;gBA6BQ,SAAS,EAAA,CAAA;sBAAjB;gBAKQ,KAAK,EAAA,CAAA;sBAAb;gBAIQ,SAAS,EAAA,CAAA;sBAAjB;gBAIQ,SAAS,EAAA,CAAA;sBAAjB;;;AElGG,MAAO,gBAAiB,SAAQ,oBAAuC,CAAA;AAP7E,IAAA,WAAA,GAAA;;AAQE,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAE1B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;AAEhC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAW,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,MAAK;YAC3B,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AACzC,aAAC,CAAC;AACJ,SAAC,CAAC;AAEF;;AAEG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAW,EAAE,CAAC;AACrC,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,MAAK;AAClC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;YAClC,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,EAAE,GAAoC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;AACnH,gBAAA,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE;oBACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC;;AAEjC,aAAC,CAAC;AACJ,SAAC,CAAC;AAOO,QAAA,IAAA,CAAA,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC;AACjC,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,WAAW,CAAgC,SAAS,CAAC;;AAQvE,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAG;AAmBjC;AA9DC,IAAA,OAAO;AACP,IAAA,KAAK;AAQL,IAAA,cAAc;AAUd,IAAA,qBAAqB;AAkBrB,IAAA,cAAc,CAAC,GAAQ,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;AAMlC,IAAA,UAAU,CAAC,KAAwB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGpB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;IAG3B,iBAAiB,CAAC,EAAO,EAAA;IAEzB,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;;IAGpG,WAAW,GAAA;QACT,KAAK,CAAC,aAAa,EAAE;;+GA7DZ,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,iuBAFhB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,iDCd9E,sMAKA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMY,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,mtBAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAKjD,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,WACd,CAAC,YAAY,EAAE,eAAe,EAAE,mBAAmB,CAAC,EAAA,SAAA,EAGlD,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,gBAAkB,EAAE,CAAC,EAAA,QAAA,EAAA,sMAAA,EAAA;8BAmCnE,SAAS,EAAA,CAAA;sBAAjB;;;AE3CH,MAAM,eAAe,GAAG;IACtB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,iBAAiB;IACjB,sBAAsB;IACtB,qBAAqB;IACrB,eAAe;IACf;CACD;MAMY,cAAc,CAAA;+GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAdzB,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,sBAAsB;YACtB,qBAAqB;YACrB,eAAe;AACf,YAAA,gBAAgB,aAPhB,eAAe;YACf,eAAe;YACf,oBAAoB;YACpB,iBAAiB;YACjB,sBAAsB;YACtB,qBAAqB;YACrB,eAAe;YACf,gBAAgB,CAAA,EAAA,CAAA,CAAA;AAOL,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHZ,eAAe,CAAA,EAAA,CAAA,CAAA;;4FAGjB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC;AAC7B,oBAAA,OAAO,EAAE,CAAC,GAAG,eAAe;AAC7B,iBAAA;;;ACpBD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"yuuvis-client-framework-forms.mjs","sources":["../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/edit-table-data/edit-data.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/edit-table-data/edit-data.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/model/data-grid.interface.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/data-grid/data-grid.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/data-grid/data-grid/data-grid.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime/datetime.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime/datetime.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime-range/datetime-range.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/datetime-range/datetime-range.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/number/number.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/number-range/number-range.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/number-range/number-range.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/organization/organization.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/organization/organization.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/date-range-picker/date-range-picker.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/date-range-picker/date-range-picker.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/range-select-date.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-date/range-select-date.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-filesize/range-select-filesize.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/range-select-filesize/range-select-filesize.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/string/string.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/string/string.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/catalog/catalog.component.ts","../../../../../libs/yuuvis/client-framework/forms/src/lib/elements/catalog/catalog.component.html","../../../../../libs/yuuvis/client-framework/forms/src/lib/forms.module.ts","../../../../../libs/yuuvis/client-framework/forms/src/yuuvis-client-framework-forms.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, forwardRef, inject, input, OnInit, signal } from '@angular/core';\nimport { AbstractControl, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, ValidationErrors, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { ObjectFormTranslateService, ObjectTypeField, Situation, SystemService, TranslateModule } from '@yuuvis/client-core';\nimport { DialogComponent } from '@yuuvis/client-framework/common';\nimport { MetadataFormFieldComponent } from '@yuuvis/client-framework/metadata-form';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'yuv-edit-table-data',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n DialogComponent,\n MatDialogModule,\n MatButtonModule,\n MatFormFieldModule,\n MetadataFormFieldComponent,\n TranslateModule,\n YmtButtonDirective\n ],\n templateUrl: './edit-data.component.html',\n styleUrl: './edit-data.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EditTableDataComponent),\n multi: true\n }\n ]\n})\nexport class EditTableDataComponent<T = any> implements OnInit {\n readonly #fb = inject(FormBuilder);\n readonly #system = inject(SystemService);\n readonly #errorMessage = inject(ObjectFormTranslateService);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<EditTableDataComponent>);\n\n errorMessage = signal<any[] | null>(null);\n tableForm: FormGroup = this.#fb.group({});\n\n isInnerTableForm = input(true);\n\n formElement: { [key: string]: any } = this.#dialogData.formElement || {};\n columns: ObjectTypeField[] = (this.formElement['elements'] || []).map((c: any) => {\n return {\n ...c,\n propertyType: c.type,\n _internalType: this.#system.getInternalFormElementType(c.type, c.classification)\n };\n });\n #elementData: T = this.#dialogData.elementData || ({} as T);\n situation: Situation = this.#dialogData.situation || Situation.EDIT;\n header = this.#dialogData.label || '';\n adding = this.#dialogData.adding;\n\n cancel() {\n this.#dialogRef.close(null);\n }\n\n submit() {\n if (this.tableForm.valid && this.#dialogRef) this.#dialogRef.close(this.tableForm.getRawValue());\n }\n\n ngOnInit() {\n Object.values(this.formElement['elements']).forEach((element: any) => {\n return this.tableForm.addControl(\n element.name,\n this.#fb.control({ value: '', disabled: element.readonly }, element.required ? Validators.required : null)\n );\n });\n this.tableForm.setValidators(this.#globalErrorValidator());\n this.#elementData && this.tableForm.patchValue(this.#elementData);\n\n this.tableForm.valueChanges.subscribe((v) => {\n this.errorMessage.set(\n this.tableForm.errors\n ? Object.keys(this.tableForm.errors).map((key) =>\n this.tableForm.errors && this.tableForm.errors[key]\n ? Object.keys(this.tableForm.errors[key]).map((k) => ({ [key]: this.#errorMessage.getErrorLabel(k, key) }))\n : null\n )\n : null\n );\n });\n }\n\n #globalErrorValidator() {\n return (control: AbstractControl): ValidationErrors | null => {\n const formGroup = control as FormGroup;\n const errors: ValidationErrors = {};\n\n Object.keys(formGroup.controls).forEach((key) => {\n const control = formGroup.get(key);\n if (control && control.invalid && control.dirty) {\n const controlErrors = control.errors;\n if (controlErrors) {\n // Ignore 'required' error if there are more errors\n if (Object.keys(controlErrors).length > 1 && controlErrors['required']) {\n const { required, ...otherErrors } = controlErrors;\n errors[key] = otherErrors;\n } else {\n errors[key] = controlErrors;\n }\n }\n }\n });\n\n return Object.keys(errors).length ? errors : null;\n };\n }\n}\n","<yuv-dialog [headertitel]=\"'yuv.form.element.data.grid.edit.headline' | translate: { headline: header }\">\n <main>\n <div [formGroup]=\"tableForm\">\n <div class=\"fields\">\n @for (element of columns; track $index) {\n <div [attr.data-name]=\"element.name\" class=\"form-field\">\n <yuv-metadata-form-field [field]=\"element\" [formControlName]=\"element.name\" [situation]=\"situation\"></yuv-metadata-form-field>\n\n @let errorsGroup = errorMessage();\n @if (errorsGroup && tableForm.errors) {\n <div class=\"err-msg\">\n @for (errors of errorsGroup; track $index) {\n @for (error of errors; track $index) {\n {{ error[element.name] }}\n }\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n </main>\n\n <footer>\n <button ymtButton=\"secondary\" (click)=\"cancel()\">{{ 'yuv.form.element.data.grid.edit.cancel' | translate }}</button>\n <button ymtButton=\"primary\" (click)=\"submit()\" [disabled]=\"!tableForm.dirty && !tableForm.valid\">\n @if (adding) {\n {{ 'yuv.form.element.data.grid.edit.add' | translate }}\n } @else {\n {{ 'yuv.form.element.data.grid.edit' | translate }}\n }\n </button>\n </footer>\n</yuv-dialog>\n","export enum DataGridSizeType {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n XLARGE = 'extra-large',\n AUTO = 'auto'\n}\n\nexport interface DataGridSize {\n extralarge: DataGridSizeType.XLARGE;\n large: DataGridSizeType.LARGE;\n medium: DataGridSizeType.MEDIUM;\n small: DataGridSizeType.SMALL;\n auto: DataGridSizeType.AUTO;\n}\n","import { CommonModule, DecimalPipe, NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, forwardRef, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\nimport { MatTableModule } from '@angular/material/table';\nimport { ClipboardService, Situation, TranslateModule, TranslateService } from '@yuuvis/client-core';\nimport { YUV_ICONS } from '@yuuvis/client-framework/icons';\nimport { map } from 'rxjs';\nimport { EditTableDataComponent } from '../edit-table-data/edit-data.component';\nimport { DataGridSizeType } from './../model/data-grid.interface';\n\n@Component({\n selector: 'yuv-data-grid',\n standalone: true,\n imports: [CommonModule, NgClass, MatMenu, MatMenuTrigger, MatIconModule, MatButtonModule, MatTableModule, TranslateModule],\n templateUrl: './data-grid.component.html',\n styleUrl: './data-grid.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DataGridComponent),\n multi: true\n },\n DecimalPipe\n ],\n host: {\n class: 'yuv-data-grid'\n }\n})\nexport class DataGridComponent implements ControlValueAccessor {\n readonly #dialog = inject(MatDialog);\n readonly #clipboardService = inject(ClipboardService);\n readonly #decimalPipe = inject(DecimalPipe);\n readonly translate = inject(TranslateService);\n\n situation = input<Situation>(Situation.EDIT);\n formElement = input<Record<string, any> | undefined>(undefined);\n formControl = input<any>(undefined);\n classifications = input<string[]>([]);\n readonly = input<boolean>(false);\n\n size = input<DataGridSizeType>(DataGridSizeType.AUTO);\n\n displayedColumns = signal<any[]>([]);\n displayedColumnsWithActions = signal<string[]>([]);\n dataSource = signal<any[]>([]);\n\n tableLabel = computed(() => this.formElement()?.['label'] ?? '');\n\n selectedRow = signal<unknown | null>(null);\n\n initalTableUpdate = true;\n\n icons = {\n add: YUV_ICONS.add,\n more: YUV_ICONS.more\n };\n\n #loadData = effect(() => {\n const formElement = this.formElement();\n untracked(() => formElement && this.#updateTable(formElement['elements'], formElement['value'] || []));\n });\n\n #sourceData = effect(() => {\n const dataSource = this.dataSource();\n !this.initalTableUpdate && this.writeValue(dataSource.filter((row) => !row.isAddRow));\n this.initalTableUpdate = false;\n });\n\n #openEditOverlay(elementData: any | null, adding = false) {\n return this.#dialog\n .open(EditTableDataComponent, {\n data: {\n formElement: {\n ...this.formElement()\n },\n elementData,\n situation: this.situation(),\n adding,\n label: this.tableLabel()\n }\n })\n .afterClosed()\n .pipe(map((result: Record<string, unknown>) => result));\n }\n\n copyLine(element: unknown) {\n this.#clipboardService.addToNavigatorClipBoard(JSON.stringify(element));\n }\n\n onMenuTriggert(element: unknown | null) {\n this.selectedRow.set(element);\n }\n\n editRow(element: unknown) {\n this.selectedRow.set(element);\n this.#openEditOverlay(element).subscribe((result: any) => {\n if (result) {\n const updatedData = this.dataSource().map((item) => (JSON.stringify(item) === JSON.stringify(element) ? result : item));\n const formElement = this.formElement();\n formElement && this.#updateTable(formElement['elements'], [...updatedData]);\n }\n this.selectedRow.set(null);\n });\n }\n\n addRow() {\n this.#openEditOverlay(null, true).subscribe((result: any) => {\n const currentData = this.dataSource();\n const data = [...currentData];\n if (result) {\n data.push(result);\n const formElement = this.formElement();\n formElement && this.#updateTable(formElement['elements'], data);\n }\n });\n }\n\n removeRow(element: any) {\n const updatedData = this.dataSource().filter((item) => JSON.stringify(item) !== JSON.stringify(element));\n const formElement = this.formElement();\n formElement && this.#updateTable(formElement['elements'], updatedData);\n }\n\n #cellValue(element: any, value: string) {\n switch (element.type) {\n case 'string':\n return value;\n break;\n case 'decimal':\n return this.#decimalPipe.transform(value, '1.2-4', this.translate.currentLang);\n break;\n default:\n return value;\n break;\n }\n }\n\n #updateTable(elements: any, data: any[] = []) {\n if (elements.length > 0) {\n this.displayedColumns.set(\n elements.reduce((acc: any, el: any) => {\n acc.push({\n columnDef: el.label,\n header: el.label,\n cell: (element: any) => (element.isAddRow ? '' : this.#cellValue(el, element[el.label]))\n });\n return acc;\n }, [])\n );\n } else {\n this.displayedColumns.set([]);\n }\n\n const displayedColumns = [...this.displayedColumns().map((col) => col.columnDef)];\n !this.readonly() && displayedColumns.push('actions');\n\n this.displayedColumnsWithActions.set(displayedColumns);\n this.dataSource.set(data);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (fn: () => void) => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n validationChange = () => {};\n\n writeValue(obj: any): void {\n this.propagateChange(obj);\n }\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n registerOnTouched(fn: any): void {\n this.validationChange = fn;\n }\n setDisabledState?(isDisabled: boolean): void {\n // console.log('setDisabledState: ', isDisabled);\n }\n\n onValueChange(e: any) {\n this.propagateChange(e);\n }\n}\n","<header>\n <h3>{{ tableLabel() }}</h3>\n @if (!readonly()) {\n <button (click)=\"addRow()\" class=\"table-options-add-row\">\n <mat-icon>add</mat-icon>\n </button>\n }\n</header>\n@let displayedCol = displayedColumns();\n@let displayedColActions = displayedColumnsWithActions();\n<div class=\"table-wrapper\" [ngClass]=\"size()\">\n <table mat-table [dataSource]=\"dataSource()\" class=\"mat-elevation-z8\">\n @for (column of displayedCol; track column) {\n <ng-container [matColumnDef]=\"column.columnDef\">\n <th mat-header-cell *matHeaderCellDef [attr.aria-label]=\"column.header\" [title]=\"column.header\">{{ column.header }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ column.cell(element) }}</td>\n </ng-container>\n }\n\n @if (!readonly()) {\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"actions-row\" aria-label=\"row actions\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"actions-row\">\n <!-- Only show the button in the last (empty) row -->\n <button class=\"table-options-menu-bar-item\" [matMenuTriggerFor]=\"menu\" (click)=\"onMenuTriggert(element)\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </td>\n </ng-container>\n }\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColActions; sticky: ['header-1']\"></tr>\n @if (!readonly()) {\n <tr (dblclick)=\"editRow(row)\" [class.selected-row]=\"row === selectedRow()\" mat-row *matRowDef=\"let row; columns: displayedColActions\"></tr>\n } @else {\n <tr mat-row *matRowDef=\"let row; columns: displayedColActions\"></tr>\n }\n </table>\n</div>\n\n<mat-menu #menu=\"matMenu\">\n <button mat-menu-item (click)=\"copyLine(selectedRow())\">{{ 'yuv.form.element.data.grid.copy' | translate }}</button>\n <button mat-menu-item (click)=\"editRow(selectedRow())\">{{ 'yuv.form.element.data.grid.edit' | translate }}</button>\n <button mat-menu-item (click)=\"removeRow(selectedRow())\">{{ 'yuv.form.element.data.grid.remove' | translate }}</button>\n</mat-menu>\n","import { Component, OnInit, effect, inject, input, signal, viewChild } from '@angular/core';\nimport { ControlValueAccessor, FormsModule } from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { LangChangeEvent, TranslateService } from '@ngx-translate/core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { DatepickerComponent, DatepickerLabels, YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';\n@Component({\n selector: 'yuv-datetime',\n standalone: true,\n imports: [FormsModule, YuvDatepickerModule, MatInputModule, MatDatepickerModule],\n templateUrl: './datetime.component.html',\n styleUrl: './datetime.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: DatetimeComponent }]\n})\nexport class DatetimeComponent extends AbstractMatFormField<Date | null> implements ControlValueAccessor, OnInit {\n private translate = inject(TranslateService);\n\n pickerCmp = viewChild.required(DatepickerComponent);\n \n\n labels?: DatepickerLabels;\n override ngControl = injectNgControl(this);\n\n _locale = signal<string>(this.translate.currentLang);\n locale = input<string>(this.translate.currentLang);\n #localeEffect = effect(() => {\n this._locale.set(this.locale() || this.translate.currentLang);\n });\n /**\n * Whether or not to allow only values in the future (default: false)\n */\n onlyFutureDates = input<boolean>(false);\n /**\n * Will prevent the input from being changed (default: false)\n */\n readonly = input<boolean>(false);\n /**\n * Whether to show the calendar icon that opens the date picker calendar (default: true)\n */\n calendar = input<boolean>(true);\n\n /**\n * Enables setting time as well (default: false)\n */\n withTime = input<boolean>(false);\n\n #setLabels() {\n this.labels = {\n calendarApply: this.translate.instant('yuv.form.element.datetime.calendar.select'),\n calendarCancel: this.translate.instant('yuv.form.element.datetime.calendar.cancel'),\n shortcut: { today: this.translate.instant('yuv.form.element.datetime.calendar.today') }\n };\n }\n\n openCalendar() {\n this.pickerCmp().openCalendar();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (fn: () => void) => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n validationChange = () => {};\n\n writeValue(value: any): void {\n if (typeof value === 'string') {\n value = new Date(value);\n this.propagateChange(value);\n }\n this.value = value || null;\n }\n\n registerOnChange(fn: () => void): void {\n this.propagateChange = fn;\n }\n\n registerOnValidatorChange?(fn: () => void): void {\n this.validationChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n onValueChange(e: any) {\n this.propagateChange(this.withTime() ? e : e.toISOString().split('T')[0]);\n }\n\n ngOnInit(): void {\n this.focusHandled.set(true)\n this.#setLabels();\n this.translate.onLangChange.subscribe((e: LangChangeEvent) => this._locale.set(e.lang));\n }\n}\n","<yuv-datepicker\n [calendar]=\"calendar()\"\n [disabled]=\"readonly()\"\n [withTime]=\"withTime()\"\n [locale]=\"_locale()\"\n [labels]=\"labels!\"\n [onlyFutureDates]=\"onlyFutureDates()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"\n></yuv-datepicker>\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, Input, OnDestroy, OnInit, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormControl,\n FormGroup,\n FormsModule,\n ReactiveFormsModule,\n ValidationErrors,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { Operator, OperatorLabel, RangeValue, Situation } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { DatetimeComponent } from '../datetime/datetime.component';\n\n@Component({\n selector: 'yuv-datetime-range',\n standalone: true,\n imports: [CommonModule, FormsModule, MatDatepickerModule, MatSelectModule, ReactiveFormsModule, DatetimeComponent],\n templateUrl: './datetime-range.component.html',\n styleUrl: './datetime-range.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: DatetimeRangeComponent }]\n})\nexport class DatetimeRangeComponent extends AbstractMatFormField<RangeValue> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n /**\n * Enables setting time as well (default: false)\n */\n @Input() withTime = false;\n /**\n * Will prevent the input from being changed (default: false)\n */\n @Input() readonly = false;\n @Input() operator = 'eq';\n @Input() situation?: string;\n\n private _isValid = true;\n override ngControl = injectNgControl(this);\n\n // options for search situation\n availableSearchOptions = [\n { label: OperatorLabel.EQUAL, value: Operator.EQUAL },\n { label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },\n { label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },\n { label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }\n ];\n\n public rangeForm = new FormGroup({\n dateValue: new FormControl<Date | undefined>(undefined, { nonNullable: true, validators: [Validators.required] }),\n operator: new FormControl<Operator>(this.availableSearchOptions[1].value, { nonNullable: true }),\n dateValueFrom: new FormControl<Date | undefined>(undefined, { nonNullable: true })\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: RangeValue): void {\n if (value && (value.firstValue || value.secondValue)) {\n const match = this.availableSearchOptions.find((o) => o.value === value.operator);\n this.value = value;\n this.rangeForm.patchValue({\n dateValueFrom: (value.secondValue as Date) && (value.firstValue as Date),\n operator: match ? match.value : this.availableSearchOptions[0].value,\n dateValue: (value.secondValue as Date) || (value.firstValue as Date)\n });\n } else {\n this.rangeForm.patchValue({\n operator: this.availableSearchOptions[0].value\n });\n this.value = null;\n this.rangeForm.reset();\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n #onValueChange() {\n const dateValue = this.rangeForm.value.dateValue || undefined;\n const operator = this.rangeForm.value.operator as Operator;\n if (operator === Operator.INTERVAL_INCLUDE_BOTH) {\n const dateValueFrom = this.rangeForm.value.dateValueFrom || undefined;\n\n if (dateValueFrom || dateValue) {\n this._isValid = this.rangeForm.valid && !!dateValueFrom && !!dateValue;\n this.value = !this._isValid\n ? null\n : {\n operator,\n firstValue: dateValueFrom,\n secondValue: dateValue\n };\n }\n } else {\n this._isValid = this.rangeForm.valid;\n this.value = !this._isValid\n ? null\n : {\n operator,\n firstValue: dateValue,\n secondValue: undefined\n };\n }\n\n this.propagateChange(this.value);\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n let err;\n const operator = control.value.operator as Operator;\n if (operator === Operator.EQUAL) {\n err = {\n datecontrol: {\n valid: false\n }\n };\n } else {\n // make sure that on ranges, the first value is earlier than the last\n if (operator === Operator.INTERVAL_INCLUDE_BOTH && control.value && control.value.firstValue && control.value.secondValue) {\n this._isValid = new Date(control.value.firstValue as Date).getTime() < new Date(control.value.secondValue as Date).getTime();\n err = {\n daterangeorder: {\n valid: false\n }\n };\n } else {\n err = {\n daterange: {\n valid: false\n }\n };\n }\n }\n return this.situation === Situation.SEARCH || this._isValid ? null : err;\n };\n }\n\n ngOnInit(): void {\n this.rangeForm.setValidators(this.#getValidator());\n this.rangeForm.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.situation === Situation.SEARCH || this._isValid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.rangeForm.errors);\n }\n });\n this.rangeForm.updateValueAndValidity();\n this.rangeForm.valueChanges.subscribe(() => this.#onValueChange());\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n @if (rangeForm.value.operator === 'gtelte') {\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValueFrom\"></yuv-datetime>\n }\n\n <mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" formControlName=\"operator\" [disabled]=\"readonly\">\n @for (o of availableSearchOptions; track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValue\"></yuv-datetime>\n</form>\n","import { Component, computed, DestroyRef, effect, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, FormControl, ReactiveFormsModule, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Classification, FileSizePipe, LocaleNumberPipe, TranslateService, Utils } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\n\n/**\n * Creates form input for number values.\n *\n * Implements `ControlValueAccessor` so it can be used within Angular forms.\n *\n * @example\n * <yuv-number [scale]=\"2\"></yuv-number>\n *\n */\n@Component({\n selector: 'yuv-number',\n standalone: true,\n imports: [ReactiveFormsModule],\n template: '<input type=\"string\" [formControl]=\"innerCtrl\" (focus)=\"unformat()\" (blur)=\"format()\" [readonly]=\"readonly()\" />',\n styleUrls: ['./number.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: NumberComponent }]\n})\nexport class NumberComponent extends AbstractMatFormField<number> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n readonly translate = inject(TranslateService);\n\n // innerValue: string | null = null;\n validationErrors: ValidationErrors[] = [];\n transformPipe: LocaleNumberPipe | FileSizePipe = new LocaleNumberPipe(this.translate);\n innerCtrl = new FormControl<string | null>(null);\n override ngControl = injectNgControl(this);\n\n /**\n * Number of decimal places\n */\n scale = input<number | undefined>(undefined);\n #scale = computed<number>(() => Math.min(this.scale() || 0, 30));\n\n /**\n * Overall amount of digits allowed (including decimal places)\n */\n precision = input<number | undefined>(undefined);\n #precision = computed<number>(() => Math.min(this.precision() || 100, 100));\n\n /**\n * Set to true to group number by pattern\n */\n grouping = input<boolean>(false);\n #grouping = computed(() => this.grouping() ?? true);\n\n /**\n * The pattern to group number value by\n */\n groupPattern = input<string | undefined>(undefined);\n\n /**\n * Will prevent the input from being changed (default: false)\n */\n readonly = input<boolean>(false);\n\n /**\n * set minimum input value\n */\n minValue = input<number | undefined>(undefined);\n\n /**\n * set maximum input value\n *\n */\n maxValue = input<number | undefined>(undefined);\n\n /**\n * classification property adds some semantics to the value of this component.\n * If you provide a value of `filesize` numbers typed into the control will be\n * handled like file sizes (calculates differnt units)\n */\n classifications = input<string[]>([]);\n #classificationsEffect = effect(() => {\n const classifications = this.classifications();\n this.transformPipe =\n classifications && classifications.includes(Classification.NUMBER_FILESIZE) ? new FileSizePipe(this.translate) : new LocaleNumberPipe(this.translate);\n });\n\n static betweenTwoNumbers(val: number, minVal: number | undefined, maxVal: number | undefined) {\n const min = !Utils.isEmpty(minVal) ? minVal : -Infinity;\n const max = !Utils.isEmpty(maxVal) ? maxVal : Infinity;\n return val >= (min as number) && val <= (max as number);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: any): void {\n this.value = value != null ? value : null;\n const innerValue = value != null ? this.transformPipe.numberToString(value, this.#grouping(), this.groupPattern(), this.#scale()) : null;\n this.innerCtrl.setValue(innerValue, { emitEvent: false });\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n // called when the input looses focus\n format() {\n if (!this.readonly() && typeof this.value === 'number' && this.validationErrors.length === 0) {\n this.innerCtrl.patchValue(this.transformPipe.numberToString(this.value, this.#grouping(), this.groupPattern(), this.#scale()), { emitEvent: false });\n }\n }\n\n // called when the input get focus\n unformat() {\n if (!this.readonly() && typeof this.value === 'number' && this.validationErrors.length === 0) {\n this.innerCtrl.patchValue(this.transformPipe.transform(this.value, false), {\n emitEvent: false\n });\n }\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n this.validationErrors = [];\n if (Utils.isEmpty(control.value)) return null;\n const val = this.transformPipe.stringToNumber(control.value);\n // general number validation\n if (isNaN(val) || typeof val !== 'number') {\n this.validationErrors.push({ key: 'number' });\n } else {\n const split = control.value.replaceAll(this.transformPipe.separator, '').split(this.transformPipe.decimalSeparator);\n // check precision\n if (this.#precision() !== undefined) {\n const prePointDigits = this.#precision() - this.#scale();\n if (split[0]?.length > prePointDigits) {\n this.validationErrors.push({ key: 'precision', params: { prePointDigits } });\n }\n }\n // check scale\n if (this.#scale() && split[1]?.length > this.#scale()) {\n this.validationErrors.push({ key: 'scale', params: { scale: this.#scale() } });\n }\n\n // min max\n if (!NumberComponent.betweenTwoNumbers(val, this.minValue(), this.maxValue())) {\n if (Utils.isEmpty(this.minValue())) {\n this.validationErrors.push({ key: 'maxvalue', params: { maxValue: this.maxValue() } });\n } else if (Utils.isEmpty(this.maxValue())) {\n this.validationErrors.push({ key: 'minvalue', params: { minValue: this.minValue() } });\n } else {\n this.validationErrors.push({ key: 'minmax', params: { minValue: this.minValue(), maxValue: this.maxValue() } });\n }\n }\n }\n const e: ValidationErrors = Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err }));\n return this.validationErrors.length ? e : null;\n };\n }\n\n ngOnInit(): void {\n // set up validators once all inputs are set\n this.innerCtrl.setValidators(this.#getValidator());\n this.innerCtrl.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.innerCtrl.invalid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.innerCtrl.errors);\n }\n });\n this.innerCtrl.updateValueAndValidity();\n this.innerCtrl.valueChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n if (Utils.isEmpty(v)) {\n this.value = null;\n this.propagateChange(this.value);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const val = this.transformPipe.stringToNumber(v!);\n if (this.validationErrors.length === 0 && this.value !== val) {\n this.value = val;\n this.propagateChange(this.value);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, DestroyRef, forwardRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n FormsModule,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { MatSelectModule } from '@angular/material/select';\nimport { Operator, OperatorLabel, RangeValue } from '@yuuvis/client-core';\nimport { NumberComponent } from '../number/number.component';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { AbstractMatFormField } from '@yuuvis/client-framework/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Creates form input for ranges of numeric values.\n *\n * Implements `ControlValueAccessor` so it can be used within Angular forms.\n *\n * @example\n * <yuv-number-range [scale]=\"2\"></yuv-number-range>\n *\n */\n@Component({\n selector: 'yuv-number-range',\n standalone: true,\n imports: [CommonModule, NumberComponent, MatSelectModule, FormsModule, ReactiveFormsModule],\n templateUrl: './number-range.component.html',\n styleUrls: ['./number-range.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: NumberRangeComponent }]\n})\nexport class NumberRangeComponent extends AbstractMatFormField<RangeValue> implements ControlValueAccessor, OnInit, OnDestroy {\n #dRef = inject(DestroyRef);\n\n /**\n * Number of decimal places\n */\n @Input() scale?: number;\n /**\n * Overall amount of digits allowed (including decimal places)\n */\n @Input() precision?: number;\n /**\n * Set to true to group number by pattern\n */\n @Input() grouping = false;\n /**\n * The pattern to group number value by\n */\n @Input() pattern?: string;\n /**\n * Will prevent the input from being changed (default: false)\n */\n @Input() readonly = false;\n\n /**\n * classification property adds some semantics to the value of this component.\n * If you provide a value of `filesize` numbers typed into the control will be\n * handled like file sizes (calculates differnt units)\n */\n @Input() classifications: string[] = [];\n /**\n * set minimum input value\n */\n @Input() minValue?: number;\n /**\n * set maximum input value\n *\n */\n @Input() maxValue?: number;\n\n private isValid = true;\n\n // options for search situation\n public availableSearchOptions = [\n { label: OperatorLabel.EQUAL, value: Operator.EQUAL },\n { label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },\n { label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },\n { label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }\n ];\n\n public rangeForm = new FormGroup({\n numberValue: new FormControl<number | undefined>(undefined, { nonNullable: true, validators: [Validators.required] }),\n operator: new FormControl<Operator>(this.availableSearchOptions[1].value, { nonNullable: true }),\n numberValueFrom: new FormControl<number | undefined>(undefined, { nonNullable: true })\n });\n\n // constructor() {\n // this.rangeForm.valueChanges.forEach(() => {\n // this.#onValueChange();\n // });\n // }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: RangeValue): void {\n if (value && (value.firstValue != null || value.secondValue != null)) {\n const match = this.availableSearchOptions.find((o) => o.value === value.operator);\n\n this.value = value;\n if (value.secondValue == undefined) {\n this.rangeForm.setValue({\n numberValueFrom: undefined,\n operator: match ? match.value : this.availableSearchOptions[0].value,\n numberValue: (value.firstValue as number) || undefined\n });\n } else {\n this.rangeForm.setValue({\n numberValueFrom: (value.firstValue as number) || undefined,\n operator: match ? match.value : this.availableSearchOptions[0].value,\n numberValue: value.secondValue as number\n });\n }\n } else {\n this.rangeForm.patchValue({\n operator: this.availableSearchOptions[0].value\n });\n this.value = null;\n this.rangeForm.reset();\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n #onValueChange() {\n this.isValid = this.rangeForm.valid;\n const operator = this.rangeForm.value.operator as Operator;\n if (operator === Operator.INTERVAL_INCLUDE_BOTH) {\n this.isValid = this.rangeForm.valid && this.rangeForm.value.numberValueFrom != null && this.rangeForm.value.numberValue != null;\n this.value = !this.isValid\n ? {\n operator,\n firstValue: undefined,\n secondValue: undefined\n }\n : {\n operator,\n firstValue: this.rangeForm.value.numberValueFrom,\n secondValue: this.rangeForm.value.numberValue\n };\n } else {\n this.value = !this.isValid\n ? {\n operator,\n firstValue: undefined,\n secondValue: undefined\n }\n : {\n operator,\n firstValue: this.rangeForm.value.numberValue,\n secondValue: undefined\n };\n }\n this.propagateChange(this.value);\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n let err: any;\n const operator = control.value.operator;\n if (operator === Operator.EQUAL) {\n err = { number: { valid: false } };\n } else if (operator === Operator.INTERVAL_INCLUDE_BOTH && this.value?.firstValue && this.value?.secondValue) {\n // make sure that on ranges, the first value is earlier than the last\n this.isValid = this.value.firstValue < this.value.secondValue;\n err = { numberrangeorder: { valid: false } };\n } else {\n err = { numberrange: { valid: false } };\n }\n return this.isValid ? null : err;\n };\n }\n\n // returns null when valid else the validation object\n public validate() {\n let err: any;\n const operator = this.rangeForm.value.operator;\n if (operator === Operator.EQUAL) {\n err = { number: { valid: false } };\n } else if (operator === Operator.INTERVAL_INCLUDE_BOTH && this.value?.firstValue && this.value?.secondValue) {\n // make sure that on ranges, the first value is earlier than the last\n this.isValid = this.value.firstValue < this.value.secondValue;\n err = { numberrangeorder: { valid: false } };\n } else {\n err = { numberrange: { valid: false } };\n }\n return this.isValid ? null : err;\n }\n\n ngOnInit(): void {\n this.rangeForm.setValidators(this.#getValidator());\n this.rangeForm.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.rangeForm.invalid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.rangeForm.errors);\n }\n });\n this.rangeForm.updateValueAndValidity();\n this.rangeForm.valueChanges.subscribe(() => this.#onValueChange());\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<form class=\"yuv-number-range\" [formGroup]=\"rangeForm\">\n @if (rangeForm.value.operator === 'gtelte') {\n <yuv-number\n class=\"first\"\n [readonly]=\"readonly\"\n [scale]=\"scale\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValueFrom\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n ></yuv-number>\n }\n\n <mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" formControlName=\"operator\" [disabled]=\"readonly\">\n @for (o of availableSearchOptions; track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n </mat-select>\n\n <yuv-number\n [scale]=\"scale\"\n [readonly]=\"readonly\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValue\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n >\n </yuv-number>\n</form>\n","import { CommonModule } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport { Component, inject, input, Input, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Classification, SystemService, TranslateModule, TranslateService, UserService, YuvUser } from '@yuuvis/client-core';\nimport { AutocompleteItem, YuvAutocompleteModule } from '@yuuvis/client-framework/autocomplete';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { catchError, finalize, map } from 'rxjs/operators';\n\ninterface UserNode {\n user: YuvUser;\n state: {\n notFound?: boolean;\n };\n titleString?: string;\n}\n\ntype FormControlValue =\n | string\n | {\n id: string;\n title: string;\n };\n\n/**\n * Creates form input for organisation values.\n *\n * @example\n * <yuv-organization [multiselect]=\"true\"></yuv-organization>\n */\n\n@Component({\n selector: 'yuv-organization',\n standalone: true,\n imports: [CommonModule, FormsModule, YuvAutocompleteModule, \n MatTooltipModule,\n MatIconModule, ReactiveFormsModule, TranslateModule],\n templateUrl: './organization.component.html',\n styleUrls: ['./organization.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: OrganizationComponent }]\n})\nexport class OrganizationComponent extends AbstractMatFormField<FormControlValue | FormControlValue[] | undefined> implements ControlValueAccessor, OnInit, OnDestroy {\n #system = inject(SystemService);\n #userService = inject(UserService);\n readonly translate = inject(TranslateService);\n\n minLength = 2;\n busy = signal<boolean>(false);\n\n acFormControl = new FormControl<AutocompleteItem | AutocompleteItem[] | undefined>(undefined);\n override ngControl = injectNgControl(this);\n\n _innerValue: UserNode[] = [];\n set innerValue(iv: UserNode[]) {\n this._innerValue = iv || [];\n }\n get innerValue() {\n return this._innerValue;\n }\n autocompleteRes: AutocompleteItem[] = [];\n #filterRoles: string[] = [];\n\n /**\n * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.\n */\n situation = input<string | undefined>(undefined);\n /**\n * Indicator that multiple strings could be inserted, they will be rendered as chips (default: false).\n */\n multiselect = input<boolean>(false);\n\n /**\n * Additional semantics for the form element.\n */\n private _classifications?: string[];\n @Input() set classifications(c: string[] | undefined) {\n this._classifications = c;\n if (c?.length) {\n const classifications = this.#system.getClassifications(c);\n if (classifications.has(Classification.STRING_ORGANIZATION)) {\n const options = classifications.get(Classification.STRING_ORGANIZATION)!.options;\n this.#filterRoles = options;\n }\n } else {\n this.#filterRoles = [];\n }\n }\n get classifications() {\n return this._classifications;\n }\n\n /**\n * Will prevent the input from being changed (default: false)\n */\n readonly = input<boolean>(false);\n\n /**\n * Whether or not to exclude the current user from autocomplete result\n */\n excludeMe = input<boolean>(false);\n\n /**\n * Whether or not the emitted value should be an object containing id and title\n * or, if set to false only the ID\n */\n withMetadata = input<boolean>(false);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: string | string[]): void {\n if (value) {\n this.value = value;\n this.resolveFn(value);\n } else {\n this.value = null;\n this.innerValue = [];\n }\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n private propagate() {\n this.value = this.#getPropagateValue();\n this.propagateChange(this.value);\n }\n\n #getPropagateValue(): FormControlValue | FormControlValue[] | undefined{\n if (this.multiselect()) {\n return this.innerValue.map((v) => (this.withMetadata() ? { id: v.user.id, title: v.user.title } : v.user.id));\n } else if (this.innerValue.length) {\n return this.withMetadata() ? { id: this.innerValue[0].user.id, title: this.innerValue[0].user.title } : this.innerValue[0].user.id;\n } else return undefined;\n }\n\n resolveFn(value: any) {\n const obs: Observable<UserNode>[] = (value instanceof Array ? value : [value]).map((v) => {\n const valueID = typeof v === 'string' ? v : v.id;\n\n const match: UserNode | undefined = this.innerValue.find((iv) => iv.user.id === valueID);\n return match\n ? of(match)\n : this.#userService.getUserById(valueID).pipe(\n map((res: YuvUser) => ({\n user: res,\n state: {}\n })),\n catchError((e: HttpErrorResponse) => {\n const user = new YuvUser({\n id: typeof v === 'string' ? v : v.id\n });\n user.title = typeof v === 'string' ? v : v.title;\n return of({\n user,\n state: {\n notFound: e.status === 404\n },\n titleString: e.status === 404 ? this.translate.instant('yuv.form.element.organization.user.not-found') : undefined\n });\n })\n );\n });\n return forkJoin(obs).subscribe((data) => {\n this.innerValue = data;\n const mapped = this.innerValue.map((u) => ({\n label: u.user.title,\n value: u\n }));\n this.acFormControl.setValue(this.multiselect() ? mapped : [mapped[0]], { emitEvent: false });\n });\n }\n\n autocompleteFn(query: string) {\n if (query.length >= this.minLength) {\n this.busy.set(true);\n this.#userService\n .queryUser(query, this.excludeMe(), this.#filterRoles)\n .pipe(\n finalize(() => {\n this.busy.set(false);\n })\n )\n .subscribe({\n next: (users: YuvUser[]) => {\n this.autocompleteRes = users\n .filter((user) => !this.innerValue.some((value) => value.user.id === user.id))\n .map(\n (user) =>\n ({\n label: user.title,\n value: {\n user,\n state: {}\n }\n }) as AutocompleteItem\n );\n },\n error: () => {\n this.autocompleteRes = [];\n }\n });\n } else {\n this.autocompleteRes = [];\n }\n }\n\n ngOnInit() {\n this.acFormControl.valueChanges.subscribe((v) => {\n if (!Array.isArray(v)) v = v ? [v] : [];\n this.innerValue = (v as AutocompleteItem[]).map((i: AutocompleteItem) => i.value as UserNode);\n this.propagate();\n });\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<yuv-autocomplete\n [busy]=\"busy()\"\n [formControl]=\"acFormControl\"\n #autocomplete\n [placeholder]=\"placeholder\"\n [disabled]=\"readonly()\"\n [autocompleteValues]=\"autocompleteRes\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n [maxItems]=\"multiselect() ? (-1) : 1\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #optionTemplate let-item>\n <span class=\"chip\">{{ item.value.user.title }}</span>\n </ng-template>\n\n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\" [ngClass]=\"{ notFound: item.value.state.notFound }\" [matTooltip]=\"item.value.titleString\">\n {{ item.value.user.title || '...' }}\n </span>\n </ng-template>\n</yuv-autocomplete>\n\n<mat-icon [matTooltip]=\"'yuv.form.element.organization.classify.icon.title' | translate\">{{ multiselect() ? 'group' : 'person' }}</mat-icon>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, output } from '@angular/core';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { RangeValue, TranslateModule } from '@yuuvis/client-core';\nimport { DatetimeRangeComponent } from '../../datetime-range/datetime-range.component';\n\n@Component({\n selector: 'yuv-date-range-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, TranslateModule, DatetimeRangeComponent],\n templateUrl: './date-range-picker.component.html',\n styleUrl: './date-range-picker.component.scss'\n})\nexport class DateRangePickerComponent {\n #fb = inject(FormBuilder);\n #dialogData = inject<any>(MAT_DIALOG_DATA);\n readonly #dialogRef = inject(MatDialogRef<DateRangePickerComponent>);\n\n form = this.#fb.group({\n range: this.#fb.control<RangeValue | undefined>(this.#dialogData.range, Validators.required)\n });\n\n range = input<RangeValue | undefined>(this.#dialogData.range);\n rangeChange = output<RangeValue | undefined>();\n #rangeEffect = effect(() => {\n const range = this.range();\n this.form.patchValue({ range });\n });\n\n apply() {\n this.rangeChange.emit(this.form.value.range || undefined);\n this.#dialogRef.close(this.form.value.range);\n }\n}\n","<form [formGroup]=\"form\" (ngSubmit)=\"apply()\">\n <h2>{{ 'yuv.form.element.range-select-date.custom.overlay.title' | translate }}</h2>\n <yuv-datetime-range [withTime]=\"false\" formControlName=\"range\"></yuv-datetime-range>\n <button class=\"primary\" [disabled]=\"form.invalid\">{{ 'yuv.form.element.range-select-date.custom.overlay.button.apply' | translate }}</button>\n</form>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, OnDestroy, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { DateRange, LocaleDatePipe, Operator, OperatorLabel, RangeValue, SearchUtils, TranslateService } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { DateRangePickerComponent } from './date-range-picker/date-range-picker.component';\nimport { RangeSelectDateValue } from './range-select-date.interface';\n\n// marker for extracting translations for the available date range options\nmarker('yuv.form.element.range-select-date.option.any');\nmarker('yuv.form.element.range-select-date.option.today');\nmarker('yuv.form.element.range-select-date.option.yesterday');\nmarker('yuv.form.element.range-select-date.option.thisWeek');\nmarker('yuv.form.element.range-select-date.option.lastWeek');\nmarker('yuv.form.element.range-select-date.option.thisMonth');\nmarker('yuv.form.element.range-select-date.option.lastMonth');\nmarker('yuv.form.element.range-select-date.option.thisYear');\nmarker('yuv.form.element.range-select-date.option.lastYear');\nmarker('yuv.form.element.range-select-date.option.custom');\n\n/**\n * Component for selecting a date range based on pre-defined ranges like\n * 'today', 'this week', 'this month', etc.\n * It also allows to pick a custom date range.\n */\n@Component({\n selector: 'yuv-range-select-date',\n standalone: true,\n imports: [CommonModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './range-select-date.component.html',\n styleUrl: './range-select-date.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: RangeSelectDateComponent }]\n})\nexport class RangeSelectDateComponent extends AbstractMatFormField<RangeSelectDateValue> implements ControlValueAccessor, OnDestroy {\n private translate = inject(TranslateService);\n #dialog = inject(MatDialog);\n\n #ANY_OPTION = 'any';\n #CUSTOM_OPTION = 'custom';\n\n options = signal<{ label: string; value: unknown }[]>([]);\n #customDateRange?: RangeValue;\n\n readonly fc = new FormControl<string>(this.#ANY_OPTION, {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n override get shouldLabelFloat(): boolean {\n return true;\n }\n \n /**\n * Range values to be used in the dropdown.\n */\n ranges = input<DateRange[]>(['today', 'yesterday', 'thisWeek', 'thisMonth', 'thisYear']);\n /**\n * Whether to show the custom date range option.\n */\n customRange = input<boolean>(true);\n\n constructor() {\n super();\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.fc.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n #onFormValueChange(v: string | DateRange) {\n if (v === this.#CUSTOM_OPTION) {\n if (!this.#customDateRange || this.options().find((o) => o.value === this.#CUSTOM_OPTION)?.label === this.#customDateRangeToString())\n this.#openCustomRangeDialog();\n else\n this.value = {\n rangeValue: this.#customDateRange,\n label: this.#customDateRangeToString()\n };\n this.propagateChange(this.value);\n } else {\n const { start, end } = SearchUtils.dateRangeStartEnd(v as DateRange);\n this.value =\n v !== this.#ANY_OPTION\n ? {\n rangeValue: { operator: Operator.INTERVAL_INCLUDE_BOTH, firstValue: start, secondValue: end },\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${v}`)\n }\n : null;\n this.propagateChange(this.value);\n this.#customDateRange = undefined;\n this.#setupOptions();\n }\n }\n\n #openCustomRangeDialog() {\n // open date range picker\n const o = this.#dialog.open(DateRangePickerComponent, {\n data: {\n range: this.#customDateRange\n }\n });\n o.afterClosed().subscribe((res: RangeValue | undefined) => {\n this.#customDateRange = res;\n\n if (!res) {\n this.fc.patchValue(this.#ANY_OPTION);\n this.#setupOptions();\n } else {\n this.#onFormValueChange(this.fc.value);\n this.#setupOptions(this.#customDateRangeToString());\n\n setTimeout(() => {\n this.fc.patchValue(this.#CUSTOM_OPTION, {\n emitEvent: false\n });\n });\n }\n });\n }\n\n #setupOptions(custom?: string) {\n const options = this.ranges().map((value) => ({\n label: this.translate.instant(`yuv.form.element.range-select-date.option.${value}`),\n value\n }));\n if (this.customRange())\n options.push({\n label: custom || this.translate.instant('yuv.form.element.range-select-date.option.custom'),\n value: this.#CUSTOM_OPTION as DateRange\n });\n\n this.options.set([\n {\n label: this.translate.instant('yuv.form.element.range-select-date.option.any'),\n value: this.#ANY_OPTION\n },\n ...options\n ]);\n }\n\n #customDateRangeToString(): string | undefined {\n if (!this.#customDateRange) return undefined;\n const dp = new LocaleDatePipe(this.translate);\n switch (this.#customDateRange.operator) {\n case Operator.EQUAL: {\n return dp.transform(this.#customDateRange.firstValue as Date, 'shortDate');\n }\n case Operator.GREATER_OR_EQUAL: {\n return `${OperatorLabel.GREATER_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue as Date, 'shortDate')}`;\n }\n case Operator.LESS_OR_EQUAL: {\n return `${OperatorLabel.LESS_OR_EQUAL} ${dp.transform(this.#customDateRange.firstValue as Date, 'shortDate')}`;\n }\n case Operator.INTERVAL_INCLUDE_BOTH: {\n return `${dp.transform(this.#customDateRange.firstValue as Date, 'shortDate')} ${OperatorLabel.INTERVAL_INCLUDE_BOTH} ${dp.transform(this.#customDateRange.secondValue as Date, 'shortDate')}`;\n }\n }\n return undefined;\n }\n\n // ControlValueAccessor implementation\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value?: RangeSelectDateValue): void {\n this.value = value || null;\n if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {\n const dr: DateRange | undefined = SearchUtils.getMatchingDateRange(value.rangeValue);\n if (dr) {\n this.fc.patchValue(dr);\n \n } else {\n this.#customDateRange = value.rangeValue;\n this.fc.patchValue(this.#CUSTOM_OPTION);\n }\n } else {\n this.fc.patchValue(this.#ANY_OPTION);\n }\n }\n\n registerOnChange(fn: () => void): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: () => void): void {}\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<mat-select [formControl]=\"fc\" [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\">\n @for (o of options(); track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n</mat-select>\n","import { CommonModule } from '@angular/common';\nimport { Component, inject, input, OnDestroy, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { marker } from '@colsen1991/ngx-translate-extract-marker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { FilesizeRange, RangeValue, SearchUtils } from '@yuuvis/client-core';\nimport { RangeSelectFilesizeValue } from './range-select-filesize.interface';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\n\n// marker for extracting translations for the available filesize range options\nmarker('yuv.form.element.range-select-filesize.option.any');\nmarker('yuv.form.element.range-select-filesize.option.small');\nmarker('yuv.form.element.range-select-filesize.option.medium');\nmarker('yuv.form.element.range-select-filesize.option.large');\nmarker('yuv.form.element.range-select-filesize.option.verylarge');\n/**\n * Component for selecting a range of filesizes based on pre-defined ranges like\n * 'today', 'this week', 'this month', etc.\n */\n@Component({\n selector: 'yuv-range-select-filesize',\n standalone: true,\n imports: [CommonModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './range-select-filesize.component.html',\n styleUrl: './range-select-filesize.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: RangeSelectFilesizeComponent }]\n})\nexport class RangeSelectFilesizeComponent extends AbstractMatFormField<RangeSelectFilesizeValue> implements ControlValueAccessor, OnDestroy {\n private translate = inject(TranslateService);\n\n #ANY_OPTION = 'any';\n\n options = signal<{ label: string; value: unknown }[]>([]);\n\n readonly fc = new FormControl<string>(this.#ANY_OPTION, {\n nonNullable: true\n });\n\n override ngControl = injectNgControl(this);\n override get shouldLabelFloat(): boolean {\n return true;\n }\n\n /**\n * Range values to be used in the dropdown.\n */\n ranges = input<FilesizeRange[]>(['small', 'medium', 'large', 'verylarge']);\n\n constructor() {\n super();\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe((_) => this.#setupOptions());\n this.#setupOptions();\n this.fc.valueChanges.pipe(takeUntilDestroyed()).subscribe((v) => this.#onFormValueChange(v));\n }\n\n #onFormValueChange(v: string | FilesizeRange) {\n const rangeValue: RangeValue | undefined = v !== this.#ANY_OPTION ? SearchUtils.filesizeRangeToRangeValue(v as FilesizeRange) : undefined;\n const res: RangeSelectFilesizeValue | undefined = rangeValue && {\n rangeValue,\n label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${v}`)\n };\n this.value = res || null;\n this.propagateChange(res);\n }\n\n #setupOptions() {\n const options = this.ranges().map((value) => ({\n label: this.translate.instant(`yuv.form.element.range-select-filesize.option.${value}`),\n value\n }));\n\n this.options.set([\n {\n label: this.translate.instant('yuv.form.element.range-select-filesize.option.any'),\n value: this.#ANY_OPTION\n },\n ...options\n ]);\n }\n\n // ControlValueAccessor implementation\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value?: RangeSelectFilesizeValue): void {\n this.value = value || null;\n let patch: FilesizeRange | string = this.#ANY_OPTION;\n if (value?.rangeValue?.operator && value?.rangeValue?.firstValue) {\n const range: FilesizeRange | undefined = SearchUtils.getMatchingFilesizeRange(value.rangeValue);\n if (range) patch = range;\n }\n this.fc.patchValue(patch);\n }\n\n registerOnChange(fn: () => void): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: () => void): void {}\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<mat-select [panelWidth]=\"null\" [hideSingleSelectionIndicator]=\"true\" [formControl]=\"fc\">\n @for (o of options(); track $index) {\n <mat-option [value]=\"o.value\">{{ o.label }}</mat-option>\n }\n</mat-select>\n","import { COMMA, ENTER } from '@angular/cdk/keycodes';\nimport { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, DestroyRef, ElementRef, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, FormControl, FormsModule, ReactiveFormsModule, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { MatChipEditedEvent, MatChipInputEvent, MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Classification, ClassificationPrefix, FormattedMailTo, Situation, Utils } from '@yuuvis/client-core';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\n/**\n * Creates form input for strings. Based on the input values different kinds of inputs will be generated.\n *\n * Implements `ControlValueAccessor` so it can be used within Angular forms.\n *\n * @example\n * <!-- string input validating input to be between 5 and 10 characters -->\n * <yuv-string [minLength]=\"5\" [maxLength]=\"10\"></yuv-string>\n *\n * <!-- string input that only allow digits -->\n * <yuv-string [regex]=\"[0-9]*\"></yuv-string>\n *\n * <!-- string input rendering a large textarea -->\n * <yuv-string [rows]=\"10\"></yuv-string>\n *\n */\n@Component({\n selector: 'yuv-string',\n standalone: true,\n imports: [CommonModule, MatChipsModule, MatIconModule, ReactiveFormsModule, FormsModule],\n templateUrl: './string.component.html',\n styleUrls: ['./string.component.scss'],\n providers: [{ provide: MatFormFieldControl, useExisting: StringComponent }]\n})\nexport class StringComponent extends AbstractMatFormField<string | string[] | undefined> implements ControlValueAccessor, AfterViewInit, OnInit, OnDestroy {\n #elRef = inject(ElementRef);\n #dRef = inject(DestroyRef);\n\n readonly fc = new FormControl<string | string[] | undefined>(undefined);\n\n readonly separatorKeysCodes = [ENTER, COMMA] as const;\n\n classifiytionIcons = {\n email: 'email',\n url: 'language',\n phone: 'call'\n };\n maxEntryCountIfInvalid?: number;\n\n /**\n * Indicator that multiple strings could be inserted, they will be rendered as chips (default: false).\n */\n @Input() multiselect = false;\n /**\n * Setting rows to more than 1 will generate a textarea instead of an input tag\n * and apply the rows property to it\n */\n @Input() rows?: number;\n /**\n * Will prevent the input from being changed (default: false)\n */\n @Input() readonly = false;\n /**\n * Enable autofucus for the input (default: false)\n */\n @Input() autofocus = false;\n /**\n * Additional semantics for the form element. Possible values are\n * `email` (validates and creates a link to send an email once there\n * is a valid email address) and `url` (validates and creates a link\n * to an URL typed into the form element).\n */\n @Input()\n set classifications(c: string[]) {\n this.#classifications = c;\n if (c && c.length) {\n if (c.includes(Classification.STRING_EMAIL)) {\n this.classify = {\n hrefPrefix: ClassificationPrefix.EMAIL,\n icon: this.classifiytionIcons.email\n };\n } else if (c.includes(Classification.STRING_URL)) {\n this.classify = {\n hrefPrefix: ClassificationPrefix.URL,\n icon: this.classifiytionIcons.url\n };\n } else if (c.includes(Classification.STRING_PHONE)) {\n this.classify = {\n hrefPrefix: ClassificationPrefix.PHONE,\n icon: this.classifiytionIcons.phone\n };\n }\n }\n }\n\n get classifications() {\n return this.#classifications;\n }\n /**\n * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.\n */\n @Input() situation?: string;\n\n /**\n * Regular expression to validate the input value against\n */\n @Input() regex?: string;\n /**\n * Minimal number of characters\n */\n @Input() minLength?: number;\n /**\n * Maximum number of characters\n */\n @Input() maxLength?: number;\n\n formatedValue?: FormattedMailTo;\n valid = false;\n validationErrors: { [key: string]: any }[] = [];\n classify?: { hrefPrefix: string; icon: string | undefined };\n #classifications: string[] = [];\n override ngControl = injectNgControl(this);\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n private propagate() {\n this.propagateChange(this.value);\n }\n\n writeValue(value: string | string[]): void {\n if (Array.isArray(value)) {\n value = value.filter((v) => typeof v === 'string' && v.trim().length > 0);\n } else {\n this.formatedValue = Utils.formatMailTo(value, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);\n }\n this.fc.patchValue(value);\n this.value = value || undefined;\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(): void {}\n\n #onValueChange(val: any) {\n this.value = val;\n this.empty = Utils.isEmpty(val);\n if (this.empty) {\n this.value = undefined;\n this.propagate();\n return;\n }\n this.formatedValue = Utils.formatMailTo(val, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);\n this.propagate();\n }\n\n onBlur() {\n if (!this.value) return;\n // only called by single item input\n const value = this.value as string;\n const lengthBefore = value.length;\n this.value = value.trim();\n if (this.value.length !== lengthBefore) {\n this.propagate();\n }\n }\n\n // chips for multiselect\n\n chipsAdd(event: MatChipInputEvent) {\n const value = (event.value || '').trim();\n if (value) {\n this.value = [...((this.value as string[]) || []), value];\n this.fc.patchValue(this.value);\n }\n // Clear the input value\n event.chipInput.clear();\n }\n\n chipsRemove(v: string) {\n const currValue = this.value as string[];\n const index = currValue.indexOf(v);\n if (index !== -1) {\n currValue.splice(index, 1);\n this.value = [...currValue];\n this.fc.patchValue(this.value);\n }\n }\n\n chipsEdit(v: string, event: MatChipEditedEvent) {\n const value = event.value.trim();\n if (!value) {\n this.chipsRemove(v);\n return;\n }\n const currValue = this.value as string[];\n const index = currValue.indexOf(v);\n if (index >= 0) {\n currValue[index] = value;\n this.value = [...currValue];\n this.fc.patchValue(this.value);\n }\n }\n\n private validateClassification(string: string, classification: string): boolean {\n if (this.situation === Situation.SEARCH) {\n return true;\n } else {\n let pattern;\n if (classification === Classification.STRING_EMAIL) {\n pattern =\n /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n } else if (classification === Classification.STRING_URL) {\n pattern = /(http|ftp|https):\\/\\/[\\w-]+(\\.[\\w-]+)?([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?/;\n } else if (classification === Classification.STRING_PHONE) {\n pattern = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-x\\s\\./0-9]*$/g;\n }\n return pattern ? pattern.test(string) : true;\n }\n }\n\n #getValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n this.maxEntryCountIfInvalid = undefined;\n this.validationErrors = [];\n const val = control.value;\n if(!val) return null;\n const multiCheck = (check: (s: string) => boolean) => !!(this.multiselect ? val : [val]).find((v: string) => check(v));\n\n // validate regular expression\n if (this.regex && multiCheck((v: string) => !RegExp(this.regex!).test(v))) {\n this.validationErrors.push({ key: 'regex' });\n }\n\n // validate classification settings\n if (this.classifications && this.classifications.length) {\n this.classifications.forEach((c) => {\n if (multiCheck((v) => !this.validateClassification(v, c))) {\n this.validationErrors.push({ key: 'classification' + c });\n }\n });\n }\n // validate min length\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (!Utils.isEmpty(this.minLength) && multiCheck((v) => v.length < this.minLength!)) {\n this.validationErrors.push({ key: 'minlength', params: { minLength: this.minLength } });\n }\n\n // validate max length\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n if (!Utils.isEmpty(this.maxLength) && multiCheck((v) => v.length > this.maxLength!)) {\n this.validationErrors.push({ key: 'maxlength', params: { maxLength: this.maxLength } });\n }\n\n // validate invalid if only whitespaces\n if (multiCheck((v) => v.length > 0 && !v.trim().length)) {\n this.validationErrors.push({ key: 'onlyWhitespaces' });\n }\n\n if (this.validationErrors.length && this.multiselect && this.value) {\n // Setting maxEntryCountIfInvalid to the actual length of the value array to prevent the user to add more entries.\n this.maxEntryCountIfInvalid = this.value.length;\n }\n\n if (this.validationErrors.length) {\n this.valid = false;\n return Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err }));\n } else {\n this.valid = true;\n return null;\n }\n };\n }\n\n ngOnInit(): void {\n this.fc.setValidators(this.#getValidator());\n this.fc.statusChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => {\n this.errorState = this.fc.invalid;\n if (this.ngControl?.control) {\n this.ngControl.control.setErrors(this.fc.errors);\n }\n });\n this.fc.updateValueAndValidity();\n this.fc.valueChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => this.#onValueChange(v));\n }\n\n ngAfterViewInit(): void {\n if (this.autofocus) {\n if (!this.multiselect) {\n const el = this.#elRef.nativeElement.querySelector(this.rows && this.rows > 1 ? 'textarea' : 'input');\n if (el) el.focus();\n }\n }\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","@if ((!rows || rows <= 1) && !multiselect) {\n <input matInput type=\"text\" (blur)=\"onBlur()\" [disabled]=\"disabled\" [readonly]=\"readonly\" [formControl]=\"fc\" />\n} @else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <mat-chip-grid #chipGrid [formControl]=\"fc\" [disabled]=\"disabled\">\n @for (v of value; track v) {\n <mat-chip-row (removed)=\"chipsRemove(v)\" [editable]=\"true\" (edited)=\"chipsEdit(v, $event)\">\n {{ v }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n }\n <input\n [disabled]=\"disabled\"\n [matChipInputFor]=\"chipGrid\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"chipsAdd($event)\"\n />\n </mat-chip-grid>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n matInput\n class=\"input-textarea\"\n (blur)=\"onBlur()\"\n [rows]=\"rows\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [formControl]=\"fc\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <mat-icon>{{ classify.icon }}</mat-icon>\n </a>\n } @else {\n <mat-icon>{{ classify.icon }}</mat-icon>\n }\n </div>\n}\n","import { Component, DestroyRef, effect, inject, Input, input, OnDestroy, OnInit, signal, untracked } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ControlValueAccessor, FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { AbstractMatFormField, injectNgControl } from '@yuuvis/client-framework/common';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { Classification, ClassificationEntry, SystemService } from '@yuuvis/client-core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'yuv-catalog',\n imports: [CommonModule, MatSelectModule, ReactiveFormsModule],\n templateUrl: './catalog.component.html',\n styleUrl: './catalog.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: CatalogComponent }]\n})\nexport class CatalogComponent extends AbstractMatFormField<string | string[]> implements ControlValueAccessor, OnInit, OnDestroy {\n #system = inject(SystemService);\n #dRef = inject(DestroyRef);\n\n readonly = input<boolean>(false);\n\n multiple = input<boolean>(false);\n\n _options = signal<string[]>([]);\n options = input<string[]>([]);\n #optionsEffect = effect(() => {\n untracked(() => {\n this._options.set(this.options() || []);\n });\n });\n\n /**\n * Additional semantics for the form element.\n */\n classifications = input<string[]>([]);\n #classificationEffect = effect(() => {\n const cls = this.classifications();\n untracked(() => {\n const ce: ClassificationEntry | undefined = this.#system.getClassifications(cls).get(Classification.STRING_CATALOG);\n if (ce && ce.options) {\n this._options.set(ce.options);\n }\n });\n });\n\n /**\n * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.\n */\n @Input() situation?: string;\n\n override ngControl = injectNgControl(this);\n readonly fc = new FormControl<string | string[] | undefined>(undefined);\n\n #onValueChange(val: any) {\n this.value = val;\n this.propagateChange(this.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange = (_: any) => {};\n\n writeValue(value: string | string[]): void {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n registerOnTouched(fn: any): void {}\n\n ngOnInit(): void {\n this.fc.valueChanges.pipe(takeUntilDestroyed(this.#dRef)).subscribe((v) => this.#onValueChange(v));\n }\n\n ngOnDestroy(): void {\n super.onNgOnDestroy();\n }\n}\n","<mat-select [multiple]=\"multiple()\" [disabled]=\"readonly()\" [formControl]=\"fc\">\n @for (o of _options(); track o) {\n <mat-option [value]=\"o\">{{ o }}</mat-option>\n }\n</mat-select>\n","import { NgModule } from '@angular/core';\nimport { DatetimeComponent, DatetimeRangeComponent, NumberRangeComponent, OrganizationComponent } from './elements';\nimport { CatalogComponent } from './elements/catalog/catalog.component';\nimport { NumberComponent } from './elements/number/number.component';\nimport { StringComponent } from './elements/string/string.component';\n\nconst formElementCmps = [\n StringComponent,\n NumberComponent,\n NumberRangeComponent,\n DatetimeComponent,\n DatetimeRangeComponent,\n OrganizationComponent,\n StringComponent,\n CatalogComponent\n];\n\n@NgModule({\n imports: [...formElementCmps],\n exports: [...formElementCmps]\n})\nexport class YuvFormsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i4","TranslateService","map","i3","i5","i6"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ControlValueAccessor } from '@angular/forms';
|
|
2
2
|
import { Situation, TranslateService } from '@yuuvis/client-core';
|
|
3
|
-
import { DataGridSizeType } from '
|
|
3
|
+
import { DataGridSizeType } from './../model/data-grid.interface';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class DataGridComponent implements ControlValueAccessor {
|
|
6
6
|
#private;
|
|
7
|
-
readonly
|
|
7
|
+
readonly translate: TranslateService;
|
|
8
8
|
situation: import("@angular/core").InputSignal<Situation>;
|
|
9
9
|
formElement: import("@angular/core").InputSignal<Record<string, any> | undefined>;
|
|
10
10
|
formControl: import("@angular/core").InputSignal<any>;
|
|
@@ -15,15 +15,15 @@ export declare class DataGridComponent implements ControlValueAccessor {
|
|
|
15
15
|
displayedColumnsWithActions: import("@angular/core").WritableSignal<string[]>;
|
|
16
16
|
dataSource: import("@angular/core").WritableSignal<any[]>;
|
|
17
17
|
tableLabel: import("@angular/core").Signal<any>;
|
|
18
|
-
selectedRow: import("@angular/core").WritableSignal<
|
|
18
|
+
selectedRow: import("@angular/core").WritableSignal<unknown>;
|
|
19
19
|
initalTableUpdate: boolean;
|
|
20
20
|
icons: {
|
|
21
21
|
add: any;
|
|
22
22
|
more: any;
|
|
23
23
|
};
|
|
24
|
-
copyLine(element:
|
|
25
|
-
onMenuTriggert(element:
|
|
26
|
-
editRow(element:
|
|
24
|
+
copyLine(element: unknown): void;
|
|
25
|
+
onMenuTriggert(element: unknown | null): void;
|
|
26
|
+
editRow(element: unknown): void;
|
|
27
27
|
addRow(): void;
|
|
28
28
|
removeRow(element: any): void;
|
|
29
29
|
propagateChange: (fn: () => void) => void;
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/client-framework",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/cdk": "^19.2.15",
|
|
8
8
|
"@angular/common": "^19.2.1",
|
|
9
9
|
"@angular/core": "^19.2.1",
|
|
10
|
-
"@yuuvis/client-core": "2.0.
|
|
10
|
+
"@yuuvis/client-core": "2.0.1",
|
|
11
11
|
"modern-normalize": "^3.0.1"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@angular/material": "^19.2.15",
|
|
15
15
|
"@ngrx/signals": "^19.2.0",
|
|
16
|
-
"@yuuvis/client-shell-core": "2.0.
|
|
17
|
-
"@yuuvis/material": "2.0.
|
|
16
|
+
"@yuuvis/client-shell-core": "2.0.1",
|
|
17
|
+
"@yuuvis/material": "2.0.1",
|
|
18
18
|
"@yuuvis/media-viewer": "^1.0.0",
|
|
19
19
|
"angular-split": "^19.0.0",
|
|
20
20
|
"tslib": "^2.3.0"
|