@messaia/cdk 20.0.0-RC.9 → 20.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,6 +1,6 @@
1
- import * as i3 from '@angular/common';
1
+ import * as i1$1 from '@angular/common';
2
2
  import { CommonModule, Location, getLocaleNumberSymbol, NumberSymbol, DecimalPipe, JsonPipe } from '@angular/common';
3
- import * as i1$5 from '@angular/common/http';
3
+ import * as i1$6 from '@angular/common/http';
4
4
  import { HttpHeaders, HttpParams, HttpClient, HttpRequest, HttpEventType, HttpResponse } from '@angular/common/http';
5
5
  import * as i0 from '@angular/core';
6
6
  import { Injectable, Component, Directive, ContentChildren, Optional, SkipSelf, NgZone, InjectionToken, Inject, EventEmitter, inject, ElementRef, ViewChildren, Output, Input, forwardRef, LOCALE_ID, NgModule, Pipe, HostListener, ViewChild, ChangeDetectorRef, HostAttributeToken, HostBinding, ContentChild, ViewContainerRef, TemplateRef, ChangeDetectionStrategy, SimpleChange, Self, Attribute, SecurityContext } from '@angular/core';
@@ -10,16 +10,16 @@ import * as i6$3 from '@angular/material/expansion';
10
10
  import { MatExpansionPanel, MatExpansionModule } from '@angular/material/expansion';
11
11
  import * as i2$3 from '@angular/material/snack-bar';
12
12
  import { MatSnackBar } from '@angular/material/snack-bar';
13
- import * as i1$3 from '@angular/platform-browser';
13
+ import * as i1$4 from '@angular/platform-browser';
14
14
  import { Title } from '@angular/platform-browser';
15
- import * as i1$2 from '@angular/router';
15
+ import * as i1$3 from '@angular/router';
16
16
  import { Router, RouterModule } from '@angular/router';
17
17
  import { fromEvent, Subject, map, of, BehaviorSubject, throwError, filter, distinctUntilChanged, debounceTime, merge as merge$1, tap, Observable, takeUntil as takeUntil$1 } from 'rxjs';
18
- import * as i3$1 from '@angular/material/button';
18
+ import * as i3 from '@angular/material/button';
19
19
  import { MatButtonModule, MatIconButton } from '@angular/material/button';
20
20
  import * as i8 from '@angular/material/icon';
21
21
  import { MatIcon, MatIconModule } from '@angular/material/icon';
22
- import * as i1$1 from '@angular/forms';
22
+ import * as i1$2 from '@angular/forms';
23
23
  import { FormsModule, FormArray, FormGroup, FormControl, NG_ASYNC_VALIDATORS, NG_VALUE_ACCESSOR, NG_VALIDATORS, AbstractControl, FormBuilder, ReactiveFormsModule, FormControlName, FormControlDirective, NgControl, NgForm, FormGroupDirective, Validators } from '@angular/forms';
24
24
  import * as i5 from '@angular/material/form-field';
25
25
  import { MatFormFieldModule, MatFormFieldControl } from '@angular/material/form-field';
@@ -44,7 +44,7 @@ import * as i16 from '@angular/material/slide-toggle';
44
44
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
45
45
  import * as i12 from '@angular/material/sort';
46
46
  import { MatSort, MatSortModule } from '@angular/material/sort';
47
- import * as i1$4 from '@angular/material/table';
47
+ import * as i1$5 from '@angular/material/table';
48
48
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
49
49
  import * as i4$1 from '@angular/material/tooltip';
50
50
  import { MatTooltipModule } from '@angular/material/tooltip';
@@ -71,17 +71,17 @@ import * as i11 from 'ngx-colors';
71
71
  import { NgxColorsModule } from 'ngx-colors';
72
72
  import * as i4$4 from '@angular/material/list';
73
73
  import { MatSelectionList, MatListOption, MatListModule } from '@angular/material/list';
74
- import * as i3$2 from '@angular/cdk/platform';
74
+ import * as i3$1 from '@angular/cdk/platform';
75
75
  import * as i4$3 from '@angular/cdk/text-field';
76
76
  import * as i5$2 from '@tinymce/tinymce-angular';
77
- import * as i3$4 from '@angular/material/card';
77
+ import * as i3$3 from '@angular/material/card';
78
78
  import { MatCardModule } from '@angular/material/card';
79
- import * as i3$3 from '@angular/material/sidenav';
79
+ import * as i3$2 from '@angular/material/sidenav';
80
80
  import { MatSidenavModule, MatSidenav } from '@angular/material/sidenav';
81
81
  import * as i5$3 from '@angular/material/toolbar';
82
82
  import { MatToolbarModule, MatToolbar } from '@angular/material/toolbar';
83
- import * as i1$6 from 'angular-auth-oidc-client';
84
- import * as i3$5 from '@angular/cdk/scrolling';
83
+ import * as i1$7 from 'angular-auth-oidc-client';
84
+ import * as i3$4 from '@angular/cdk/scrolling';
85
85
 
86
86
  class AppSetting {
87
87
  /**
@@ -215,7 +215,7 @@ class VdAlertDialogComponent {
215
215
  <mat-dialog-content class="mat-subhead" [innerHtml]="message"></mat-dialog-content>
216
216
  <mat-dialog-actions align="end">
217
217
  <button mat-button color="accent" (click)="close()">{{closeButton}}</button>
218
- </mat-dialog-actions>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
218
+ </mat-dialog-actions>`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
219
219
  }
220
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdAlertDialogComponent, decorators: [{
221
221
  type: Component,
@@ -281,7 +281,7 @@ class VdConfirmDialogComponent {
281
281
  this.dialogRef.close(true);
282
282
  }
283
283
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdConfirmDialogComponent, deps: [{ token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
284
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdConfirmDialogComponent, isStandalone: true, selector: "vd-confirm-dialog", ngImport: i0, template: "<h2 mat-dialog-title *ngIf=\"title\" class=\"push-top-sm\" layout=\"row\" layout-align=\"start center\" flex>\r\n <mat-icon fontSet=\"material-symbols-outlined\" class=\"push-right-sm tc-blue-400\">help</mat-icon>\r\n <span>{{title}}</span>\r\n</h2>\r\n<mat-dialog-content class=\"mat-subhead\" [innerHtml]=\"message\"></mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n <button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" (click)=\"accept()\">{{acceptButton}}</button>\r\n</mat-dialog-actions>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
284
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdConfirmDialogComponent, isStandalone: true, selector: "vd-confirm-dialog", ngImport: i0, template: "<h2 mat-dialog-title *ngIf=\"title\" class=\"push-top-sm\" layout=\"row\" layout-align=\"start center\" flex>\r\n <mat-icon fontSet=\"material-symbols-outlined\" class=\"push-right-sm tc-blue-400\">help</mat-icon>\r\n <span>{{title}}</span>\r\n</h2>\r\n<mat-dialog-content class=\"mat-subhead\" [innerHtml]=\"message\"></mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n <button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" (click)=\"accept()\">{{acceptButton}}</button>\r\n</mat-dialog-actions>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }] });
285
285
  }
286
286
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdConfirmDialogComponent, decorators: [{
287
287
  type: Component,
@@ -339,7 +339,7 @@ class VdDialogComponent {
339
339
  }
340
340
  }
341
341
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
342
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDialogComponent, isStandalone: true, selector: "vd-dialog", queries: [{ propertyName: "dialogTitle", predicate: VdDialogTitleDirective }, { propertyName: "dialogContent", predicate: VdDialogContentDirective }, { propertyName: "dialogActions", predicate: VdDialogActionsDirective }], ngImport: i0, template: "<div class=\"vd-dialog-wrapper\">\r\n\t<h3 class=\"vd-dialog-title md-title\" *ngIf=\"(dialogTitle?.length??0) > 0\">\r\n\t\t<ng-content select=\"vd-dialog-title\"></ng-content>\r\n\t</h3>\r\n\t<div class=\"vd-dialog-content\" *ngIf=\"(dialogContent?.length??0) > 0\">\r\n\t\t<ng-content select=\"vd-dialog-content\"></ng-content>\r\n\t</div>\r\n\t<div class=\"vd-dialog-actions\" *ngIf=\"(dialogActions?.length??0) > 0\" layout=\"row\">\r\n\t\t<span flex></span>\r\n\t\t<ng-content select=\"vd-dialog-actions\"></ng-content>\r\n\t</div>\r\n</div>", styles: [".vd-dialog-title{margin-top:0;margin-bottom:20px}.vd-dialog-content{margin-bottom:16px}.vd-dialog-actions{position:relative;top:16px;left:16px}::ng-deep [dir=rtl] .vd-dialog-actions{right:16px;left:auto}:host{display:block}:host .vd-dialog-actions ::ng-deep button{text-transform:uppercase;margin-left:8px;padding-left:8px;padding-right:8px;min-width:64px}[dir=rtl] :host .vd-dialog-actions ::ng-deep button{margin-right:8px;margin-left:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
342
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDialogComponent, isStandalone: true, selector: "vd-dialog", queries: [{ propertyName: "dialogTitle", predicate: VdDialogTitleDirective }, { propertyName: "dialogContent", predicate: VdDialogContentDirective }, { propertyName: "dialogActions", predicate: VdDialogActionsDirective }], ngImport: i0, template: "<div class=\"vd-dialog-wrapper\">\r\n\t<h3 class=\"vd-dialog-title md-title\" *ngIf=\"(dialogTitle?.length??0) > 0\">\r\n\t\t<ng-content select=\"vd-dialog-title\"></ng-content>\r\n\t</h3>\r\n\t<div class=\"vd-dialog-content\" *ngIf=\"(dialogContent?.length??0) > 0\">\r\n\t\t<ng-content select=\"vd-dialog-content\"></ng-content>\r\n\t</div>\r\n\t<div class=\"vd-dialog-actions\" *ngIf=\"(dialogActions?.length??0) > 0\" layout=\"row\">\r\n\t\t<span flex></span>\r\n\t\t<ng-content select=\"vd-dialog-actions\"></ng-content>\r\n\t</div>\r\n</div>", styles: [".vd-dialog-title{margin-top:0;margin-bottom:20px}.vd-dialog-content{margin-bottom:16px}.vd-dialog-actions{position:relative;top:16px;left:16px}::ng-deep [dir=rtl] .vd-dialog-actions{right:16px;left:auto}:host{display:block}:host .vd-dialog-actions ::ng-deep button{text-transform:uppercase;margin-left:8px;padding-left:8px;padding-right:8px;min-width:64px}[dir=rtl] :host .vd-dialog-actions ::ng-deep button{margin-right:8px;margin-left:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
343
343
  }
344
344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDialogComponent, decorators: [{
345
345
  type: Component,
@@ -382,7 +382,7 @@ class VdPromptDialogComponent {
382
382
  this._dialogRef.close(this.value);
383
383
  }
384
384
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdPromptDialogComponent, deps: [{ token: i1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdPromptDialogComponent, isStandalone: true, selector: "vd-prompt-dialog", ngImport: i0, template: "<vd-dialog>\r\n\t<vd-dialog-title *ngIf=\"title\">{{title}}</vd-dialog-title>\r\n\t<vd-dialog-content layout=\"column\" class=\"mat-subhead\">\r\n\t\t<span [innerHtml]=\"message\"></span>\r\n\t\t<form #form=\"ngForm\" layout=\"row\" novalidate flex>\r\n\t\t\t<mat-form-field flex>\r\n\t\t\t\t<input matInput (keydown.enter)=\"$event.preventDefault(); form.valid && accept()\" [(ngModel)]=\"value\" name=\"value\" required />\r\n\t\t\t</mat-form-field>\r\n\t\t</form>\r\n\t</vd-dialog-content>\r\n\t<vd-dialog-actions>\r\n\t\t<button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n\t\t<button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" [disabled]=\"!form.valid\" (click)=\"accept()\">{{acceptButton}}</button>\r\n\t</vd-dialog-actions>\r\n</vd-dialog>", styles: ["@media (min-width: 600px){vd-dialog{width:400px}}@media (max-width: 599px){vd-dialog{width:250px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: VdDialogComponent, selector: "vd-dialog" }, { kind: "directive", type: VdDialogTitleDirective, selector: "vd-dialog-title" }, { kind: "directive", type: VdDialogContentDirective, selector: "vd-dialog-content" }, { kind: "directive", type: VdDialogActionsDirective, selector: "vd-dialog-actions" }] });
385
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdPromptDialogComponent, isStandalone: true, selector: "vd-prompt-dialog", ngImport: i0, template: "<vd-dialog>\r\n\t<vd-dialog-title *ngIf=\"title\">{{title}}</vd-dialog-title>\r\n\t<vd-dialog-content layout=\"column\" class=\"mat-subhead\">\r\n\t\t<span [innerHtml]=\"message\"></span>\r\n\t\t<form #form=\"ngForm\" layout=\"row\" novalidate flex>\r\n\t\t\t<mat-form-field flex>\r\n\t\t\t\t<input matInput (keydown.enter)=\"$event.preventDefault(); form.valid && accept()\" [(ngModel)]=\"value\" name=\"value\" required />\r\n\t\t\t</mat-form-field>\r\n\t\t</form>\r\n\t</vd-dialog-content>\r\n\t<vd-dialog-actions>\r\n\t\t<button mat-button #closeBtn (keydown.arrowright)=\"acceptBtn.focus()\" (click)=\"cancel()\">{{cancelButton}}</button>\r\n\t\t<button mat-button color=\"accent\" #acceptBtn (keydown.arrowleft)=\"closeBtn.focus()\" [disabled]=\"!form.valid\" (click)=\"accept()\">{{acceptButton}}</button>\r\n\t</vd-dialog-actions>\r\n</vd-dialog>", styles: ["@media (min-width: 600px){vd-dialog{width:400px}}@media (max-width: 599px){vd-dialog{width:250px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: VdDialogComponent, selector: "vd-dialog" }, { kind: "directive", type: VdDialogTitleDirective, selector: "vd-dialog-title" }, { kind: "directive", type: VdDialogContentDirective, selector: "vd-dialog-content" }, { kind: "directive", type: VdDialogActionsDirective, selector: "vd-dialog-actions" }] });
386
386
  }
387
387
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdPromptDialogComponent, decorators: [{
388
388
  type: Component,
@@ -1048,7 +1048,7 @@ class VdTaskDialogComponent {
1048
1048
  this.unsubscribe.complete();
1049
1049
  }
1050
1050
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdTaskDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1051
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdTaskDialogComponent, isStandalone: true, selector: "vd-task-dialog", ngImport: i0, template: "<div mat-dialog-title class=\"mat-headline-6\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDrag cdkDragHandle>{{this.data.title}}</div>\r\n<mat-progress-bar *ngIf=\"inProgress\" mode=\"indeterminate\"></mat-progress-bar>\r\n<mat-progress-bar *ngIf=\"!inProgress\" mode=\"determinate\" value=\"100\"></mat-progress-bar>\r\n<div mat-dialog-content>{{content}}</div>\r\n<div mat-dialog-actions class=\"pad-top\">\r\n <button type=\"button\" mat-flat-button *ngIf=\"succeeded\" (click)=\"success()\" color=\"primary\" (click)=\"null\">{{this.data.successButtonText}}</button>\r\n <button type=\"button\" mat-button *ngIf=\"inProgress\" (click)=\"cancel()\" autofocus>{{this.data.cancelButtonText}}</button>\r\n <button type=\"button\" mat-button *ngIf=\"!inProgress\" (click)=\"close()\" autofocus>{{this.data.closeButtonText}}</button>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
1051
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdTaskDialogComponent, isStandalone: true, selector: "vd-task-dialog", ngImport: i0, template: "<div mat-dialog-title class=\"mat-headline-6\" cdkDragRootElement=\".cdk-overlay-pane\" cdkDrag cdkDragHandle>{{this.data.title}}</div>\r\n<mat-progress-bar *ngIf=\"inProgress\" mode=\"indeterminate\"></mat-progress-bar>\r\n<mat-progress-bar *ngIf=\"!inProgress\" mode=\"determinate\" value=\"100\"></mat-progress-bar>\r\n<div mat-dialog-content>{{content}}</div>\r\n<div mat-dialog-actions class=\"pad-top\">\r\n <button type=\"button\" mat-flat-button *ngIf=\"succeeded\" (click)=\"success()\" color=\"primary\" (click)=\"null\">{{this.data.successButtonText}}</button>\r\n <button type=\"button\" mat-button *ngIf=\"inProgress\" (click)=\"cancel()\" autofocus>{{this.data.cancelButtonText}}</button>\r\n <button type=\"button\" mat-button *ngIf=\"!inProgress\" (click)=\"close()\" autofocus>{{this.data.closeButtonText}}</button>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
1052
1052
  }
1053
1053
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdTaskDialogComponent, decorators: [{
1054
1054
  type: Component,
@@ -1239,11 +1239,11 @@ class BaseComponent {
1239
1239
  /**
1240
1240
  * Create a beep audio object and load a sound file from a data URL.
1241
1241
  */
1242
- // protected beepAudio = new Audio("data:audio/wav;base64,//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihwMWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIIIhxGOBAuD7hOfBB3/94gcJ3w+o5/5eIAIAAAVwWgQAVQ2ORaIQwEMAJiDg95G4nQL7mQVWI6GwRcfsZAcsKkJvxgxEjzFUgfHoSQ9Qq7KNwqHwuB13MA4a1q/DmBrHgPcmjiGoh//EwC5nGPEmS4RcfkVKOhJf+WOgoxJclFz3kgn//dBA+ya1GhurNn8zb//9NNutNuhz31f////9vt///z+IdAEAAAK4LQIAKobHItEIYCGAExBwe8jcToF9zIKrEdDYIuP2MgOWFSE34wYiR5iqQPj0JIeoVdlG4VD4XA67mAcNa1fhzA1jwHuTRxDUQ//iYBczjHiTJcIuPyKlHQkv/LHQUYkuSi57yQT//uggfZNajQ3Vmz+Zt//+mm3Wm3Q576v////+32///5/EOgAAADVghQAAAAA//uQZAUAB1WI0PZugAAAAAoQwAAAEk3nRd2qAAAAACiDgAAAAAAABCqEEQRLCgwpBGMlJkIz8jKhGvj4k6jzRnqasNKIeoh5gI7BJaC1A1AoNBjJgbyApVS4IDlZgDU5WUAxEKDNmmALHzZp0Fkz1FMTmGFl1FMEyodIavcCAUHDWrKAIA4aa2oCgILEBupZgHvAhEBcZ6joQBxS76AgccrFlczBvKLC0QI2cBoCFvfTDAo7eoOQInqDPBtvrDEZBNYN5xwNwxQRfw8ZQ5wQVLvO8OYU+mHvFLlDh05Mdg7BT6YrRPpCBznMB2r//xKJjyyOh+cImr2/4doscwD6neZjuZR4AgAABYAAAABy1xcdQtxYBYYZdifkUDgzzXaXn98Z0oi9ILU5mBjFANmRwlVJ3/6jYDAmxaiDG3/6xjQQCCKkRb/6kg/wW+kSJ5//rLobkLSiKmqP/0ikJuDaSaSf/6JiLYLEYnW/+kXg1WRVJL/9EmQ1YZIsv/6Qzwy5qk7/+tEU0nkls3/zIUMPKNX/6yZLf+kFgAfgGyLFAUwY//uQZAUABcd5UiNPVXAAAApAAAAAE0VZQKw9ISAAACgAAAAAVQIygIElVrFkBS+Jhi+EAuu+lKAkYUEIsmEAEoMeDmCETMvfSHTGkF5RWH7kz/ESHWPAq/kcCRhqBtMdokPdM7vil7RG98A2sc7zO6ZvTdM7pmOUAZTnJW+NXxqmd41dqJ6mLTXxrPpnV8avaIf5SvL7pndPvPpndJR9Kuu8fePvuiuhorgWjp7Mf/PRjxcFCPDkW31srioCExivv9lcwKEaHsf/7ow2Fl1T/9RkXgEhYElAoCLFtMArxwivDJJ+bR1HTKJdlEoTELCIqgEwVGSQ+hIm0NbK8WXcTEI0UPoa2NbG4y2K00JEWbZavJXkYaqo9CRHS55FcZTjKEk3NKoCYUnSQ0rWxrZbFKbKIhOKPZe1cJKzZSaQrIyULHDZmV5K4xySsDRKWOruanGtjLJXFEmwaIbDLX0hIPBUQPVFVkQkDoUNfSoDgQGKPekoxeGzA4DUvnn4bxzcZrtJyipKfPNy5w+9lnXwgqsiyHNeSVpemw4bWb9psYeq//uQZBoABQt4yMVxYAIAAAkQoAAAHvYpL5m6AAgAACXDAAAAD59jblTirQe9upFsmZbpMudy7Lz1X1DYsxOOSWpfPqNX2WqktK0DMvuGwlbNj44TleLPQ+Gsfb+GOWOKJoIrWb3cIMeeON6lz2umTqMXV8Mj30yWPpjoSa9ujK8SyeJP5y5mOW1D6hvLepeveEAEDo0mgCRClOEgANv3B9a6fikgUSu/DmAMATrGx7nng5p5iimPNZsfQLYB2sDLIkzRKZOHGAaUyDcpFBSLG9MCQALgAIgQs2YunOszLSAyQYPVC2YdGGeHD2dTdJk1pAHGAWDjnkcLKFymS3RQZTInzySoBwMG0QueC3gMsCEYxUqlrcxK6k1LQQcsmyYeQPdC2YfuGPASCBkcVMQQqpVJshui1tkXQJQV0OXGAZMXSOEEBRirXbVRQW7ugq7IM7rPWSZyDlM3IuNEkxzCOJ0ny2ThNkyRai1b6ev//3dzNGzNb//4uAvHT5sURcZCFcuKLhOFs8mLAAEAt4UWAAIABAAAAAB4qbHo0tIjVkUU//uQZAwABfSFz3ZqQAAAAAngwAAAE1HjMp2qAAAAACZDgAAAD5UkTE1UgZEUExqYynN1qZvqIOREEFmBcJQkwdxiFtw0qEOkGYfRDifBui9MQg4QAHAqWtAWHoCxu1Yf4VfWLPIM2mHDFsbQEVGwyqQoQcwnfHeIkNt9YnkiaS1oizycqJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");
1242
+ beepAudio = new Audio("data:audio/wav;base64,//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihwMWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIIIhxGOBAuD7hOfBB3/94gcJ3w+o5/5eIAIAAAVwWgQAVQ2ORaIQwEMAJiDg95G4nQL7mQVWI6GwRcfsZAcsKkJvxgxEjzFUgfHoSQ9Qq7KNwqHwuB13MA4a1q/DmBrHgPcmjiGoh//EwC5nGPEmS4RcfkVKOhJf+WOgoxJclFz3kgn//dBA+ya1GhurNn8zb//9NNutNuhz31f////9vt///z+IdAEAAAK4LQIAKobHItEIYCGAExBwe8jcToF9zIKrEdDYIuP2MgOWFSE34wYiR5iqQPj0JIeoVdlG4VD4XA67mAcNa1fhzA1jwHuTRxDUQ//iYBczjHiTJcIuPyKlHQkv/LHQUYkuSi57yQT//uggfZNajQ3Vmz+Zt//+mm3Wm3Q576v////+32///5/EOgAAADVghQAAAAA//uQZAUAB1WI0PZugAAAAAoQwAAAEk3nRd2qAAAAACiDgAAAAAAABCqEEQRLCgwpBGMlJkIz8jKhGvj4k6jzRnqasNKIeoh5gI7BJaC1A1AoNBjJgbyApVS4IDlZgDU5WUAxEKDNmmALHzZp0Fkz1FMTmGFl1FMEyodIavcCAUHDWrKAIA4aa2oCgILEBupZgHvAhEBcZ6joQBxS76AgccrFlczBvKLC0QI2cBoCFvfTDAo7eoOQInqDPBtvrDEZBNYN5xwNwxQRfw8ZQ5wQVLvO8OYU+mHvFLlDh05Mdg7BT6YrRPpCBznMB2r//xKJjyyOh+cImr2/4doscwD6neZjuZR4AgAABYAAAABy1xcdQtxYBYYZdifkUDgzzXaXn98Z0oi9ILU5mBjFANmRwlVJ3/6jYDAmxaiDG3/6xjQQCCKkRb/6kg/wW+kSJ5//rLobkLSiKmqP/0ikJuDaSaSf/6JiLYLEYnW/+kXg1WRVJL/9EmQ1YZIsv/6Qzwy5qk7/+tEU0nkls3/zIUMPKNX/6yZLf+kFgAfgGyLFAUwY//uQZAUABcd5UiNPVXAAAApAAAAAE0VZQKw9ISAAACgAAAAAVQIygIElVrFkBS+Jhi+EAuu+lKAkYUEIsmEAEoMeDmCETMvfSHTGkF5RWH7kz/ESHWPAq/kcCRhqBtMdokPdM7vil7RG98A2sc7zO6ZvTdM7pmOUAZTnJW+NXxqmd41dqJ6mLTXxrPpnV8avaIf5SvL7pndPvPpndJR9Kuu8fePvuiuhorgWjp7Mf/PRjxcFCPDkW31srioCExivv9lcwKEaHsf/7ow2Fl1T/9RkXgEhYElAoCLFtMArxwivDJJ+bR1HTKJdlEoTELCIqgEwVGSQ+hIm0NbK8WXcTEI0UPoa2NbG4y2K00JEWbZavJXkYaqo9CRHS55FcZTjKEk3NKoCYUnSQ0rWxrZbFKbKIhOKPZe1cJKzZSaQrIyULHDZmV5K4xySsDRKWOruanGtjLJXFEmwaIbDLX0hIPBUQPVFVkQkDoUNfSoDgQGKPekoxeGzA4DUvnn4bxzcZrtJyipKfPNy5w+9lnXwgqsiyHNeSVpemw4bWb9psYeq//uQZBoABQt4yMVxYAIAAAkQoAAAHvYpL5m6AAgAACXDAAAAD59jblTirQe9upFsmZbpMudy7Lz1X1DYsxOOSWpfPqNX2WqktK0DMvuGwlbNj44TleLPQ+Gsfb+GOWOKJoIrWb3cIMeeON6lz2umTqMXV8Mj30yWPpjoSa9ujK8SyeJP5y5mOW1D6hvLepeveEAEDo0mgCRClOEgANv3B9a6fikgUSu/DmAMATrGx7nng5p5iimPNZsfQLYB2sDLIkzRKZOHGAaUyDcpFBSLG9MCQALgAIgQs2YunOszLSAyQYPVC2YdGGeHD2dTdJk1pAHGAWDjnkcLKFymS3RQZTInzySoBwMG0QueC3gMsCEYxUqlrcxK6k1LQQcsmyYeQPdC2YfuGPASCBkcVMQQqpVJshui1tkXQJQV0OXGAZMXSOEEBRirXbVRQW7ugq7IM7rPWSZyDlM3IuNEkxzCOJ0ny2ThNkyRai1b6ev//3dzNGzNb//4uAvHT5sURcZCFcuKLhOFs8mLAAEAt4UWAAIABAAAAAB4qbHo0tIjVkUU//uQZAwABfSFz3ZqQAAAAAngwAAAE1HjMp2qAAAAACZDgAAAD5UkTE1UgZEUExqYynN1qZvqIOREEFmBcJQkwdxiFtw0qEOkGYfRDifBui9MQg4QAHAqWtAWHoCxu1Yf4VfWLPIM2mHDFsbQEVGwyqQoQcwnfHeIkNt9YnkiaS1oizycqJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");
1243
1243
  /**
1244
1244
  * Create a warn audio object and load a sound file from a data URL.
1245
1245
  */
1246
- // protected warnAudio = new Audio("data:audio/mp3;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAHAAAKYwApKSkpKSkpKSkpKSkpKU1NTU1NTU1NTU1NTU1Nd3d3d3d3d3d3d3d3d3eCgoKCgoKCgoKCgoKCgoKysrKysrKysrKysrKystbW1tbW1tbW1tbW1tbW//////////////////8AAAA5TEFNRTMuMTAwAqUAAAAALn4AABRGJAMfQgAARgAACmOKluQbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uAxAAACVRLZNSRgAPCQiz3M0AAAIAArAmCZPpACAAAQMVDPNGjRzL/iIgGLf+u4gEHRAD4P4OAgGMHwfB/UCAY4Ph/gg70cQA/wcDGoHw/lAQdxO/iB3B8P6gQd/z4AAABaLUkleKYAAAAACRwFwwEZXC85Ri+o+ZXJ0OuCXgoBUDQXPC+4ZGBQ0biUDwnoCowL6jfAqRLogoBikhqJRJQDJBBOzk8Bkw6RYE8gOGDhSBMEA4CLlI08VwcaJRAmQKEQbNDLDMkAE+JJC8LpDg4FTB1C0ToLBCeJkQiEGMsnSXUkQOkM4fqHMdRJFyZD2WkVEibOkRetZ0d2dINNGLBBDVRRKhqsoltJIvrRlkrIFlB2JXmhbkatJZMkgksmkMn2WicSmZPso6lcmXyZPLUcaiVElFZSKiXZEsFxFiigtSRU////aotf///oqLLqqYARmBBDHQAa6/7DXJlIJzXLFWcw81qLP1Zemn/+3DEDgBQYa1p3ZaACjE1rPqw0AFdESAMRgS6eqSMpgJETk1Wgmpa6x+CxKNndWtEHkv0luzoJoCqG2SKCL1XdAS8lTy1L9FQ6Hv6MkT6Lt1JqJxdR/0B/Mf9llBBf7OeRb+syKJrb65WddvrnTRSm/TL6Lf7lh7+uYrWgwAzcEQFlgZkdtuDcDokJO77byuH4bjcDvxUXgXREsDnjjTNjtTF8BUnVu61XTYQgNshp3utRwuAnAX82Z13scMQhjZNd13ScLaPdbrqvQKiRN1/VYaHRuu66RwZZsv1UpRL91+ylEFNl31WHcbt/Y4Xz6769iQTd2X2UsgI/1y6Z3X9Rkam6/qsVKbqAAAJIBlMY4UAAAArCB9KiCsXXMe6HqWIsK0hutyCACMpwqhbcwAsFgSxBA1BsyLe//uAxBgAHvIRY5mqAAGRDGqjnmAAFjAGkTGIXzA4oENJE2AIAjqHwLSBmSBSPqAKalQcA3A+YtEVD8gUTkscULWDc4pIkEF+LCREi5NBvZqZC0DbGcE/LiKDaF8ifJwUkS5xQnomETgyeOWS2PCBgLNPVjLFRUgx5IpDTLxjMhmc6QKTzGIyzJmIzJvHUTCJkQ9FSx9FyShfx/5fLSZSIkfMB0mxomQEqpGQ7y8ovMyRHk+kmRxhk6fyBJTxNZYJ83RIEfTUOaio4RXURI2Mj5h////nSW////QnSRQCpAAkSLaLaJqS1ZP4W4NUXFYTyHIcrk8cx1YDAJJyJGe1eSJHDiU//scDAJFiSQdLBQGjwKgrgrPYNA0oGg6VBbEoKvBXklA1qPFQ3lQVWCvBWDQd6zsSgriWWDmoGp77vLBy//8tfl0Zl7/9f////////30y7cyZqeFl1yYUZQEwuGNaIE//////////////+xDEFgPEVbEQAAR+yKQ0YgKAIAH//t3p/7s+1WROn9f////vX6Vdjlbc7TlKsjhlEkAolYjQcDgY5k8FQQUAQSALtMAQcdIAIEmOeDBIFDAAswdAZspbZKxHyEDASZIFh2BO4NjhDf/7kMQZgB+qEVu5upASwTXsM7MQAQMaBEAYAoM4BwbDL4sQGHj4B0QzAMLYnCqXiCEEFCA3gKoAQBC/wGcUmAwHR4Iuo0TFwEyRNMvhfEDAQjAIEAx4gDqQPJm5uXGIIYh+QMC5ARcojIFgz/ImSwy5XIubGgf4G8oGEgACwGRHUBgkH/8nGcqF83L5uwdkXKQ8CABLwpIPZDakf/uhNCbImOeT7kTUodQWKDGkFDFiiaHKC9BEf//QWbmZfcvpM2s3aNUcSKI3ykXiLil2SKI5H////uX0kP///zZQvidQAbgACEABjKajtIIjtICWWuu5DEPPtKs49pRMI2FwkszOs4qUAIwURZg6KS02iMRAYixst0l5q4aOUzVA2Oqc0SLIakGNCgXjGtCixwR2TpVdarspZkJ/NlpXZSMzHgkidrZ2rQMRhF5O7KWtjMZUn0k2pVJyHERKKFKpd2G4X2dlLuyyHF8vskyk6KSxyDI2ZSrOtRiSBaWqzrUiYE4blahuy1JDwXVLvWp0CeKBqIXwDTBkJCADda0faU1UVpsNuP/7cMQIgFJdrWWNPW+KTbYs8rDQAOC88to5PKp/S2S6B3H1aLTEKSsMGefVq6+94xhhDcg5zvVMW1UeBjuvnP385jETfOe7mdUByQ61RHdzJWIJrI/6pAUqWqI+qYUqI/fP0wWPu7mPrKh/Uju5nux7e27/4lw1oRFVUzuM2HufqohhCn2R1X8kql7me7iFDp65/+3kDCnQClEQR333tugwAHtDVu/A9C5bW6WzRYOwJRGHDlkutaaZimaATUZZubpKuugJ4FVV9SnSBLIHkjBB3Uw7wR8NlA6nZa1uZB0PmjL9lk8eClKsvY6OM8h+pA6NhxV6uZlM1dmXupTkI6u/XQJUu2ZdmXMyWOv612JFTupdtRgig6r1XSK0Dd1e6jA3PLXZSrqMHNGVAAwQQYiAAAAAAAAiQgz/+4DEBwAdZdlfWamAAVEUo5eYUACJjmFwMBcAW1aCJ4KIFnnibEDn0hGVKg0jAU0sQ0UmQ4dwqADvF4Lqw4YxBjUTVaQLjPlcOjAtgZNjE4OcWQaEA0PHNK4fAF/AVEISDPnCBFYyJ4RUaaTCnCqD2xcS44hiFFFpihWH/KtY2S4Rgj0+RQxEpE0ovF4yNlkzLYpuiJIxeMzUVscJwfROmnRYmpkXpHjuVF1uOklyKDpLSJuLpMwIIPomkktGtjKqoWhLG+cniBZkNs0IoVzVEvjyUywOQTJMGhoRYyU+iy0TLMlXkoS3///5fMSeR//aCoEoBaMj6ExJqwQgJKBCAkFTZJPYDJgGAIDCyiIdK/0MaZ1KVBIPMJB4ylZDMYWM//0NTKWYPMDQ8NA0Aga/4Klg4DSzoiUHf+dLHk3CKe/wVco9xEpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==");
1246
+ warnAudio = new Audio("data:audio/mp3;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAAHAAAKYwApKSkpKSkpKSkpKSkpKU1NTU1NTU1NTU1NTU1Nd3d3d3d3d3d3d3d3d3eCgoKCgoKCgoKCgoKCgoKysrKysrKysrKysrKystbW1tbW1tbW1tbW1tbW//////////////////8AAAA5TEFNRTMuMTAwAqUAAAAALn4AABRGJAMfQgAARgAACmOKluQbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//uAxAAACVRLZNSRgAPCQiz3M0AAAIAArAmCZPpACAAAQMVDPNGjRzL/iIgGLf+u4gEHRAD4P4OAgGMHwfB/UCAY4Ph/gg70cQA/wcDGoHw/lAQdxO/iB3B8P6gQd/z4AAABaLUkleKYAAAAACRwFwwEZXC85Ri+o+ZXJ0OuCXgoBUDQXPC+4ZGBQ0biUDwnoCowL6jfAqRLogoBikhqJRJQDJBBOzk8Bkw6RYE8gOGDhSBMEA4CLlI08VwcaJRAmQKEQbNDLDMkAE+JJC8LpDg4FTB1C0ToLBCeJkQiEGMsnSXUkQOkM4fqHMdRJFyZD2WkVEibOkRetZ0d2dINNGLBBDVRRKhqsoltJIvrRlkrIFlB2JXmhbkatJZMkgksmkMn2WicSmZPso6lcmXyZPLUcaiVElFZSKiXZEsFxFiigtSRU////aotf///oqLLqqYARmBBDHQAa6/7DXJlIJzXLFWcw81qLP1Zemn/+3DEDgBQYa1p3ZaACjE1rPqw0AFdESAMRgS6eqSMpgJETk1Wgmpa6x+CxKNndWtEHkv0luzoJoCqG2SKCL1XdAS8lTy1L9FQ6Hv6MkT6Lt1JqJxdR/0B/Mf9llBBf7OeRb+syKJrb65WddvrnTRSm/TL6Lf7lh7+uYrWgwAzcEQFlgZkdtuDcDokJO77byuH4bjcDvxUXgXREsDnjjTNjtTF8BUnVu61XTYQgNshp3utRwuAnAX82Z13scMQhjZNd13ScLaPdbrqvQKiRN1/VYaHRuu66RwZZsv1UpRL91+ylEFNl31WHcbt/Y4Xz6769iQTd2X2UsgI/1y6Z3X9Rkam6/qsVKbqAAAJIBlMY4UAAAArCB9KiCsXXMe6HqWIsK0hutyCACMpwqhbcwAsFgSxBA1BsyLe//uAxBgAHvIRY5mqAAGRDGqjnmAAFjAGkTGIXzA4oENJE2AIAjqHwLSBmSBSPqAKalQcA3A+YtEVD8gUTkscULWDc4pIkEF+LCREi5NBvZqZC0DbGcE/LiKDaF8ifJwUkS5xQnomETgyeOWS2PCBgLNPVjLFRUgx5IpDTLxjMhmc6QKTzGIyzJmIzJvHUTCJkQ9FSx9FyShfx/5fLSZSIkfMB0mxomQEqpGQ7y8ovMyRHk+kmRxhk6fyBJTxNZYJ83RIEfTUOaio4RXURI2Mj5h////nSW////QnSRQCpAAkSLaLaJqS1ZP4W4NUXFYTyHIcrk8cx1YDAJJyJGe1eSJHDiU//scDAJFiSQdLBQGjwKgrgrPYNA0oGg6VBbEoKvBXklA1qPFQ3lQVWCvBWDQd6zsSgriWWDmoGp77vLBy//8tfl0Zl7/9f////////30y7cyZqeFl1yYUZQEwuGNaIE//////////////+xDEFgPEVbEQAAR+yKQ0YgKAIAH//t3p/7s+1WROn9f////vX6Vdjlbc7TlKsjhlEkAolYjQcDgY5k8FQQUAQSALtMAQcdIAIEmOeDBIFDAAswdAZspbZKxHyEDASZIFh2BO4NjhDf/7kMQZgB+qEVu5upASwTXsM7MQAQMaBEAYAoM4BwbDL4sQGHj4B0QzAMLYnCqXiCEEFCA3gKoAQBC/wGcUmAwHR4Iuo0TFwEyRNMvhfEDAQjAIEAx4gDqQPJm5uXGIIYh+QMC5ARcojIFgz/ImSwy5XIubGgf4G8oGEgACwGRHUBgkH/8nGcqF83L5uwdkXKQ8CABLwpIPZDakf/uhNCbImOeT7kTUodQWKDGkFDFiiaHKC9BEf//QWbmZfcvpM2s3aNUcSKI3ykXiLil2SKI5H////uX0kP///zZQvidQAbgACEABjKajtIIjtICWWuu5DEPPtKs49pRMI2FwkszOs4qUAIwURZg6KS02iMRAYixst0l5q4aOUzVA2Oqc0SLIakGNCgXjGtCixwR2TpVdarspZkJ/NlpXZSMzHgkidrZ2rQMRhF5O7KWtjMZUn0k2pVJyHERKKFKpd2G4X2dlLuyyHF8vskyk6KSxyDI2ZSrOtRiSBaWqzrUiYE4blahuy1JDwXVLvWp0CeKBqIXwDTBkJCADda0faU1UVpsNuP/7cMQIgFJdrWWNPW+KTbYs8rDQAOC88to5PKp/S2S6B3H1aLTEKSsMGefVq6+94xhhDcg5zvVMW1UeBjuvnP385jETfOe7mdUByQ61RHdzJWIJrI/6pAUqWqI+qYUqI/fP0wWPu7mPrKh/Uju5nux7e27/4lw1oRFVUzuM2HufqohhCn2R1X8kql7me7iFDp65/+3kDCnQClEQR333tugwAHtDVu/A9C5bW6WzRYOwJRGHDlkutaaZimaATUZZubpKuugJ4FVV9SnSBLIHkjBB3Uw7wR8NlA6nZa1uZB0PmjL9lk8eClKsvY6OM8h+pA6NhxV6uZlM1dmXupTkI6u/XQJUu2ZdmXMyWOv612JFTupdtRgig6r1XSK0Dd1e6jA3PLXZSrqMHNGVAAwQQYiAAAAAAAAiQgz/+4DEBwAdZdlfWamAAVEUo5eYUACJjmFwMBcAW1aCJ4KIFnnibEDn0hGVKg0jAU0sQ0UmQ4dwqADvF4Lqw4YxBjUTVaQLjPlcOjAtgZNjE4OcWQaEA0PHNK4fAF/AVEISDPnCBFYyJ4RUaaTCnCqD2xcS44hiFFFpihWH/KtY2S4Rgj0+RQxEpE0ovF4yNlkzLYpuiJIxeMzUVscJwfROmnRYmpkXpHjuVF1uOklyKDpLSJuLpMwIIPomkktGtjKqoWhLG+cniBZkNs0IoVzVEvjyUywOQTJMGhoRYyU+iy0TLMlXkoS3///5fMSeR//aCoEoBaMj6ExJqwQgJKBCAkFTZJPYDJgGAIDCyiIdK/0MaZ1KVBIPMJB4ylZDMYWM//0NTKWYPMDQ8NA0Aga/4Klg4DSzoiUHf+dLHk3CKe/wVco9xEpMQU1FMy4xMDCqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg==");
1247
1247
  /**
1248
1248
  * Initializes services and application settings, sets up context helpers,
1249
1249
  * and initializes the editor with default configurations.
@@ -1300,9 +1300,9 @@ class BaseComponent {
1300
1300
  if (this.route.parent) {
1301
1301
  this.route.parent.url.subscribe((url) => {
1302
1302
  this.className ??= url.length ? url[0].path.replace(/(.*)s$/, '$1').replace(/^./, (url[0].path[0] || '').toUpperCase()) : '';
1303
- this.canCreate = AuthHelper.isPermitted(`Create${this.className}`);
1304
- this.canUpdate = AuthHelper.isPermitted(`Update${this.className}`);
1305
- this.canDelete = AuthHelper.isPermitted(`Delete${this.className}`);
1303
+ this.canCreate ||= AuthHelper.isPermitted(`Create${this.className}`);
1304
+ this.canUpdate ||= AuthHelper.isPermitted(`Update${this.className}`);
1305
+ this.canDelete ||= AuthHelper.isPermitted(`Delete${this.className}`);
1306
1306
  });
1307
1307
  }
1308
1308
  /* Check if running in a browser environment before using 'window' */
@@ -1625,16 +1625,22 @@ class BaseComponent {
1625
1625
  /**
1626
1626
  * Displays a message using the snack bar service.
1627
1627
  *
1628
- * @param message The message to display (optional, defaults to a success message if not provided)
1628
+ * @param message The message to display.
1629
1629
  * @param type The type of the message (Success, Warning, or Error). Defaults to Success.
1630
- * @param duration The duration (in milliseconds) to show the message. Defaults to 3000ms.
1630
+ * @param duration Optional duration (in milliseconds) to show the message.
1631
+ * If omitted, duration is adjusted based on message length.
1631
1632
  * @param actionLabel The label for the action button. Defaults to 'OK'.
1632
- * @param playSound A flag indicating whether to play a warning sound when the message type is Warning. Defaults to false.
1633
+ * @param playSound A flag indicating whether to play a warning sound when the message type is Warning or Error. Defaults to false.
1633
1634
  * @returns An observable that emits when the action button is clicked.
1634
1635
  */
1635
- showMessage(message, type = MessageType.Success, duration = 3000, actionLabel = $localize `:@@ok:OK`, playSound = false) {
1636
+ showMessage(message, type = MessageType.Success, duration, actionLabel = $localize `:@@ok:OK`, playSound = false) {
1636
1637
  /* Default snack bar class to 'primary' (for success messages) */
1637
1638
  let snackBarClass = 'primary';
1639
+ /* If duration is not provided, calculate it based on message length */
1640
+ if (duration === undefined) {
1641
+ /* Calculate duration: base 2000ms + 50ms per character, min 2000ms, max 10000ms */
1642
+ duration = Math.min(Math.max(2000 + message.length * 50, 2000), 10000);
1643
+ }
1638
1644
  /* Determine the appropriate CSS class based on the message type */
1639
1645
  switch (type) {
1640
1646
  case MessageType.Success:
@@ -1774,7 +1780,7 @@ class BaseComponent {
1774
1780
  */
1775
1781
  playBeepSound() {
1776
1782
  try {
1777
- // this.beepAudio.play();
1783
+ this.beepAudio.play();
1778
1784
  }
1779
1785
  catch (error) { }
1780
1786
  }
@@ -1784,7 +1790,7 @@ class BaseComponent {
1784
1790
  */
1785
1791
  playWarnSound() {
1786
1792
  try {
1787
- // this.warnAudio.play();
1793
+ this.warnAudio.play();
1788
1794
  }
1789
1795
  catch (error) { }
1790
1796
  }
@@ -1923,12 +1929,21 @@ class BaseComponent {
1923
1929
  /* Unsubscribe from all MatExpansionPanel subscriptions */
1924
1930
  this.matExpansionPanelSubscriptions.forEach(x => x.unsubscribe());
1925
1931
  }
1926
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BaseComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
1932
+ /**
1933
+ * Called by the router before deactivating the route.
1934
+ * Return true to allow navigation, false to prevent it,
1935
+ * or a Promise/Observable that resolves to a boolean.
1936
+ */
1937
+ canDeactivate() {
1938
+ /* Allow navigation by default */
1939
+ return true;
1940
+ }
1941
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BaseComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
1927
1942
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: BaseComponent, isStandalone: true, inputs: { handleExpansionPanelChanges: "handleExpansionPanelChanges" }, outputs: { reload: "reload" }, viewQueries: [{ propertyName: "matExpansionPanelElementQueryList", predicate: MatExpansionPanel, descendants: true, read: ElementRef }, { propertyName: "matExpansionPanelQueryList", predicate: MatExpansionPanel, descendants: true }], ngImport: i0 });
1928
1943
  }
1929
1944
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: BaseComponent, decorators: [{
1930
1945
  type: Directive
1931
- }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { handleExpansionPanelChanges: [{
1946
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { handleExpansionPanelChanges: [{
1932
1947
  type: Input
1933
1948
  }], reload: [{
1934
1949
  type: Output
@@ -4210,29 +4225,114 @@ const UNTOUCHED = "untouched";
4210
4225
  const PRISTINE = "pristine";
4211
4226
  const PENDING = "pending";
4212
4227
  class RxFormControl extends FormControl {
4213
- entityObject;
4214
- baseObject;
4228
+ _entityObject;
4229
+ _baseObject;
4215
4230
  _sanitizers;
4231
+ /**
4232
+ * Current language used for error message localization.
4233
+ * @type {string | undefined}
4234
+ */
4216
4235
  _language;
4236
+ /**
4237
+ * The key or name of the control.
4238
+ * @type {string}
4239
+ */
4217
4240
  keyName;
4241
+ /**
4242
+ * Single string representation of the current error message.
4243
+ * @type {string | undefined}
4244
+ */
4218
4245
  _errorMessage;
4246
+ /**
4247
+ * Array of error messages for the control.
4248
+ * @type {string[]}
4249
+ */
4219
4250
  _errorMessages = [];
4251
+ /**
4252
+ * Provider to determine if control should be disabled.
4253
+ * @type {DisableProvider | undefined}
4254
+ */
4220
4255
  _disableProvider;
4256
+ /**
4257
+ * Strategy to bind error messages.
4258
+ * @type {ErrorMessageBindingStrategy}
4259
+ */
4221
4260
  _errorMessageBindingStrategy;
4261
+ /**
4262
+ * Optional function expression for custom error message logic.
4263
+ * @type {Function | undefined}
4264
+ */
4222
4265
  _messageExpression;
4266
+ /**
4267
+ * Optional function expression to assign CSS class names.
4268
+ * @type {Function | undefined}
4269
+ */
4223
4270
  _classNameExpression;
4271
+ /**
4272
+ * Indicates whether the message expression passed.
4273
+ * @type {boolean}
4274
+ */
4224
4275
  _isPassedExpression = false;
4276
+ /**
4277
+ * Control properties dictionary, with boolean flags.
4278
+ * @type {{ [key: string]: boolean } | undefined}
4279
+ */
4225
4280
  _controlProp;
4281
+ /**
4282
+ * Class name control properties dictionary.
4283
+ * @type {{ [key: string]: boolean } | undefined}
4284
+ */
4226
4285
  _classNameControlProp;
4286
+ /**
4287
+ * The base value of the control.
4288
+ * @type {any}
4289
+ */
4227
4290
  _baseValue;
4291
+ /**
4292
+ * Flag indicating if the control value has been modified.
4293
+ * @type {boolean}
4294
+ */
4228
4295
  _isModified;
4296
+ /**
4297
+ * Flag indicating if the control is dirty.
4298
+ * @type {boolean}
4299
+ */
4229
4300
  _dirty = false;
4301
+ /**
4302
+ * Array of synchronous validator functions.
4303
+ * @type {ValidatorFn[]}
4304
+ */
4230
4305
  _validators;
4306
+ /**
4307
+ * Array of asynchronous validator functions.
4308
+ * @type {AsyncValidatorFn[]}
4309
+ */
4231
4310
  _asyncValidators;
4311
+ /**
4312
+ * Backend error messages keyed by error name.
4313
+ * @type {{ [key: string]: string }}
4314
+ */
4232
4315
  backEndErrors = {};
4316
+ /**
4317
+ * Indicates if updating the control element's class should be performed.
4318
+ * @type {boolean | Function | undefined}
4319
+ */
4233
4320
  updateOnElementClass;
4321
+ /**
4322
+ * Optional pre-hook function executed before certain operations.
4323
+ * @type {Function | undefined}
4324
+ */
4234
4325
  preHook;
4326
+ /**
4327
+ * Optional post-hook function executed after certain operations.
4328
+ * @type {Function | undefined}
4329
+ */
4235
4330
  postHook;
4331
+ /**
4332
+ * Gets the array of error messages for the control.
4333
+ * Updates the error messages if necessary based on the current errors and language.
4334
+ * @type {string[]}
4335
+ */
4236
4336
  get errorMessages() {
4237
4337
  if (!this._messageExpression) {
4238
4338
  if (this._errorMessages.length == 0 && this.errors)
@@ -4246,6 +4346,12 @@ class RxFormControl extends FormControl {
4246
4346
  this.setControlErrorMessages();
4247
4347
  return this._errorMessages;
4248
4348
  }
4349
+ /**
4350
+ * Gets a single error message string for the control.
4351
+ * Updates the error message if necessary based on the current errors and language.
4352
+ * Returns undefined if no error message should be shown.
4353
+ * @type {string | undefined}
4354
+ */
4249
4355
  get errorMessage() {
4250
4356
  if (!this._messageExpression) {
4251
4357
  if (this._errorMessage == undefined && this.errors) {
@@ -4263,10 +4369,29 @@ class RxFormControl extends FormControl {
4263
4369
  }
4264
4370
  return this._errorMessage;
4265
4371
  }
4266
- constructor(formState, validatorOrOpts, entityObject, baseObject, controlName, _sanitizers) {
4372
+ /**
4373
+ * Gets the associated entity object.
4374
+ * @type {any}
4375
+ */
4376
+ get entityObject() { return this._entityObject; }
4377
+ /**
4378
+ * Gets the base object for comparison or reset.
4379
+ * @type {any}
4380
+ */
4381
+ get baseObject() { return this._baseObject; }
4382
+ /**
4383
+ * Constructor to initialize RxFormControl.
4384
+ * @param formState Initial state or value of the control.
4385
+ * @param validatorOrOpts Synchronous validators or control options.
4386
+ * @param _entityObject Entity object associated with this control.
4387
+ * @param _baseObject Base object for initial values or reset.
4388
+ * @param controlName Name/key of this control.
4389
+ * @param _sanitizers Array of data sanitizers to preprocess values.
4390
+ */
4391
+ constructor(formState, validatorOrOpts, _entityObject, _baseObject, controlName, _sanitizers) {
4267
4392
  super(formState, validatorOrOpts);
4268
- this.entityObject = entityObject;
4269
- this.baseObject = baseObject;
4393
+ this._entityObject = _entityObject;
4394
+ this._baseObject = _baseObject;
4270
4395
  this._sanitizers = _sanitizers;
4271
4396
  this.defineErrorsProperty();
4272
4397
  this._baseValue = formState === undefined ? null : this.getFormState(formState);
@@ -4332,8 +4457,8 @@ class RxFormControl extends FormControl {
4332
4457
  this.parent.changing = true;
4333
4458
  let parsedValue = this.getSanitizedValue(value);
4334
4459
  if (options && options.dirty)
4335
- this.baseObject[this.keyName] = value;
4336
- this.entityObject[this.keyName] = parsedValue;
4460
+ this._baseObject[this.keyName] = value;
4461
+ this._entityObject[this.keyName] = parsedValue;
4337
4462
  super.setValue(value, options);
4338
4463
  this.bindError();
4339
4464
  this.bindClassName();
@@ -4488,7 +4613,7 @@ class RxFormControl extends FormControl {
4488
4613
  return value;
4489
4614
  }
4490
4615
  bindConditionalControls(decoratorType, refName) {
4491
- this._disableProvider = new DisableProvider(decoratorType, this.entityObject);
4616
+ this._disableProvider = new DisableProvider(decoratorType, this._entityObject);
4492
4617
  this[refName] = this._disableProvider.zeroArgumentProcess(this, this.keyName);
4493
4618
  this._disableProvider.oneArgumentProcess(this, `${this.keyName}${RXCODE}1`).forEach(t => this[refName].push(t));
4494
4619
  }
@@ -8017,12 +8142,12 @@ class DecimalProvider {
8017
8142
  /* Set isSetConfig to true after configuring */
8018
8143
  this.isSetConfig = true;
8019
8144
  }
8020
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DecimalProvider, deps: [{ token: i3.DecimalPipe }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });
8145
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DecimalProvider, deps: [{ token: i1$1.DecimalPipe }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });
8021
8146
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DecimalProvider });
8022
8147
  }
8023
8148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DecimalProvider, decorators: [{
8024
8149
  type: Injectable
8025
- }], ctorParameters: () => [{ type: i3.DecimalPipe }, { type: undefined, decorators: [{
8150
+ }], ctorParameters: () => [{ type: i1$1.DecimalPipe }, { type: undefined, decorators: [{
8026
8151
  type: Inject,
8027
8152
  args: [LOCALE_ID]
8028
8153
  }] }] });
@@ -11833,7 +11958,7 @@ class DisableControlDirective {
11833
11958
  constructor(ngControl) {
11834
11959
  this.ngControl = ngControl;
11835
11960
  }
11836
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DisableControlDirective, deps: [{ token: i1$1.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
11961
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DisableControlDirective, deps: [{ token: i1$2.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
11837
11962
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: DisableControlDirective, isStandalone: true, selector: "[disableControl]", inputs: { disableControl: "disableControl" }, ngImport: i0 });
11838
11963
  }
11839
11964
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DisableControlDirective, decorators: [{
@@ -11841,7 +11966,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
11841
11966
  args: [{
11842
11967
  selector: '[disableControl]'
11843
11968
  }]
11844
- }], ctorParameters: () => [{ type: i1$1.NgControl }], propDecorators: { disableControl: [{
11969
+ }], ctorParameters: () => [{ type: i1$2.NgControl }], propDecorators: { disableControl: [{
11845
11970
  type: Input
11846
11971
  }] } });
11847
11972
 
@@ -13869,7 +13994,7 @@ class SafeHtmlPipe {
13869
13994
  transform(html) {
13870
13995
  return this.sanitizer.bypassSecurityTrustHtml(html);
13871
13996
  }
13872
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
13997
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SafeHtmlPipe, deps: [{ token: i1$4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Pipe });
13873
13998
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: SafeHtmlPipe, isStandalone: true, name: "safeHtml" });
13874
13999
  }
13875
14000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SafeHtmlPipe, decorators: [{
@@ -13877,7 +14002,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
13877
14002
  args: [{
13878
14003
  name: 'safeHtml'
13879
14004
  }]
13880
- }], ctorParameters: () => [{ type: i1$3.DomSanitizer }] });
14005
+ }], ctorParameters: () => [{ type: i1$4.DomSanitizer }] });
13881
14006
 
13882
14007
  /**
13883
14008
  * Pipe to split a string into an array using a delimiter.
@@ -14582,7 +14707,7 @@ class VdDynamicMenuComponent {
14582
14707
  }, { once: true });
14583
14708
  }
14584
14709
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDynamicMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
14585
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDynamicMenuComponent, isStandalone: true, selector: "vd-dynamic-menu", inputs: { items: "items", data: "data", index: "index", context: "context", contextMenu: "contextMenu" }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: MatMenu, descendants: true }, { propertyName: "contextMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<!-- Container row layout for displaying action items horizontally, aligned center vertically -->\r\n<div layout=\"row\" layout-align=\"start center\" *ngIf=\"items\" flex>\r\n <ng-container *ngFor=\"let menu of items\">\r\n\r\n <!-- #region Button trigger for actions that open a submenu -->\r\n <a\r\n mat-icon-button\r\n *ngIf=\"!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\"\r\n [mat-menu-trigger-for]=\"matMenu\"\r\n [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\"\r\n [matTooltip]=\"menu.tooltip\"\r\n (click)=\"$event.stopPropagation();\">\r\n <!-- Display menu icon -->\r\n <mat-icon\r\n fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menu.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menu.iconColor\">\r\n {{ (menu.icon ?? 'more_vert' | func:data:context) || 'more_vert' }}\r\n </mat-icon>\r\n\r\n <!-- Optional title next to icon -->\r\n <span [style.color]=\"menu.textColor\">{{menu.title | func:data:context}}</span>\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Invisible context menu trigger used for right-click context positioning -->\r\n <div\r\n *ngIf=\"contextMenu\"\r\n style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"matMenu\"></div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Direct action button (no submenu) -->\r\n <a\r\n mat-icon-button\r\n *ngIf=\"!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\"\r\n [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\"\r\n [matTooltip]=\"menu.tooltip\"\r\n (click)=\"$event.stopPropagation(); menu.event ? menu.event(data, context, index) : null\">\r\n <!-- Icon for the action -->\r\n <mat-icon\r\n fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menu.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menu.iconColor\">\r\n {{ (menu.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region MatMenu with nested submenus -->\r\n <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuItem of menu?.items\">\r\n <!-- Simple menu item without sub-items -->\r\n <ng-container *ngIf=\"!menuItem.items\">\r\n <a\r\n mat-menu-item\r\n (click)=\"menuItem.event ? menuItem.event(data, context, index) : null\"\r\n *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\"\r\n [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\"\r\n [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon\r\n fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menuItem.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menuItem.iconColor\">\r\n {{ (menuItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title | func:data:context}}</span>\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Menu item with nested submenu -->\r\n <ng-container *ngIf=\"menuItem.items\">\r\n <!-- Define the submenu -->\r\n <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuSubItem of menuItem.items\">\r\n <a\r\n mat-menu-item\r\n (click)=\"menuSubItem.event ? menuSubItem.event(data, context, index) : null\"\r\n *ngIf=\"!menuSubItem.hide || !menuSubItem.hide(data, context, index)\"\r\n [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\"\r\n [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon\r\n fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menuSubItem.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menuSubItem.iconColor\">\r\n {{ (menuSubItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n <span [style.color]=\"menuSubItem.textColor\">{{menuSubItem.title | func:data:context}}</span>\r\n </a>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <!-- Trigger for submenu -->\r\n <a\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subMenu\"\r\n *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\"\r\n [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\"\r\n [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon\r\n fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menuItem.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menuItem.iconColor\">\r\n {{ (menuItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title | func:data:context}}</span>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </mat-menu>\r\n <!-- #endregion -->\r\n </ng-container>\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: FuncPipe, name: "func" }] });
14710
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDynamicMenuComponent, isStandalone: true, selector: "vd-dynamic-menu", inputs: { items: "items", data: "data", index: "index", context: "context", contextMenu: "contextMenu" }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: MatMenu, descendants: true }, { propertyName: "contextMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<!-- Container row layout for displaying action items horizontally, aligned center vertically -->\r\n<div layout=\"row\" layout-align=\"start center\" *ngIf=\"items\" flex>\r\n <ng-container *ngFor=\"let menu of items\">\r\n\r\n <!-- #region Button trigger for actions that open a submenu -->\r\n <a\r\n mat-icon-button\r\n *ngIf=\"!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\"\r\n [mat-menu-trigger-for]=\"matMenu\"\r\n [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\"\r\n [matTooltip]=\"menu.tooltip\"\r\n (click)=\"$event.stopPropagation();\">\r\n <!-- Display menu icon -->\r\n <mat-icon\r\n fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menu.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menu.iconColor\">\r\n {{ (menu.icon ?? 'more_vert' | func:data:context) || 'more_vert' }}\r\n </mat-icon>\r\n\r\n <!-- Optional title next to icon -->\r\n <span [style.color]=\"menu.textColor\">{{menu.title | func:data:context}}</span>\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Invisible context menu trigger used for right-click context positioning -->\r\n <div\r\n *ngIf=\"contextMenu\"\r\n style=\"visibility: hidden; position: fixed\"\r\n [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\"\r\n [matMenuTriggerFor]=\"matMenu\"></div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Direct action button (no submenu) -->\r\n <a\r\n mat-icon-button\r\n *ngIf=\"!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\"\r\n [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\"\r\n [matTooltip]=\"menu.tooltip\"\r\n (click)=\"$event.stopPropagation(); menu.event ? menu.event(data, context, index) : null\">\r\n <!-- Icon for the action -->\r\n <mat-icon\r\n fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menu.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menu.iconColor\">\r\n {{ (menu.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region MatMenu with nested submenus -->\r\n <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuItem of menu?.items\">\r\n <!-- Simple menu item without sub-items -->\r\n <ng-container *ngIf=\"!menuItem.items\">\r\n <a\r\n mat-menu-item\r\n (click)=\"menuItem.event ? menuItem.event(data, context, index) : null\"\r\n *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\"\r\n [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\"\r\n [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon\r\n fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menuItem.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menuItem.iconColor\">\r\n {{ (menuItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title | func:data:context}}</span>\r\n </a>\r\n </ng-container>\r\n\r\n <!-- Menu item with nested submenu -->\r\n <ng-container *ngIf=\"menuItem.items\">\r\n <!-- Define the submenu -->\r\n <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuSubItem of menuItem.items\">\r\n <a\r\n mat-menu-item\r\n (click)=\"menuSubItem.event ? menuSubItem.event(data, context, index) : null\"\r\n *ngIf=\"!menuSubItem.hide || !menuSubItem.hide(data, context, index)\"\r\n [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\"\r\n [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon\r\n fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menuSubItem.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menuSubItem.iconColor\">\r\n {{ (menuSubItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n <span [style.color]=\"menuSubItem.textColor\">{{menuSubItem.title | func:data:context}}</span>\r\n </a>\r\n </ng-container>\r\n </mat-menu>\r\n\r\n <!-- Trigger for submenu -->\r\n <a\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subMenu\"\r\n *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\"\r\n [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\"\r\n [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon\r\n fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\"\r\n [class]=\"menuItem.iconClass ?? '' | func:data:context\"\r\n [style.color]=\"menuItem.iconColor\">\r\n {{ (menuItem.icon ?? 'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked' }}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title | func:data:context}}</span>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </mat-menu>\r\n <!-- #endregion -->\r\n </ng-container>\r\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: FuncPipe, name: "func" }] });
14586
14711
  }
14587
14712
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDynamicMenuComponent, decorators: [{
14588
14713
  type: Component,
@@ -15705,7 +15830,7 @@ class VdSelectComponent extends AbstractSelectFormField {
15705
15830
  provide: MAT_SELECT_CONFIG,
15706
15831
  useValue: { overlayPanelClass: 'vd-select-filter-overlay' }
15707
15832
  }
15708
- ], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith??defaultCompareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div class=\"mat-mdc-form-field mat-form-field-appearance-fill flex\">\r\n <div class=\"mat-mdc-text-field-wrapper mdc-text-field mdc-text-field--filled mdc-text-field--no-label\">\r\n <div class=\"mat-mdc-form-field-focus-overlay\"></div>\r\n <div class=\"mat-mdc-form-field-flex\">\r\n <div class=\"mat-mdc-form-field-infix\" layout=\"row\" flex>\r\n <input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"mat-mdc-input-element vd-select-filter mat-mdc-form-field-input-control mdc-text-field__input\" (keyup)=\"handleFilter($event)\" flex>\r\n <mat-icon *ngIf=\"filterInput?.value\" (click)=\"filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"mdc-line-ripple\"></div>\r\n </div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <span i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">&nbsp;&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Dynamic icon -->\r\n <ng-template *ngIf=\"optionIcon\" #optionIconTemplate [ngTemplateOutlet]=\"optionIconTemplate\" let-optionIcon=\"optionIcon\" [ngTemplateOutletContext]=\"{ optionIcon: optionIcon(option) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <!-- #endregion -->\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option, text: option[optionTextProperty] }\"></ng-template>\r\n </span>\r\n <span *ngIf=\"!last\">&nbsp;&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"!triggerTemplate?.templateRef && !optionTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Dynamic icon -->\r\n <ng-template *ngIf=\"optionIcon\" #optionIconTemplate [ngTemplateOutlet]=\"optionIconTemplate\" let-optionIcon=\"optionIcon\" [ngTemplateOutletContext]=\"{ optionIcon: optionIcon(option) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <span i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">&nbsp;&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option, text: option[optionTextProperty] }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <span>&nbsp;&nbsp;</span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">,&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue, text: currentValue[optionTextProperty] }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\">&nbsp;</div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-form-field-type-vd-select-chip .mat-mdc-form-field-infix{padding-top:7px!important;padding-bottom:7px!important}::ng-deep .mat-mdc-form-field-type-vd-select-chip .mat-mdc-chip{padding-top:0!important;padding-bottom:0!important;margin-top:2px!important;margin-bottom:2px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i2$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
15833
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdSelectOptionDirective, descendants: true }, { propertyName: "triggerTemplate", first: true, predicate: VdSelectTriggerDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-select [placeholder]=\"placeholder\" i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelect\" (selectionChange)=\"handleChange($event)\" [hidden]=\"readonly\" [multiple]=\"multiple\" [compareWith]=\"compareWith??defaultCompareWith\" [disabled]=\"disabled\" flex>\r\n <!-- #region Filter input -->\r\n <div class=\"mat-mdc-form-field mat-form-field-appearance-fill flex\">\r\n <div class=\"mat-mdc-text-field-wrapper mdc-text-field mdc-text-field--filled mdc-text-field--no-label\">\r\n <div class=\"mat-mdc-form-field-focus-overlay\"></div>\r\n <div class=\"mat-mdc-form-field-flex\">\r\n <div class=\"mat-mdc-form-field-infix\" layout=\"row\" flex>\r\n <input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"mat-mdc-input-element vd-select-filter mat-mdc-form-field-input-control mdc-text-field__input\" (keyup)=\"handleFilter($event)\" flex>\r\n <mat-icon *ngIf=\"filterInput?.value\" (click)=\"filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </div>\r\n </div>\r\n <div class=\"mdc-line-ripple\"></div>\r\n </div>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for launch button -->\r\n <mat-select-trigger *ngIf=\"(onLaunch?.observers?.length??0) > 0\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <span i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">&nbsp;&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n <mat-icon class=\"vd-select-launch\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom trigger template -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && triggerTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: selectedOptions }\"></ng-template>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option template as trigger -->\r\n <mat-select-trigger *ngIf=\"!onLaunch?.observers?.length && !triggerTemplate?.templateRef && optionTemplate?.templateRef\" [class]=\"triggerCssClass\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Dynamic icon -->\r\n <ng-template *ngIf=\"optionIcon\" #optionIconTemplate [ngTemplateOutlet]=\"optionIconTemplate\" let-optionIcon=\"optionIcon\" [ngTemplateOutletContext]=\"{ optionIcon: optionIcon(option) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <!-- #endregion -->\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option, text: option[optionTextProperty] }\"></ng-template>\r\n </span>\r\n <span *ngIf=\"!last\">&nbsp;&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Trigger for icons -->\r\n <mat-select-trigger *ngIf=\"!triggerTemplate?.templateRef && !optionTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Dynamic icon -->\r\n <ng-template *ngIf=\"optionIcon\" #optionIconTemplate [ngTemplateOutlet]=\"optionIconTemplate\" let-optionIcon=\"optionIcon\" [ngTemplateOutletContext]=\"{ optionIcon: optionIcon(option) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <span i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">&nbsp;&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n </mat-select-trigger>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Default option -->\r\n <mat-option class=\"tc-grey-500\" *ngIf=\"!multiple && defaultOption\" i18n=\"@@pleaseSelect\">--- Please Select ---</mat-option>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{option[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"option[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option, text: option[optionTextProperty] }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-select>\r\n\r\n<!-- #region Read only value -->\r\n<div *ngIf=\"readonly\">\r\n <div *ngIf=\"currentValue\">\r\n <div class=\"readonly-value\">\r\n <span *ngIf=\"!optionTemplate?.templateRef && !triggerTemplate?.templateRef\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <ng-container *ngFor=\"let option of selectedOptions; let i = index; let last = last\">\r\n <span layout=\"row\" layout-align=\"start center\">\r\n <!-- #region Property icon -->\r\n <mat-icon *ngIf=\"matIconKey && !svgIconKey\" [fontSet]=\"fontSet || 'material-symbols-outlined'\">{{currentValue[matIconKey]}}</mat-icon>\r\n <mat-icon *ngIf=\"svgIconKey && !matIconKey\" [svgIcon]=\"currentValue[svgIconKey]\" [fontSet]=\"fontSet || 'material-symbols-outlined'\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Option icon -->\r\n <mat-icon *ngIf=\"option.icon?.matIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\">{{option.icon?.matIcon}}</mat-icon>\r\n <mat-icon *ngIf=\"option.icon?.svgIcon\" [svgIcon]=\"option.icon?.svgIcon\" [fontSet]=\"option.icon?.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: option.icon?.iconColor??'' }\"></mat-icon>\r\n <!-- #endregion -->\r\n\r\n <span>&nbsp;&nbsp;</span>\r\n <span i18n=\"@@selection\">{currentValue[optionTextProperty], select, option {option} other {{{currentValue[optionTextProperty]}}}}</span>\r\n </span>\r\n <span *ngIf=\"!last\">,&nbsp;</span>\r\n </ng-container>\r\n </span>\r\n </span>\r\n <ng-template *ngIf=\"triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"triggerTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ trigger: currentValue }\"></ng-template>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef && !triggerTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: currentValue, text: currentValue[optionTextProperty] }\"></ng-template>\r\n </div>\r\n <mat-icon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" class=\"vd-select-launch-readonly\" (click)=\"$event.stopPropagation(); handleLaunchClicked(value)\">launch</mat-icon>\r\n </div>\r\n <div *ngIf=\"!currentValue\">&nbsp;</div>\r\n</div>\r\n<!-- #endregion -->", styles: [".vd-select-launch{position:absolute;right:30px;top:-5px;font-size:18px;cursor:pointer}.readonly-value{padding-right:24px;opacity:.6;min-height:15px}.vd-select-launch-readonly{position:absolute;right:0;top:9px;font-size:18px;cursor:pointer}.vd-select-filter-wrap{background:inherit;position:sticky;top:-8px;box-sizing:border-box;z-index:100}.vd-select-filter-wrap .vd-select-filter-inner{z-index:100;display:flex;flex-direction:row;align-items:center;background:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter{box-shadow:none;padding:16px 16px 16px 0;box-sizing:border-box;width:100%;border:none;background-color:inherit;color:inherit}.vd-select-filter-wrap .vd-select-filter-inner .vd-select-filter:focus-visible{border:none;outline:none}.vd-select-filter-wrap .mat-divider{display:block;width:100%;border-top-width:1px;border-top-style:solid;box-sizing:border-box}::ng-deep .mat-mdc-select-trigger{display:flex!important}::ng-deep .mat-mdc-select-trigger .mat-icon{display:flex;margin-right:8px}::ng-deep .mat-mdc-form-field-type-vd-select-chip .mat-mdc-form-field-infix{padding-top:7px!important;padding-bottom:7px!important}::ng-deep .mat-mdc-form-field-type-vd-select-chip .mat-mdc-chip{padding-top:0!important;padding-bottom:0!important;margin-top:2px!important;margin-bottom:2px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i2$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
15709
15834
  }
15710
15835
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdSelectComponent, decorators: [{
15711
15836
  type: Component,
@@ -16320,7 +16445,7 @@ class FilterClearComponent {
16320
16445
  this.table.dataSource.clearFilters();
16321
16446
  }
16322
16447
  }
16323
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterClearComponent, deps: [{ token: i1$4.MatTable }], target: i0.ɵɵFactoryTarget.Component });
16448
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterClearComponent, deps: [{ token: i1$5.MatTable }], target: i0.ɵɵFactoryTarget.Component });
16324
16449
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: FilterClearComponent, isStandalone: true, selector: "mat-header-cell[filter-clear], [mat-header-cell][filter-clear], [filter-clear]", ngImport: i0, template: "<button type=\"button\" mat-icon-button (click)=\"clear()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">backspace</mat-icon>\r\n</button>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
16325
16450
  }
16326
16451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterClearComponent, decorators: [{
@@ -16330,7 +16455,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
16330
16455
  MatIconButton,
16331
16456
  MatIconModule
16332
16457
  ], template: "<button type=\"button\" mat-icon-button (click)=\"clear()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">backspace</mat-icon>\r\n</button>" }]
16333
- }], ctorParameters: () => [{ type: i1$4.MatTable }] });
16458
+ }], ctorParameters: () => [{ type: i1$5.MatTable }] });
16334
16459
 
16335
16460
  class FilterDateComponent {
16336
16461
  table;
@@ -16430,14 +16555,14 @@ class FilterDateComponent {
16430
16555
  * Adds leading zeros to a digit
16431
16556
  */
16432
16557
  pad = (num, size) => { return ('0' + num).substr(-size); };
16433
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterDateComponent, deps: [{ token: i1$4.MatTable }, { token: i2$2.CdkColumnDef }], target: i0.ɵɵFactoryTarget.Component });
16558
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterDateComponent, deps: [{ token: i1$5.MatTable }, { token: i2$2.CdkColumnDef }], target: i0.ɵɵFactoryTarget.Component });
16434
16559
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: FilterDateComponent, isStandalone: true, selector: "mat-header-cell[filter-date], [mat-header-cell][filter-date], [filter-date]", inputs: { field: "field", debounce: "debounce", placeholder: "placeholder" }, host: { listeners: { "focusin": "onFocusIn()", "focusout": "onFocusOut()" } }, providers: [
16435
16560
  {
16436
16561
  provide: NG_VALUE_ACCESSOR,
16437
16562
  useExisting: forwardRef(() => FilterDateComponent),
16438
16563
  multi: true
16439
16564
  }
16440
- ], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" dense-3 flex>\r\n <input matInput [matDatepicker]=\"picker\" [ngModel]=\"value\" (ngModelChange)=\"handleSearch($event)\" (click)=\"$event.stopPropagation();picker.open()\" (search)=\"handleSearch($event)\" (keyup.enter)=\"handleSearch($event)\" readonly>\r\n <span matPrefix *ngIf=\"!value && !focused\" (click)=\"$event.stopPropagation();picker.open()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n </span>\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"value\" (click)=\"$event.stopPropagation();clearSearch()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </button>\r\n <mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>", styles: ["mat-icon{opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i6$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
16565
+ ], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" dense-3 flex>\r\n <input matInput [matDatepicker]=\"picker\" [ngModel]=\"value\" (ngModelChange)=\"handleSearch($event)\" (click)=\"$event.stopPropagation();picker.open()\" (search)=\"handleSearch($event)\" (keyup.enter)=\"handleSearch($event)\" readonly>\r\n <span matPrefix *ngIf=\"!value && !focused\" (click)=\"$event.stopPropagation();picker.open()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n </span>\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"value\" (click)=\"$event.stopPropagation();clearSearch()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </button>\r\n <mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>", styles: ["mat-icon{opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i6$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
16441
16566
  }
16442
16567
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterDateComponent, decorators: [{
16443
16568
  type: Component,
@@ -16456,7 +16581,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
16456
16581
  multi: true
16457
16582
  }
16458
16583
  ], template: "<mat-form-field subscriptSizing=\"dynamic\" dense-3 flex>\r\n <input matInput [matDatepicker]=\"picker\" [ngModel]=\"value\" (ngModelChange)=\"handleSearch($event)\" (click)=\"$event.stopPropagation();picker.open()\" (search)=\"handleSearch($event)\" (keyup.enter)=\"handleSearch($event)\" readonly>\r\n <span matPrefix *ngIf=\"!value && !focused\" (click)=\"$event.stopPropagation();picker.open()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n </span>\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"value\" (click)=\"$event.stopPropagation();clearSearch()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </button>\r\n <mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>", styles: ["mat-icon{opacity:.7}\n"] }]
16459
- }], ctorParameters: () => [{ type: i1$4.MatTable }, { type: i2$2.CdkColumnDef }], propDecorators: { field: [{
16584
+ }], ctorParameters: () => [{ type: i1$5.MatTable }, { type: i2$2.CdkColumnDef }], propDecorators: { field: [{
16460
16585
  type: Input
16461
16586
  }], debounce: [{
16462
16587
  type: Input,
@@ -16615,14 +16740,14 @@ class FilterInputComponent {
16615
16740
  * Reload data
16616
16741
  */
16617
16742
  reload = () => this.table.dataSource['reload']();
16618
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterInputComponent, deps: [{ token: i1$4.MatTable }, { token: i2$2.CdkColumnDef }], target: i0.ɵɵFactoryTarget.Component });
16743
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterInputComponent, deps: [{ token: i1$5.MatTable }, { token: i2$2.CdkColumnDef }], target: i0.ɵɵFactoryTarget.Component });
16619
16744
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: FilterInputComponent, isStandalone: true, selector: "mat-header-cell[filter-input], [mat-header-cell][filter-input], [filter-input]", inputs: { field: "field", operator: "operator", onlyNumber: "onlyNumber", debounce: "debounce", placeholder: "placeholder" }, host: { listeners: { "focusin": "onFocusIn()", "focusout": "onFocusOut()", "keydown": "onKeyDown($event)" } }, providers: [
16620
16745
  {
16621
16746
  provide: NG_VALUE_ACCESSOR,
16622
16747
  useExisting: forwardRef(() => FilterInputComponent),
16623
16748
  multi: true
16624
16749
  }
16625
- ], viewQueries: [{ propertyName: "_filter", first: true, predicate: ["filterElement"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n <input matInput #filterElement ngControl=\"filterElement\" autocomplete=\"off\" type=\"input\" [(ngModel)]=\"value\" (search)=\"$event.stopPropagation();\" (keyup.enter)=\"handleSearch($event)\" />\r\n <span matPrefix *ngIf=\"!value && !focused\"><mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon></span>\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"value\" (click)=\"$event.stopPropagation(); clearSearch()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </button>\r\n</mat-form-field>", styles: ["mat-icon{opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
16750
+ ], viewQueries: [{ propertyName: "_filter", first: true, predicate: ["filterElement"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n <input matInput #filterElement ngControl=\"filterElement\" autocomplete=\"off\" type=\"input\" [(ngModel)]=\"value\" (search)=\"$event.stopPropagation();\" (keyup.enter)=\"handleSearch($event)\" />\r\n <span matPrefix *ngIf=\"!value && !focused\"><mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon></span>\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"value\" (click)=\"$event.stopPropagation(); clearSearch()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </button>\r\n</mat-form-field>", styles: ["mat-icon{opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
16626
16751
  }
16627
16752
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterInputComponent, decorators: [{
16628
16753
  type: Component,
@@ -16640,7 +16765,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
16640
16765
  multi: true
16641
16766
  }
16642
16767
  ], template: "<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n <input matInput #filterElement ngControl=\"filterElement\" autocomplete=\"off\" type=\"input\" [(ngModel)]=\"value\" (search)=\"$event.stopPropagation();\" (keyup.enter)=\"handleSearch($event)\" />\r\n <span matPrefix *ngIf=\"!value && !focused\"><mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon></span>\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"value\" (click)=\"$event.stopPropagation(); clearSearch()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </button>\r\n</mat-form-field>", styles: ["mat-icon{opacity:.6}\n"] }]
16643
- }], ctorParameters: () => [{ type: i1$4.MatTable }, { type: i2$2.CdkColumnDef }], propDecorators: { _filter: [{
16768
+ }], ctorParameters: () => [{ type: i1$5.MatTable }, { type: i2$2.CdkColumnDef }], propDecorators: { _filter: [{
16644
16769
  type: ViewChild,
16645
16770
  args: ['filterElement', { static: true }]
16646
16771
  }], field: [{
@@ -16940,7 +17065,7 @@ class FilterSelectComponent {
16940
17065
  * Called when the control receives a touch event.
16941
17066
  */
16942
17067
  onTouched = () => { };
16943
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterSelectComponent, deps: [{ token: i1$4.MatTable }, { token: i2$2.CdkColumnDef }], target: i0.ɵɵFactoryTarget.Component });
17068
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterSelectComponent, deps: [{ token: i1$5.MatTable }, { token: i2$2.CdkColumnDef }], target: i0.ɵɵFactoryTarget.Component });
16944
17069
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: FilterSelectComponent, isStandalone: true, selector: "mat-header-cell[filter-select], [mat-header-cell][filter-select], [filter-select]", inputs: { endpoint: "endpoint", params: "params", projection: "projection", sortBy: "sortBy", sorted: "sorted", enumFilter: "enumFilter", enum: "enum", enumMetadata: "enumMetadata", key: "key", text: "text", prefix: "prefix", multiple: "multiple", options: "options", filteredOptions: "filteredOptions", filterable: "filterable", field: "field", placeholder: "placeholder", cache: "cache" }, host: { listeners: { "focusin": "onFocusIn()", "focusout": "onFocusOut()" } }, providers: [
16945
17070
  {
16946
17071
  provide: NG_VALUE_ACCESSOR,
@@ -16951,7 +17076,7 @@ class FilterSelectComponent {
16951
17076
  provide: MAT_SELECT_CONFIG,
16952
17077
  useValue: { overlayPanelClass: 'vd-select-filter-overlay' }
16953
17078
  }
16954
- ], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdFilterOptionDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n <span matPrefix *ngIf=\"!value && value!=0 && !focused\" (click)=\"$event.stopPropagation();select.open()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n </span>\r\n <mat-select type=\"input\" [(ngModel)]=\"value\" [multiple]=\"multiple\" flex #select>\r\n <mat-form-field *ngIf=\"filterable\" appearance=\"fill\" subscriptSizing=\"dynamic\" dense-3 flex>\r\n <input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter\" (click)=\"$event.stopPropagation();\" (keyup)=\"handleFilter($event)\" flex>\r\n <mat-icon *ngIf=\"filterInput?.value\" (click)=\"$event.stopPropagation(); filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </mat-form-field>\r\n <mat-option *ngIf=\"!multiple\" class=\"tc-grey-500\" (click)=\"$event.stopPropagation();\"></mat-option>\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"option[key]\" (click)=\"$event.stopPropagation();\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option.name, select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate!.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n</mat-form-field>", styles: [".mat-mdc-form-field mat-icon{opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
17079
+ ], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdFilterOptionDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelect, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: "<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n <span matPrefix *ngIf=\"!value && value!=0 && !focused\" (click)=\"$event.stopPropagation();select.open()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n </span>\r\n <mat-select type=\"input\" [(ngModel)]=\"value\" [multiple]=\"multiple\" flex #select>\r\n <mat-form-field *ngIf=\"filterable\" appearance=\"fill\" subscriptSizing=\"dynamic\" dense-3 flex>\r\n <input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter\" (click)=\"$event.stopPropagation();\" (keyup)=\"handleFilter($event)\" flex>\r\n <mat-icon *ngIf=\"filterInput?.value\" (click)=\"$event.stopPropagation(); filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </mat-form-field>\r\n <mat-option *ngIf=\"!multiple\" class=\"tc-grey-500\" (click)=\"$event.stopPropagation();\"></mat-option>\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"option[key]\" (click)=\"$event.stopPropagation();\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option.name, select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate!.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n</mat-form-field>", styles: [".mat-mdc-form-field mat-icon{opacity:.7}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
16955
17080
  }
16956
17081
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: FilterSelectComponent, decorators: [{
16957
17082
  type: Component,
@@ -16973,7 +17098,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
16973
17098
  useValue: { overlayPanelClass: 'vd-select-filter-overlay' }
16974
17099
  }
16975
17100
  ], template: "<mat-form-field subscriptSizing=\"dynamic\" [ngClass]=\"{'filter-not-empty': value}\" dense-3 flex>\r\n <span matPrefix *ngIf=\"!value && value!=0 && !focused\" (click)=\"$event.stopPropagation();select.open()\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">manage_search</mat-icon>\r\n </span>\r\n <mat-select type=\"input\" [(ngModel)]=\"value\" [multiple]=\"multiple\" flex #select>\r\n <mat-form-field *ngIf=\"filterable\" appearance=\"fill\" subscriptSizing=\"dynamic\" dense-3 flex>\r\n <input matInput #filterInput type=\"text\" placeholder=\"Filter...\" class=\"vd-select-filter\" (click)=\"$event.stopPropagation();\" (keyup)=\"handleFilter($event)\" flex>\r\n <mat-icon *ngIf=\"filterInput?.value\" (click)=\"$event.stopPropagation(); filterInput!.value = ''; handleFilter($event);\" fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n </mat-form-field>\r\n <mat-option *ngIf=\"!multiple\" class=\"tc-grey-500\" (click)=\"$event.stopPropagation();\"></mat-option>\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-option [value]=\"option[key]\" (click)=\"$event.stopPropagation();\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option.name, select, option {option} other {{{option[text]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate!.templateRef\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </mat-select>\r\n</mat-form-field>", styles: [".mat-mdc-form-field mat-icon{opacity:.7}\n"] }]
16976
- }], ctorParameters: () => [{ type: i1$4.MatTable }, { type: i2$2.CdkColumnDef }], propDecorators: { optionTemplate: [{
17101
+ }], ctorParameters: () => [{ type: i1$5.MatTable }, { type: i2$2.CdkColumnDef }], propDecorators: { optionTemplate: [{
16977
17102
  type: ContentChild,
16978
17103
  args: [VdFilterOptionDirective]
16979
17104
  }], selectEl: [{
@@ -17059,6 +17184,16 @@ class VdDynamicTableComponent {
17059
17184
  this.paginable = true;
17060
17185
  this.static = true;
17061
17186
  }
17187
+ /**
17188
+ * The parent form control (FormGroup or FormArray) passed into the component.
17189
+ * @type {any}
17190
+ */
17191
+ parentControl;
17192
+ /**
17193
+ * The associated entity object passed into the component.
17194
+ * @type {any}
17195
+ */
17196
+ entityObject;
17062
17197
  /**
17063
17198
  * Reactive FormArray representing the form data, which is used to track
17064
17199
  * form controls and synchronize table data with form changes.
@@ -17410,12 +17545,16 @@ class VdDynamicTableComponent {
17410
17545
  this.displayedColumns$ = of(selectedColumns
17411
17546
  /* Exclude columns that are in the excludedColumns list */
17412
17547
  ?.filter(x => !this.excludedColumns?.includes(x.name))
17548
+ /* Filter out columns that are hidden by the hide function (if provided) */
17549
+ ?.filter(x => !x.hide || !x.hide(this.entityObject, this.parentControl, this.context))
17413
17550
  /* Map the remaining columns to their name property */
17414
17551
  ?.map(c => c.name));
17415
17552
  /* Build the displayed filter columns by filtering out the excluded columns and prefixing with 'filter.' */
17416
17553
  this.displayedFilterColumns$ = of(selectedColumns
17417
17554
  /* Exclude columns that are in the excludedColumns list */
17418
17555
  ?.filter(x => !this.excludedColumns?.includes(x.name))
17556
+ /* Filter out columns that are hidden by the hide function (if provided) */
17557
+ ?.filter(x => !x.hide || !x.hide(this.entityObject, this.parentControl, this.context))
17419
17558
  /* Map the remaining columns to a filter-friendly string with 'filter.' prefix */
17420
17559
  ?.map(c => `filter.${(c.filter || c.name)}`));
17421
17560
  });
@@ -17695,9 +17834,9 @@ class VdDynamicTableComponent {
17695
17834
  this.changeDetector.detectChanges();
17696
17835
  }
17697
17836
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDynamicTableComponent, deps: [{ token: DynamicBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
17698
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDynamicTableComponent, isStandalone: true, selector: "vd-dynamic-table", inputs: { dataSource: "dataSource", data: "data", formArray: "formArray", debugValue: "debugValue", classType: "classType", context: "context", dataSourceFilter: "dataSourceFilter", static: "static", filterable: "filterable", sticky: "sticky", tableWidth: "tableWidth", useFilterOperator: "useFilterOperator", paginable: "paginable", selectable: "selectable", sortActive: "sortActive", sortDirection: "sortDirection", stickyHeader: "stickyHeader", stickyFilter: "stickyFilter", columnSets: "columnSets", rowNgClass: "rowNgClass", detailsTemplate: "detailsTemplate", readonly: "readonly", selectAllFilter: "selectAllFilter", paginatorRef: "paginatorRef", columns: "columns", rowMenuItems: "rowMenuItems", rowAction: "rowAction", excludedColumns: "excludedColumns", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions" }, outputs: { rowClick: "rowClick" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, static: true }, { propertyName: "detailsTemplateRef", predicate: ["detailsTemplate"], descendants: true, read: ViewContainerRef }, { propertyName: "rowContextMenuTriggers", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"loading-progress\" *ngIf=\"!static\">\r\n\t<mat-progress-bar mode=\"indeterminate\" *ngIf=\"dataSource?.isLoading\"></mat-progress-bar>\r\n</div>\r\n\r\n<!-- #region Data table -->\r\n<div class=\"mat-table-container scrollbar-secondary\" [ngClass]=\"{'mat-table-sticky': sticky}\" #scrollContainer>\r\n\t<table mat-table #table [dataSource]=\"dataSource\" [dataSourceFilter]=\"dataSourceFilter\" [ngClass]=\"{'table-fixed': !sticky && !detailsTemplate && !templateRef, 'table-stick': sticky}\" [trackBy]=\"trackBy\" matSort matSortDisableClear [matSortActive]=\"sortActive||'id'\" [matSortDirection]=\"sortDirection\" multiTemplateDataRows>\r\n\t\t<ng-container *ngFor=\"let column of columns$ | async; trackBy:columnsTrackBy\">\r\n\t\t\t<!-- #region Column def -->\r\n\t\t\t<ng-container [cdkColumnDef]=\"column.name\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t<ng-template #header [ngTemplateOutlet]=\"header\" let-headerText=\"headerText\" [ngTemplateOutletContext]=\"{headerText: column.header | func:context}\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [mat-sort-header]=\"column.sortBy || column.name\" [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [disabled]=\"column.type == ColumnType.Checkbox || column.disabled\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\" [arrowPosition]=\"column.arrowBefore?'before':'after'\">\r\n\t\t\t\t\t\t<mat-checkbox *ngIf=\"column.type == ColumnType.Checkbox\" (change)=\"$event ? dataSource.toggleSelect($event, selectAllFilter) : null\" [disabled]=\"!dataSource.paginator?.length\" [checked]=\"dataSource.selectionModel.hasValue() && dataSource.isAllSelected()\" [indeterminate]=\"dataSource.selectionModel.hasValue() && !dataSource.isAllSelected()\"></mat-checkbox>\r\n\t\t\t\t\t\t<span *ngIf=\"column.type != ColumnType.Checkbox\" [matTooltip]=\"headerText\">{{headerText}}</span>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<td mat-cell *cdkCellDef=\"let row; let rowIndex = dataIndex\" [matTooltip]=\"column.tooltip?column.tooltip(row, undefined, context):null\" [matTooltipClass]=\"column.tooltipClass??''\" [hidden]=\"column.hidden\" [ngClass]=\"getRowClasses(column, row)\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\">\r\n\t\t\t\t\t<ng-template #rowVal [ngTemplateOutlet]=\"rowVal\" let-rowValue [ngTemplateOutletContext]=\"{$implicit: column?.content && column?.content(row, undefined, context)}\">\r\n\t\t\t\t\t\t<ng-container [ngSwitch]=\"column.type\">\r\n\t\t\t\t\t\t\t<!-- #region Checkbox column -->\r\n\t\t\t\t\t\t\t<mat-checkbox *ngSwitchCase=\"ColumnType.Checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? dataSource.selectionModel.toggle(row) : null\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [checked]=\"dataSource.selectionModel.isSelected(row)\"></mat-checkbox>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Enum column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Enum\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.enumMetadata; else noEnumMetadata\">\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let item of rowValue; let i = index\">\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-template [ngIf]=\"i < 2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template let-displayValue=\"displayValue\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ displayValue: column.enumMetadata[item].display }\"></ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i === 1 && rowValue?.length > 2\" [matTooltip]=\"(rowValue | slice:2 | map:column.enumMetadata | map:'display') | join:'\\n'\" matTooltipClass=\"mat-tooltip-multiline\">...</small>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<ng-template #template let-displayValue=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-chip-row disableRipple=\"true\" selectable=\"false\" [matTooltip]=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ displayValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-chip-row>\r\n\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" class=\"na\" [innerHtml]=\"(column.enumMetadata[rowValue]||{}).display\"></span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-template #noEnumMetadata>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<div *ngFor=\"let item of rowValue; let i = index; let last = last\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i<2\" i18n=\"@@selection\">{item | enum:column.enumType:column.enumPrefix, select, type {type} other {{{item | enum:column.enumType:column.enumPrefix}}}}</small><small *ngIf=\"i==1 && rowValue?.length > 2\">, ...</small>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" i18n=\"@@selection\">{rowValue | enum:column.enumType:column.enumPrefix, select, type {type} other {{{rowValue | enum:column.enumType:column.enumPrefix}}}}</span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<ng-template #recursiveContainer let-columnNameSegments=\"segments\" let-formGroup=\"formGroup\" let-parentFormGroup=\"parentFormGroup\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formGroup\" [formGroup]=\"formGroup\">\r\n\t\t\t\t\t\t\t\t\t<!-- If the columnNameSegments array is empty, we're at the leaf node -->\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!columnNameSegments.length; else notLastSegment\">\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-slide-toggle [formControl]=\"formGroup\" (click)=\"$event.stopPropagation();\" (change)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):handleModelChange(column, parentFormGroup.value, parentFormGroup)\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.TextInput\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input matInput [formControl]=\"formGroup\" type=\"{{column.inputType}}\" autocomplete=\"none\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" [min]=\"column.inputMin?column.inputMin(parentFormGroup.value, parentFormGroup, context):null\" [max]=\"column.inputMax?column.inputMax(parentFormGroup.value, parentFormGroup, context):null\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.Select\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<vd-select [formControl]=\"formGroup\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:parentFormGroup.value:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" (selectionChange)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):patch(parentFormGroup.value, [column.name], rowValue, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #notLastSegment>\r\n\t\t\t\t\t\t\t\t\t\t<!-- If not the last segment, create a nested form group -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"columnNameSegments[0]\">\r\n\t\t\t\t\t\t\t\t\t\t\t<!-- Recursive call to handle nested segments -->\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: columnNameSegments.slice(1), parentFormGroup:formGroup, formGroup: formGroup.get(columnNameSegments[0])}\"></ng-container>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!formArray\">\r\n\t\t\t\t\t\t\t\t\t<mat-slide-toggle [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);handleModelChange(column, row, undefined);\" (click)=\"$event.stopPropagation();\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Date column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Date\">{{rowValue | date:column.shortDate?'dd.MM.yyyy':'dd.MM.yyyy HH:mm:ss'}}</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.TextInput\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<input matInput *ngIf=\"!formArray\" type=\"{{column.inputType}}\" autocomplete=\"none\" name=\"{{column.name}}{{rowIndex}}\" [ngModel]=\"row | property:column.name\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [min]=\"column.inputMin?column.inputMin(row, undefined, context):null\" [max]=\"column.inputMax?column.inputMax(row, undefined, context):null\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);(column.change?column.change(row, undefined, context):patch(row, [column.name], $event, column.patchIncludes));\" [ngModelOptions]=\"{updateOn: 'blur'}\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Select\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<vd-select *ngIf=\"!formArray\" name=\"{{column.name}}{{rowIndex}}\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column?.enumFilter | func:row:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" (change)=\"column.change?column.change(row, undefined, context):patch(row, [column.name], $event.value, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Action -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Action\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t\t<div id=\"menu-{{row.id}}\" style=\"visibility: hidden; position: fixed;\" #contextMenuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu.matMenu!\" *ngIf=\"menu?.matMenu && !row.locked && hasVisibleRowMenuItems(row, column)\"></div>\r\n\t\t\t\t\t\t\t\t\t<vd-dynamic-menu [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\" #menu></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Menu -->\r\n\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t<vd-dynamic-menu *ngSwitchCase=\"ColumnType.Menu\" [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Icon\" layout=\"row\" layout-align=\"start center\">\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.matIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\">{{handleExpression(column.icon?.matIcon!, row)}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.svgIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [svgIcon]=\"handleExpression(column.icon?.svgIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.fontIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [fontIcon]=\"handleExpression(column.icon?.fontIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon button -->\r\n\t\t\t\t\t\t\t<a mat-icon-button *ngSwitchCase=\"ColumnType.IconButton\" (click)=\"$event.stopPropagation();column.iconButton?.event?column.iconButton?.event(row, context):null\">\r\n\t\t\t\t\t\t\t\t<mat-icon fontSet=\"{{column.iconButton?.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.iconButton?.iconClass??'', row)\">{{handleExpression(column.iconButton?.icon??'radio_button_checked', row) || 'radio_button_checked'}}</mat-icon>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Other column types -->\r\n\t\t\t\t\t\t\t<span *ngSwitchDefault [innerHtml]=\"rowValue??''\"></span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</td>\r\n\t\t\t</ng-container>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</ng-container>\r\n\r\n\t\t<!-- #region Filter row -->\r\n\t\t<ng-container *ngIf=\"dataSource && filterable\">\r\n\t\t\t<ng-container *ngFor=\"let column of columns$ | async\">\r\n\t\t\t\t<ng-container cdkColumnDef=\"filter.{{column.filter || column.name}}\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\">\r\n\t\t\t\t\t\t<!-- #region Select filter -->\r\n\t\t\t\t\t\t<span *ngIf=\"(column.endpoint || column.enumType || column.options) else notSelectFilter\" filter-select [endpoint]=\"column.endpoint\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:{}:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [text]=\"column.filterOptionText || 'name'\"></span>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Text filter -->\r\n\t\t\t\t\t\t<ng-template #notSelectFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"notSelectFilter && (column.type == ColumnType.Text || column.type == ColumnType.TextInput || column.type == ColumnType.Number) else notInputFilter\" filter-input [onlyNumber]=\"column.filterInputNumber??false\" [operator]=\"!useFilterOperator ? undefined : column.filterOperator\"></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Date filter -->\r\n\t\t\t\t\t\t<ng-template #notInputFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Date else notDateFilter\" filter-date></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Action filter (clear) -->\r\n\t\t\t\t\t\t<ng-template #notDateFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Action\" filter-clear></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Details column -->\r\n\t\t<ng-container cdkColumnDef=\"expandedDetail\">\r\n\t\t\t<td mat-cell *matCellDef=\"let row; let index = index\" [attr.colspan]=\"(displayedColumns$ | async)?.length\">\r\n\t\t\t\t<div class=\"row-detail\" [@detailExpand]=\"row == expandedRow ? 'expanded' : 'collapsed'\" #detailsTemplate>\r\n\t\t\t\t\t<ng-container *ngIf=\"templateRef && row === expandedRow\">\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"templateRef; context:{row: row, index: index, context: context}\"></ng-container>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</td>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Filter header -->\r\n\t\t<ng-container *ngIf=\"filterable\">\r\n\t\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedFilterColumns$ | async\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedColumns$ | async; sticky: stickyFilter\"></tr>\r\n\t\t<tr mat-row *cdkRowDef=\"let row; columns: displayedColumns$ | async; let index = dataIndex\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\" [class.expanded-row]=\"expandedRow === row\" (click)=\"handleRowClick(index, row)\" (contextmenu)=\"handleRowRightClick($event, row)\"></tr>\r\n\r\n\t\t<!-- #region Detrails row -->\r\n\t\t<ng-container *ngIf=\"detailsTemplate || templateRef\">\r\n\t\t\t<tr mat-row *cdkRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\t</table>\r\n</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Row shown when there is no matching data.-->\r\n<div class=\"mat-cell pad table-empty txt-italic\" *ngIf=\"!dataSource?.filteredData?.length && !dataSource?.total\" i18n=\"@@noResultsFound\">No results were found.</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Debug value -->\r\n<code *ngIf=\"debugValue\">\r\n\t<pre>{{formValue | json}}</pre>\r\n</code>\r\n<!-- #endregion -->\r\n\r\n<div class=\"table-footer\" layout=\"row\">\r\n\t<ng-content select=\"[table-footer]\"></ng-content>\r\n\t<span flex></span>\r\n\t<mat-paginator *ngIf=\"paginable\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n</div>", styles: ["::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-form-field .mat-form-field-wrapper{width:100%}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip{height:24px;margin-top:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:9px;padding-right:9px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip:last-child{margin-bottom:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip *{font-size:.8rem}@media (max-width: 389px){::ng-deep .mat-mdc-table [gt-xs],::ng-deep .mat-mdc-table .gt-xs{display:none}::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 599px){::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 959px){::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1279px){::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1919px){::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1979px){::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}.mat-table-container{width:100%;max-width:100%;overflow:auto}.mat-table-container .mat-mdc-header-cell,.mat-table-container .mat-mdc-footer-cell,.mat-table-container .mat-mdc-cell{min-width:80px;box-sizing:border-box}.mat-table-container .mat-mdc-header-row,.mat-table-container .mat-mdc-footer-row,.mat-table-container .mat-mdc-row{min-width:1920px}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-right{box-shadow:-3px 0 5px #0000001a}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-left{box-shadow:3px 0 5px #0000001a}\n"], dependencies: [{ kind: "ngmodule", type: CdkTableModule }, { kind: "directive", type: i2$2.CdkRowDef, selector: "[cdkRowDef]", inputs: ["cdkRowDefColumns", "cdkRowDefWhen"] }, { kind: "directive", type: i2$2.CdkCellDef, selector: "[cdkCellDef]" }, { kind: "directive", type: i2$2.CdkHeaderCellDef, selector: "[cdkHeaderCellDef]" }, { kind: "directive", type: i2$2.CdkColumnDef, selector: "[cdkColumnDef]", inputs: ["cdkColumnDef", "sticky", "stickyEnd"] }, { kind: "directive", type: i2$2.CdkHeaderRowDef, selector: "[cdkHeaderRowDef]", inputs: ["cdkHeaderRowDef", "cdkHeaderRowDefSticky"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.JsonPipe, name: "json" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "pipe", type:
17837
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDynamicTableComponent, isStandalone: true, selector: "vd-dynamic-table", inputs: { dataSource: "dataSource", data: "data", parentControl: "parentControl", entityObject: "entityObject", formArray: "formArray", debugValue: "debugValue", classType: "classType", context: "context", dataSourceFilter: "dataSourceFilter", static: "static", filterable: "filterable", sticky: "sticky", tableWidth: "tableWidth", useFilterOperator: "useFilterOperator", paginable: "paginable", selectable: "selectable", sortActive: "sortActive", sortDirection: "sortDirection", stickyHeader: "stickyHeader", stickyFilter: "stickyFilter", columnSets: "columnSets", rowNgClass: "rowNgClass", detailsTemplate: "detailsTemplate", readonly: "readonly", selectAllFilter: "selectAllFilter", paginatorRef: "paginatorRef", columns: "columns", rowMenuItems: "rowMenuItems", rowAction: "rowAction", excludedColumns: "excludedColumns", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions" }, outputs: { rowClick: "rowClick" }, queries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, static: true }, { propertyName: "detailsTemplateRef", predicate: ["detailsTemplate"], descendants: true, read: ViewContainerRef }, { propertyName: "rowContextMenuTriggers", predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div class=\"loading-progress\" *ngIf=\"!static\">\r\n\t<mat-progress-bar mode=\"indeterminate\" *ngIf=\"dataSource?.isLoading\"></mat-progress-bar>\r\n</div>\r\n\r\n<!-- #region Data table -->\r\n<div class=\"mat-table-container scrollbar-secondary\" [ngClass]=\"{'mat-table-sticky': sticky}\" #scrollContainer>\r\n\t<table mat-table #table [dataSource]=\"dataSource\" [dataSourceFilter]=\"dataSourceFilter\" [ngClass]=\"{'table-fixed': !sticky && !detailsTemplate && !templateRef, 'table-stick': sticky}\" [trackBy]=\"trackBy\" matSort matSortDisableClear [matSortActive]=\"sortActive||'id'\" [matSortDirection]=\"sortDirection\" multiTemplateDataRows>\r\n\t\t<ng-container *ngFor=\"let column of columns$ | async; trackBy:columnsTrackBy\">\r\n\t\t\t<!-- #region Column def -->\r\n\t\t\t<ng-container [cdkColumnDef]=\"column.name\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t<ng-template #header [ngTemplateOutlet]=\"header\" let-headerText=\"headerText\" [ngTemplateOutletContext]=\"{headerText: column.header | func:context}\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [mat-sort-header]=\"column.sortBy || column.name\" [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [disabled]=\"column.type == ColumnType.Checkbox || column.disabled\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\" [arrowPosition]=\"column.arrowBefore?'before':'after'\">\r\n\t\t\t\t\t\t<mat-checkbox *ngIf=\"column.type == ColumnType.Checkbox\" (change)=\"$event ? dataSource.toggleSelect($event, selectAllFilter) : null\" [disabled]=\"!dataSource.paginator?.length\" [checked]=\"dataSource.selectionModel.hasValue() && dataSource.isAllSelected()\" [indeterminate]=\"dataSource.selectionModel.hasValue() && !dataSource.isAllSelected()\"></mat-checkbox>\r\n\t\t\t\t\t\t<span *ngIf=\"column.type != ColumnType.Checkbox\" [matTooltip]=\"headerText\">{{headerText}}</span>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<td mat-cell *cdkCellDef=\"let row; let rowIndex = dataIndex\" [matTooltip]=\"column.tooltip?column.tooltip(row, undefined, context):null\" [matTooltipClass]=\"column.tooltipClass??''\" [hidden]=\"column.hidden\" [ngClass]=\"getRowClasses(column, row)\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\">\r\n\t\t\t\t\t<ng-template #rowVal [ngTemplateOutlet]=\"rowVal\" let-rowValue [ngTemplateOutletContext]=\"{$implicit: column?.content && column?.content(row, undefined, context)}\">\r\n\t\t\t\t\t\t<ng-container [ngSwitch]=\"column.type\">\r\n\t\t\t\t\t\t\t<!-- #region Checkbox column -->\r\n\t\t\t\t\t\t\t<mat-checkbox *ngSwitchCase=\"ColumnType.Checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? dataSource.selectionModel.toggle(row) : null\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [checked]=\"dataSource.selectionModel.isSelected(row)\"></mat-checkbox>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Enum column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Enum\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.enumMetadata; else noEnumMetadata\">\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let item of rowValue; let i = index\">\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-template [ngIf]=\"i < 2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template let-displayValue=\"displayValue\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ displayValue: column.enumMetadata[item].display }\"></ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i === 1 && rowValue?.length > 2\" [matTooltip]=\"(rowValue | slice:2 | map:column.enumMetadata | map:'display') | join:'\\n'\" matTooltipClass=\"mat-tooltip-multiline\">...</small>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<ng-template #template let-displayValue=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-chip-row disableRipple=\"true\" selectable=\"false\" [matTooltip]=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ displayValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-chip-row>\r\n\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" class=\"na\" [ngStyle]=\"{ color: ((column.enumMetadata[rowValue] || {}).textColor || 'inherit') }\" [innerHtml]=\"(column.enumMetadata[rowValue]||{}).display\"></span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-template #noEnumMetadata>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<div *ngFor=\"let item of rowValue; let i = index; let last = last\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i<2\" i18n=\"@@selection\">{item | enum:column.enumType:column.enumPrefix, select, type {type} other {{{item | enum:column.enumType:column.enumPrefix}}}}</small>\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i==1 && rowValue?.length > 2\">, ...</small>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" i18n=\"@@selection\">{rowValue | enum:column.enumType:column.enumPrefix, select, type {type} other {{{rowValue | enum:column.enumType:column.enumPrefix}}}}</span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<ng-template #recursiveContainer let-columnNameSegments=\"segments\" let-formGroup=\"formGroup\" let-parentFormGroup=\"parentFormGroup\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formGroup\" [formGroup]=\"formGroup\">\r\n\t\t\t\t\t\t\t\t\t<!-- If the columnNameSegments array is empty, we're at the leaf node -->\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!columnNameSegments.length; else notLastSegment\">\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-slide-toggle [formControl]=\"formGroup\" (click)=\"$event.stopPropagation();\" (change)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):handleModelChange(column, parentFormGroup.value, parentFormGroup)\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.TextInput\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input matInput [formControl]=\"formGroup\" type=\"{{column.inputType}}\" autocomplete=\"none\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" [min]=\"column.inputMin?column.inputMin(parentFormGroup.value, parentFormGroup, context):null\" [max]=\"column.inputMax?column.inputMax(parentFormGroup.value, parentFormGroup, context):null\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.Select\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<vd-select [formControl]=\"formGroup\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:parentFormGroup.value:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" (selectionChange)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):patch(parentFormGroup.value, [column.name], rowValue, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #notLastSegment>\r\n\t\t\t\t\t\t\t\t\t\t<!-- If not the last segment, create a nested form group -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"columnNameSegments[0]\">\r\n\t\t\t\t\t\t\t\t\t\t\t<!-- Recursive call to handle nested segments -->\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: columnNameSegments.slice(1), parentFormGroup:formGroup, formGroup: formGroup.get(columnNameSegments[0])}\"></ng-container>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!formArray\">\r\n\t\t\t\t\t\t\t\t\t<mat-slide-toggle [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);handleModelChange(column, row, undefined);\" (click)=\"$event.stopPropagation();\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Date column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Date\">{{rowValue | date:column.shortDate?'dd.MM.yyyy':'dd.MM.yyyy HH:mm:ss'}}</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.TextInput\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<input matInput *ngIf=\"!formArray\" type=\"{{column.inputType}}\" autocomplete=\"none\" name=\"{{column.name}}{{rowIndex}}\" [ngModel]=\"row | property:column.name\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [min]=\"column.inputMin?column.inputMin(row, undefined, context):null\" [max]=\"column.inputMax?column.inputMax(row, undefined, context):null\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);(column.change?column.change(row, undefined, context):patch(row, [column.name], $event, column.patchIncludes));\" [ngModelOptions]=\"{updateOn: 'blur'}\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Select\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<vd-select *ngIf=\"!formArray\" name=\"{{column.name}}{{rowIndex}}\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column?.enumFilter | func:row:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" (change)=\"column.change?column.change(row, undefined, context):patch(row, [column.name], $event.value, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Action -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Action\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t\t<div id=\"menu-{{row.id}}\" style=\"visibility: hidden; position: fixed;\" #contextMenuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu.matMenu!\" *ngIf=\"menu?.matMenu && !row.locked && hasVisibleRowMenuItems(row, column)\"></div>\r\n\t\t\t\t\t\t\t\t\t<vd-dynamic-menu [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\" #menu></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Menu -->\r\n\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t<vd-dynamic-menu *ngSwitchCase=\"ColumnType.Menu\" [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Icon\" layout=\"row\" layout-align=\"start center\">\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.matIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\">{{handleExpression(column.icon?.matIcon!, row)}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.svgIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [svgIcon]=\"handleExpression(column.icon?.svgIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.fontIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [fontIcon]=\"handleExpression(column.icon?.fontIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon button -->\r\n\t\t\t\t\t\t\t<a mat-icon-button *ngSwitchCase=\"ColumnType.IconButton\" (click)=\"$event.stopPropagation();column.iconButton?.event?column.iconButton?.event(row, context):null\">\r\n\t\t\t\t\t\t\t\t<mat-icon fontSet=\"{{column.iconButton?.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.iconButton?.iconClass??'', row)\">{{handleExpression(column.iconButton?.icon??'radio_button_checked', row) || 'radio_button_checked'}}</mat-icon>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Other column types -->\r\n\t\t\t\t\t\t\t<span *ngSwitchDefault [innerHtml]=\"rowValue??''\"></span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</td>\r\n\t\t\t</ng-container>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</ng-container>\r\n\r\n\t\t<!-- #region Filter row -->\r\n\t\t<ng-container *ngIf=\"dataSource && filterable\">\r\n\t\t\t<ng-container *ngFor=\"let column of columns$ | async\">\r\n\t\t\t\t<ng-container cdkColumnDef=\"filter.{{column.filter || column.name}}\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\">\r\n\t\t\t\t\t\t<!-- #region Select filter -->\r\n\t\t\t\t\t\t<span *ngIf=\"(column.endpoint || column.enumType || column.options) else notSelectFilter\" filter-select [endpoint]=\"column.endpoint\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:{}:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [text]=\"column.filterOptionText || 'name'\"></span>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Text filter -->\r\n\t\t\t\t\t\t<ng-template #notSelectFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"notSelectFilter && (column.type == ColumnType.Text || column.type == ColumnType.TextInput || column.type == ColumnType.Number) else notInputFilter\" filter-input [onlyNumber]=\"column.filterInputNumber??false\" [operator]=\"!useFilterOperator ? undefined : column.filterOperator\"></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Date filter -->\r\n\t\t\t\t\t\t<ng-template #notInputFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Date else notDateFilter\" filter-date></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Action filter (clear) -->\r\n\t\t\t\t\t\t<ng-template #notDateFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Action\" filter-clear></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Details column -->\r\n\t\t<ng-container cdkColumnDef=\"expandedDetail\">\r\n\t\t\t<td mat-cell *matCellDef=\"let row; let index = index\" [attr.colspan]=\"(displayedColumns$ | async)?.length\">\r\n\t\t\t\t<div class=\"row-detail\" [@detailExpand]=\"row == expandedRow ? 'expanded' : 'collapsed'\" #detailsTemplate>\r\n\t\t\t\t\t<ng-container *ngIf=\"templateRef && row === expandedRow\">\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"templateRef; context:{row: row, index: index, context: context}\"></ng-container>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</td>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Filter header -->\r\n\t\t<ng-container *ngIf=\"filterable\">\r\n\t\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedFilterColumns$ | async\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedColumns$ | async; sticky: stickyFilter\"></tr>\r\n\t\t<tr mat-row *cdkRowDef=\"let row; columns: displayedColumns$ | async; let index = dataIndex\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\" [class.expanded-row]=\"expandedRow === row\" (click)=\"handleRowClick(index, row)\" (contextmenu)=\"handleRowRightClick($event, row)\"></tr>\r\n\r\n\t\t<!-- #region Detrails row -->\r\n\t\t<ng-container *ngIf=\"detailsTemplate || templateRef\">\r\n\t\t\t<tr mat-row *cdkRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\t</table>\r\n</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Row shown when there is no matching data.-->\r\n<div class=\"mat-cell pad table-empty txt-italic\" *ngIf=\"!dataSource?.filteredData?.length && !dataSource?.total\" i18n=\"@@noResultsFound\">No results were found.</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Debug value -->\r\n<code *ngIf=\"debugValue\">\r\n\t<pre>{{formValue | json}}</pre>\r\n</code>\r\n<!-- #endregion -->\r\n\r\n<div class=\"table-footer\" layout=\"row\">\r\n\t<ng-content select=\"[table-footer]\"></ng-content>\r\n\t<span flex></span>\r\n\t<mat-paginator *ngIf=\"paginable\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n</div>", styles: ["::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-form-field .mat-form-field-wrapper{width:100%}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip{height:24px;margin-top:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:9px;padding-right:9px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip:last-child{margin-bottom:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip *{font-size:.8rem}@media (max-width: 389px){::ng-deep .mat-mdc-table [gt-xs],::ng-deep .mat-mdc-table .gt-xs{display:none}::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 599px){::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 959px){::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1279px){::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1919px){::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1979px){::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}.mat-table-container{width:100%;max-width:100%;overflow:auto}.mat-table-container .mat-mdc-header-cell,.mat-table-container .mat-mdc-footer-cell,.mat-table-container .mat-mdc-cell{min-width:80px;box-sizing:border-box}.mat-table-container .mat-mdc-header-row,.mat-table-container .mat-mdc-footer-row,.mat-table-container .mat-mdc-row{min-width:1920px}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-right{box-shadow:-3px 0 5px #0000001a}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-left{box-shadow:3px 0 5px #0000001a}\n"], dependencies: [{ kind: "ngmodule", type: CdkTableModule }, { kind: "directive", type: i2$2.CdkRowDef, selector: "[cdkRowDef]", inputs: ["cdkRowDefColumns", "cdkRowDefWhen"] }, { kind: "directive", type: i2$2.CdkCellDef, selector: "[cdkCellDef]" }, { kind: "directive", type: i2$2.CdkHeaderCellDef, selector: "[cdkHeaderCellDef]" }, { kind: "directive", type: i2$2.CdkColumnDef, selector: "[cdkColumnDef]", inputs: ["cdkColumnDef", "sticky", "stickyEnd"] }, { kind: "directive", type: i2$2.CdkHeaderRowDef, selector: "[cdkHeaderRowDef]", inputs: ["cdkHeaderRowDef", "cdkHeaderRowDefSticky"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.JsonPipe, name: "json" }, { kind: "pipe", type: i1$1.SlicePipe, name: "slice" }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "pipe", type:
17699
17838
  //----------------------
17700
- MapPipe, name: "map" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { 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: MatPaginatorModule }, { kind: "component", type: i10$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i12.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i16.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type:
17839
+ MapPipe, name: "map" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { 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: MatPaginatorModule }, { kind: "component", type: i10$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i4.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i12.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i16.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type:
17701
17840
  //----------------------
17702
17841
  DataSourceFilterDirective, selector: "[dataSourceFilter]", inputs: ["dataSource", "dataSourceFilter"] }, { kind: "directive", type: DisableControlDirective, selector: "[disableControl]", inputs: ["disableControl"] }, { kind: "pipe", type: EnumPipe, name: "enum" }, { kind: "component", type: FilterDateComponent, selector: "mat-header-cell[filter-date], [mat-header-cell][filter-date], [filter-date]", inputs: ["field", "debounce", "placeholder"] }, { kind: "component", type: FilterInputComponent, selector: "mat-header-cell[filter-input], [mat-header-cell][filter-input], [filter-input]", inputs: ["field", "operator", "onlyNumber", "debounce", "placeholder"] }, { kind: "component", type: FilterSelectComponent, selector: "mat-header-cell[filter-select], [mat-header-cell][filter-select], [filter-select]", inputs: ["endpoint", "params", "projection", "sortBy", "sorted", "enumFilter", "enum", "enumMetadata", "key", "text", "prefix", "multiple", "options", "filteredOptions", "filterable", "field", "placeholder", "cache"] }, { kind: "component", type: FilterClearComponent, selector: "mat-header-cell[filter-clear], [mat-header-cell][filter-clear], [filter-clear]" }, { kind: "pipe", type: FormGroupPipe, name: "formGroup" }, { kind: "pipe", type: FuncPipe, name: "func" }, { kind: "pipe", type: JoinPipe, name: "join" }, { kind: "pipe", type: PropertyPipe, name: "property" }, { kind: "component", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: ["items", "data", "index", "context", "contextMenu"] }, { kind: "component", type: VdSelectComponent, selector: "vd-select", inputs: ["triggerCssClass", "triggerMode"] }], animations: [
17703
17842
  trigger('detailExpand', [
@@ -17749,7 +17888,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
17749
17888
  state('expanded', style({ height: AUTO_STYLE })),
17750
17889
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
17751
17890
  ]),
17752
- ], template: "<div class=\"loading-progress\" *ngIf=\"!static\">\r\n\t<mat-progress-bar mode=\"indeterminate\" *ngIf=\"dataSource?.isLoading\"></mat-progress-bar>\r\n</div>\r\n\r\n<!-- #region Data table -->\r\n<div class=\"mat-table-container scrollbar-secondary\" [ngClass]=\"{'mat-table-sticky': sticky}\" #scrollContainer>\r\n\t<table mat-table #table [dataSource]=\"dataSource\" [dataSourceFilter]=\"dataSourceFilter\" [ngClass]=\"{'table-fixed': !sticky && !detailsTemplate && !templateRef, 'table-stick': sticky}\" [trackBy]=\"trackBy\" matSort matSortDisableClear [matSortActive]=\"sortActive||'id'\" [matSortDirection]=\"sortDirection\" multiTemplateDataRows>\r\n\t\t<ng-container *ngFor=\"let column of columns$ | async; trackBy:columnsTrackBy\">\r\n\t\t\t<!-- #region Column def -->\r\n\t\t\t<ng-container [cdkColumnDef]=\"column.name\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t<ng-template #header [ngTemplateOutlet]=\"header\" let-headerText=\"headerText\" [ngTemplateOutletContext]=\"{headerText: column.header | func:context}\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [mat-sort-header]=\"column.sortBy || column.name\" [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [disabled]=\"column.type == ColumnType.Checkbox || column.disabled\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\" [arrowPosition]=\"column.arrowBefore?'before':'after'\">\r\n\t\t\t\t\t\t<mat-checkbox *ngIf=\"column.type == ColumnType.Checkbox\" (change)=\"$event ? dataSource.toggleSelect($event, selectAllFilter) : null\" [disabled]=\"!dataSource.paginator?.length\" [checked]=\"dataSource.selectionModel.hasValue() && dataSource.isAllSelected()\" [indeterminate]=\"dataSource.selectionModel.hasValue() && !dataSource.isAllSelected()\"></mat-checkbox>\r\n\t\t\t\t\t\t<span *ngIf=\"column.type != ColumnType.Checkbox\" [matTooltip]=\"headerText\">{{headerText}}</span>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<td mat-cell *cdkCellDef=\"let row; let rowIndex = dataIndex\" [matTooltip]=\"column.tooltip?column.tooltip(row, undefined, context):null\" [matTooltipClass]=\"column.tooltipClass??''\" [hidden]=\"column.hidden\" [ngClass]=\"getRowClasses(column, row)\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\">\r\n\t\t\t\t\t<ng-template #rowVal [ngTemplateOutlet]=\"rowVal\" let-rowValue [ngTemplateOutletContext]=\"{$implicit: column?.content && column?.content(row, undefined, context)}\">\r\n\t\t\t\t\t\t<ng-container [ngSwitch]=\"column.type\">\r\n\t\t\t\t\t\t\t<!-- #region Checkbox column -->\r\n\t\t\t\t\t\t\t<mat-checkbox *ngSwitchCase=\"ColumnType.Checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? dataSource.selectionModel.toggle(row) : null\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [checked]=\"dataSource.selectionModel.isSelected(row)\"></mat-checkbox>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Enum column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Enum\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.enumMetadata; else noEnumMetadata\">\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let item of rowValue; let i = index\">\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-template [ngIf]=\"i < 2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template let-displayValue=\"displayValue\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ displayValue: column.enumMetadata[item].display }\"></ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i === 1 && rowValue?.length > 2\" [matTooltip]=\"(rowValue | slice:2 | map:column.enumMetadata | map:'display') | join:'\\n'\" matTooltipClass=\"mat-tooltip-multiline\">...</small>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<ng-template #template let-displayValue=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-chip-row disableRipple=\"true\" selectable=\"false\" [matTooltip]=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ displayValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-chip-row>\r\n\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" class=\"na\" [innerHtml]=\"(column.enumMetadata[rowValue]||{}).display\"></span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-template #noEnumMetadata>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<div *ngFor=\"let item of rowValue; let i = index; let last = last\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i<2\" i18n=\"@@selection\">{item | enum:column.enumType:column.enumPrefix, select, type {type} other {{{item | enum:column.enumType:column.enumPrefix}}}}</small><small *ngIf=\"i==1 && rowValue?.length > 2\">, ...</small>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" i18n=\"@@selection\">{rowValue | enum:column.enumType:column.enumPrefix, select, type {type} other {{{rowValue | enum:column.enumType:column.enumPrefix}}}}</span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<ng-template #recursiveContainer let-columnNameSegments=\"segments\" let-formGroup=\"formGroup\" let-parentFormGroup=\"parentFormGroup\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formGroup\" [formGroup]=\"formGroup\">\r\n\t\t\t\t\t\t\t\t\t<!-- If the columnNameSegments array is empty, we're at the leaf node -->\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!columnNameSegments.length; else notLastSegment\">\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-slide-toggle [formControl]=\"formGroup\" (click)=\"$event.stopPropagation();\" (change)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):handleModelChange(column, parentFormGroup.value, parentFormGroup)\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.TextInput\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input matInput [formControl]=\"formGroup\" type=\"{{column.inputType}}\" autocomplete=\"none\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" [min]=\"column.inputMin?column.inputMin(parentFormGroup.value, parentFormGroup, context):null\" [max]=\"column.inputMax?column.inputMax(parentFormGroup.value, parentFormGroup, context):null\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.Select\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<vd-select [formControl]=\"formGroup\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:parentFormGroup.value:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" (selectionChange)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):patch(parentFormGroup.value, [column.name], rowValue, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #notLastSegment>\r\n\t\t\t\t\t\t\t\t\t\t<!-- If not the last segment, create a nested form group -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"columnNameSegments[0]\">\r\n\t\t\t\t\t\t\t\t\t\t\t<!-- Recursive call to handle nested segments -->\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: columnNameSegments.slice(1), parentFormGroup:formGroup, formGroup: formGroup.get(columnNameSegments[0])}\"></ng-container>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!formArray\">\r\n\t\t\t\t\t\t\t\t\t<mat-slide-toggle [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);handleModelChange(column, row, undefined);\" (click)=\"$event.stopPropagation();\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Date column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Date\">{{rowValue | date:column.shortDate?'dd.MM.yyyy':'dd.MM.yyyy HH:mm:ss'}}</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.TextInput\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<input matInput *ngIf=\"!formArray\" type=\"{{column.inputType}}\" autocomplete=\"none\" name=\"{{column.name}}{{rowIndex}}\" [ngModel]=\"row | property:column.name\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [min]=\"column.inputMin?column.inputMin(row, undefined, context):null\" [max]=\"column.inputMax?column.inputMax(row, undefined, context):null\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);(column.change?column.change(row, undefined, context):patch(row, [column.name], $event, column.patchIncludes));\" [ngModelOptions]=\"{updateOn: 'blur'}\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Select\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<vd-select *ngIf=\"!formArray\" name=\"{{column.name}}{{rowIndex}}\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column?.enumFilter | func:row:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" (change)=\"column.change?column.change(row, undefined, context):patch(row, [column.name], $event.value, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Action -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Action\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t\t<div id=\"menu-{{row.id}}\" style=\"visibility: hidden; position: fixed;\" #contextMenuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu.matMenu!\" *ngIf=\"menu?.matMenu && !row.locked && hasVisibleRowMenuItems(row, column)\"></div>\r\n\t\t\t\t\t\t\t\t\t<vd-dynamic-menu [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\" #menu></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Menu -->\r\n\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t<vd-dynamic-menu *ngSwitchCase=\"ColumnType.Menu\" [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Icon\" layout=\"row\" layout-align=\"start center\">\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.matIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\">{{handleExpression(column.icon?.matIcon!, row)}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.svgIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [svgIcon]=\"handleExpression(column.icon?.svgIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.fontIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [fontIcon]=\"handleExpression(column.icon?.fontIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon button -->\r\n\t\t\t\t\t\t\t<a mat-icon-button *ngSwitchCase=\"ColumnType.IconButton\" (click)=\"$event.stopPropagation();column.iconButton?.event?column.iconButton?.event(row, context):null\">\r\n\t\t\t\t\t\t\t\t<mat-icon fontSet=\"{{column.iconButton?.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.iconButton?.iconClass??'', row)\">{{handleExpression(column.iconButton?.icon??'radio_button_checked', row) || 'radio_button_checked'}}</mat-icon>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Other column types -->\r\n\t\t\t\t\t\t\t<span *ngSwitchDefault [innerHtml]=\"rowValue??''\"></span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</td>\r\n\t\t\t</ng-container>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</ng-container>\r\n\r\n\t\t<!-- #region Filter row -->\r\n\t\t<ng-container *ngIf=\"dataSource && filterable\">\r\n\t\t\t<ng-container *ngFor=\"let column of columns$ | async\">\r\n\t\t\t\t<ng-container cdkColumnDef=\"filter.{{column.filter || column.name}}\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\">\r\n\t\t\t\t\t\t<!-- #region Select filter -->\r\n\t\t\t\t\t\t<span *ngIf=\"(column.endpoint || column.enumType || column.options) else notSelectFilter\" filter-select [endpoint]=\"column.endpoint\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:{}:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [text]=\"column.filterOptionText || 'name'\"></span>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Text filter -->\r\n\t\t\t\t\t\t<ng-template #notSelectFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"notSelectFilter && (column.type == ColumnType.Text || column.type == ColumnType.TextInput || column.type == ColumnType.Number) else notInputFilter\" filter-input [onlyNumber]=\"column.filterInputNumber??false\" [operator]=\"!useFilterOperator ? undefined : column.filterOperator\"></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Date filter -->\r\n\t\t\t\t\t\t<ng-template #notInputFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Date else notDateFilter\" filter-date></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Action filter (clear) -->\r\n\t\t\t\t\t\t<ng-template #notDateFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Action\" filter-clear></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Details column -->\r\n\t\t<ng-container cdkColumnDef=\"expandedDetail\">\r\n\t\t\t<td mat-cell *matCellDef=\"let row; let index = index\" [attr.colspan]=\"(displayedColumns$ | async)?.length\">\r\n\t\t\t\t<div class=\"row-detail\" [@detailExpand]=\"row == expandedRow ? 'expanded' : 'collapsed'\" #detailsTemplate>\r\n\t\t\t\t\t<ng-container *ngIf=\"templateRef && row === expandedRow\">\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"templateRef; context:{row: row, index: index, context: context}\"></ng-container>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</td>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Filter header -->\r\n\t\t<ng-container *ngIf=\"filterable\">\r\n\t\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedFilterColumns$ | async\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedColumns$ | async; sticky: stickyFilter\"></tr>\r\n\t\t<tr mat-row *cdkRowDef=\"let row; columns: displayedColumns$ | async; let index = dataIndex\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\" [class.expanded-row]=\"expandedRow === row\" (click)=\"handleRowClick(index, row)\" (contextmenu)=\"handleRowRightClick($event, row)\"></tr>\r\n\r\n\t\t<!-- #region Detrails row -->\r\n\t\t<ng-container *ngIf=\"detailsTemplate || templateRef\">\r\n\t\t\t<tr mat-row *cdkRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\t</table>\r\n</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Row shown when there is no matching data.-->\r\n<div class=\"mat-cell pad table-empty txt-italic\" *ngIf=\"!dataSource?.filteredData?.length && !dataSource?.total\" i18n=\"@@noResultsFound\">No results were found.</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Debug value -->\r\n<code *ngIf=\"debugValue\">\r\n\t<pre>{{formValue | json}}</pre>\r\n</code>\r\n<!-- #endregion -->\r\n\r\n<div class=\"table-footer\" layout=\"row\">\r\n\t<ng-content select=\"[table-footer]\"></ng-content>\r\n\t<span flex></span>\r\n\t<mat-paginator *ngIf=\"paginable\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n</div>", styles: ["::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-form-field .mat-form-field-wrapper{width:100%}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip{height:24px;margin-top:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:9px;padding-right:9px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip:last-child{margin-bottom:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip *{font-size:.8rem}@media (max-width: 389px){::ng-deep .mat-mdc-table [gt-xs],::ng-deep .mat-mdc-table .gt-xs{display:none}::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 599px){::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 959px){::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1279px){::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1919px){::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1979px){::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}.mat-table-container{width:100%;max-width:100%;overflow:auto}.mat-table-container .mat-mdc-header-cell,.mat-table-container .mat-mdc-footer-cell,.mat-table-container .mat-mdc-cell{min-width:80px;box-sizing:border-box}.mat-table-container .mat-mdc-header-row,.mat-table-container .mat-mdc-footer-row,.mat-table-container .mat-mdc-row{min-width:1920px}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-right{box-shadow:-3px 0 5px #0000001a}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-left{box-shadow:3px 0 5px #0000001a}\n"] }]
17891
+ ], template: "<div class=\"loading-progress\" *ngIf=\"!static\">\r\n\t<mat-progress-bar mode=\"indeterminate\" *ngIf=\"dataSource?.isLoading\"></mat-progress-bar>\r\n</div>\r\n\r\n<!-- #region Data table -->\r\n<div class=\"mat-table-container scrollbar-secondary\" [ngClass]=\"{'mat-table-sticky': sticky}\" #scrollContainer>\r\n\t<table mat-table #table [dataSource]=\"dataSource\" [dataSourceFilter]=\"dataSourceFilter\" [ngClass]=\"{'table-fixed': !sticky && !detailsTemplate && !templateRef, 'table-stick': sticky}\" [trackBy]=\"trackBy\" matSort matSortDisableClear [matSortActive]=\"sortActive||'id'\" [matSortDirection]=\"sortDirection\" multiTemplateDataRows>\r\n\t\t<ng-container *ngFor=\"let column of columns$ | async; trackBy:columnsTrackBy\">\r\n\t\t\t<!-- #region Column def -->\r\n\t\t\t<ng-container [cdkColumnDef]=\"column.name\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t<ng-template #header [ngTemplateOutlet]=\"header\" let-headerText=\"headerText\" [ngTemplateOutletContext]=\"{headerText: column.header | func:context}\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [mat-sort-header]=\"column.sortBy || column.name\" [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [disabled]=\"column.type == ColumnType.Checkbox || column.disabled\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\" [arrowPosition]=\"column.arrowBefore?'before':'after'\">\r\n\t\t\t\t\t\t<mat-checkbox *ngIf=\"column.type == ColumnType.Checkbox\" (change)=\"$event ? dataSource.toggleSelect($event, selectAllFilter) : null\" [disabled]=\"!dataSource.paginator?.length\" [checked]=\"dataSource.selectionModel.hasValue() && dataSource.isAllSelected()\" [indeterminate]=\"dataSource.selectionModel.hasValue() && !dataSource.isAllSelected()\"></mat-checkbox>\r\n\t\t\t\t\t\t<span *ngIf=\"column.type != ColumnType.Checkbox\" [matTooltip]=\"headerText\">{{headerText}}</span>\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<td mat-cell *cdkCellDef=\"let row; let rowIndex = dataIndex\" [matTooltip]=\"column.tooltip?column.tooltip(row, undefined, context):null\" [matTooltipClass]=\"column.tooltipClass??''\" [hidden]=\"column.hidden\" [ngClass]=\"getRowClasses(column, row)\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\">\r\n\t\t\t\t\t<ng-template #rowVal [ngTemplateOutlet]=\"rowVal\" let-rowValue [ngTemplateOutletContext]=\"{$implicit: column?.content && column?.content(row, undefined, context)}\">\r\n\t\t\t\t\t\t<ng-container [ngSwitch]=\"column.type\">\r\n\t\t\t\t\t\t\t<!-- #region Checkbox column -->\r\n\t\t\t\t\t\t\t<mat-checkbox *ngSwitchCase=\"ColumnType.Checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"$event ? dataSource.selectionModel.toggle(row) : null\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [checked]=\"dataSource.selectionModel.isSelected(row)\"></mat-checkbox>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Enum column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Enum\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.enumMetadata; else noEnumMetadata\">\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngFor=\"let item of rowValue; let i = index\">\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-template [ngIf]=\"i < 2\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<ng-template let-displayValue=\"displayValue\" [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ displayValue: column.enumMetadata[item].display }\"></ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i === 1 && rowValue?.length > 2\" [matTooltip]=\"(rowValue | slice:2 | map:column.enumMetadata | map:'display') | join:'\\n'\" matTooltipClass=\"mat-tooltip-multiline\">...</small>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<ng-template #template let-displayValue=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-chip-row disableRipple=\"true\" selectable=\"false\" [matTooltip]=\"displayValue\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{{ displayValue }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</mat-chip-row>\r\n\t\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" class=\"na\" [ngStyle]=\"{ color: ((column.enumMetadata[rowValue] || {}).textColor || 'inherit') }\" [innerHtml]=\"(column.enumMetadata[rowValue]||{}).display\"></span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-template #noEnumMetadata>\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.multiple; else elseTemplate\">\r\n\t\t\t\t\t\t\t\t\t\t<div *ngFor=\"let item of rowValue; let i = index; let last = last\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i<2\" i18n=\"@@selection\">{item | enum:column.enumType:column.enumPrefix, select, type {type} other {{{item | enum:column.enumType:column.enumPrefix}}}}</small>\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"i==1 && rowValue?.length > 2\">, ...</small>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #elseTemplate>\r\n\t\t\t\t\t\t\t\t\t\t<span *ngIf=\"rowValue >= 0\" i18n=\"@@selection\">{rowValue | enum:column.enumType:column.enumPrefix, select, type {type} other {{{rowValue | enum:column.enumType:column.enumPrefix}}}}</span>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<ng-template #recursiveContainer let-columnNameSegments=\"segments\" let-formGroup=\"formGroup\" let-parentFormGroup=\"parentFormGroup\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formGroup\" [formGroup]=\"formGroup\">\r\n\t\t\t\t\t\t\t\t\t<!-- If the columnNameSegments array is empty, we're at the leaf node -->\r\n\t\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!columnNameSegments.length; else notLastSegment\">\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t\t\t\t<mat-slide-toggle [formControl]=\"formGroup\" (click)=\"$event.stopPropagation();\" (change)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):handleModelChange(column, parentFormGroup.value, parentFormGroup)\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.TextInput\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input matInput [formControl]=\"formGroup\" type=\"{{column.inputType}}\" autocomplete=\"none\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" [min]=\"column.inputMin?column.inputMin(parentFormGroup.value, parentFormGroup, context):null\" [max]=\"column.inputMax?column.inputMax(parentFormGroup.value, parentFormGroup, context):null\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t\t\t\t<mat-form-field *ngSwitchCase=\"ColumnType.Select\" appearance=\"outline\" subscriptSizing=\"dynamic\" dense-3 layout=\"column\" layout-align=\"center start\" (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t\t\t<vd-select [formControl]=\"formGroup\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:parentFormGroup.value:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [disableControl]=\"readonly || (column.disabled || (column.disable && column.disable(parentFormGroup.value, parentFormGroup, context)))\" (selectionChange)=\"column.change?column.change(parentFormGroup.value, parentFormGroup, context):patch(parentFormGroup.value, [column.name], rowValue, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t<ng-template #notLastSegment>\r\n\t\t\t\t\t\t\t\t\t\t<!-- If not the last segment, create a nested form group -->\r\n\t\t\t\t\t\t\t\t\t\t<ng-container [formGroupName]=\"columnNameSegments[0]\">\r\n\t\t\t\t\t\t\t\t\t\t\t<!-- Recursive call to handle nested segments -->\r\n\t\t\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: columnNameSegments.slice(1), parentFormGroup:formGroup, formGroup: formGroup.get(columnNameSegments[0])}\"></ng-container>\r\n\t\t\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\r\n\t\t\t\t\t\t\t<!-- #region Toggle column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Toggle\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"!formArray\">\r\n\t\t\t\t\t\t\t\t\t<mat-slide-toggle [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);handleModelChange(column, row, undefined);\" (click)=\"$event.stopPropagation();\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" color=\"accent\"></mat-slide-toggle>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Date column -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Date\">{{rowValue | date:column.shortDate?'dd.MM.yyyy':'dd.MM.yyyy HH:mm:ss'}}</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Text Input column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.TextInput\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<input matInput *ngIf=\"!formArray\" type=\"{{column.inputType}}\" autocomplete=\"none\" name=\"{{column.name}}{{rowIndex}}\" [ngModel]=\"row | property:column.name\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" [min]=\"column.inputMin?column.inputMin(row, undefined, context):null\" [max]=\"column.inputMax?column.inputMax(row, undefined, context):null\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);(column.change?column.change(row, undefined, context):patch(row, [column.name], $event, column.patchIncludes));\" [ngModelOptions]=\"{updateOn: 'blur'}\" (keydown.enter)=\"handleKeydownEnter($event)\">\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region VD-Select column -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Select\">\r\n\t\t\t\t\t\t\t\t<mat-form-field *ngIf=\"!formArray\" appearance=\"outline\" layout=\"column\" layout-align=\"center start\" subscriptSizing=\"dynamic\" dense-3 (click)=\"$event.stopPropagation();\">\r\n\t\t\t\t\t\t\t\t\t<vd-select *ngIf=\"!formArray\" name=\"{{column.name}}{{rowIndex}}\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column?.enumFilter | func:row:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [defaultOption]=\"column.defaultOption??true\" [ngModel]=\"row | property:column.name\" (ngModelChange)=\"setNestedProperty(row, column.name, $event);\" [disabled]=\"readonly || (column.disabled || (column.disable && column.disable(row, undefined, context)))\" (change)=\"column.change?column.change(row, undefined, context):patch(row, [column.name], $event.value, column.patchIncludes)\" (keydown.enter)=\"handleKeydownEnter($event)\"></vd-select>\r\n\t\t\t\t\t\t\t\t</mat-form-field>\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"formArray\" [formGroup]=\"$any(formArray.controls)[rowIndex] | formGroup\">\r\n\t\t\t\t\t\t\t\t\t<ng-container [ngTemplateOutlet]=\"recursiveContainer\" [ngTemplateOutletContext]=\"{segments: column.name.split('.'), formGroup: formArray.controls[rowIndex]}\"></ng-container>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Action -->\r\n\t\t\t\t\t\t\t<ng-container *ngSwitchCase=\"ColumnType.Action\">\r\n\t\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t\t<div id=\"menu-{{row.id}}\" style=\"visibility: hidden; position: fixed;\" #contextMenuTrigger=\"matMenuTrigger\" [matMenuTriggerFor]=\"menu.matMenu!\" *ngIf=\"menu?.matMenu && !row.locked && hasVisibleRowMenuItems(row, column)\"></div>\r\n\t\t\t\t\t\t\t\t\t<vd-dynamic-menu [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\" #menu></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Menu -->\r\n\t\t\t\t\t\t\t<ng-container *ngIf=\"column.menu\">\r\n\t\t\t\t\t\t\t\t<vd-dynamic-menu *ngSwitchCase=\"ColumnType.Menu\" [items]=\"[column.menu]\" [data]=\"row\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon -->\r\n\t\t\t\t\t\t\t<span *ngSwitchCase=\"ColumnType.Icon\" layout=\"row\" layout-align=\"start center\">\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.matIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\">{{handleExpression(column.icon?.matIcon!, row)}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.svgIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [svgIcon]=\"handleExpression(column.icon?.svgIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t\t<mat-icon *ngIf=\"column.icon?.fontIcon\" fontSet=\"{{column.icon?.fontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.icon?.cssClass??'', row)\" [fontIcon]=\"handleExpression(column.icon?.fontIcon!, row)!\"></mat-icon>\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region icon button -->\r\n\t\t\t\t\t\t\t<a mat-icon-button *ngSwitchCase=\"ColumnType.IconButton\" (click)=\"$event.stopPropagation();column.iconButton?.event?column.iconButton?.event(row, context):null\">\r\n\t\t\t\t\t\t\t\t<mat-icon fontSet=\"{{column.iconButton?.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"handleExpression(column.iconButton?.iconClass??'', row)\">{{handleExpression(column.iconButton?.icon??'radio_button_checked', row) || 'radio_button_checked'}}</mat-icon>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t\t<!-- #region Other column types -->\r\n\t\t\t\t\t\t\t<span *ngSwitchDefault [innerHtml]=\"rowValue??''\"></span>\r\n\t\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</ng-template>\r\n\t\t\t\t</td>\r\n\t\t\t</ng-container>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</ng-container>\r\n\r\n\t\t<!-- #region Filter row -->\r\n\t\t<ng-container *ngIf=\"dataSource && filterable\">\r\n\t\t\t<ng-container *ngFor=\"let column of columns$ | async\">\r\n\t\t\t\t<ng-container cdkColumnDef=\"filter.{{column.filter || column.name}}\" [sticky]=\"column.sticky\" [stickyEnd]=\"column.stickyEnd\">\r\n\t\t\t\t\t<th mat-header-cell *cdkHeaderCellDef [hidden]=\"column.hidden\" [ngStyle]=\"{maxWidth:column.maxWidth?(column.maxWidth+(column.maxWidthUnit || 'px')):null,minWidth:column.minWidth?(column.minWidth+(column.minWidthUnit || 'px')):null,width:column.width?(column.width+(column.widthUnit || 'px')):null}\" [ngClass]=\"{'gt-xs': column.display == Grid.Xs, 'gt-sm': column.display == Grid.Sm, 'gt-md': column.display == Grid.Md, 'gt-lg': column.display == Grid.Lg, 'gt-xl': column.display == Grid.Xl, 'gt-xxl': column.display == Grid.Xxl, 'hidden': column.display == Grid.None}\">\r\n\t\t\t\t\t\t<!-- #region Select filter -->\r\n\t\t\t\t\t\t<span *ngIf=\"(column.endpoint || column.enumType || column.options) else notSelectFilter\" filter-select [endpoint]=\"column.endpoint\" [enum]=\"column.enumType\" [enumMetadata]=\"column.enumMetadata\" [enumFilter]=\"column.enumFilter | func:{}:context\" [prefix]=\"column.enumPrefix\" [options]=\"column.options\" [text]=\"column.filterOptionText || 'name'\"></span>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Text filter -->\r\n\t\t\t\t\t\t<ng-template #notSelectFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"notSelectFilter && (column.type == ColumnType.Text || column.type == ColumnType.TextInput || column.type == ColumnType.Number) else notInputFilter\" filter-input [onlyNumber]=\"column.filterInputNumber??false\" [operator]=\"!useFilterOperator ? undefined : column.filterOperator\"></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Date filter -->\r\n\t\t\t\t\t\t<ng-template #notInputFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Date else notDateFilter\" filter-date></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t\t\t\t<!-- #region Action filter (clear) -->\r\n\t\t\t\t\t\t<ng-template #notDateFilter>\r\n\t\t\t\t\t\t\t<span *ngIf=\"column.type == ColumnType.Action\" filter-clear></span>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t<!-- #endregion -->\r\n\t\t\t\t\t</th>\r\n\t\t\t\t</ng-container>\r\n\t\t\t</ng-container>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Details column -->\r\n\t\t<ng-container cdkColumnDef=\"expandedDetail\">\r\n\t\t\t<td mat-cell *matCellDef=\"let row; let index = index\" [attr.colspan]=\"(displayedColumns$ | async)?.length\">\r\n\t\t\t\t<div class=\"row-detail\" [@detailExpand]=\"row == expandedRow ? 'expanded' : 'collapsed'\" #detailsTemplate>\r\n\t\t\t\t\t<ng-container *ngIf=\"templateRef && row === expandedRow\">\r\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"templateRef; context:{row: row, index: index, context: context}\"></ng-container>\r\n\t\t\t\t\t</ng-container>\r\n\t\t\t\t</div>\r\n\t\t\t</td>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Filter header -->\r\n\t\t<ng-container *ngIf=\"filterable\">\r\n\t\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedFilterColumns$ | async\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<tr mat-header-row *cdkHeaderRowDef=\"displayedColumns$ | async; sticky: stickyFilter\"></tr>\r\n\t\t<tr mat-row *cdkRowDef=\"let row; columns: displayedColumns$ | async; let index = dataIndex\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\" [class.expanded-row]=\"expandedRow === row\" (click)=\"handleRowClick(index, row)\" (contextmenu)=\"handleRowRightClick($event, row)\"></tr>\r\n\r\n\t\t<!-- #region Detrails row -->\r\n\t\t<ng-container *ngIf=\"detailsTemplate || templateRef\">\r\n\t\t\t<tr mat-row *cdkRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\" [ngClass]=\"rowNgClass?rowNgClass(row, context):null\"></tr>\r\n\t\t</ng-container>\r\n\t\t<!-- #endregion -->\r\n\t</table>\r\n</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Row shown when there is no matching data.-->\r\n<div class=\"mat-cell pad table-empty txt-italic\" *ngIf=\"!dataSource?.filteredData?.length && !dataSource?.total\" i18n=\"@@noResultsFound\">No results were found.</div>\r\n<!-- #endregion -->\r\n\r\n<!-- #region Debug value -->\r\n<code *ngIf=\"debugValue\">\r\n\t<pre>{{formValue | json}}</pre>\r\n</code>\r\n<!-- #endregion -->\r\n\r\n<div class=\"table-footer\" layout=\"row\">\r\n\t<ng-content select=\"[table-footer]\"></ng-content>\r\n\t<span flex></span>\r\n\t<mat-paginator *ngIf=\"paginable\" [pageSize]=\"pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n</div>", styles: ["::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-form-field .mat-form-field-wrapper{width:100%}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip{height:24px;margin-top:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:9px;padding-right:9px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip:last-child{margin-bottom:2px}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell .mat-mdc-chip *{font-size:.8rem}@media (max-width: 389px){::ng-deep .mat-mdc-table [gt-xs],::ng-deep .mat-mdc-table .gt-xs{display:none}::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 599px){::ng-deep .mat-mdc-table [gt-sm],::ng-deep .mat-mdc-table .gt-sm{display:none}::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 959px){::ng-deep .mat-mdc-table [gt-md],::ng-deep .mat-mdc-table .gt-md{display:none}::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1279px){::ng-deep .mat-mdc-table [gt-lg],::ng-deep .mat-mdc-table .gt-lg{display:none}::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1919px){::ng-deep .mat-mdc-table [gt-xl],::ng-deep .mat-mdc-table .gt-xl{display:none}::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}@media (max-width: 1979px){::ng-deep .mat-mdc-table [gt-xxl],::ng-deep .mat-mdc-table .gt-xxl{display:none}}.mat-table-container{width:100%;max-width:100%;overflow:auto}.mat-table-container .mat-mdc-header-cell,.mat-table-container .mat-mdc-footer-cell,.mat-table-container .mat-mdc-cell{min-width:80px;box-sizing:border-box}.mat-table-container .mat-mdc-header-row,.mat-table-container .mat-mdc-footer-row,.mat-table-container .mat-mdc-row{min-width:1920px}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-right{box-shadow:-3px 0 5px #0000001a}.mat-table-container.mat-table-sticky .mat-mdc-table-sticky-border-elem-left{box-shadow:3px 0 5px #0000001a}\n"] }]
17753
17892
  }], ctorParameters: () => [{ type: DynamicBuilder }, { type: i0.ChangeDetectorRef }], propDecorators: { table: [{
17754
17893
  type: ViewChild,
17755
17894
  args: ['table']
@@ -17763,6 +17902,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
17763
17902
  type: Input
17764
17903
  }], data: [{
17765
17904
  type: Input
17905
+ }], parentControl: [{
17906
+ type: Input
17907
+ }], entityObject: [{
17908
+ type: Input
17766
17909
  }], formArray: [{
17767
17910
  type: Input
17768
17911
  }], debugValue: [{
@@ -18114,12 +18257,12 @@ class VdDynamicTableConfigDialogComponent extends BaseComponent {
18114
18257
  updateColumns() {
18115
18258
  this.genericList?.updateColumns();
18116
18259
  }
18117
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDynamicTableConfigDialogComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: RxFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
18118
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDynamicTableConfigDialogComponent, isStandalone: true, selector: "vd-dynamic-table-config-dialog", usesInheritance: true, ngImport: i0, template: "<!-- Title bar with close button -->\r\n<div cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" class=\"pad-right-sm push-none\" layout=\"row\" layout-align=\"space-between center\" cdkDragHandle>\r\n <!-- Dialog title -->\r\n <span mat-dialog-title class=\"pad-left-sm push-left-sm\" i18n=\"@@tableConfiguration\" flex>Table configuration</span>\r\n\r\n <!-- Close button -->\r\n <button mat-icon-button (click)=\"dialogRef.close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n</div>\r\n\r\n<ng-container *ngIf=\"configForm\">\r\n <div class=\"pad-xs flex\" layout=\"column\">\r\n <div class=\"pad-bottom-sm\">\r\n <form *ngIf=\"configForm\" [formGroup]=\"configForm\" class=\"pad-xs\">\r\n <div layout-gt-sm=\"row\" layout=\"column\">\r\n <mat-checkbox formControlName=\"sticky\">\r\n <span i18n=\"@@sticky\">Sticky</span>\r\n <span class=\"description\" i18n=\"@@tableStickyDescription\"> - Select to make the table headers fixed during scrolling.</span>\r\n </mat-checkbox>\r\n <mat-form-field layout-margin flex *ngIf=\"false\">\r\n <mat-label i18n=\"@@tableWidth\">Table width</mat-label>\r\n <input matInput type=\"number\" formControlName=\"tableWidth\" />\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div layout-gt-sm=\"row\" class=\"dialog-container\" flex>\r\n <vd-dynamic-table #table [data]=\"columns\" [paginatorRef]=\"paginator\" [classType]=\"tableColumnConfigClassType\" [filterable]=\"true\" [paginable]=\"false\" [useFilterOperator]=\"false\" [pageSize]=\"10\" [context]=\"this\"></vd-dynamic-table>\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n <a mat-flat-button color=\"primary\" (click)=\"save()\" i18n=\"@@save\">Save</a>\r\n <a mat-button (click)=\"apply()\" i18n=\"@@apply\">Apply</a>\r\n <a mat-button (click)=\"dialogRef.close()\" i18n=\"@@close\">Close</a>\r\n <span flex></span>\r\n <mat-paginator #paginator [length]=\"table.dataSource.total\" [pageIndex]=\"table.dataSource.pageIndex\" [pageSize]=\"table.dataSource.pageSize\" [pageSizeOptions]=\"table.pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n </mat-dialog-actions>\r\n</ng-container>", styles: [".mat-mdc-dialog-title{cursor:move}.dialog-container{box-sizing:border-box;margin:0;overflow:auto;max-height:100%}.dialog-container mat-toolbar{background-color:var(--mat-sys-primary);min-height:52px;border-radius:inherit;border-bottom-right-radius:0;border-bottom-left-radius:0}.dialog-container vd-dynamic-table{max-height:100%!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.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$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: RxReactiveFormsModule }, { kind: "directive", type: AsyncValidationDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["async"] }, { kind: "directive", type: RxwebFormDirective, selector: "[formGroup],[rxwebForm]", inputs: ["formGroup", "rxwebForm"] }, { kind: "directive", type: RxFormControlDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["rxalpha", "rxalphaNumeric", "rxascii", "rxcompare", "rxcompose", "rxcontains", "rxcreditCard", "rxdataUri", "rxdifferent", "rxdigit", "rxemail", "rxendsWith", "rxeven", "rxextension", "rxfactor", "rxfileSize", "rxgreaterThanEqualTo", "rxgreaterThan", "rxhexColor", "rxjson", "rxlatitude", "rxlatLong", "rxleapYear", "rxlessThan", "rxlessThanEqualTo", "rxlongitude", "rxlowerCase", "rxmac", "rxmaxDate", "rxmaxLength", "rxmaxNumber", "rxminDate", "rxminLength", "rxminNumber", "rxnumeric", "rxodd", "rxpassword", "rxport", "rxprimeNumber", "rxrequired", "rxrange", "rxrule", "rxstartsWith", "rxtime", "rxupperCase", "rxurl", "rxunique", "rxnotEmpty", "rxcusip", "rxgrid", "rxdate"] }, { kind: "ngmodule", type:
18260
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDynamicTableConfigDialogComponent, deps: [{ token: i1$3.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: RxFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
18261
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdDynamicTableConfigDialogComponent, isStandalone: true, selector: "vd-dynamic-table-config-dialog", usesInheritance: true, ngImport: i0, template: "<!-- Title bar with close button -->\r\n<div cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" class=\"pad-right-sm push-none\" layout=\"row\" layout-align=\"space-between center\" cdkDragHandle>\r\n <!-- Dialog title -->\r\n <span mat-dialog-title class=\"pad-left-sm push-left-sm\" i18n=\"@@tableConfiguration\" flex>Table configuration</span>\r\n\r\n <!-- Close button -->\r\n <button mat-icon-button (click)=\"dialogRef.close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n</div>\r\n\r\n<ng-container *ngIf=\"configForm\">\r\n <div class=\"pad-xs flex\" layout=\"column\">\r\n <div class=\"pad-bottom-sm\">\r\n <form *ngIf=\"configForm\" [formGroup]=\"configForm\" class=\"pad-xs\">\r\n <div layout-gt-sm=\"row\" layout=\"column\">\r\n <mat-checkbox formControlName=\"sticky\">\r\n <span i18n=\"@@sticky\">Sticky</span>\r\n <span class=\"description\" i18n=\"@@tableStickyDescription\"> - Select to make the table headers fixed during scrolling.</span>\r\n </mat-checkbox>\r\n <mat-form-field layout-margin flex *ngIf=\"false\">\r\n <mat-label i18n=\"@@tableWidth\">Table width</mat-label>\r\n <input matInput type=\"number\" formControlName=\"tableWidth\" />\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div layout-gt-sm=\"row\" class=\"dialog-container\" flex>\r\n <vd-dynamic-table #table [data]=\"columns\" [paginatorRef]=\"paginator\" [classType]=\"tableColumnConfigClassType\" [filterable]=\"true\" [paginable]=\"false\" [useFilterOperator]=\"false\" [pageSize]=\"10\" [context]=\"this\"></vd-dynamic-table>\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n <a mat-flat-button color=\"primary\" (click)=\"save()\" i18n=\"@@save\">Save</a>\r\n <a mat-button (click)=\"apply()\" i18n=\"@@apply\">Apply</a>\r\n <a mat-button (click)=\"dialogRef.close()\" i18n=\"@@close\">Close</a>\r\n <span flex></span>\r\n <mat-paginator #paginator [length]=\"table.dataSource.total\" [pageIndex]=\"table.dataSource.pageIndex\" [pageSize]=\"table.dataSource.pageSize\" [pageSizeOptions]=\"table.pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n </mat-dialog-actions>\r\n</ng-container>", styles: [".mat-mdc-dialog-title{cursor:move}.dialog-container{box-sizing:border-box;margin:0;overflow:auto;max-height:100%}.dialog-container mat-toolbar{background-color:var(--mat-sys-primary);min-height:52px;border-radius:inherit;border-bottom-right-radius:0;border-bottom-left-radius:0}.dialog-container vd-dynamic-table{max-height:100%!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.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$2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: RxReactiveFormsModule }, { kind: "directive", type: AsyncValidationDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["async"] }, { kind: "directive", type: RxwebFormDirective, selector: "[formGroup],[rxwebForm]", inputs: ["formGroup", "rxwebForm"] }, { kind: "directive", type: RxFormControlDirective, selector: "[ngModel],[formControlName],[formControl]", inputs: ["rxalpha", "rxalphaNumeric", "rxascii", "rxcompare", "rxcompose", "rxcontains", "rxcreditCard", "rxdataUri", "rxdifferent", "rxdigit", "rxemail", "rxendsWith", "rxeven", "rxextension", "rxfactor", "rxfileSize", "rxgreaterThanEqualTo", "rxgreaterThan", "rxhexColor", "rxjson", "rxlatitude", "rxlatLong", "rxleapYear", "rxlessThan", "rxlessThanEqualTo", "rxlongitude", "rxlowerCase", "rxmac", "rxmaxDate", "rxmaxLength", "rxmaxNumber", "rxminDate", "rxminLength", "rxminNumber", "rxnumeric", "rxodd", "rxpassword", "rxport", "rxprimeNumber", "rxrequired", "rxrange", "rxrule", "rxstartsWith", "rxtime", "rxupperCase", "rxurl", "rxunique", "rxnotEmpty", "rxcusip", "rxgrid", "rxdate"] }, { kind: "ngmodule", type:
18119
18262
  //-----------------------
18120
- MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type:
18263
+ MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10$1.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type:
18121
18264
  //-----------------------
18122
- VdDynamicTableComponent, selector: "vd-dynamic-table", inputs: ["dataSource", "data", "formArray", "debugValue", "classType", "context", "dataSourceFilter", "static", "filterable", "sticky", "tableWidth", "useFilterOperator", "paginable", "selectable", "sortActive", "sortDirection", "stickyHeader", "stickyFilter", "columnSets", "rowNgClass", "detailsTemplate", "readonly", "selectAllFilter", "paginatorRef", "columns", "rowMenuItems", "rowAction", "excludedColumns", "pageSize", "pageSizeOptions"], outputs: ["rowClick"] }] });
18265
+ VdDynamicTableComponent, selector: "vd-dynamic-table", inputs: ["dataSource", "data", "parentControl", "entityObject", "formArray", "debugValue", "classType", "context", "dataSourceFilter", "static", "filterable", "sticky", "tableWidth", "useFilterOperator", "paginable", "selectable", "sortActive", "sortDirection", "stickyHeader", "stickyFilter", "columnSets", "rowNgClass", "detailsTemplate", "readonly", "selectAllFilter", "paginatorRef", "columns", "rowMenuItems", "rowAction", "excludedColumns", "pageSize", "pageSizeOptions"], outputs: ["rowClick"] }] });
18123
18266
  }
18124
18267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdDynamicTableConfigDialogComponent, decorators: [{
18125
18268
  type: Component,
@@ -18137,7 +18280,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
18137
18280
  //-----------------------
18138
18281
  VdDynamicTableComponent
18139
18282
  ], template: "<!-- Title bar with close button -->\r\n<div cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" class=\"pad-right-sm push-none\" layout=\"row\" layout-align=\"space-between center\" cdkDragHandle>\r\n <!-- Dialog title -->\r\n <span mat-dialog-title class=\"pad-left-sm push-left-sm\" i18n=\"@@tableConfiguration\" flex>Table configuration</span>\r\n\r\n <!-- Close button -->\r\n <button mat-icon-button (click)=\"dialogRef.close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n</div>\r\n\r\n<ng-container *ngIf=\"configForm\">\r\n <div class=\"pad-xs flex\" layout=\"column\">\r\n <div class=\"pad-bottom-sm\">\r\n <form *ngIf=\"configForm\" [formGroup]=\"configForm\" class=\"pad-xs\">\r\n <div layout-gt-sm=\"row\" layout=\"column\">\r\n <mat-checkbox formControlName=\"sticky\">\r\n <span i18n=\"@@sticky\">Sticky</span>\r\n <span class=\"description\" i18n=\"@@tableStickyDescription\"> - Select to make the table headers fixed during scrolling.</span>\r\n </mat-checkbox>\r\n <mat-form-field layout-margin flex *ngIf=\"false\">\r\n <mat-label i18n=\"@@tableWidth\">Table width</mat-label>\r\n <input matInput type=\"number\" formControlName=\"tableWidth\" />\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <div layout-gt-sm=\"row\" class=\"dialog-container\" flex>\r\n <vd-dynamic-table #table [data]=\"columns\" [paginatorRef]=\"paginator\" [classType]=\"tableColumnConfigClassType\" [filterable]=\"true\" [paginable]=\"false\" [useFilterOperator]=\"false\" [pageSize]=\"10\" [context]=\"this\"></vd-dynamic-table>\r\n </div>\r\n\r\n <mat-dialog-actions>\r\n <a mat-flat-button color=\"primary\" (click)=\"save()\" i18n=\"@@save\">Save</a>\r\n <a mat-button (click)=\"apply()\" i18n=\"@@apply\">Apply</a>\r\n <a mat-button (click)=\"dialogRef.close()\" i18n=\"@@close\">Close</a>\r\n <span flex></span>\r\n <mat-paginator #paginator [length]=\"table.dataSource.total\" [pageIndex]=\"table.dataSource.pageIndex\" [pageSize]=\"table.dataSource.pageSize\" [pageSizeOptions]=\"table.pageSizeOptions\" showFirstLastButtons=\"true\"></mat-paginator>\r\n </mat-dialog-actions>\r\n</ng-container>", styles: [".mat-mdc-dialog-title{cursor:move}.dialog-container{box-sizing:border-box;margin:0;overflow:auto;max-height:100%}.dialog-container mat-toolbar{background-color:var(--mat-sys-primary);min-height:52px;border-radius:inherit;border-bottom-right-radius:0;border-bottom-left-radius:0}.dialog-container vd-dynamic-table{max-height:100%!important}\n"] }]
18140
- }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i1.MatDialogRef }, { type: undefined, decorators: [{
18283
+ }], ctorParameters: () => [{ type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i1.MatDialogRef }, { type: undefined, decorators: [{
18141
18284
  type: Inject,
18142
18285
  args: [MAT_DIALOG_DATA]
18143
18286
  }] }, { type: RxFormBuilder }] });
@@ -18590,7 +18733,14 @@ class GenericListComponent extends BaseComponent {
18590
18733
  /* Apply static field filters */
18591
18734
  this.dataSource.staticFieldFilters = staticFieldFilters || {};
18592
18735
  /* Update items from the data source */
18593
- this.dataSource.connect(undefined).subscribe((x) => this.items = x);
18736
+ this.dataSource.connect(undefined).subscribe({
18737
+ next: (items) => {
18738
+ this.items = items;
18739
+ this.changeDetectorRef.detectChanges();
18740
+ /* Call the onAfterItemsLoaded method if defined */
18741
+ this.onAfterItemsLoaded();
18742
+ }
18743
+ });
18594
18744
  /* Add row menu items if the table is not dynamic */
18595
18745
  if (!this.dynamicTable) {
18596
18746
  this.addRowMenuItems();
@@ -18654,6 +18804,11 @@ class GenericListComponent extends BaseComponent {
18654
18804
  this.onEdit(entity, context);
18655
18805
  }
18656
18806
  else {
18807
+ /* If the item is not editable, log a warning and return */
18808
+ if (this.canEditItem(entity) === false) {
18809
+ this.log('This item is not editable.');
18810
+ return;
18811
+ }
18657
18812
  /* If onEdit is not provided, construct the edit route and navigate */
18658
18813
  const hasParams = Object.keys(this.route.snapshot.queryParams).length > 0;
18659
18814
  /* Navigate to the edit page with the entity's id and optional query parameters */
@@ -19051,6 +19206,12 @@ class GenericListComponent extends BaseComponent {
19051
19206
  */
19052
19207
  hasSelectedRows() { return this.dataSource?.selectionModel?.hasValue(); }
19053
19208
  ;
19209
+ /**
19210
+ * Hook method called after the items list has been loaded.
19211
+ * Subclasses can override this to perform actions like setting
19212
+ * a subtitle, transforming data, or triggering follow-up requests.
19213
+ */
19214
+ onAfterItemsLoaded() { }
19054
19215
  /**
19055
19216
  * Event emitted when the entity has been deleted.
19056
19217
  */
@@ -19132,7 +19293,7 @@ class GenericListComponent extends BaseComponent {
19132
19293
  }
19133
19294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: GenericListComponent, decorators: [{
19134
19295
  type: Directive
19135
- }], ctorParameters: () => [{ type: undefined }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: undefined }], propDecorators: { paginator: [{
19296
+ }], ctorParameters: () => [{ type: undefined }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: undefined }], propDecorators: { paginator: [{
19136
19297
  type: ViewChild,
19137
19298
  args: [MatPaginator, { static: true }]
19138
19299
  }], sort: [{
@@ -19326,7 +19487,7 @@ class GenericEmbeddedListComponent extends GenericListComponent {
19326
19487
  }
19327
19488
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: GenericEmbeddedListComponent, decorators: [{
19328
19489
  type: Directive
19329
- }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: RxFormBuilder }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
19490
+ }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: RxFormBuilder }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
19330
19491
  type: Input
19331
19492
  }], parent: [{
19332
19493
  type: Input
@@ -20374,7 +20535,7 @@ class GenericFormBaseComponent extends BaseComponent {
20374
20535
  }
20375
20536
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: GenericFormBaseComponent, decorators: [{
20376
20537
  type: Directive
20377
- }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { id: [{
20538
+ }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { id: [{
20378
20539
  type: Input
20379
20540
  }], _item: [{
20380
20541
  type: Input
@@ -20439,7 +20600,7 @@ class GenericFormComponent extends GenericFormBaseComponent {
20439
20600
  }
20440
20601
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: GenericFormComponent, decorators: [{
20441
20602
  type: Directive
20442
- }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
20603
+ }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
20443
20604
  type: Input
20444
20605
  }] } });
20445
20606
 
@@ -20530,10 +20691,31 @@ class GenericReactiveFormComponent extends GenericFormBaseComponent {
20530
20691
  }
20531
20692
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: GenericReactiveFormComponent, decorators: [{
20532
20693
  type: Directive
20533
- }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
20694
+ }], ctorParameters: () => [{ type: i0.Type }, { type: undefined }, { type: i1$3.ActivatedRoute }, { type: i0.ChangeDetectorRef }], propDecorators: { form: [{
20534
20695
  type: Input
20535
20696
  }] } });
20536
20697
 
20698
+ /* Injectable guard registered globally in the application */
20699
+ class ConfirmExitGuard {
20700
+ /**
20701
+ * Determines whether the current component allows navigation away from it.
20702
+ * Delegates to the component's canDeactivate method if available.
20703
+ *
20704
+ * @param component The component that may be deactivated
20705
+ * @returns A boolean, Promise, or Observable indicating if deactivation is allowed
20706
+ */
20707
+ canDeactivate(component) {
20708
+ /* If the component implements canDeactivate, call it; otherwise, allow deactivation by default */
20709
+ return component.canDeactivate ? component.canDeactivate() : true;
20710
+ }
20711
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ConfirmExitGuard, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
20712
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ConfirmExitGuard, providedIn: 'root' });
20713
+ }
20714
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ConfirmExitGuard, decorators: [{
20715
+ type: Injectable,
20716
+ args: [{ providedIn: 'root' }]
20717
+ }] });
20718
+
20537
20719
  /**
20538
20720
  * Pass untouched request through to the next request handler.
20539
20721
  */
@@ -20907,13 +21089,13 @@ class PrintService {
20907
21089
  this.router.navigate([{ outlets: { print: null } }]);
20908
21090
  });
20909
21091
  }
20910
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: PrintService, deps: [{ token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Injectable });
21092
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: PrintService, deps: [{ token: i1$3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
20911
21093
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: PrintService, providedIn: 'root' });
20912
21094
  }
20913
21095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: PrintService, decorators: [{
20914
21096
  type: Injectable,
20915
21097
  args: [{ providedIn: 'root' }]
20916
- }], ctorParameters: () => [{ type: i1$2.Router }] });
21098
+ }], ctorParameters: () => [{ type: i1$3.Router }] });
20917
21099
 
20918
21100
  /**
20919
21101
  * VdAutocompleteOptionDirective class
@@ -21109,6 +21291,21 @@ class VdChipsComponent extends AbstractMatFormField {
21109
21291
  this.key = customValue && this.key == 'id' ? 'name' : this.key;
21110
21292
  this.stateChanges.next();
21111
21293
  }
21294
+ /**
21295
+ * Gets the parent control of the current RxFormControl.
21296
+ * Can be either a FormGroup, FormArray, or null if not present.
21297
+ * @type {FormGroup | FormArray | null}
21298
+ */
21299
+ get parentControl() {
21300
+ return this.ngControl.control.parent;
21301
+ }
21302
+ /**
21303
+ * Gets the associated entity object from the underlying RxFormControl.
21304
+ * @type {any}
21305
+ */
21306
+ get entityObject() {
21307
+ return this.ngControl.control.entityObject;
21308
+ }
21112
21309
  /**
21113
21310
  * Current context for the component.
21114
21311
  */
@@ -21512,6 +21709,14 @@ class VdChipsComponent extends AbstractMatFormField {
21512
21709
  super.ngOnDestroy();
21513
21710
  this.dataSourceSubscription?.unsubscribe();
21514
21711
  }
21712
+ /**
21713
+ * Log to console
21714
+ * @param message
21715
+ * @param optionalParams
21716
+ */
21717
+ log(message, ...optionalParams) {
21718
+ console.log(message, optionalParams);
21719
+ }
21515
21720
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdChipsComponent, deps: [{ token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
21516
21721
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdChipsComponent, isStandalone: true, selector: "vd-chips", inputs: { classType: "classType", chips: "chips", endpoint: "endpoint", params: "params", projection: "projection", paginated: "paginated", customValue: "customValue", context: "context", key: "key", searchField: "searchField", searchFields: "searchFields", filters: "filters", removable: "removable", selectFirst: "selectFirst", debounce: "debounce", autocompleteCssClass: "autocompleteCssClass", suffixButtons: "suffixButtons" }, outputs: { initSelect: "initSelect", selected: "selected", cleared: "cleared", onLaunch: "launch", chipFocus: "chipFocus" }, providers: [
21517
21722
  { provide: MatFormFieldControl, useExisting: VdChipsComponent },
@@ -21519,7 +21724,7 @@ class VdChipsComponent extends AbstractMatFormField {
21519
21724
  provide: MAT_AUTOCOMPLETE_DEFAULT_OPTIONS,
21520
21725
  useValue: { overlayPanelClass: 'vd-chips-autocomplete' }
21521
21726
  }
21522
- ], queries: [{ propertyName: "chipTemplate", first: true, predicate: VdChipDirective, descendants: true }, { propertyName: "autocompleteOptionTemplate", first: true, predicate: VdAutocompleteOptionDirective, descendants: true }], viewQueries: [{ propertyName: "dynamicTable", first: true, predicate: VdDynamicTableComponent, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-chip-grid #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<mat-chip-row *ngFor=\"let chip of chips; let first = first; let index = index\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t<span class=\"vd-chip-content\">\r\n\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t</span>\r\n\t\t<a matChipTrailingIcon *ngFor=\"let button of suffixButtons; let first = first\" [hidden]=\"button.hide && button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">{{button.icon}}</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">launch</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"!readonly\" (click)=\"handleRemovedEvent()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t</a>\r\n\t</mat-chip-row>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" (focus)=\"connect()\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [matAutocompleteConnectedTo]=\"origin\" [formControl]=\"autoCompleteChipList\" (blur)=\"customValue && addOnBlur($event)\" #filterInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Reset button -->\r\n\t<a trailingIcon *ngIf=\"(!value || empty) && !readonly && !disabled\" class=\"mat-mdc-select-arrow\" (click)=\"filterInput.value = ''\">\r\n\t\t<svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" class=\"ng-tns-c184-21\">\r\n\t\t\t<path d=\"M7 10l5 5 5-5z\" class=\"ng-tns-c184-21\"></path>\r\n\t\t</svg>\r\n\t</a>\r\n\t<!-- #endregion -->\r\n</mat-chip-grid>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event.option.value, filterInput)\" class=\"{{autocompleteCssClass}}{{classType?' table-autocomplete':''}}\">\r\n\t<ng-template *ngIf=\"!classType && opened\" let-item let-first=\"first\" ngFor [ngForOf]=\"dataSource?.items\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{item}}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n\t<ng-container *ngIf=\"classType && opened\">\r\n\t\t<mat-option hide=\"true\"></mat-option>\r\n\t\t<vd-dynamic-table [dataSource]=\"dataSource\" [classType]=\"classType\" [stickyHeader]=\"true\" (rowClick)=\"addChip($event, filterInput)\" matSort [sortActive]=\"sortActive||'id'\" [sortDirection]=\"sortDirection\"></vd-dynamic-table>\r\n\t</ng-container>\r\n\t<div class=\"vd-chips-paginator\">\r\n\t\t<mat-divider></mat-divider>\r\n\t\t<mat-paginator [length]=\"dataSource?.total\" [pageIndex]=\"dataSource?.pageIndex\" [pageSize]=\"dataSource?.pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\" hidePageSize=\"true\"></mat-paginator>\r\n\t</div>\r\n</mat-autocomplete>\r\n<!-- #endregion -->\r\n\r\n<div matAutocompleteOrigin #origin=\"matAutocompleteOrigin\" class=\"autocomplete-origin\"></div>", styles: [":host ::ng-deep .mat-mdc-chip-set{width:100%}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0!important;margin-right:0;align-items:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center;background-color:transparent!important;margin-right:0!important;margin-left:0!important;padding:0!important;margin:0;height:initial}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mdc-evolution-chip--disabled{opacity:.6;pointer-events:all}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action{justify-content:left}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:0}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__cell--trailing{margin-right:-10px;display:flex}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-mdc-chip-focus-overlay{background-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-icon{cursor:pointer;font-size:1.2em;opacity:.8}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mat-chip-disabled{opacity:.6}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-content{-ms-flex-positive:1!important;flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch.removable{right:34px}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__action--primary:before,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary:before{border-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__text-label,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:inherit!important}:host ::ng-deep .autocomplete-origin{position:absolute;width:calc(100% + 28px);bottom:0;height:2px;margin-left:-14px}mat-spinner{margin-top:-9px;margin-right:6px}.mat-mdc-form-field-infix{display:flex}::ng-deep .vd-chips-autocomplete .mat-mdc-autocomplete-panel{padding:0!important}::ng-deep .vd-chips-autocomplete .table-autocomplete{overflow:hidden}::ng-deep .vd-chips-autocomplete .table-autocomplete .mat-table-container{height:calc(100% - 56px)!important;max-height:100vh!important}::ng-deep .vd-chips-autocomplete .vd-chips-paginator{position:sticky;bottom:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container{padding:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container .mat-mdc-paginator-range-actions .mat-mdc-paginator-range-label{margin:0 16px 0 24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4$2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i4$2.MatAutocompleteOrigin, selector: "[matAutocompleteOrigin]", exportAs: ["matAutocompleteOrigin"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i5$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "component", type: i5$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: i5$1.MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: VdDynamicTableComponent, selector: "vd-dynamic-table", inputs: ["dataSource", "data", "formArray", "debugValue", "classType", "context", "dataSourceFilter", "static", "filterable", "sticky", "tableWidth", "useFilterOperator", "paginable", "selectable", "sortActive", "sortDirection", "stickyHeader", "stickyFilter", "columnSets", "rowNgClass", "detailsTemplate", "readonly", "selectAllFilter", "paginatorRef", "columns", "rowMenuItems", "rowAction", "excludedColumns", "pageSize", "pageSizeOptions"], outputs: ["rowClick"] }] });
21727
+ ], queries: [{ propertyName: "chipTemplate", first: true, predicate: VdChipDirective, descendants: true }, { propertyName: "autocompleteOptionTemplate", first: true, predicate: VdAutocompleteOptionDirective, descendants: true }], viewQueries: [{ propertyName: "dynamicTable", first: true, predicate: VdDynamicTableComponent, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "autocompleteTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-chip-grid #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<mat-chip-row *ngFor=\"let chip of chips; let first = first; let index = index\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t<span class=\"vd-chip-content\">\r\n\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t</span>\r\n\t\t<a matChipTrailingIcon *ngFor=\"let button of suffixButtons; let first = first\" [hidden]=\"button.hide && button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">{{button.icon}}</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">launch</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"!readonly\" (click)=\"handleRemovedEvent()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t</a>\r\n\t</mat-chip-row>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" (focus)=\"connect()\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [matAutocompleteConnectedTo]=\"origin\" [formControl]=\"autoCompleteChipList\" (blur)=\"customValue && addOnBlur($event)\" #filterInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Reset button -->\r\n\t<a trailingIcon *ngIf=\"(!value || empty) && !readonly && !disabled\" class=\"mat-mdc-select-arrow\" (click)=\"filterInput.value = ''\">\r\n\t\t<svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" class=\"ng-tns-c184-21\">\r\n\t\t\t<path d=\"M7 10l5 5 5-5z\" class=\"ng-tns-c184-21\"></path>\r\n\t\t</svg>\r\n\t</a>\r\n\t<!-- #endregion -->\r\n</mat-chip-grid>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event.option.value, filterInput)\" class=\"{{autocompleteCssClass}}{{classType?' table-autocomplete':''}}\">\r\n\t<ng-template *ngIf=\"!classType && opened\" let-item let-first=\"first\" ngFor [ngForOf]=\"dataSource?.items\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{item}}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n\t<ng-container *ngIf=\"classType && opened\">\r\n\t\t<mat-option hide=\"true\"></mat-option>\r\n\t\t<vd-dynamic-table [dataSource]=\"dataSource\" [classType]=\"classType\" [entityObject]=\"entityObject\" [parentControl]=\"parentControl\" [context]=\"context\" [stickyHeader]=\"true\" (rowClick)=\"addChip($event, filterInput)\" matSort [sortActive]=\"sortActive||'id'\" [sortDirection]=\"sortDirection\"></vd-dynamic-table>\r\n\t</ng-container>\r\n\t<div class=\"vd-chips-paginator\">\r\n\t\t<mat-divider></mat-divider>\r\n\t\t<mat-paginator [length]=\"dataSource?.total\" [pageIndex]=\"dataSource?.pageIndex\" [pageSize]=\"dataSource?.pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\" hidePageSize=\"true\"></mat-paginator>\r\n\t</div>\r\n</mat-autocomplete>\r\n<!-- #endregion -->\r\n\r\n<div matAutocompleteOrigin #origin=\"matAutocompleteOrigin\" class=\"autocomplete-origin\"></div>", styles: [":host ::ng-deep .mat-mdc-chip-set{width:100%}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0!important;margin-right:0;align-items:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center;background-color:transparent!important;margin-right:0!important;margin-left:0!important;padding:0!important;margin:0;height:initial}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mdc-evolution-chip--disabled{opacity:.6;pointer-events:all}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action{justify-content:left}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:0}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__cell--trailing{margin-right:-10px;display:flex}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-mdc-chip-focus-overlay{background-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-icon{cursor:pointer;font-size:1.2em;opacity:.8}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mat-chip-disabled{opacity:.6}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-content{-ms-flex-positive:1!important;flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch.removable{right:34px}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__action--primary:before,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary:before{border-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__text-label,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:inherit!important}:host ::ng-deep .autocomplete-origin{position:absolute;width:calc(100% + 28px);bottom:0;height:2px;margin-left:-14px}mat-spinner{margin-top:-9px;margin-right:6px}.mat-mdc-form-field-infix{display:flex}::ng-deep .vd-chips-autocomplete .mat-mdc-autocomplete-panel{padding:0!important}::ng-deep .vd-chips-autocomplete .table-autocomplete{overflow:hidden}::ng-deep .vd-chips-autocomplete .table-autocomplete .mat-table-container{height:calc(100% - 56px)!important;max-height:100vh!important}::ng-deep .vd-chips-autocomplete .vd-chips-paginator{position:sticky;bottom:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container{padding:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container .mat-mdc-paginator-range-actions .mat-mdc-paginator-range-label{margin:0 16px 0 24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4$2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i4$2.MatAutocompleteOrigin, selector: "[matAutocompleteOrigin]", exportAs: ["matAutocompleteOrigin"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i5$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "component", type: i5$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: i5$1.MatChipTrailingIcon, selector: "mat-chip-trailing-icon, [matChipTrailingIcon]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: VdDynamicTableComponent, selector: "vd-dynamic-table", inputs: ["dataSource", "data", "parentControl", "entityObject", "formArray", "debugValue", "classType", "context", "dataSourceFilter", "static", "filterable", "sticky", "tableWidth", "useFilterOperator", "paginable", "selectable", "sortActive", "sortDirection", "stickyHeader", "stickyFilter", "columnSets", "rowNgClass", "detailsTemplate", "readonly", "selectAllFilter", "paginatorRef", "columns", "rowMenuItems", "rowAction", "excludedColumns", "pageSize", "pageSizeOptions"], outputs: ["rowClick"] }] });
21523
21728
  }
21524
21729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdChipsComponent, decorators: [{
21525
21730
  type: Component,
@@ -21539,7 +21744,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
21539
21744
  MatIconModule,
21540
21745
  MatInputModule,
21541
21746
  VdDynamicTableComponent,
21542
- ], template: "<mat-chip-grid #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<mat-chip-row *ngFor=\"let chip of chips; let first = first; let index = index\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t<span class=\"vd-chip-content\">\r\n\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t</span>\r\n\t\t<a matChipTrailingIcon *ngFor=\"let button of suffixButtons; let first = first\" [hidden]=\"button.hide && button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">{{button.icon}}</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">launch</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"!readonly\" (click)=\"handleRemovedEvent()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t</a>\r\n\t</mat-chip-row>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" (focus)=\"connect()\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [matAutocompleteConnectedTo]=\"origin\" [formControl]=\"autoCompleteChipList\" (blur)=\"customValue && addOnBlur($event)\" #filterInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Reset button -->\r\n\t<a trailingIcon *ngIf=\"(!value || empty) && !readonly && !disabled\" class=\"mat-mdc-select-arrow\" (click)=\"filterInput.value = ''\">\r\n\t\t<svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" class=\"ng-tns-c184-21\">\r\n\t\t\t<path d=\"M7 10l5 5 5-5z\" class=\"ng-tns-c184-21\"></path>\r\n\t\t</svg>\r\n\t</a>\r\n\t<!-- #endregion -->\r\n</mat-chip-grid>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event.option.value, filterInput)\" class=\"{{autocompleteCssClass}}{{classType?' table-autocomplete':''}}\">\r\n\t<ng-template *ngIf=\"!classType && opened\" let-item let-first=\"first\" ngFor [ngForOf]=\"dataSource?.items\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{item}}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n\t<ng-container *ngIf=\"classType && opened\">\r\n\t\t<mat-option hide=\"true\"></mat-option>\r\n\t\t<vd-dynamic-table [dataSource]=\"dataSource\" [classType]=\"classType\" [stickyHeader]=\"true\" (rowClick)=\"addChip($event, filterInput)\" matSort [sortActive]=\"sortActive||'id'\" [sortDirection]=\"sortDirection\"></vd-dynamic-table>\r\n\t</ng-container>\r\n\t<div class=\"vd-chips-paginator\">\r\n\t\t<mat-divider></mat-divider>\r\n\t\t<mat-paginator [length]=\"dataSource?.total\" [pageIndex]=\"dataSource?.pageIndex\" [pageSize]=\"dataSource?.pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\" hidePageSize=\"true\"></mat-paginator>\r\n\t</div>\r\n</mat-autocomplete>\r\n<!-- #endregion -->\r\n\r\n<div matAutocompleteOrigin #origin=\"matAutocompleteOrigin\" class=\"autocomplete-origin\"></div>", styles: [":host ::ng-deep .mat-mdc-chip-set{width:100%}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0!important;margin-right:0;align-items:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center;background-color:transparent!important;margin-right:0!important;margin-left:0!important;padding:0!important;margin:0;height:initial}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mdc-evolution-chip--disabled{opacity:.6;pointer-events:all}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action{justify-content:left}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:0}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__cell--trailing{margin-right:-10px;display:flex}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-mdc-chip-focus-overlay{background-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-icon{cursor:pointer;font-size:1.2em;opacity:.8}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mat-chip-disabled{opacity:.6}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-content{-ms-flex-positive:1!important;flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch.removable{right:34px}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__action--primary:before,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary:before{border-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__text-label,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:inherit!important}:host ::ng-deep .autocomplete-origin{position:absolute;width:calc(100% + 28px);bottom:0;height:2px;margin-left:-14px}mat-spinner{margin-top:-9px;margin-right:6px}.mat-mdc-form-field-infix{display:flex}::ng-deep .vd-chips-autocomplete .mat-mdc-autocomplete-panel{padding:0!important}::ng-deep .vd-chips-autocomplete .table-autocomplete{overflow:hidden}::ng-deep .vd-chips-autocomplete .table-autocomplete .mat-table-container{height:calc(100% - 56px)!important;max-height:100vh!important}::ng-deep .vd-chips-autocomplete .vd-chips-paginator{position:sticky;bottom:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container{padding:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container .mat-mdc-paginator-range-actions .mat-mdc-paginator-range-label{margin:0 16px 0 24px}\n"] }]
21747
+ ], template: "<mat-chip-grid #chipList [required]=\"required\" [disabled]=\"readonly\">\r\n\t<!-- #region Chips -->\r\n\t<mat-chip-row *ngFor=\"let chip of chips; let first = first; let index = index\" [removable]=\"!readonly\" (removed)=\"handleRemovedEvent()\" disableRipple>\r\n\t\t<span class=\"vd-chip-content\">\r\n\t\t\t<span *ngIf=\"!chipTemplate?.templateRef\">\r\n\t\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{ chip }}</span>\r\n\t\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: chip }\"></ng-template>\r\n\t\t\t</span>\r\n\t\t\t<ng-template *ngIf=\"chipTemplate?.templateRef\" [ngTemplateOutlet]=\"chipTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ chip: chip }\"></ng-template>\r\n\t\t</span>\r\n\t\t<a matChipTrailingIcon *ngFor=\"let button of suffixButtons; let first = first\" [hidden]=\"button.hide && button.hide(chips[0], context)\" (click)=\"$event.stopPropagation(); button.event && button.event(chips[0], context)\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">{{button.icon}}</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"(onLaunch?.observers?.length??0) > 0\" (click)=\"$event.stopPropagation(); handleLaunchClicked()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">launch</mat-icon>\r\n\t\t</a>\r\n\t\t<a matChipTrailingIcon *ngIf=\"!readonly\" (click)=\"handleRemovedEvent()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">close</mat-icon>\r\n\t\t</a>\r\n\t</mat-chip-row>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Search box -->\r\n\t<input matInput [hidden]=\"value && !empty\" placeholder=\"{{placeholder}}\" (focus)=\"connect()\" [readonly]=\"readonly\" [matChipInputFor]=\"chipList\" [matAutocomplete]=\"auto\" [matAutocompleteConnectedTo]=\"origin\" [formControl]=\"autoCompleteChipList\" (blur)=\"customValue && addOnBlur($event)\" #filterInput />\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Reset button -->\r\n\t<a trailingIcon *ngIf=\"(!value || empty) && !readonly && !disabled\" class=\"mat-mdc-select-arrow\" (click)=\"filterInput.value = ''\">\r\n\t\t<svg viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\" focusable=\"false\" class=\"ng-tns-c184-21\">\r\n\t\t\t<path d=\"M7 10l5 5 5-5z\" class=\"ng-tns-c184-21\"></path>\r\n\t\t</svg>\r\n\t</a>\r\n\t<!-- #endregion -->\r\n</mat-chip-grid>\r\n\r\n<!-- #region Autocomplete -->\r\n<mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"addChip($event.option.value, filterInput)\" class=\"{{autocompleteCssClass}}{{classType?' table-autocomplete':''}}\">\r\n\t<ng-template *ngIf=\"!classType && opened\" let-item let-first=\"first\" ngFor [ngForOf]=\"dataSource?.items\">\r\n\t\t<mat-option [value]=\"item\">\r\n\t\t\t<span *ngIf=\"!autocompleteOptionTemplate?.templateRef\">{{item}}</span>\r\n\t\t\t<ng-template *ngIf=\"autocompleteOptionTemplate?.templateRef\" [ngTemplateOutlet]=\"autocompleteOptionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: item }\"></ng-template>\r\n\t\t</mat-option>\r\n\t</ng-template>\r\n\t<ng-container *ngIf=\"classType && opened\">\r\n\t\t<mat-option hide=\"true\"></mat-option>\r\n\t\t<vd-dynamic-table [dataSource]=\"dataSource\" [classType]=\"classType\" [entityObject]=\"entityObject\" [parentControl]=\"parentControl\" [context]=\"context\" [stickyHeader]=\"true\" (rowClick)=\"addChip($event, filterInput)\" matSort [sortActive]=\"sortActive||'id'\" [sortDirection]=\"sortDirection\"></vd-dynamic-table>\r\n\t</ng-container>\r\n\t<div class=\"vd-chips-paginator\">\r\n\t\t<mat-divider></mat-divider>\r\n\t\t<mat-paginator [length]=\"dataSource?.total\" [pageIndex]=\"dataSource?.pageIndex\" [pageSize]=\"dataSource?.pageSize\" [pageSizeOptions]=\"pageSizeOptions\" showFirstLastButtons=\"true\" hidePageSize=\"true\"></mat-paginator>\r\n\t</div>\r\n</mat-autocomplete>\r\n<!-- #endregion -->\r\n\r\n<div matAutocompleteOrigin #origin=\"matAutocompleteOrigin\" class=\"autocomplete-origin\"></div>", styles: [":host ::ng-deep .mat-mdc-chip-set{width:100%}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips{margin-left:0!important;margin-right:0;align-items:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip{display:flex;flex-direction:row;width:100%;padding:0 5px;justify-content:center;background-color:transparent!important;margin-right:0!important;margin-left:0!important;padding:0!important;margin:0;height:initial}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mdc-evolution-chip--disabled{opacity:.6;pointer-events:all}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action{justify-content:left}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__action--primary{padding-left:0}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mdc-evolution-chip__cell--trailing{margin-right:-10px;display:flex}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-mdc-chip-focus-overlay{background-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .mat-icon{cursor:pointer;font-size:1.2em;opacity:.8}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip.mat-chip-disabled{opacity:.6}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-content{-ms-flex-positive:1!important;flex-grow:1!important;font-weight:initial;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;justify-content:center}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch{font-size:18px;position:absolute;right:4px;top:0;cursor:pointer}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip-set__chips .mat-mdc-chip .vd-chip-launch.removable{right:34px}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__action--primary:before,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__action--primary:before{border-color:transparent!important}:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip .mdc-evolution-chip__text-label,:host ::ng-deep .mat-mdc-chip-set .mdc-evolution-chip--disabled .mdc-evolution-chip__text-label{color:inherit!important}:host ::ng-deep .autocomplete-origin{position:absolute;width:calc(100% + 28px);bottom:0;height:2px;margin-left:-14px}mat-spinner{margin-top:-9px;margin-right:6px}.mat-mdc-form-field-infix{display:flex}::ng-deep .vd-chips-autocomplete .mat-mdc-autocomplete-panel{padding:0!important}::ng-deep .vd-chips-autocomplete .table-autocomplete{overflow:hidden}::ng-deep .vd-chips-autocomplete .table-autocomplete .mat-table-container{height:calc(100% - 56px)!important;max-height:100vh!important}::ng-deep .vd-chips-autocomplete .vd-chips-paginator{position:sticky;bottom:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container{padding:0}::ng-deep .vd-chips-autocomplete .vd-chips-paginator .mat-mdc-paginator .mat-mdc-paginator-container .mat-mdc-paginator-range-actions .mat-mdc-paginator-range-label{margin:0 16px 0 24px}\n"] }]
21543
21748
  }], ctorParameters: () => [{ type: VdMediaService }], propDecorators: { dynamicTable: [{
21544
21749
  type: ViewChild,
21545
21750
  args: [VdDynamicTableComponent, { static: false }]
@@ -21867,7 +22072,7 @@ class VdFileInputComponent {
21867
22072
  this.stateChanges.complete();
21868
22073
  this.fm.stopMonitoring(this._elementRef.nativeElement);
21869
22074
  }
21870
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdFileInputComponent, deps: [{ token: i1$1.NgControl }, { token: i2$4.FocusMonitor }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
22075
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdFileInputComponent, deps: [{ token: i1$2.NgControl }, { token: i2$4.FocusMonitor }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
21871
22076
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdFileInputComponent, isStandalone: true, selector: "[vd-file-input]", inputs: { accept: "accept", placeholder: "placeholder", required: "required", multiple: "multiple", disabled: "disabled", errorState: "errorState" }, outputs: { onSelect: "select", onClear: "clear" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: VdFileInputComponent }], viewQueries: [{ propertyName: "_inputElement", first: true, predicate: ["fileElement"], descendants: true, static: true }, { propertyName: "_fileInputElement", first: true, predicate: ["fileInput"], descendants: true, static: true }], ngImport: i0, template: `
21872
22077
  <div layout="row" flex>
21873
22078
  <input matInput #fileElement [(ngModel)]="value" (click)="fileInput.click(); $event.stopPropagation()" readonly="true" [placeholder]="placeholder" [disabled]="disabled" [required]="required">
@@ -21880,7 +22085,7 @@ class VdFileInputComponent {
21880
22085
  <mat-icon fontSet="material-symbols-outlined">close</mat-icon>
21881
22086
  </button>
21882
22087
  </div>
21883
- </div>`, isInline: true, styles: [".btn-suffix .mat-mdc-icon-button{position:absolute;right:-16px;top:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
22088
+ </div>`, isInline: true, styles: [".btn-suffix .mat-mdc-icon-button{position:absolute;right:-16px;top:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
21884
22089
  }
21885
22090
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdFileInputComponent, decorators: [{
21886
22091
  type: Component,
@@ -21903,7 +22108,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
21903
22108
  MatIconModule,
21904
22109
  MatIconButton
21905
22110
  ], providers: [{ provide: MatFormFieldControl, useExisting: VdFileInputComponent }], styles: [".btn-suffix .mat-mdc-icon-button{position:absolute;right:-16px;top:0}\n"] }]
21906
- }], ctorParameters: () => [{ type: i1$1.NgControl }, { type: i2$4.FocusMonitor }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { accept: [{
22111
+ }], ctorParameters: () => [{ type: i1$2.NgControl }, { type: i2$4.FocusMonitor }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { accept: [{
21907
22112
  type: Input
21908
22113
  }], onSelect: [{
21909
22114
  type: Output,
@@ -22032,7 +22237,7 @@ class DatePickerHeaderComponent {
22032
22237
  this.destroyed.complete();
22033
22238
  }
22034
22239
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DatePickerHeaderComponent, deps: [{ token: i6$1.MatCalendar }, { token: i2$5.DateAdapter }, { token: MAT_DATE_FORMATS }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
22035
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: DatePickerHeaderComponent, isStandalone: true, selector: "vd-datepicker-header", ngImport: i0, template: "<div class=\"header\">\r\n\t<button type=\"button\" mat-icon-button (click)=\"previousClicked('year')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_double_arrow_left</mat-icon>\r\n\t</button>\r\n\t<button type=\"button\" mat-icon-button (click)=\"previousClicked('month')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_arrow_left</mat-icon>\r\n\t</button>\r\n\t<span class=\"header-label\">{{periodLabel}}</span>\r\n\t<button type=\"button\" mat-icon-button (click)=\"nextClicked('month')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_arrow_right</mat-icon>\r\n\t</button>\r\n\t<button type=\"button\" mat-icon-button (click)=\"nextClicked('year')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_double_arrow_right</mat-icon>\r\n\t</button>\r\n</div>", styles: [".header{display:flex;align-items:center;padding:.5em}.header-label{flex:1;height:1em;font-weight:500;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22240
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: DatePickerHeaderComponent, isStandalone: true, selector: "vd-datepicker-header", ngImport: i0, template: "<div class=\"header\">\r\n\t<button type=\"button\" mat-icon-button (click)=\"previousClicked('year')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_double_arrow_left</mat-icon>\r\n\t</button>\r\n\t<button type=\"button\" mat-icon-button (click)=\"previousClicked('month')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_arrow_left</mat-icon>\r\n\t</button>\r\n\t<span class=\"header-label\">{{periodLabel}}</span>\r\n\t<button type=\"button\" mat-icon-button (click)=\"nextClicked('month')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_arrow_right</mat-icon>\r\n\t</button>\r\n\t<button type=\"button\" mat-icon-button (click)=\"nextClicked('year')\">\r\n\t\t<mat-icon fontSet=\"material-symbols-outlined\">keyboard_double_arrow_right</mat-icon>\r\n\t</button>\r\n</div>", styles: [".header{display:flex;align-items:center;padding:.5em}.header-label{flex:1;height:1em;font-weight:500;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
22036
22241
  }
22037
22242
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: DatePickerHeaderComponent, decorators: [{
22038
22243
  type: Component,
@@ -22098,7 +22303,7 @@ class VdListComponent extends AbstractSelectFormField {
22098
22303
  this.selectEl?.focus();
22099
22304
  }
22100
22305
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdListComponent, isStandalone: true, selector: "vd-list", host: { classAttribute: "vd-list" }, providers: [{ provide: MatFormFieldControl, useExisting: VdListComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdListOptionDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelectionList, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-selection-list i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelectionList\" (selectionChange)=\"handleChange($event)\" [multiple]=\"multiple\" [compareWith]=\"compareWith??defaultCompareWith\" [disabled]=\"disabled || readonly\" [hideSingleSelectionIndicator]=\"false\" flex>\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-list-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-list-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-selection-list>", styles: ["::ng-deep .vd-list{overflow:auto;max-height:100%}::ng-deep .mat-mdc-form-field-type-vd-list .mat-mdc-form-field-infix{padding-top:0!important;padding-bottom:0!important}::ng-deep .mat-mdc-form-field-type-vd-list .mdc-text-field{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
22306
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdListComponent, isStandalone: true, selector: "vd-list", host: { classAttribute: "vd-list" }, providers: [{ provide: MatFormFieldControl, useExisting: VdListComponent }], queries: [{ propertyName: "optionTemplate", first: true, predicate: VdListOptionDirective, descendants: true }], viewQueries: [{ propertyName: "selectEl", first: true, predicate: MatSelectionList, descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<mat-selection-list i18n-placeholder [(ngModel)]=\"value\" #select=\"matSelectionList\" (selectionChange)=\"handleChange($event)\" [multiple]=\"multiple\" [compareWith]=\"compareWith??defaultCompareWith\" [disabled]=\"disabled || readonly\" [hideSingleSelectionIndicator]=\"false\" flex>\r\n <!-- #region Options -->\r\n <ng-template let-option let-first=\"first\" ngFor [ngForOf]=\"filteredOptions\">\r\n <mat-list-option [value]=\"mapper ? option : option[optionValueProperty]\">\r\n <span *ngIf=\"!optionTemplate?.templateRef\" i18n=\"@@selection\">{option[optionTextProperty], select, option {option} other {{{option[optionTextProperty]}}}}</span>\r\n <ng-template *ngIf=\"optionTemplate?.templateRef\" [ngTemplateOutlet]=\"optionTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ option: option }\"></ng-template>\r\n </mat-list-option>\r\n </ng-template>\r\n <!-- #endregion -->\r\n</mat-selection-list>", styles: ["::ng-deep .vd-list{overflow:auto;max-height:100%}::ng-deep .mat-mdc-form-field-type-vd-list .mat-mdc-form-field-infix{padding-top:0!important;padding-bottom:0!important}::ng-deep .mat-mdc-form-field-type-vd-list .mdc-text-field{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
22102
22307
  }
22103
22308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdListComponent, decorators: [{
22104
22309
  type: Component,
@@ -22187,7 +22392,7 @@ class ParseDecimalDirective {
22187
22392
  this.control.control.markAsDirty();
22188
22393
  }
22189
22394
  }
22190
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseDecimalDirective, deps: [{ token: i0.ElementRef }, { token: i1$1.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
22395
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseDecimalDirective, deps: [{ token: i0.ElementRef }, { token: i1$2.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
22191
22396
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: ParseDecimalDirective, isStandalone: true, selector: "[parseDecimal]", inputs: { parseDecimalEnabled: "parseDecimalEnabled" }, host: { listeners: { "paste": "onPaste($event)" } }, ngImport: i0 });
22192
22397
  }
22193
22398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ParseDecimalDirective, decorators: [{
@@ -22195,7 +22400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
22195
22400
  args: [{
22196
22401
  selector: '[parseDecimal]'
22197
22402
  }]
22198
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$1.NgControl }], propDecorators: { parseDecimalEnabled: [{
22403
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$2.NgControl }], propDecorators: { parseDecimalEnabled: [{
22199
22404
  type: Input
22200
22405
  }], onPaste: [{
22201
22406
  type: HostListener,
@@ -22781,7 +22986,7 @@ class VdGenericFormComponent {
22781
22986
  console.log(message, optionalParams);
22782
22987
  }
22783
22988
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdGenericFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22784
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdGenericFormComponent, isStandalone: true, selector: "vd-generic-form", inputs: { formGroup: "formGroup", classType: "classType", formDefinition: "formDefinition", fieldGroups: "fieldGroups", groupName: "groupName", fieldSets: "fieldSets", context: "context", debugValue: "debugValue", readonly: "readonly", separatorKeysCodes: "separatorKeysCodes" }, queries: [{ propertyName: "editorTemplate", first: true, predicate: VdEditorDirective, descendants: true }, { propertyName: "codeTemplate", first: true, predicate: VdCodeDirective, descendants: true }, { propertyName: "fileTemplate", first: true, predicate: VdFileDirective, descendants: true }, { propertyName: "customTemplate", first: true, predicate: VdCustomDirective, descendants: true }, { propertyName: "bottom", first: true, predicate: ["bottom"], descendants: true }, { propertyName: "customFields", first: true, predicate: ["customFields"], descendants: true }, { propertyName: "customFieldsTemplates", predicate: VdGenericFormCustomFieldDirective }], ngImport: i0, template: "<div *ngIf=\"formGroup && fieldRows\" [formGroup]=\"formGroup!\">\r\n <!-- #region Fields -->\r\n <ng-container *ngFor=\"let fields of fieldRows; let i = index\">\r\n <div layout-gt-sm=\"row\" layout=\"column\">\r\n <ng-container *ngFor=\"let field of fields\" [ngSwitch]=\"field.type\">\r\n <ng-container *ngIf=\"!field.hidden && !(field.hide && field.hide(formValue, formGroup, context))\">\r\n <ng-container *ngIf=\"field.wrapped\">\r\n <!-- #region Text input -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Text\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input matInput\r\n [type]=\"field.inputType ?? 'text'\"\r\n [minlength]=\"field.minLength | func:formValue:formGroup:context\"\r\n [maxlength]=\"field.maxLength | func:formValue:formGroup:context\"\r\n [min]=\"field.min\" [max]=\"field.max\"\r\n [formControlName]=\"field.name!\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [pattern]=\"((field.pattern | func:formValue:formGroup:context)??'')\"\r\n [autoFocus]=\"((field.focus | func:formValue:formGroup:context)??false)\"\r\n [selectText]=\"((field.selectText | func:formValue:formGroup:context)??false)\"\r\n [onlyNumber]=\"(field.numbersOnly??false)\"\r\n parseDecimal\r\n [parseDecimalEnabled]=\"(field.parseDecimal??false)\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\"\r\n mat-icon-button\r\n *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\"\r\n (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any($any(formGroup.controls[field.name!]))['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Textarea -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.TextArea\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <textarea matInput\r\n [formControlName]=\"field.name!\"\r\n rows=\"field.rows||2\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n </textarea>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\"\r\n mat-icon-button\r\n *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\"\r\n (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Enum -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Enum\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-select [formControlName]=\"field.name!\"\r\n [enum]=\"field.enumType\"\r\n [enumMetadata]=\"field.enumMetadata\"\r\n [enumFilter]=\"field.enumFilter | func:formValue:formGroup:context\"\r\n [optionValueProperty]=\"field.optionValueProperty\"\r\n [optionTextProperty]=\"field.optionTextProperty\"\r\n [defaultOption]=\"field.defaultOption??true\"\r\n [multiple]=\"field.multiple\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [triggerCssClass]=\"field.triggerCssClass\"\r\n [triggerMode]=\"field.triggerMode\"\r\n layout=\"row\"\r\n flex>\r\n <ng-template vd-select-trigger let-trigger=\"trigger\" *ngIf=\"field.triggerTemplate\">\r\n <span [innerHTML]=\"field.triggerTemplate(trigger, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" *ngIf=\"field.optionTemplate\">\r\n <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" let-text=\"text\" *ngIf=\"field.optionIcon && !field.optionTemplate\">\r\n <div layout=\"row\" layout-align=\"start center\">\r\n <ng-template #optionIconTemplate\r\n [ngTemplateOutlet]=\"optionIconTemplate\"\r\n let-optionIcon=\"optionIcon\"\r\n [ngTemplateOutletContext]=\"{ optionIcon: field.optionIcon(option, formValue, formGroup, context) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <span>{{text}}</span>\r\n </div>\r\n </ng-template>\r\n </vd-select>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\"\r\n mat-icon-button\r\n *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\"\r\n (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdSelect -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdSelect\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-select [formControlName]=\"field.name!\"\r\n [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\r\n [params]=\"field.params??{} | func:formValue:formGroup:context\"\r\n [projection]=\"field.projection\" [mapper]=\"field.mapper\"\r\n [compareWith]=\"field.compareWith\"\r\n [loadData]=\"field.fetchCondition | func:formValue:formGroup:context\"\r\n [optionValueProperty]=\"field.optionValueProperty\"\r\n [optionTextProperty]=\"field.optionTextProperty\"\r\n [defaultOption]=\"field.defaultOption??true\"\r\n [matIconKey]=\"field.optionMatIconProperty\"\r\n [svgIconKey]=\"field.optionSvgIconProperty\"\r\n [fontSet]=\"field.optionIconFontSet\"\r\n [multiple]=\"field.multiple\"\r\n [selectFirst]=\"field.selectFirst\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [triggerCssClass]=\"field.triggerCssClass\"\r\n [triggerMode]=\"field.triggerMode\"\r\n (itemSelected)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\r\n (itemChange)=\"field.itemChange && field.itemChange($event, formValue, formGroup, context);\"\r\n layout=\"row\"\r\n flex>\r\n <ng-template vd-select-trigger let-trigger=\"trigger\" *ngIf=\"field.triggerTemplate\">\r\n <span [innerHTML]=\"field.triggerTemplate(trigger, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-trigger let-trigger=\"trigger\" *ngIf=\"field.triggerMapper && field.multiple && field.triggerMode == 'chip'\">\r\n <mat-chip-set>\r\n <mat-chip *ngFor=\"let item of trigger\" [color]=\"field.chipColor\" [color]=\"field.chipColor\" highlighted selected>\r\n <span [innerHTML]=\"field.triggerMapper(item, formValue, formGroup, context)\"></span>\r\n </mat-chip>\r\n </mat-chip-set>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" *ngIf=\"field.optionTemplate\">\r\n <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" let-text=\"text\" *ngIf=\"field.optionIcon && !field.optionTemplate\">\r\n <div layout=\"row\" layout-align=\"start center\">\r\n <ng-template #optionIconTemplate\r\n [ngTemplateOutlet]=\"optionIconTemplate\"\r\n let-optionIcon=\"optionIcon\"\r\n [ngTemplateOutletContext]=\"{ optionIcon: field.optionIcon(option, formValue, formGroup, context) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <span>{{text}}</span>\r\n </div>\r\n </ng-template>\r\n </vd-select>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdList -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdList\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" floatLabel=\"always\" class=\"form-field-type-list\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-list [formControlName]=\"field.name!\"\r\n [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\r\n [params]=\"field.params ??{} | func:formValue:formGroup:context\"\r\n [projection]=\"field.projection\"\r\n [mapper]=\"field.mapper\"\r\n [compareWith]=\"field.compareWith\"\r\n [loadData]=\"field.fetchCondition | func:formValue:formGroup:context\"\r\n [optionValueProperty]=\"field.optionValueProperty\"\r\n [optionTextProperty]=\"field.optionTextProperty\"\r\n [multiple]=\"field.multiple\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n (itemSelected)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\r\n (itemChange)=\"field.itemChange && field.itemChange($event, formValue, formGroup, context);\"\r\n [style.max-width]=\"field.maxWidth\"\r\n [style.max-height]=\"field.maxHeight\"\r\n flex>\r\n <ng-template vd-list-option let-option=\"option\" *ngIf=\"field.optionTemplate\">\r\n <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n </vd-list>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Chips -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Chips\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <mat-chip-grid #chipList [formControlName]=\"field.name!\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\r\n <mat-chip-row *ngFor=\"let chip of $any(formGroup.controls[field.name!])?.value\"\r\n (removed)=\"removeChip(field, chip)\"\r\n [color]=\"field.chipColor\"\r\n selectable=\"true\"\r\n highlighted\r\n selected>\r\n <span>{{chip}}</span>\r\n <button matChipRemove>\r\n <mat-icon fontSet=\"material-symbols-outlined\">cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n <input [placeholder]=\"$any(field.label)\"\r\n #chipInput\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matAutocomplete]=\"chipAutocomplete\"\r\n (input)=\"filterAutocomplete(field, chipInput)\"\r\n (matChipInputTokenEnd)=\"addChip(field, $event)\"\r\n (paste)=\"onPasteChips(field, $event)\"\r\n autocomplete=\"off\">\r\n </mat-chip-grid>\r\n <mat-autocomplete autoActiveFirstOption #chipAutocomplete=\"matAutocomplete\" [class]=\"field.autocompleteCssClass\" (optionSelected)=\"autocompleteValueSelected(field, $event, chipInput)\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name!]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdChips -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdChips\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-chips #vdChip\r\n [formControlName]=\"field.name!\"\r\n [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\r\n [params]=\"field.params || {} | func:formValue:formGroup:context\"\r\n [searchField]=\"field.searchField\"\r\n [searchFields]=\"field.searchFields\"\r\n [filters]=\"field.filters\"\r\n [selectFirst]=\"field.selectFirst\"\r\n [classType]=\"field.classType\"\r\n [projection]=\"field.projection\"\r\n [key]=\"field.optionValueProperty\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [removable]=\"!field.clear\"\r\n [context]=\"context\"\r\n [suffixButtons]=\"field.suffixButtons\"\r\n [autocompleteCssClass]=\"field.autocompleteCssClass\"\r\n (initSelect)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\r\n (selected)=\"!field.itemChange ? $event.callback(true) : $event.callback(field.itemChange($event.value, formValue, formGroup, context) !== false)\"\r\n (cleared)=\"field.clear && field.clear(formValue, formGroup, context);\"\r\n [customValue]=\"field.customValue\"\r\n layout=\"row\"\r\n flex>\r\n <ng-template vd-chip let-chip=\"chip\" *ngIf=\"field.chipTemplate\">\r\n <div [outerHTML]=\"field.chipTemplate(chip, formValue, formGroup, context)\"></div>\r\n </ng-template>\r\n <ng-template vd-autocomplete-option let-option=\"option\" *ngIf=\"field.autocompleteTemplate\">\r\n <div [outerHTML]=\"field.autocompleteTemplate(option, formValue, formGroup, context)\"></div>\r\n </ng-template>\r\n </vd-chips>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-hint *ngIf=\"vdChip.emptyResult\" class=\"tc-red-400\" i18n=\"@@noResultsFound\">No results were found.</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Select -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Select\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <mat-select [formControlName]=\"field.name!\"\r\n [multiple]=\"field.multiple\"\r\n [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n flex>\r\n <mat-option *ngFor=\"let option of $any(field.options)\" [value]=\"option.id\">{{option.name}}</mat-option>\r\n </mat-select>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Autocomplete -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Autocomplete\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input type=\"text\"\r\n matInput\r\n [formControlName]=\"field.name!\"\r\n [min]=\"field.min\"\r\n [max]=\"field.max\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filterAutocomplete(field, autocompleteInput)\"\r\n autocomplete=\"off\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\"\r\n #autocompleteInput>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" [class]=\"field.autocompleteCssClass\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name!]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Date -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Date\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input matInput\r\n [formControlName]=\"field.name!\"\r\n [min]=\"field.min\" [max]=\"field.max\"\r\n autocomplete=\"off\"\r\n [matDatepicker]=\"datePicker\"\r\n [matDatepickerFilter]=\"field.dateFilter\"\r\n [readonly]=\"readonly || field.forceSelect || (field.readonly && field.readonly(formValue, formGroup, context))\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker [disabled]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\" (monthSelected)=\"handleDatePickerFilterAsync(datePicker, field, $event )\" (opened)=\"handleDatePickerOpened(datePicker, field)\" [calendarHeaderComponent]=\"datePickerHeaderComponent\"></mat-datepicker>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Calendar -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Calendar\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" floatLabel=\"always\" class=\"form-field-type-calendar\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input input=\"hidden\" hidden matInput [formControlName]=\"field.name!\">\r\n <mat-calendar #calendar\r\n [selected]=\"formGroup.get(field.name!)?.value\"\r\n (selectedChange)=\"formGroup.get(field.name!)?.setValue($event);\"\r\n (monthSelected)=\"handleCalendarFilterAsync(calendar, field, $event )\"\r\n [headerComponent]=\"datePickerHeaderComponent\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\"\r\n style=\"width: 100%;\"></mat-calendar>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\" layout-margin>{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Color input -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Color\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input [type]=\"field.inputType ?? 'text'\"\r\n [minlength]=\"field.minLength | func:formValue:formGroup:context\"\r\n [maxlength]=\"field.maxLength | func:formValue:formGroup:context\"\r\n [min]=\"field.min\" [max]=\"field.max\" matInput [formControlName]=\"field.name!\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [pattern]=\"((field.pattern | func:formValue:formGroup:context)??'')\"\r\n [onlyNumber]=\"(field.numbersOnly??false)\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n <ngx-colors matSuffix ngx-colors-trigger [formControlName]=\"field.name!\" [hideTextInput]=\"true\" (close)=\"this.formGroup.get(field.name!)?.setValue($event)\" format=\"hex\" class=\"color-picker\"></ngx-colors>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any($any(formGroup.controls[field.name!]))['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n </ng-container>\r\n\r\n <!-- #region Checkbox -->\r\n <div *ngSwitchCase=\"FormFieldType.Checkbox\" [attr.flex]=\"field.flex||0\" class=\"mat-checkbox-wrap\" [class]=\"field.cssClass\">\r\n <mat-checkbox [formControlName]=\"field.name!\"\r\n [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\r\n {{field.label}}\r\n </mat-checkbox>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\" layout-margin>{{errorMessage}}</mat-error>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Editor -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.Editor\">\r\n <ng-template *ngIf=\"editorTemplate?.templateRef!\" [ngTemplateOutlet]=\"editorTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Code -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.Code\">\r\n <ng-template *ngIf=\"codeTemplate?.templateRef!\" [ngTemplateOutlet]=\"codeTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region File -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.File\">\r\n <mat-form-field [attr.flex]=\"field.flex||0\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <div vd-file-input\r\n [formControlName]=\"field.name!\"\r\n (select)=\"field.change && field.change(field, $event, formGroup, context)\"\r\n [accept]=\"field.fileExtensions\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n flex>\r\n </div>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.Custom\">\r\n <ng-template *ngIf=\"customTemplate?.templateRef!\" [ngTemplateOutlet]=\"customTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- #region Template for custom fields -->\r\n <ng-container *ngFor=\"let customField of customFieldsTemplates\">\r\n <ng-template *ngIf=\"customField?.templateRef && customField.row == fields[0]?.row && customField.inline\" [ngTemplateOutlet]=\"customField?.templateRef!\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n\r\n <!-- #region Template for custom fields -->\r\n <ng-container *ngIf=\"customFields\" [ngTemplateOutlet]=\"customFields\" [ngTemplateOutletContext]=\"{formGroup: formGroup, row: fields[0].row}\"></ng-container>\r\n <ng-container *ngFor=\"let customField of customFieldsTemplates\">\r\n <ng-template *ngIf=\"customField?.templateRef && customField.row == ((fields[0]?.row??0)+1) && !customField.inline\" [ngTemplateOutlet]=\"customField?.templateRef!\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Form bottom -->\r\n <ng-container *ngIf=\"bottom\" [ngTemplateOutlet]=\"bottom\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Template for suffix buttons -->\r\n <ng-template #suffixButtons let-field>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Debug value -->\r\n <code *ngIf=\"debugValue\">\r\n <pre>{{formValue | json}}</pre>\r\n </code>\r\n <!-- #endregion -->\r\n</div>", styles: [".mat-checkbox-wrap mat-error{transform:translate(36px,-20px);max-width:93%;font-size:var(--mat-typography-caption-font-size, 12px)}::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-icon-suffix .color-picker{width:40px;display:block}::ng-deep .mat-mdc-form-field-type-mat-chip-grid .mat-mdc-form-field-infix{padding-top:7px!important;padding-bottom:7px!important}::ng-deep .mat-mdc-form-field-type-mat-chip-grid .mat-mdc-chip{padding-top:0!important;padding-bottom:0!important;margin-top:2px!important;margin-bottom:2px!important;margin-left:4px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i3.JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.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$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type:
22989
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdGenericFormComponent, isStandalone: true, selector: "vd-generic-form", inputs: { formGroup: "formGroup", classType: "classType", formDefinition: "formDefinition", fieldGroups: "fieldGroups", groupName: "groupName", fieldSets: "fieldSets", context: "context", debugValue: "debugValue", readonly: "readonly", separatorKeysCodes: "separatorKeysCodes" }, queries: [{ propertyName: "editorTemplate", first: true, predicate: VdEditorDirective, descendants: true }, { propertyName: "codeTemplate", first: true, predicate: VdCodeDirective, descendants: true }, { propertyName: "fileTemplate", first: true, predicate: VdFileDirective, descendants: true }, { propertyName: "customTemplate", first: true, predicate: VdCustomDirective, descendants: true }, { propertyName: "bottom", first: true, predicate: ["bottom"], descendants: true }, { propertyName: "customFields", first: true, predicate: ["customFields"], descendants: true }, { propertyName: "customFieldsTemplates", predicate: VdGenericFormCustomFieldDirective }], ngImport: i0, template: "<div *ngIf=\"formGroup && fieldRows\" [formGroup]=\"formGroup!\">\r\n <!-- #region Fields -->\r\n <ng-container *ngFor=\"let fields of fieldRows; let i = index\">\r\n <div layout-gt-sm=\"row\" layout=\"column\">\r\n <ng-container *ngFor=\"let field of fields\" [ngSwitch]=\"field.type\">\r\n <ng-container *ngIf=\"!field.hidden && !(field.hide && field.hide(formValue, formGroup, context))\">\r\n <ng-container *ngIf=\"field.wrapped\">\r\n <!-- #region Text input -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Text\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input matInput\r\n [type]=\"field.inputType ?? 'text'\"\r\n [minlength]=\"field.minLength | func:formValue:formGroup:context\"\r\n [maxlength]=\"field.maxLength | func:formValue:formGroup:context\"\r\n [min]=\"field.min\" [max]=\"field.max\"\r\n [formControlName]=\"field.name!\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [pattern]=\"((field.pattern | func:formValue:formGroup:context)??'')\"\r\n [autoFocus]=\"((field.focus | func:formValue:formGroup:context)??false)\"\r\n [selectText]=\"((field.selectText | func:formValue:formGroup:context)??false)\"\r\n [onlyNumber]=\"(field.numbersOnly??false)\"\r\n parseDecimal\r\n [parseDecimalEnabled]=\"(field.parseDecimal??false)\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\"\r\n mat-icon-button\r\n *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\"\r\n (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any($any(formGroup.controls[field.name!]))['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Textarea -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.TextArea\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <textarea matInput\r\n [formControlName]=\"field.name!\"\r\n rows=\"field.rows||2\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n </textarea>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\"\r\n mat-icon-button\r\n *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\"\r\n (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Enum -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Enum\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-select [formControlName]=\"field.name!\"\r\n [enum]=\"field.enumType\"\r\n [enumMetadata]=\"field.enumMetadata\"\r\n [enumFilter]=\"field.enumFilter | func:formValue:formGroup:context\"\r\n [optionValueProperty]=\"field.optionValueProperty\"\r\n [optionTextProperty]=\"field.optionTextProperty\"\r\n [defaultOption]=\"field.defaultOption??true\"\r\n [multiple]=\"field.multiple\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [triggerCssClass]=\"field.triggerCssClass\"\r\n [triggerMode]=\"field.triggerMode\"\r\n layout=\"row\"\r\n flex>\r\n <ng-template vd-select-trigger let-trigger=\"trigger\" *ngIf=\"field.triggerTemplate\">\r\n <span [innerHTML]=\"field.triggerTemplate(trigger, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" *ngIf=\"field.optionTemplate\">\r\n <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" let-text=\"text\" *ngIf=\"field.optionIcon && !field.optionTemplate\">\r\n <div layout=\"row\" layout-align=\"start center\">\r\n <ng-template #optionIconTemplate\r\n [ngTemplateOutlet]=\"optionIconTemplate\"\r\n let-optionIcon=\"optionIcon\"\r\n [ngTemplateOutletContext]=\"{ optionIcon: field.optionIcon(option, formValue, formGroup, context) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <span>{{text}}</span>\r\n </div>\r\n </ng-template>\r\n </vd-select>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\"\r\n mat-icon-button\r\n *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\"\r\n (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdSelect -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdSelect\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-select [formControlName]=\"field.name!\"\r\n [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\r\n [params]=\"field.params??{} | func:formValue:formGroup:context\"\r\n [projection]=\"field.projection\" [mapper]=\"field.mapper\"\r\n [compareWith]=\"field.compareWith\"\r\n [loadData]=\"field.fetchCondition | func:formValue:formGroup:context\"\r\n [optionValueProperty]=\"field.optionValueProperty\"\r\n [optionTextProperty]=\"field.optionTextProperty\"\r\n [defaultOption]=\"field.defaultOption??true\"\r\n [matIconKey]=\"field.optionMatIconProperty\"\r\n [svgIconKey]=\"field.optionSvgIconProperty\"\r\n [fontSet]=\"field.optionIconFontSet\"\r\n [multiple]=\"field.multiple\"\r\n [selectFirst]=\"field.selectFirst\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [triggerCssClass]=\"field.triggerCssClass\"\r\n [triggerMode]=\"field.triggerMode\"\r\n (itemSelected)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\r\n (itemChange)=\"field.itemChange && field.itemChange($event, formValue, formGroup, context);\"\r\n layout=\"row\"\r\n flex>\r\n <ng-template vd-select-trigger let-trigger=\"trigger\" *ngIf=\"field.triggerTemplate\">\r\n <span [innerHTML]=\"field.triggerTemplate(trigger, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-trigger let-trigger=\"trigger\" *ngIf=\"field.triggerMapper && field.multiple && field.triggerMode == 'chip'\">\r\n <mat-chip-set>\r\n <mat-chip *ngFor=\"let item of trigger\" [color]=\"field.chipColor\" [color]=\"field.chipColor\" highlighted selected>\r\n <span [innerHTML]=\"field.triggerMapper(item, formValue, formGroup, context)\"></span>\r\n </mat-chip>\r\n </mat-chip-set>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" *ngIf=\"field.optionTemplate\">\r\n <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n <ng-template vd-select-option let-option=\"option\" let-text=\"text\" *ngIf=\"field.optionIcon && !field.optionTemplate\">\r\n <div layout=\"row\" layout-align=\"start center\">\r\n <ng-template #optionIconTemplate\r\n [ngTemplateOutlet]=\"optionIconTemplate\"\r\n let-optionIcon=\"optionIcon\"\r\n [ngTemplateOutletContext]=\"{ optionIcon: field.optionIcon(option, formValue, formGroup, context) }\">\r\n <mat-icon *ngIf=\"optionIcon.svgIcon\" [svgIcon]=\"optionIcon.svgIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\"></mat-icon>\r\n <mat-icon *ngIf=\"optionIcon.matIcon\" [fontSet]=\"optionIcon.fontSet || 'material-symbols-outlined'\" [ngStyle]=\"{ color: optionIcon.iconColor??'' }\">{{optionIcon.matIcon}}</mat-icon>\r\n </ng-template>\r\n <span>{{text}}</span>\r\n </div>\r\n </ng-template>\r\n </vd-select>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdList -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdList\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" floatLabel=\"always\" class=\"form-field-type-list\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-list [formControlName]=\"field.name!\"\r\n [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\r\n [params]=\"field.params ??{} | func:formValue:formGroup:context\"\r\n [projection]=\"field.projection\"\r\n [mapper]=\"field.mapper\"\r\n [compareWith]=\"field.compareWith\"\r\n [loadData]=\"field.fetchCondition | func:formValue:formGroup:context\"\r\n [optionValueProperty]=\"field.optionValueProperty\"\r\n [optionTextProperty]=\"field.optionTextProperty\"\r\n [multiple]=\"field.multiple\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n (itemSelected)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\r\n (itemChange)=\"field.itemChange && field.itemChange($event, formValue, formGroup, context);\"\r\n [style.max-width]=\"field.maxWidth\"\r\n [style.max-height]=\"field.maxHeight\"\r\n flex>\r\n <ng-template vd-list-option let-option=\"option\" *ngIf=\"field.optionTemplate\">\r\n <span [outerHTML]=\"field.optionTemplate(option, formValue, formGroup, context)\"></span>\r\n </ng-template>\r\n </vd-list>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Chips -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Chips\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <mat-chip-grid #chipList [formControlName]=\"field.name!\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\r\n <mat-chip-row *ngFor=\"let chip of $any(formGroup.controls[field.name!])?.value\"\r\n (removed)=\"removeChip(field, chip)\"\r\n [color]=\"field.chipColor\"\r\n selectable=\"true\"\r\n highlighted\r\n selected>\r\n <span>{{chip}}</span>\r\n <button matChipRemove>\r\n <mat-icon fontSet=\"material-symbols-outlined\">cancel</mat-icon>\r\n </button>\r\n </mat-chip-row>\r\n <input [placeholder]=\"$any(field.label)\"\r\n #chipInput\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matAutocomplete]=\"chipAutocomplete\"\r\n (input)=\"filterAutocomplete(field, chipInput)\"\r\n (matChipInputTokenEnd)=\"addChip(field, $event)\"\r\n (paste)=\"onPasteChips(field, $event)\"\r\n autocomplete=\"off\">\r\n </mat-chip-grid>\r\n <mat-autocomplete autoActiveFirstOption #chipAutocomplete=\"matAutocomplete\" [class]=\"field.autocompleteCssClass\" (optionSelected)=\"autocompleteValueSelected(field, $event, chipInput)\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name!]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VdChips -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.VdChips\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <vd-chips #vdChip\r\n [formControlName]=\"field.name!\"\r\n [endpoint]=\"field.endpoint??'' | func:formValue:formGroup:context\"\r\n [params]=\"field.params || {} | func:formValue:formGroup:context\"\r\n [searchField]=\"field.searchField\"\r\n [searchFields]=\"field.searchFields\"\r\n [filters]=\"field.filters\"\r\n [selectFirst]=\"field.selectFirst\"\r\n [classType]=\"field.classType\"\r\n [projection]=\"field.projection\"\r\n [key]=\"field.optionValueProperty\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [removable]=\"!field.clear\"\r\n [context]=\"context\"\r\n [suffixButtons]=\"field.suffixButtons\"\r\n [autocompleteCssClass]=\"field.autocompleteCssClass\"\r\n (initSelect)=\"field.itemSelect && field.itemSelect($event, formValue, formGroup, context);\"\r\n (selected)=\"!field.itemChange ? $event.callback(true) : $event.callback(field.itemChange($event.value, formValue, formGroup, context) !== false)\"\r\n (cleared)=\"field.clear && field.clear(formValue, formGroup, context);\"\r\n [customValue]=\"field.customValue\"\r\n layout=\"row\"\r\n flex>\r\n <ng-template vd-chip let-chip=\"chip\" *ngIf=\"field.chipTemplate\">\r\n <div [outerHTML]=\"field.chipTemplate(chip, formValue, formGroup, context)\"></div>\r\n </ng-template>\r\n <ng-template vd-autocomplete-option let-option=\"option\" *ngIf=\"field.autocompleteTemplate\">\r\n <div [outerHTML]=\"field.autocompleteTemplate(option, formValue, formGroup, context)\"></div>\r\n </ng-template>\r\n </vd-chips>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-hint *ngIf=\"vdChip.emptyResult\" class=\"tc-red-400\" i18n=\"@@noResultsFound\">No results were found.</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Select -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Select\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <mat-select [formControlName]=\"field.name!\"\r\n [multiple]=\"field.multiple\"\r\n [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n flex>\r\n <mat-option *ngFor=\"let option of $any(field.options)\" [value]=\"option.id\">{{option.name}}</mat-option>\r\n </mat-select>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Autocomplete -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Autocomplete\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input type=\"text\"\r\n matInput\r\n [formControlName]=\"field.name!\"\r\n [min]=\"field.min\"\r\n [max]=\"field.max\"\r\n [matAutocomplete]=\"auto\"\r\n (input)=\"filterAutocomplete(field, autocompleteInput)\"\r\n autocomplete=\"off\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\"\r\n #autocompleteInput>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" [class]=\"field.autocompleteCssClass\">\r\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions[field.name!]\" [value]=\"option.id\">\r\n {{option.name}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Date -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Date\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input matInput\r\n [formControlName]=\"field.name!\"\r\n [min]=\"field.min\" [max]=\"field.max\"\r\n autocomplete=\"off\"\r\n [matDatepicker]=\"datePicker\"\r\n [matDatepickerFilter]=\"field.dateFilter\"\r\n [readonly]=\"readonly || field.forceSelect || (field.readonly && field.readonly(formValue, formGroup, context))\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n <mat-datepicker-toggle matSuffix [for]=\"datePicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datePicker [disabled]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\" (monthSelected)=\"handleDatePickerFilterAsync(datePicker, field, $event )\" (opened)=\"handleDatePickerOpened(datePicker, field)\" [calendarHeaderComponent]=\"datePickerHeaderComponent\"></mat-datepicker>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Calendar -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Calendar\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" floatLabel=\"always\" class=\"form-field-type-calendar\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input input=\"hidden\" hidden matInput [formControlName]=\"field.name!\">\r\n <mat-calendar #calendar\r\n [selected]=\"formGroup.get(field.name!)?.value\"\r\n (selectedChange)=\"formGroup.get(field.name!)?.setValue($event);\"\r\n (monthSelected)=\"handleCalendarFilterAsync(calendar, field, $event )\"\r\n [headerComponent]=\"datePickerHeaderComponent\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\"\r\n style=\"width: 100%;\"></mat-calendar>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\" layout-margin>{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Color input -->\r\n <mat-form-field *ngSwitchCase=\"FormFieldType.Color\" [attr.flex]=\"field.flex||0\" [class]=\"field.cssClass\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <input [type]=\"field.inputType ?? 'text'\"\r\n [minlength]=\"field.minLength | func:formValue:formGroup:context\"\r\n [maxlength]=\"field.maxLength | func:formValue:formGroup:context\"\r\n [min]=\"field.min\" [max]=\"field.max\" matInput [formControlName]=\"field.name!\"\r\n [readonly]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n [pattern]=\"((field.pattern | func:formValue:formGroup:context)??'')\"\r\n [onlyNumber]=\"(field.numbersOnly??false)\"\r\n (keydown)=\"field.keydown && field.keydown($event, formValue, formGroup, context)\">\r\n <ngx-colors matSuffix ngx-colors-trigger [formControlName]=\"field.name!\" [hideTextInput]=\"true\" (close)=\"this.formGroup.get(field.name!)?.setValue($event)\" format=\"hex\" class=\"color-picker\"></ngx-colors>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <mat-hint *ngIf=\"field.hint\">{{field.hint}}</mat-hint>\r\n <mat-error *ngFor=\"let errorMessage of $any($any(formGroup.controls[field.name!]))['errorMessages']\">{{errorMessage}}</mat-error>\r\n </mat-form-field>\r\n <!-- #endregion -->\r\n </ng-container>\r\n\r\n <!-- #region Checkbox -->\r\n <div *ngSwitchCase=\"FormFieldType.Checkbox\" [attr.flex]=\"field.flex||0\" class=\"mat-checkbox-wrap\" [class]=\"field.cssClass\">\r\n <mat-checkbox [formControlName]=\"field.name!\"\r\n [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\">\r\n {{field.label}}\r\n </mat-checkbox>\r\n <mat-error *ngFor=\"let errorMessage of $any(formGroup.controls[field.name!])['errorMessages']\" layout-margin>{{errorMessage}}</mat-error>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Editor -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.Editor\">\r\n <ng-template *ngIf=\"editorTemplate?.templateRef!\" [ngTemplateOutlet]=\"editorTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Code -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.Code\">\r\n <ng-template *ngIf=\"codeTemplate?.templateRef!\" [ngTemplateOutlet]=\"codeTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region File -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.File\">\r\n <mat-form-field [attr.flex]=\"field.flex||0\" layout-margin>\r\n <mat-label>{{field.label}}</mat-label>\r\n <div vd-file-input\r\n [formControlName]=\"field.name!\"\r\n (select)=\"field.change && field.change(field, $event, formGroup, context)\"\r\n [accept]=\"field.fileExtensions\" [disableControl]=\"(readonly || (field.readonly && field.readonly(formValue, formGroup, context)))??false\"\r\n flex>\r\n </div>\r\n </mat-form-field>\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Custom -->\r\n <ng-container *ngSwitchCase=\"FormFieldType.Custom\">\r\n <ng-template *ngIf=\"customTemplate?.templateRef!\" [ngTemplateOutlet]=\"customTemplate?.templateRef!\" [ngTemplateOutletContext]=\"{ field: field, formGroup: formGroup }\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- #region Template for custom fields -->\r\n <ng-container *ngFor=\"let customField of customFieldsTemplates\">\r\n <ng-template *ngIf=\"customField?.templateRef && customField.row == fields[0]?.row && customField.inline\" [ngTemplateOutlet]=\"customField?.templateRef!\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n\r\n <!-- #region Template for custom fields -->\r\n <ng-container *ngIf=\"customFields\" [ngTemplateOutlet]=\"customFields\" [ngTemplateOutletContext]=\"{formGroup: formGroup, row: fields[0].row}\"></ng-container>\r\n <ng-container *ngFor=\"let customField of customFieldsTemplates\">\r\n <ng-template *ngIf=\"customField?.templateRef && customField.row == ((fields[0]?.row??0)+1) && !customField.inline\" [ngTemplateOutlet]=\"customField?.templateRef!\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Form bottom -->\r\n <ng-container *ngIf=\"bottom\" [ngTemplateOutlet]=\"bottom\" [ngTemplateOutletContext]=\"{formGroup: formGroup}\"></ng-container>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Template for suffix buttons -->\r\n <ng-template #suffixButtons let-field>\r\n <ng-container *ngFor=\"let suffixButton of field.suffixButtons\" matSuffix>\r\n <button type=\"button\" mat-icon-button *ngIf=\"!suffixButton.hide || !suffixButton.hide(formValue, context)\" (click)=\"suffixButton.event && suffixButton.event(formValue, context)\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">{{suffixButton.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Debug value -->\r\n <code *ngIf=\"debugValue\">\r\n <pre>{{formValue | json}}</pre>\r\n </code>\r\n <!-- #endregion -->\r\n</div>", styles: [".mat-checkbox-wrap mat-error{transform:translate(36px,-20px);max-width:93%;font-size:var(--mat-typography-caption-font-size, 12px)}::ng-deep .mat-mdc-form-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-icon-suffix .color-picker{width:40px;display:block}::ng-deep .mat-mdc-form-field-type-mat-chip-grid .mat-mdc-form-field-infix{padding-top:7px!important;padding-bottom:7px!important}::ng-deep .mat-mdc-form-field-type-mat-chip-grid .mat-mdc-chip{padding-top:0!important;padding-bottom:0!important;margin-top:2px!important;margin-bottom:2px!important;margin-left:4px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1$1.JsonPipe, name: "json" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type:
22785
22990
  //--------------------
22786
22991
  MatAutocompleteModule }, { kind: "component", type: i4$2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i4$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5$1.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5$1.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i5$1.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled", "readonly", "matChipInputDisabledInteractive"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i5$1.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i5$1.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i5$1.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i6$1.MatCalendar, selector: "mat-calendar", inputs: ["headerComponent", "startAt", "startView", "selected", "minDate", "maxDate", "dateFilter", "dateClass", "comparisonStart", "comparisonEnd", "startDateAccessibleName", "endDateAccessibleName"], outputs: ["selectedChange", "yearSelected", "monthSelected", "viewChanged", "_userSelection", "_userDragDrop"], exportAs: ["matCalendar"] }, { kind: "component", type: i6$1.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i6$1.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i6$1.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type:
22787
22992
  //--------------------
@@ -22996,7 +23201,7 @@ class MatFormFieldEditorDirective {
22996
23201
  this.editorElement.focus();
22997
23202
  }
22998
23203
  }
22999
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MatFormFieldEditorDirective, deps: [{ token: i1$1.NgControl, optional: true, self: true }, { token: i1$1.NgForm, optional: true }, { token: i1$1.FormGroupDirective, optional: true }, { token: i2$5.ErrorStateMatcher }, { token: NG_VALUE_ACCESSOR, self: true }, { token: i3$2.Platform }, { token: i4$3.AutofillMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
23204
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MatFormFieldEditorDirective, deps: [{ token: i1$2.NgControl, optional: true, self: true }, { token: i1$2.NgForm, optional: true }, { token: i1$2.FormGroupDirective, optional: true }, { token: i2$5.ErrorStateMatcher }, { token: NG_VALUE_ACCESSOR, self: true }, { token: i3$1.Platform }, { token: i4$3.AutofillMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
23000
23205
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: MatFormFieldEditorDirective, isStandalone: true, selector: "[tinyMatFormControl]", inputs: { errorStateMatcher: "errorStateMatcher", disabled: "disabled", id: "id", placeholder: "placeholder", required: "required", value: "value" }, outputs: { editorChange: "editorChange" }, host: { listeners: { "onInit": "onEditorInit($event)" }, properties: { "attr.id": "id", "attr.aria-describedby": "ariaDescribedby || null", "attr.aria-invalid": "errorState", "attr.aria-required": "required.toString()" } }, providers: [{ provide: MatFormFieldControl, useExisting: MatFormFieldEditorDirective }], ngImport: i0 });
23001
23206
  }
23002
23207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MatFormFieldEditorDirective, decorators: [{
@@ -23011,20 +23216,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
23011
23216
  '[attr.aria-required]': 'required.toString()',
23012
23217
  }
23013
23218
  }]
23014
- }], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
23219
+ }], ctorParameters: () => [{ type: i1$2.NgControl, decorators: [{
23015
23220
  type: Optional
23016
23221
  }, {
23017
23222
  type: Self
23018
- }] }, { type: i1$1.NgForm, decorators: [{
23223
+ }] }, { type: i1$2.NgForm, decorators: [{
23019
23224
  type: Optional
23020
- }] }, { type: i1$1.FormGroupDirective, decorators: [{
23225
+ }] }, { type: i1$2.FormGroupDirective, decorators: [{
23021
23226
  type: Optional
23022
23227
  }] }, { type: i2$5.ErrorStateMatcher }, { type: i5$2.EditorComponent, decorators: [{
23023
23228
  type: Self
23024
23229
  }, {
23025
23230
  type: Inject,
23026
23231
  args: [NG_VALUE_ACCESSOR]
23027
- }] }, { type: i3$2.Platform }, { type: i4$3.AutofillMonitor }, { type: i0.NgZone }], propDecorators: { errorStateMatcher: [{
23232
+ }] }, { type: i3$1.Platform }, { type: i4$3.AutofillMonitor }, { type: i0.NgZone }], propDecorators: { errorStateMatcher: [{
23028
23233
  type: Input
23029
23234
  }], disabled: [{
23030
23235
  type: Input
@@ -23984,7 +24189,7 @@ class NativeElementInjectorDirective {
23984
24189
  this.control.control.nativeElement = this.elementRef.nativeElement;
23985
24190
  }
23986
24191
  }
23987
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NativeElementInjectorDirective, deps: [{ token: i0.ElementRef }, { token: i1$1.NgControl }, { token: i1$1.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
24192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NativeElementInjectorDirective, deps: [{ token: i0.ElementRef }, { token: i1$2.NgControl }, { token: i1$2.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
23988
24193
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: NativeElementInjectorDirective, isStandalone: true, selector: "[ngModel], [formControl], [formControlName]", ngImport: i0 });
23989
24194
  }
23990
24195
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NativeElementInjectorDirective, decorators: [{
@@ -23992,7 +24197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
23992
24197
  args: [{
23993
24198
  selector: '[ngModel], [formControl], [formControlName]'
23994
24199
  }]
23995
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$1.NgControl }, { type: i1$1.NgModel, decorators: [{
24200
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1$2.NgControl }, { type: i1$2.NgModel, decorators: [{
23996
24201
  type: Optional
23997
24202
  }] }] });
23998
24203
 
@@ -24055,7 +24260,7 @@ class UniqueValidatorDirective {
24055
24260
  }
24056
24261
  }));
24057
24262
  }
24058
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: UniqueValidatorDirective, deps: [{ token: i1$5.HttpClient }, { token: 'unique', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });
24263
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: UniqueValidatorDirective, deps: [{ token: i1$6.HttpClient }, { token: 'unique', attribute: true }], target: i0.ɵɵFactoryTarget.Directive });
24059
24264
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.0.3", type: UniqueValidatorDirective, isStandalone: true, selector: "[unique]", inputs: { uniqueProperty: "uniqueProperty", uniqueId: "uniqueId", uniqueParams: "uniqueParams", invert: "invert" }, providers: [{ provide: NG_ASYNC_VALIDATORS, useExisting: UniqueValidatorDirective, multi: true }], ngImport: i0 });
24060
24265
  }
24061
24266
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: UniqueValidatorDirective, decorators: [{
@@ -24064,7 +24269,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
24064
24269
  selector: '[unique]',
24065
24270
  providers: [{ provide: NG_ASYNC_VALIDATORS, useExisting: UniqueValidatorDirective, multi: true }]
24066
24271
  }]
24067
- }], ctorParameters: () => [{ type: i1$5.HttpClient }, { type: undefined, decorators: [{
24272
+ }], ctorParameters: () => [{ type: i1$6.HttpClient }, { type: undefined, decorators: [{
24068
24273
  type: Attribute,
24069
24274
  args: ['unique']
24070
24275
  }] }], propDecorators: { uniqueProperty: [{
@@ -24208,7 +24413,7 @@ class VdMenuComponent {
24208
24413
  this.onMouseLeave.emit({ event: $event, item: item });
24209
24414
  }
24210
24415
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdMenuComponent, deps: [{ token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
24211
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdMenuComponent, isStandalone: true, selector: "vd-menu", inputs: { items: "items", activeExact: "activeExact", fontSet: "fontSet", avatar: "avatar", mobile: "mobile" }, outputs: { onClick: "click", onMouseEnter: "over", onMouseLeave: "out" }, ngImport: i0, template: "<mat-nav-list>\r\n\t<mat-accordion displayMode=\"flat\">\r\n\t\t<ng-template let-item let-last=\"last\" ngFor [ngForOf]=\"items\">\r\n\t\t\t<ng-container *ngIf=\"(item?.items?.length ?? 0) > 0 && mobile; else singleItem\">\r\n\t\t\t\t<mat-expansion-panel class=\"mat-elevation-z raw\"\r\n\t\t\t\t\t\t\t\t\t (click)=\"$event.stopPropagation();\"\r\n\t\t\t\t\t\t\t\t\t [disabled]=\"!mobile\"\r\n\t\t\t\t\t\t\t\t\t [hideToggle]=\"!mobile || !item?.items?.length\"\r\n\t\t\t\t\t\t\t\t\t [ngClass]=\"{'icon-only': !item.title, 'mobile': mobile}\"\r\n\t\t\t\t\t\t\t\t\t (delayedHover)=\"(item.items?.length ?? 0) > 0 && itemMouseEnter(item.event ? item.event : $event, item)\"\r\n\t\t\t\t\t\t\t\t\t (mouseleave)=\"(item.items?.length ?? 0) >0 && false&& itemMouseLeave(item.event ? item.event : $event, item)\"\r\n\t\t\t\t\t\t\t\t\t [routerLinkActive]=\"['active']\"\r\n\t\t\t\t\t\t\t\t\t [routerLinkActiveOptions]=\"{exact:false}\">\r\n\t\t\t\t\t<mat-expansion-panel-header [expandedHeight]=\"'48px'\">\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"!avatar\" [style.color]=\"item.iconColor\">{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t<span *ngIf=\"!avatar && item.title\" [style.color]=\"item.textColor\">{{item.title}}</span>\r\n\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"avatar\">{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t<h3 *ngIf=\"avatar\">{{item.title}}</h3>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<mat-nav-list>\r\n\t\t\t\t\t\t<ng-template let-subItem let-subLast=\"last\" ngFor [ngForOf]=\"item.items\" class=\"sub-menu\">\r\n\t\t\t\t\t\t\t<a mat-list-item *ngIf=\"subItem.enabled\" [style.backgroundColor]=\"subItem.backgroundColor\" [routerLink]=\"subItem.path\" target=\"_{{MenuItemTarget[item.target??0].toLowerCase()}}\" [routerLinkActive]=\"['active']\" [ngClass]=\"{'icon-only': !subItem.title}\" [routerLinkActiveOptions]=\"{exact:subItem.activeExact??false}\" [fragment]=\"subItem.fragment\" (click)=\"itemClicked($event, subItem)\">\r\n\t\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"!avatar\" [style.color]=\"subItem.iconColor\">{{(subItem.icon | func:subItem) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!avatar && subItem.title\" [style.color]=\"subItem.textColor\">{{subItem.title}}</span>\r\n\t\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"avatar\">{{(subItem.icon | func:subItem) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<h3 *ngIf=\"avatar\">{{subItem.title}}</h3>\r\n\t\t\t\t\t\t\t\t<p *ngIf=\"avatar && subItem.description\">{{subItem.description}}</p>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t<mat-divider *ngIf=\"subItem.divider && !avatar\"></mat-divider>\r\n\t\t\t\t\t\t\t<mat-divider [inset]=\"avatar\" *ngIf=\"!subItem.divider && avatar && !subLast\"></mat-divider>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</mat-nav-list>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-template #singleItem>\r\n\t\t\t\t<a mat-list-item *ngIf=\"item.enabled\" [style.backgroundColor]=\"item.backgroundColor\" [routerLink]=\"item.path\" target=\"_{{MenuItemTarget[item.target??0].toLowerCase()}}\" [routerLinkActive]=\"['active']\" [ngClass]=\"{'icon-only': !item.title}\" [routerLinkActiveOptions]=\"{exact:item.activeExact??false}\" [fragment]=\"item.fragment\" (click)=\"itemClicked($event, item)\" (delayedHover)=\"(item.items?.length ?? 0) > 0 && itemMouseEnter(item.event ? item.event : $event, item)\" (mouseleave)=\"(item.items?.length ?? 0) >0 && false&& itemMouseLeave(item.event ? item.event : $event, item)\">\r\n\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"!avatar\" [style.color]=\"item.iconColor\" matListItemIcon>{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t<span *ngIf=\"!avatar && item.title\" [style.color]=\"item.textColor\" matListItemTitle>{{item.title}}</span>\r\n\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"avatar\" matListAvatar>{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t<h3 *ngIf=\"avatar\" matLine>{{item.title}}</h3>\r\n\t\t\t\t\t<p *ngIf=\"avatar && item.description\" matLine>{{item.description}}</p>\r\n\t\t\t\t</a>\r\n\t\t\t\t<mat-divider *ngIf=\"item.divider && !avatar\"></mat-divider>\r\n\t\t\t\t<mat-divider [inset]=\"avatar\" *ngIf=\"!item.divider && avatar && !last\"></mat-divider>\r\n\t\t\t</ng-template>\r\n\t\t</ng-template>\r\n\t</mat-accordion>\r\n</mat-nav-list>", styles: [":host ::ng-deep .mat-mdc-nav-list .mat-mdc-list-item.icon-only .mdc-list-item__content{display:none!important}:host ::ng-deep .mat-expansion-panel{background-color:transparent}:host ::ng-deep .mat-mdc-list-item,:host ::ng-deep .mat-expansion-panel{font-family:var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));font-weight:var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking))}:host ::ng-deep .mat-mdc-list-item:not(.active),:host ::ng-deep .mat-mdc-list-item:active,:host ::ng-deep .mat-mdc-list-item:focus,:host ::ng-deep .mat-expansion-panel:not(.active),:host ::ng-deep .mat-expansion-panel:active,:host ::ng-deep .mat-expansion-panel:focus{background-color:transparent!important}:host ::ng-deep .mat-mdc-list-item:not(.active):before,:host ::ng-deep .mat-mdc-list-item:active:before,:host ::ng-deep .mat-mdc-list-item:focus:before,:host ::ng-deep .mat-expansion-panel:not(.active):before,:host ::ng-deep .mat-expansion-panel:active:before,:host ::ng-deep .mat-expansion-panel:focus:before{background-color:transparent!important}:host ::ng-deep .mat-mdc-list-item mat-icon,:host ::ng-deep .mat-expansion-panel mat-icon{margin-right:18px;margin-bottom:3px}:host ::ng-deep .mat-mdc-list-item ::ng-deep .mat-expansion-panel-body,:host ::ng-deep .mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding-bottom:0!important}:host ::ng-deep .mat-mdc-list-item:not(.mobile)>.mat-expansion-panel-header,:host ::ng-deep .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header{padding:4px 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i4$4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i4$4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4$4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i4$4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6$3.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6$3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6$3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i6$3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "directive", type: VdDelayedHoverDirective, selector: "[delayedHover]", inputs: ["duration"], outputs: ["delayedHover"], exportAs: ["hesitation"] }, { kind: "pipe", type: FuncPipe, name: "func" }] });
24416
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdMenuComponent, isStandalone: true, selector: "vd-menu", inputs: { items: "items", activeExact: "activeExact", fontSet: "fontSet", avatar: "avatar", mobile: "mobile" }, outputs: { onClick: "click", onMouseEnter: "over", onMouseLeave: "out" }, ngImport: i0, template: "<mat-nav-list>\r\n\t<mat-accordion displayMode=\"flat\">\r\n\t\t<ng-template let-item let-last=\"last\" ngFor [ngForOf]=\"items\">\r\n\t\t\t<ng-container *ngIf=\"(item?.items?.length ?? 0) > 0 && mobile; else singleItem\">\r\n\t\t\t\t<mat-expansion-panel class=\"mat-elevation-z raw\"\r\n\t\t\t\t\t\t\t\t\t (click)=\"$event.stopPropagation();\"\r\n\t\t\t\t\t\t\t\t\t [disabled]=\"!mobile\"\r\n\t\t\t\t\t\t\t\t\t [hideToggle]=\"!mobile || !item?.items?.length\"\r\n\t\t\t\t\t\t\t\t\t [ngClass]=\"{'icon-only': !item.title, 'mobile': mobile}\"\r\n\t\t\t\t\t\t\t\t\t (delayedHover)=\"(item.items?.length ?? 0) > 0 && itemMouseEnter(item.event ? item.event : $event, item)\"\r\n\t\t\t\t\t\t\t\t\t (mouseleave)=\"(item.items?.length ?? 0) >0 && false&& itemMouseLeave(item.event ? item.event : $event, item)\"\r\n\t\t\t\t\t\t\t\t\t [routerLinkActive]=\"['active']\"\r\n\t\t\t\t\t\t\t\t\t [routerLinkActiveOptions]=\"{exact:false}\">\r\n\t\t\t\t\t<mat-expansion-panel-header [expandedHeight]=\"'48px'\">\r\n\t\t\t\t\t\t<mat-panel-title>\r\n\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"!avatar\" [style.color]=\"item.iconColor\">{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t<span *ngIf=\"!avatar && item.title\" [style.color]=\"item.textColor\">{{item.title}}</span>\r\n\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"avatar\">{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t<h3 *ngIf=\"avatar\">{{item.title}}</h3>\r\n\t\t\t\t\t\t</mat-panel-title>\r\n\t\t\t\t\t</mat-expansion-panel-header>\r\n\t\t\t\t\t<mat-nav-list>\r\n\t\t\t\t\t\t<ng-template let-subItem let-subLast=\"last\" ngFor [ngForOf]=\"item.items\" class=\"sub-menu\">\r\n\t\t\t\t\t\t\t<a mat-list-item *ngIf=\"subItem.enabled\" [style.backgroundColor]=\"subItem.backgroundColor\" [routerLink]=\"subItem.path\" target=\"_{{MenuItemTarget[item.target??0].toLowerCase()}}\" [routerLinkActive]=\"['active']\" [ngClass]=\"{'icon-only': !subItem.title}\" [routerLinkActiveOptions]=\"{exact:subItem.activeExact??false}\" [fragment]=\"subItem.fragment\" (click)=\"itemClicked($event, subItem)\">\r\n\t\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"!avatar\" [style.color]=\"subItem.iconColor\">{{(subItem.icon | func:subItem) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<span *ngIf=\"!avatar && subItem.title\" [style.color]=\"subItem.textColor\">{{subItem.title}}</span>\r\n\t\t\t\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"avatar\">{{(subItem.icon | func:subItem) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t\t\t\t<h3 *ngIf=\"avatar\">{{subItem.title}}</h3>\r\n\t\t\t\t\t\t\t\t<p *ngIf=\"avatar && subItem.description\">{{subItem.description}}</p>\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t<mat-divider *ngIf=\"subItem.divider && !avatar\"></mat-divider>\r\n\t\t\t\t\t\t\t<mat-divider [inset]=\"avatar\" *ngIf=\"!subItem.divider && avatar && !subLast\"></mat-divider>\r\n\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t</mat-nav-list>\r\n\t\t\t\t</mat-expansion-panel>\r\n\t\t\t</ng-container>\r\n\t\t\t<ng-template #singleItem>\r\n\t\t\t\t<a mat-list-item *ngIf=\"item.enabled\" [style.backgroundColor]=\"item.backgroundColor\" [routerLink]=\"item.path\" target=\"_{{MenuItemTarget[item.target??0].toLowerCase()}}\" [routerLinkActive]=\"['active']\" [ngClass]=\"{'icon-only': !item.title}\" [routerLinkActiveOptions]=\"{exact:item.activeExact??false}\" [fragment]=\"item.fragment\" (click)=\"itemClicked($event, item)\" (delayedHover)=\"(item.items?.length ?? 0) > 0 && itemMouseEnter(item.event ? item.event : $event, item)\" (mouseleave)=\"(item.items?.length ?? 0) >0 && false&& itemMouseLeave(item.event ? item.event : $event, item)\">\r\n\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"!avatar\" [style.color]=\"item.iconColor\" matListItemIcon>{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t<span *ngIf=\"!avatar && item.title\" [style.color]=\"item.textColor\" matListItemTitle>{{item.title}}</span>\r\n\t\t\t\t\t<mat-icon [fontSet]=\"fontSet\" *ngIf=\"avatar\" matListAvatar>{{(item.icon | func:item) || 'radio_button_unchecked'}}</mat-icon>\r\n\t\t\t\t\t<h3 *ngIf=\"avatar\" matLine>{{item.title}}</h3>\r\n\t\t\t\t\t<p *ngIf=\"avatar && item.description\" matLine>{{item.description}}</p>\r\n\t\t\t\t</a>\r\n\t\t\t\t<mat-divider *ngIf=\"item.divider && !avatar\"></mat-divider>\r\n\t\t\t\t<mat-divider [inset]=\"avatar\" *ngIf=\"!item.divider && avatar && !last\"></mat-divider>\r\n\t\t\t</ng-template>\r\n\t\t</ng-template>\r\n\t</mat-accordion>\r\n</mat-nav-list>", styles: [":host ::ng-deep .mat-mdc-nav-list .mat-mdc-list-item.icon-only .mdc-list-item__content{display:none!important}:host ::ng-deep .mat-expansion-panel{background-color:transparent}:host ::ng-deep .mat-mdc-list-item,:host ::ng-deep .mat-expansion-panel{font-family:var(--mat-expansion-header-text-font, var(--mat-sys-title-medium-font));font-weight:var(--mat-expansion-header-text-weight, var(--mat-sys-title-medium-weight));line-height:var(--mat-expansion-header-text-line-height, var(--mat-sys-title-medium-line-height));letter-spacing:var(--mat-expansion-header-text-tracking, var(--mat-sys-title-medium-tracking))}:host ::ng-deep .mat-mdc-list-item:not(.active),:host ::ng-deep .mat-mdc-list-item:active,:host ::ng-deep .mat-mdc-list-item:focus,:host ::ng-deep .mat-expansion-panel:not(.active),:host ::ng-deep .mat-expansion-panel:active,:host ::ng-deep .mat-expansion-panel:focus{background-color:transparent!important}:host ::ng-deep .mat-mdc-list-item:not(.active):before,:host ::ng-deep .mat-mdc-list-item:active:before,:host ::ng-deep .mat-mdc-list-item:focus:before,:host ::ng-deep .mat-expansion-panel:not(.active):before,:host ::ng-deep .mat-expansion-panel:active:before,:host ::ng-deep .mat-expansion-panel:focus:before{background-color:transparent!important}:host ::ng-deep .mat-mdc-list-item mat-icon,:host ::ng-deep .mat-expansion-panel mat-icon{margin-right:18px;margin-bottom:3px}:host ::ng-deep .mat-mdc-list-item ::ng-deep .mat-expansion-panel-body,:host ::ng-deep .mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding-bottom:0!important}:host ::ng-deep .mat-mdc-list-item:not(.mobile)>.mat-expansion-panel-header,:host ::ng-deep .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header{padding:4px 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1$3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i4$4.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i4$4.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i4$4.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "component", type: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i4$4.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i6$3.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i6$3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i6$3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i6$3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "directive", type: VdDelayedHoverDirective, selector: "[delayedHover]", inputs: ["duration"], outputs: ["delayedHover"], exportAs: ["hesitation"] }, { kind: "pipe", type: FuncPipe, name: "func" }] });
24212
24417
  }
24213
24418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdMenuComponent, decorators: [{
24214
24419
  type: Component,
@@ -25018,12 +25223,12 @@ class MenuFormIncludesResolve {
25018
25223
  return includes;
25019
25224
  }));
25020
25225
  }
25021
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuFormIncludesResolve, deps: [{ token: i1$6.OidcSecurityService }], target: i0.ɵɵFactoryTarget.Injectable });
25226
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuFormIncludesResolve, deps: [{ token: i1$7.OidcSecurityService }], target: i0.ɵɵFactoryTarget.Injectable });
25022
25227
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuFormIncludesResolve });
25023
25228
  }
25024
25229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuFormIncludesResolve, decorators: [{
25025
25230
  type: Injectable
25026
- }], ctorParameters: () => [{ type: i1$6.OidcSecurityService }] });
25231
+ }], ctorParameters: () => [{ type: i1$7.OidcSecurityService }] });
25027
25232
 
25028
25233
  /**
25029
25234
  * Includes resolve service
@@ -25064,12 +25269,12 @@ class MenuItemFormIncludesResolve {
25064
25269
  return includes;
25065
25270
  }));
25066
25271
  }
25067
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuItemFormIncludesResolve, deps: [{ token: i1$6.OidcSecurityService }], target: i0.ɵɵFactoryTarget.Injectable });
25272
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuItemFormIncludesResolve, deps: [{ token: i1$7.OidcSecurityService }], target: i0.ɵɵFactoryTarget.Injectable });
25068
25273
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuItemFormIncludesResolve });
25069
25274
  }
25070
25275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuItemFormIncludesResolve, decorators: [{
25071
25276
  type: Injectable
25072
- }], ctorParameters: () => [{ type: i1$6.OidcSecurityService }] });
25277
+ }], ctorParameters: () => [{ type: i1$7.OidcSecurityService }] });
25073
25278
 
25074
25279
  /**
25075
25280
  * Includes resolve service
@@ -25110,12 +25315,12 @@ class MenuListProjectionResolve {
25110
25315
  return projection;
25111
25316
  }));
25112
25317
  }
25113
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuListProjectionResolve, deps: [{ token: i1$6.OidcSecurityService }], target: i0.ɵɵFactoryTarget.Injectable });
25318
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuListProjectionResolve, deps: [{ token: i1$7.OidcSecurityService }], target: i0.ɵɵFactoryTarget.Injectable });
25114
25319
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuListProjectionResolve });
25115
25320
  }
25116
25321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: MenuListProjectionResolve, decorators: [{
25117
25322
  type: Injectable
25118
- }], ctorParameters: () => [{ type: i1$6.OidcSecurityService }] });
25323
+ }], ctorParameters: () => [{ type: i1$7.OidcSecurityService }] });
25119
25324
 
25120
25325
  /**
25121
25326
  * Settings resolve service
@@ -25224,13 +25429,13 @@ class SubMenuResolve {
25224
25429
  }
25225
25430
  return undefined;
25226
25431
  }
25227
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SubMenuResolve, deps: [{ token: i1$2.Router }, { token: i1$2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
25432
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SubMenuResolve, deps: [{ token: i1$3.Router }, { token: i1$3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
25228
25433
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SubMenuResolve, providedIn: 'root' });
25229
25434
  }
25230
25435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: SubMenuResolve, decorators: [{
25231
25436
  type: Injectable,
25232
25437
  args: [{ providedIn: 'root' }]
25233
- }], ctorParameters: () => [{ type: i1$2.Router }, { type: i1$2.ActivatedRoute }] });
25438
+ }], ctorParameters: () => [{ type: i1$3.Router }, { type: i1$3.ActivatedRoute }] });
25234
25439
 
25235
25440
  class VdLayoutComponent {
25236
25441
  media;
@@ -25421,7 +25626,7 @@ class VdLayoutComponent {
25421
25626
  this.closeMenu($event);
25422
25627
  }
25423
25628
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutComponent, deps: [{ token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
25424
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutComponent, isStandalone: true, selector: "vd-layout", inputs: { menuItems: "menuItems", showDebugBanner: "showDebugBanner", mode: "mode", color: "color", opened: "opened", mini: "mini", sideGt: "sideGt", sidenavWidth: "sidenavWidth", subMenuWidth: "subMenuWidth" }, outputs: { expandedChange: "expandedChange" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "subMenuDrawer", first: true, predicate: ["subMenuDrawer"], descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container fullscreen [ngClass]=\"{'sidenav-container-mini': mini}\">\r\n\t<mat-sidenav #sidenav class=\"vd-layout-sidenav\" [mode]=\"mode\" [opened]=\"opened\" [ngClass]=\"{'sidenav-mini': mini}\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\" [disableClose]=\"disableClose\">\r\n\t\t<ng-content select=\"vd-navigation-drawer\"></ng-content>\r\n\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t</mat-sidenav>\r\n\t<mat-drawer-container fullscreen>\r\n\t\t<mat-drawer #subMenuDrawer mode=\"over\" class=\"mat-drawer-submenu\" [style.max-width]=\"subMenuWidth\" [style.min-width]=\"subMenuWidth\" (mouseleave)=\"onSubMenuMouseOut($event)\">\r\n\t\t\t<vd-menu [items]=\"menuItems\" [activeExact]=\"false\" [mobile]=\"mobile\" (click)=\"closeMenu($event)\"></vd-menu>\r\n\t\t</mat-drawer>\r\n\t\t<div *ngIf=\"showDebugBanner\" class=\"debug-banner\">DEBUG</div>\r\n\t\t<ng-content></ng-content>\r\n\t</mat-drawer-container>\r\n</mat-sidenav-container>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host ::ng-deep>mat-sidenav-container>mat-sidenav{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column;border-right:none}:host ::ng-deep>mat-sidenav-container.sidenav-container-mini .vd-layout-nav-wrapper>mat-toolbar .vd-layout-menu-button{display:none!important}:host ::ng-deep>mat-sidenav-container.sidenav-container-mini .mat-drawer.mat-drawer-submenu{border-radius:0 16px 16px 0}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-expansion-panel-header-title mat-icon,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-expansion-panel-header-title mat-icon{margin-right:0!important}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-content-hide-toggle,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-content-hide-toggle{margin-right:0!important}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel ::ng-deep .mat-expansion-panel-body,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0!important}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header{padding:6px 0;height:52px!important;justify-content:center}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header>.mat-content>.mat-expansion-panel-header-title,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header>.mat-content>.mat-expansion-panel-header-title{display:flex;flex-direction:column;width:80px;margin:0 auto;justify-content:center;font-size:.83em}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item{display:flex;flex-direction:column;width:80px;margin:0 auto 4px;padding:6px 0;height:66px!important;justify-content:center}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item .mdc-list-item__content .mat-mdc-list-item-title,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item .mdc-list-item__content .mat-mdc-list-item-title{font-size:.83em;font-weight:500;letter-spacing:-.5px;padding-top:2px}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive:before,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive:before{background-color:inherit;width:56px;height:32px;border-radius:16px;position:absolute;top:3px;margin-right:auto;margin-bottom:4px;margin-left:auto}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive.active:before,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive.active:before{background-color:var(--mat-sys-primary)!important}:host ::ng-deep mat-nav-list .mdc-list-item--with-leading-icon .mat-mdc-list-item-title{overflow:hidden;text-overflow:ellipsis;display:inline!important}:host ::ng-deep mat-nav-list .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-right:18px!important}:host ::ng-deep .debug-banner{position:fixed;top:11px;right:-38px;background-color:#6d0000;color:#fff;padding:1px 36px;font-size:12px;text-transform:uppercase;z-index:1000;transform:rotate(45deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$3.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i3$3.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i3$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: VdMenuComponent, selector: "vd-menu", inputs: ["items", "activeExact", "fontSet", "avatar", "mobile"], outputs: ["click", "over", "out"] }] });
25629
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutComponent, isStandalone: true, selector: "vd-layout", inputs: { menuItems: "menuItems", showDebugBanner: "showDebugBanner", mode: "mode", color: "color", opened: "opened", mini: "mini", sideGt: "sideGt", sidenavWidth: "sidenavWidth", subMenuWidth: "subMenuWidth" }, outputs: { expandedChange: "expandedChange" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "subMenuDrawer", first: true, predicate: ["subMenuDrawer"], descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container fullscreen [ngClass]=\"{'sidenav-container-mini': mini}\">\r\n\t<mat-sidenav #sidenav class=\"vd-layout-sidenav\" [mode]=\"mode\" [opened]=\"opened\" [ngClass]=\"{'sidenav-mini': mini}\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\" [disableClose]=\"disableClose\">\r\n\t\t<ng-content select=\"vd-navigation-drawer\"></ng-content>\r\n\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t</mat-sidenav>\r\n\t<mat-drawer-container fullscreen>\r\n\t\t<mat-drawer #subMenuDrawer mode=\"over\" class=\"mat-drawer-submenu\" [style.max-width]=\"subMenuWidth\" [style.min-width]=\"subMenuWidth\" (mouseleave)=\"onSubMenuMouseOut($event)\">\r\n\t\t\t<vd-menu [items]=\"menuItems\" [activeExact]=\"false\" [mobile]=\"mobile\" (click)=\"closeMenu($event)\"></vd-menu>\r\n\t\t</mat-drawer>\r\n\t\t<div *ngIf=\"showDebugBanner\" class=\"debug-banner\">DEBUG</div>\r\n\t\t<ng-content></ng-content>\r\n\t</mat-drawer-container>\r\n</mat-sidenav-container>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host ::ng-deep>mat-sidenav-container>mat-sidenav{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column;border-right:none}:host ::ng-deep>mat-sidenav-container.sidenav-container-mini .vd-layout-nav-wrapper>mat-toolbar .vd-layout-menu-button{display:none!important}:host ::ng-deep>mat-sidenav-container.sidenav-container-mini .mat-drawer.mat-drawer-submenu{border-radius:0 16px 16px 0}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-expansion-panel-header-title mat-icon,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-expansion-panel-header-title mat-icon{margin-right:0!important}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-content-hide-toggle,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel>.mat-expansion-panel-header .mat-content-hide-toggle{margin-right:0!important}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel ::ng-deep .mat-expansion-panel-body,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0!important}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header{padding:6px 0;height:52px!important;justify-content:center}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header>.mat-content>.mat-expansion-panel-header-title,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-expansion-panel:not(.mobile)>.mat-expansion-panel-header>.mat-content>.mat-expansion-panel-header-title{display:flex;flex-direction:column;width:80px;margin:0 auto;justify-content:center;font-size:.83em}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item{display:flex;flex-direction:column;width:80px;margin:0 auto 4px;padding:6px 0;height:66px!important;justify-content:center}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item .mdc-list-item__content .mat-mdc-list-item-title,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item .mdc-list-item__content .mat-mdc-list-item-title{font-size:.83em;font-weight:500;letter-spacing:-.5px;padding-top:2px}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive:before,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive:before{background-color:inherit;width:56px;height:32px;border-radius:16px;position:absolute;top:3px;margin-right:auto;margin-bottom:4px;margin-left:auto}:host ::ng-deep .sidenav-mini .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive.active:before,:host ::ng-deep .sidenav-mini .vd-navigation-drawer-menu-content mat-nav-list .mat-mdc-list-item.mat-mdc-list-item-interactive.active:before{background-color:var(--mat-sys-primary)!important}:host ::ng-deep mat-nav-list .mdc-list-item--with-leading-icon .mat-mdc-list-item-title{overflow:hidden;text-overflow:ellipsis;display:inline!important}:host ::ng-deep mat-nav-list .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-right:18px!important}:host ::ng-deep .debug-banner{position:fixed;top:11px;right:-38px;background-color:#6d0000;color:#fff;padding:1px 36px;font-size:12px;text-transform:uppercase;z-index:1000;transform:rotate(45deg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$2.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i3$2.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i3$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$2.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: VdMenuComponent, selector: "vd-menu", inputs: ["items", "activeExact", "fontSet", "avatar", "mobile"], outputs: ["click", "over", "out"] }] });
25425
25630
  }
25426
25631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutComponent, decorators: [{
25427
25632
  type: Component,
@@ -25488,7 +25693,7 @@ class VdLayoutCardOverComponent {
25488
25693
  */
25489
25694
  color = 'primary';
25490
25695
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutCardOverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
25491
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutCardOverComponent, isStandalone: true, selector: "vd-layout-card-over", inputs: { cardTitle: "cardTitle", cardSubtitle: "cardSubtitle", cardWidth: "cardWidth", color: "color" }, ngImport: i0, template: "<mat-toolbar [color]=\"color\"></mat-toolbar>\r\n<div class=\"vd-layout-card-over-wrapper\">\r\n\t<div class=\"vd-layout-card-over\" [style.max-width.%]=\"cardWidth\" [style.flex]=\"'1 1 ' + cardWidth + '%'\" [style.-ms-flex]=\"'1 1 ' + cardWidth + '%'\" [style.-webkit-box-flex]=\"1\">\r\n\t\t<mat-card>\r\n\t\t\t<mat-card-title *ngIf=\"cardTitle\">{{cardTitle}}</mat-card-title>\r\n\t\t\t<mat-card-subtitle *ngIf=\"cardSubtitle\">{{cardSubtitle}}</mat-card-subtitle>\r\n\t\t\t<mat-divider *ngIf=\"cardTitle || cardSubtitle\"></mat-divider>\r\n\t\t\t<ng-content></ng-content>\r\n\t\t</mat-card>\r\n\t\t<ng-content select=\"[vd-after-card]\"></ng-content>\r\n\t</div>\r\n</div>", styles: [":host{position:relative;display:block;z-index:2;width:100%;min-height:100%;height:100%}:host [vd-after-card]{display:block}:host.accordion>.vd-layout-card-over-wrapper>.vd-layout-card-over ::ng-deep>.mat-mdc-card{background-color:transparent;box-shadow:none;padding-bottom:24px;border:none}:host.tab>.vd-layout-card-over-wrapper{margin:-56px 0}:host mat-expansion-panel .mat-expansion-panel-header{font-size:1.1em}:host mat-expansion-panel .mat-expansion-panel-header[aria-disabled=true]{padding-right:0}:host mat-expansion-panel .mat-expansion-panel-header.enabled[aria-disabled=true]{color:inherit}:host mat-expansion-panel .enabled .mat-expansion-panel-header[aria-disabled=true]{color:inherit}.vd-layout-card-over-wrapper{margin:-64px 0;width:100%;min-height:100%;height:100%}@media (min-width: 960px){.vd-layout-card-over-wrapper{flex-direction:row;box-sizing:border-box;display:flex;align-items:flex-start;align-content:flex-start;justify-content:center}.vd-layout-card-over-wrapper .vd-layout-card-over{max-height:100%;box-sizing:border-box}}@media (max-width: 959px){.vd-layout-card-over-wrapper .vd-layout-card-over{max-width:100%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3$4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3$4.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i3$4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
25696
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutCardOverComponent, isStandalone: true, selector: "vd-layout-card-over", inputs: { cardTitle: "cardTitle", cardSubtitle: "cardSubtitle", cardWidth: "cardWidth", color: "color" }, ngImport: i0, template: "<mat-toolbar [color]=\"color\"></mat-toolbar>\r\n<div class=\"vd-layout-card-over-wrapper\">\r\n\t<div class=\"vd-layout-card-over\" [style.max-width.%]=\"cardWidth\" [style.flex]=\"'1 1 ' + cardWidth + '%'\" [style.-ms-flex]=\"'1 1 ' + cardWidth + '%'\" [style.-webkit-box-flex]=\"1\">\r\n\t\t<mat-card>\r\n\t\t\t<mat-card-title *ngIf=\"cardTitle\">{{cardTitle}}</mat-card-title>\r\n\t\t\t<mat-card-subtitle *ngIf=\"cardSubtitle\">{{cardSubtitle}}</mat-card-subtitle>\r\n\t\t\t<mat-divider *ngIf=\"cardTitle || cardSubtitle\"></mat-divider>\r\n\t\t\t<ng-content></ng-content>\r\n\t\t</mat-card>\r\n\t\t<ng-content select=\"[vd-after-card]\"></ng-content>\r\n\t</div>\r\n</div>", styles: [":host{position:relative;display:block;z-index:2;width:100%;min-height:100%;height:100%}:host [vd-after-card]{display:block}:host.accordion>.vd-layout-card-over-wrapper>.vd-layout-card-over ::ng-deep>.mat-mdc-card{background-color:transparent;box-shadow:none;padding-bottom:24px;border:none}:host.tab>.vd-layout-card-over-wrapper{margin:-56px 0}:host mat-expansion-panel .mat-expansion-panel-header{font-size:1.1em}:host mat-expansion-panel .mat-expansion-panel-header[aria-disabled=true]{padding-right:0}:host mat-expansion-panel .mat-expansion-panel-header.enabled[aria-disabled=true]{color:inherit}:host mat-expansion-panel .enabled .mat-expansion-panel-header[aria-disabled=true]{color:inherit}.vd-layout-card-over-wrapper{margin:-64px 0;width:100%;min-height:100%;height:100%}@media (min-width: 960px){.vd-layout-card-over-wrapper{flex-direction:row;box-sizing:border-box;display:flex;align-items:flex-start;align-content:flex-start;justify-content:center}.vd-layout-card-over-wrapper .vd-layout-card-over{max-height:100%;box-sizing:border-box}}@media (max-width: 959px){.vd-layout-card-over-wrapper .vd-layout-card-over{max-width:100%!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3$3.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i3$3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }] });
25492
25697
  }
25493
25698
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutCardOverComponent, decorators: [{
25494
25699
  type: Component,
@@ -25665,7 +25870,7 @@ class VdLayoutCompactComponent {
25665
25870
  }
25666
25871
  }
25667
25872
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutCompactComponent, deps: [{ token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
25668
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutCompactComponent, isStandalone: true, selector: "vd-layout-compact", inputs: { menuItems: "menuItems", mode: "mode", opened: "opened", expanded: "expanded", sideGt: "sideGt", sidenavWidth: "sidenavWidth", subMenuWidth: "subMenuWidth" }, outputs: { expandedChange: "expandedChange" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "subMenuDrawer", first: true, predicate: ["subMenuDrawer"], descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container class=\"sidenav-container-mini\" fullscreen>\r\n\t<mat-sidenav #sidenav class=\"vd-layout-sidenav sidenav-mini\" [mode]=\"mode\" [opened]=\"opened\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\" [disableClose]=\"disableClose\">\r\n\t\t<ng-content select=\"vd-navigation-drawer\"></ng-content>\r\n\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t</mat-sidenav>\r\n\t<mat-drawer-container fullscreen>\r\n\t\t<mat-drawer #subMenuDrawer mode=\"over\" [style.max-width]=\"subMenuWidth\" [style.min-width]=\"subMenuWidth\" (mouseenter)=\"onSubMenuMouseOver($event)\" (mouseleave)=\"onSubMenuMouseOut($event)\">\r\n\t\t\t<vd-menu [items]=\"menuItems\" [activeExact]=\"false\"></vd-menu>\r\n\t\t</mat-drawer>\r\n\t\t<ng-content></ng-content>\r\n\t</mat-drawer-container>\r\n</mat-sidenav-container>", styles: [":host ::ng-deep .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item{display:flex;flex-direction:column;width:80px;margin:0 auto;padding:6px 0;height:66px!important}:host ::ng-deep .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item .mdc-list-item__content .mat-mdc-list-item-title{font-size:12px;font-weight:400;letter-spacing:.1px;padding-top:2px}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$3.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i3$3.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i3$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: VdMenuComponent, selector: "vd-menu", inputs: ["items", "activeExact", "fontSet", "avatar", "mobile"], outputs: ["click", "over", "out"] }] });
25873
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutCompactComponent, isStandalone: true, selector: "vd-layout-compact", inputs: { menuItems: "menuItems", mode: "mode", opened: "opened", expanded: "expanded", sideGt: "sideGt", sidenavWidth: "sidenavWidth", subMenuWidth: "subMenuWidth" }, outputs: { expandedChange: "expandedChange" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }, { propertyName: "subMenuDrawer", first: true, predicate: ["subMenuDrawer"], descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container class=\"sidenav-container-mini\" fullscreen>\r\n\t<mat-sidenav #sidenav class=\"vd-layout-sidenav sidenav-mini\" [mode]=\"mode\" [opened]=\"opened\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\" [disableClose]=\"disableClose\">\r\n\t\t<ng-content select=\"vd-navigation-drawer\"></ng-content>\r\n\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t</mat-sidenav>\r\n\t<mat-drawer-container fullscreen>\r\n\t\t<mat-drawer #subMenuDrawer mode=\"over\" [style.max-width]=\"subMenuWidth\" [style.min-width]=\"subMenuWidth\" (mouseenter)=\"onSubMenuMouseOver($event)\" (mouseleave)=\"onSubMenuMouseOut($event)\">\r\n\t\t\t<vd-menu [items]=\"menuItems\" [activeExact]=\"false\"></vd-menu>\r\n\t\t</mat-drawer>\r\n\t\t<ng-content></ng-content>\r\n\t</mat-drawer-container>\r\n</mat-sidenav-container>", styles: [":host ::ng-deep .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item{display:flex;flex-direction:column;width:80px;margin:0 auto;padding:6px 0;height:66px!important}:host ::ng-deep .vd-navigation-drawer-content mat-nav-list .mat-mdc-list-item .mdc-list-item__content .mat-mdc-list-item-title{font-size:12px;font-weight:400;letter-spacing:.1px;padding-top:2px}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i3$2.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i3$2.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i3$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$2.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: VdMenuComponent, selector: "vd-menu", inputs: ["items", "activeExact", "fontSet", "avatar", "mobile"], outputs: ["click", "over", "out"] }] });
25669
25874
  }
25670
25875
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutCompactComponent, decorators: [{
25671
25876
  type: Component,
@@ -25837,7 +26042,7 @@ class VdLayoutManageListComponent {
25837
26042
  */
25838
26043
  close() { return this.sidenav?.close(); }
25839
26044
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutManageListComponent, deps: [{ token: forwardRef(() => VdLayoutComponent) }, { token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
25840
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutManageListComponent, isStandalone: true, selector: "vd-layout-manage-list", inputs: { title: "title", closable: "closable", menuItems: "menuItems", mode: "mode", sideGt: "sideGt", opened: "opened", openedGt: "openedGt", sidenavWidth: "sidenavWidth", sidenavGtXsWidth: "sidenavGtXsWidth" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container fullscreen class=\"vd-layout-manage-list\">\r\n\t<!-- #region Side nav -->\r\n\t<mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened && !mini\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n\t\t<!-- #region Nav list toolbar -->\r\n\t\t<mat-toolbar dense *ngIf=\"title\">\r\n\t\t\t<span>{{title}}</span>\r\n\t\t\t<span flex></span>\r\n\t\t\t<button mat-icon-button (click)=\"close()\" *ngIf=\"closable\">\r\n\t\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">menu_open</mat-icon>\r\n\t\t\t</button>\r\n\t\t</mat-toolbar>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom title toolbar -->\r\n\t\t<ng-content select=\"mat-toolbar[vd-sidenav-content]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<div class=\"vd-layout-manage-list-sidenav\" cdkScrollable>\r\n\t\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t\t\t<ng-content select=\"vd-menu\"></ng-content>\r\n\t\t\t<vd-menu *ngIf=\"menuItems\" [items]=\"menuItems!\"></vd-menu>\r\n\t\t</div>\r\n\t</mat-sidenav>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Main content -->\r\n\t<div class=\"vd-layout-manage-list-main\">\r\n\t\t<!-- #region Toolbar projection -->\r\n\t\t<ng-content select=\"mat-toolbar\"></ng-content>\r\n\t\t<!-- <ng-content select=\"vd-list-toolbar\"></ng-content> -->\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Scrollable content -->\r\n\t\t<div class=\"vd-layout-manage-list-content\" cdkScrollable>\r\n\t\t\t<ng-content></ng-content>\r\n\t\t</div>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Footer content -->\r\n\t\t<ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\t</div>\r\n\t<!-- #endregion -->\r\n</mat-sidenav-container>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host mat-sidenav-container.vd-layout-manage-list{flex:1}:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-opened,:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-opening,:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-closed,:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-closing{box-shadow:0 1px 3px #0003}:host mat-sidenav-container.vd-layout-manage-list ::ng-deep .mat-drawer-inner-container{overflow:hidden}:host mat-sidenav-container.vd-layout-manage-list ::ng-deep .mat-drawer-inner-container .mat-mdc-list-item .mat-mdc-list-item-title{overflow:hidden;text-overflow:ellipsis;display:inline}:host .vd-layout-manage-list-sidenav{text-align:start;flex:1;display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-manage-list-main{margin:0;width:100%;min-height:100%;height:100%;position:relative;overflow:auto;flex-direction:column;box-sizing:border-box;display:flex}:host .vd-layout-manage-list-main .vd-layout-manage-list-content{display:block;position:relative;overflow:hidden;-webkit-overflow-scrolling:touch;flex:1}:host .vd-layout-manage-list-main .vd-layout-manage-list-content ::ng-deep .mat-table-container{height:calc(100vh - 122px);max-height:calc(100vh - 122px)}:host ::ng-deep mat-sidenav-container.vd-layout-manage-list>.mat-drawer-content{flex-grow:1}:host ::ng-deep mat-sidenav-container.vd-layout-manage-list>mat-sidenav{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column}:host ::ng-deep .mat-toolbar{font-weight:400;display:flex;align-items:center;padding-left:4px}:host ::ng-deep .mat-toolbar *{overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .mat-toolbar>.mdc-icon-button{margin-right:-2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "directive", type: i3$5.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: VdMenuComponent, selector: "vd-menu", inputs: ["items", "activeExact", "fontSet", "avatar", "mobile"], outputs: ["click", "over", "out"] }] });
26045
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutManageListComponent, isStandalone: true, selector: "vd-layout-manage-list", inputs: { title: "title", closable: "closable", menuItems: "menuItems", mode: "mode", sideGt: "sideGt", opened: "opened", openedGt: "openedGt", sidenavWidth: "sidenavWidth", sidenavGtXsWidth: "sidenavGtXsWidth" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<mat-sidenav-container fullscreen class=\"vd-layout-manage-list\">\r\n\t<!-- #region Side nav -->\r\n\t<mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened && !mini\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n\t\t<!-- #region Nav list toolbar -->\r\n\t\t<mat-toolbar dense *ngIf=\"title\">\r\n\t\t\t<span>{{title}}</span>\r\n\t\t\t<span flex></span>\r\n\t\t\t<button mat-icon-button (click)=\"close()\" *ngIf=\"closable\">\r\n\t\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">menu_open</mat-icon>\r\n\t\t\t</button>\r\n\t\t</mat-toolbar>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom title toolbar -->\r\n\t\t<ng-content select=\"mat-toolbar[vd-sidenav-content]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<div class=\"vd-layout-manage-list-sidenav\" cdkScrollable>\r\n\t\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t\t\t<ng-content select=\"vd-menu\"></ng-content>\r\n\t\t\t<vd-menu *ngIf=\"menuItems\" [items]=\"menuItems!\"></vd-menu>\r\n\t\t</div>\r\n\t</mat-sidenav>\r\n\t<!-- #endregion -->\r\n\r\n\t<!-- #region Main content -->\r\n\t<div class=\"vd-layout-manage-list-main\">\r\n\t\t<!-- #region Toolbar projection -->\r\n\t\t<ng-content select=\"mat-toolbar\"></ng-content>\r\n\t\t<!-- <ng-content select=\"vd-list-toolbar\"></ng-content> -->\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Scrollable content -->\r\n\t\t<div class=\"vd-layout-manage-list-content\" cdkScrollable>\r\n\t\t\t<ng-content></ng-content>\r\n\t\t</div>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Footer content -->\r\n\t\t<ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\t</div>\r\n\t<!-- #endregion -->\r\n</mat-sidenav-container>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host mat-sidenav-container.vd-layout-manage-list{flex:1}:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-opened,:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-opening,:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-closed,:host mat-sidenav-container.vd-layout-manage-list>mat-sidenav.mat-drawer-closing{box-shadow:0 1px 3px #0003}:host mat-sidenav-container.vd-layout-manage-list ::ng-deep .mat-drawer-inner-container{overflow:hidden}:host mat-sidenav-container.vd-layout-manage-list ::ng-deep .mat-drawer-inner-container .mat-mdc-list-item .mat-mdc-list-item-title{overflow:hidden;text-overflow:ellipsis;display:inline}:host .vd-layout-manage-list-sidenav{text-align:start;flex:1;display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-manage-list-main{margin:0;width:100%;min-height:100%;height:100%;position:relative;overflow:auto;flex-direction:column;box-sizing:border-box;display:flex}:host .vd-layout-manage-list-main .vd-layout-manage-list-content{display:block;position:relative;overflow:hidden;-webkit-overflow-scrolling:touch;flex:1}:host .vd-layout-manage-list-main .vd-layout-manage-list-content ::ng-deep .mat-table-container{height:calc(100vh - 122px);max-height:calc(100vh - 122px)}:host ::ng-deep mat-sidenav-container.vd-layout-manage-list>.mat-drawer-content{flex-grow:1}:host ::ng-deep mat-sidenav-container.vd-layout-manage-list>mat-sidenav{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column}:host ::ng-deep .mat-toolbar{font-weight:400;display:flex;align-items:center;padding-left:4px}:host ::ng-deep .mat-toolbar *{overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .mat-toolbar>.mdc-icon-button{margin-right:-2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "directive", type: i3$4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$2.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: VdMenuComponent, selector: "vd-menu", inputs: ["items", "activeExact", "fontSet", "avatar", "mobile"], outputs: ["click", "over", "out"] }] });
25841
26046
  }
25842
26047
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutManageListComponent, decorators: [{
25843
26048
  type: Component,
@@ -26174,8 +26379,8 @@ class VdLayoutNavListComponent {
26174
26379
  close() {
26175
26380
  return this.sidenav?.close();
26176
26381
  }
26177
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutNavListComponent, deps: [{ token: i1$2.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
26178
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutNavListComponent, isStandalone: true, selector: "vd-layout-nav-list", inputs: { toolbarTitle: "toolbarTitle", icon: "icon", logo: "logo", color: "color", mode: "mode", opened: "opened", sidenavWidth: "sidenavWidth", navigationRoute: "navigationRoute" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<div class=\"vd-layout-nav-list-wrapper\">\r\n\t<mat-sidenav-container fullscreen class=\"vd-layout-nav-list\">\r\n\t\t<!-- #region Sidenav -->\r\n\t\t<mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n\t\t\t<!-- #region Sidenav toolbar -->\r\n\t\t\t<mat-toolbar [color]=\"color\">\r\n\t\t\t\t<ng-content select=\"[vd-menu-button]\"></ng-content>\r\n\t\t\t\t<span *ngIf=\"icon || logo || toolbarTitle\" class=\"vd-layout-nav-list-toolbar-content\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\">\r\n\t\t\t\t\t<mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\r\n\t\t\t\t\t<mat-icon *ngIf=\"logo && !icon\" class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n\t\t\t\t\t<span *ngIf=\"toolbarTitle\">{{toolbarTitle}}</span>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-content select=\"[vd-sidenav-toolbar-content]\"></ng-content>\r\n\t\t\t</mat-toolbar>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Sidenav content -->\r\n\t\t\t<div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n\t\t\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t\t\t</div>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</mat-sidenav>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<div class=\"vd-layout-nav-list-main\">\r\n\t\t\t<!-- #region Toolbar projection -->\r\n\t\t\t<ng-content select=\"mat-toolbar\"></ng-content>\r\n\t\t\t<ng-content select=\"vd-toolbar-content\"></ng-content>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Scrollable content -->\r\n\t\t\t<div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n\t\t\t\t<ng-content></ng-content>\r\n\t\t\t</div>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Footer content -->\r\n\t\t\t<ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</div>\r\n\t</mat-sidenav-container>\r\n</div>\r\n<ng-content select=\"vd-layout-footer\"></ng-content>", styles: [":host{margin:0;width:100%;min-height:100%;height:100%;overflow:hidden;flex-direction:column;box-sizing:border-box;display:flex;flex:1}:host .vd-layout-nav-list-wrapper{flex-direction:column;box-sizing:border-box;display:flex;flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-content{text-align:start;flex:1;display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-main{flex-direction:column;box-sizing:border-box;display:flex;margin:0;width:100%;min-height:100%;height:100%;position:relative;overflow:auto}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-main .vd-layout-nav-list-content{display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch;flex:1}:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list{flex:1}:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-opened,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-opening,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-closed,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-closing{box-shadow:none}:host ::ng-deep mat-sidenav-container.vd-layout-nav-list>.mat-drawer-content{flex-grow:1}:host ::ng-deep mat-sidenav-container.vd-layout-nav-list>mat-sidenav{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "directive", type: i3$5.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3$3.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$3.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
26382
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutNavListComponent, deps: [{ token: i1$3.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component });
26383
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutNavListComponent, isStandalone: true, selector: "vd-layout-nav-list", inputs: { toolbarTitle: "toolbarTitle", icon: "icon", logo: "logo", color: "color", mode: "mode", opened: "opened", sidenavWidth: "sidenavWidth", navigationRoute: "navigationRoute" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: MatSidenav, descendants: true, static: true }], ngImport: i0, template: "<div class=\"vd-layout-nav-list-wrapper\">\r\n\t<mat-sidenav-container fullscreen class=\"vd-layout-nav-list\">\r\n\t\t<!-- #region Sidenav -->\r\n\t\t<mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n\t\t\t<!-- #region Sidenav toolbar -->\r\n\t\t\t<mat-toolbar [color]=\"color\">\r\n\t\t\t\t<ng-content select=\"[vd-menu-button]\"></ng-content>\r\n\t\t\t\t<span *ngIf=\"icon || logo || toolbarTitle\" class=\"vd-layout-nav-list-toolbar-content\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\">\r\n\t\t\t\t\t<mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\r\n\t\t\t\t\t<mat-icon *ngIf=\"logo && !icon\" class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n\t\t\t\t\t<span *ngIf=\"toolbarTitle\">{{toolbarTitle}}</span>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-content select=\"[vd-sidenav-toolbar-content]\"></ng-content>\r\n\t\t\t</mat-toolbar>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Sidenav content -->\r\n\t\t\t<div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n\t\t\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t\t\t</div>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</mat-sidenav>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<div class=\"vd-layout-nav-list-main\">\r\n\t\t\t<!-- #region Toolbar projection -->\r\n\t\t\t<ng-content select=\"mat-toolbar\"></ng-content>\r\n\t\t\t<ng-content select=\"vd-toolbar-content\"></ng-content>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Scrollable content -->\r\n\t\t\t<div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n\t\t\t\t<ng-content></ng-content>\r\n\t\t\t</div>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Footer content -->\r\n\t\t\t<ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</div>\r\n\t</mat-sidenav-container>\r\n</div>\r\n<ng-content select=\"vd-layout-footer\"></ng-content>", styles: [":host{margin:0;width:100%;min-height:100%;height:100%;overflow:hidden;flex-direction:column;box-sizing:border-box;display:flex;flex:1}:host .vd-layout-nav-list-wrapper{flex-direction:column;box-sizing:border-box;display:flex;flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-content{text-align:start;flex:1;display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-main{flex-direction:column;box-sizing:border-box;display:flex;margin:0;width:100%;min-height:100%;height:100%;position:relative;overflow:auto}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-main .vd-layout-nav-list-content{display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch;flex:1}:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list{flex:1}:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-opened,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-opening,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-closed,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-closing{box-shadow:none}:host ::ng-deep mat-sidenav-container.vd-layout-nav-list>.mat-drawer-content{flex-grow:1}:host ::ng-deep mat-sidenav-container.vd-layout-nav-list>mat-sidenav{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "directive", type: i3$4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i3$2.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
26179
26384
  }
26180
26385
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutNavListComponent, decorators: [{
26181
26386
  type: Component,
@@ -26185,7 +26390,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
26185
26390
  MatToolbarModule,
26186
26391
  MatIconModule
26187
26392
  ], template: "<div class=\"vd-layout-nav-list-wrapper\">\r\n\t<mat-sidenav-container fullscreen class=\"vd-layout-nav-list\">\r\n\t\t<!-- #region Sidenav -->\r\n\t\t<mat-sidenav #sidenav position=\"start\" [mode]=\"mode\" [opened]=\"opened\" [disableClose]=\"disableClose\" [style.max-width]=\"sidenavWidth\" [style.min-width]=\"sidenavWidth\">\r\n\t\t\t<!-- #region Sidenav toolbar -->\r\n\t\t\t<mat-toolbar [color]=\"color\">\r\n\t\t\t\t<ng-content select=\"[vd-menu-button]\"></ng-content>\r\n\t\t\t\t<span *ngIf=\"icon || logo || toolbarTitle\" class=\"vd-layout-nav-list-toolbar-content\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\">\r\n\t\t\t\t\t<mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\r\n\t\t\t\t\t<mat-icon *ngIf=\"logo && !icon\" class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n\t\t\t\t\t<span *ngIf=\"toolbarTitle\">{{toolbarTitle}}</span>\r\n\t\t\t\t</span>\r\n\t\t\t\t<ng-content select=\"[vd-sidenav-toolbar-content]\"></ng-content>\r\n\t\t\t</mat-toolbar>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Sidenav content -->\r\n\t\t\t<div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n\t\t\t\t<ng-content select=\"[vd-sidenav-content]\"></ng-content>\r\n\t\t\t</div>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</mat-sidenav>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<div class=\"vd-layout-nav-list-main\">\r\n\t\t\t<!-- #region Toolbar projection -->\r\n\t\t\t<ng-content select=\"mat-toolbar\"></ng-content>\r\n\t\t\t<ng-content select=\"vd-toolbar-content\"></ng-content>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Scrollable content -->\r\n\t\t\t<div class=\"vd-layout-nav-list-content\" cdkScrollable>\r\n\t\t\t\t<ng-content></ng-content>\r\n\t\t\t</div>\r\n\t\t\t<!-- #endregion -->\r\n\r\n\t\t\t<!-- #region Footer content -->\r\n\t\t\t<ng-content select=\"vd-layout-footer-inner\"></ng-content>\r\n\t\t\t<!-- #endregion -->\r\n\t\t</div>\r\n\t</mat-sidenav-container>\r\n</div>\r\n<ng-content select=\"vd-layout-footer\"></ng-content>", styles: [":host{margin:0;width:100%;min-height:100%;height:100%;overflow:hidden;flex-direction:column;box-sizing:border-box;display:flex;flex:1}:host .vd-layout-nav-list-wrapper{flex-direction:column;box-sizing:border-box;display:flex;flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-content{text-align:start;flex:1;display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-main{flex-direction:column;box-sizing:border-box;display:flex;margin:0;width:100%;min-height:100%;height:100%;position:relative;overflow:auto}:host .vd-layout-nav-list-wrapper .vd-layout-nav-list-main .vd-layout-nav-list-content{display:block;position:relative;overflow:auto;-webkit-overflow-scrolling:touch;flex:1}:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list{flex:1}:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-opened,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-opening,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-closed,:host .vd-layout-nav-list-wrapper mat-sidenav-container.vd-layout-nav-list>mat-sidenav.mat-drawer-closing{box-shadow:none}:host ::ng-deep mat-sidenav-container.vd-layout-nav-list>.mat-drawer-content{flex-grow:1}:host ::ng-deep mat-sidenav-container.vd-layout-nav-list>mat-sidenav{box-shadow:0 1px 3px #0003,0 1px 1px #00000024,0 2px 1px -1px #0000001f;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;flex-direction:column}\n"] }]
26188
- }], ctorParameters: () => [{ type: i1$2.Router, decorators: [{
26393
+ }], ctorParameters: () => [{ type: i1$3.Router, decorators: [{
26189
26394
  type: Optional
26190
26395
  }] }], propDecorators: { sidenav: [{
26191
26396
  type: ViewChild,
@@ -26494,8 +26699,8 @@ class VdLayoutNavComponent {
26494
26699
  this.router.navigateByUrl(this.navigationRoute);
26495
26700
  }
26496
26701
  }
26497
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutNavComponent, deps: [{ token: i1$2.Router, optional: true }, { token: i1$2.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
26498
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutNavComponent, isStandalone: true, selector: "vd-layout-nav", inputs: { toolbarTitle: "toolbarTitle", editMode: "editMode", actions: "actions", data: "data", context: "context", hideToolbar: "hideToolbar", icon: "icon", logo: "logo", color: "color", hideToggle: "hideToggle", backNavigationRoute: "backNavigationRoute", navigationRoute: "navigationRoute" }, outputs: { reload: "reload" }, ngImport: i0, template: "<div class=\"vd-layout-nav-wrapper\">\r\n\t<mat-toolbar *ngIf=\"!hideToolbar || editMode\" [color]=\"color\" class=\"primary-color\" dense>\r\n\t\t<!-- #region Toggle buton -->\r\n\t\t<button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" *ngIf=\"!hideToggle\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n\t\t</button>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Back button -->\r\n\t\t<button mat-icon-button vd-menu-button *ngIf=\"backNavigationRouteEnabled\" (click)=\"handleBackNavigationClick()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n\t\t</button>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom buttons -->\r\n\t\t<ng-content select=\"[vd-menu-button]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Logo with home link -->\r\n\t\t<span *ngIf=\"icon || logo || toolbarTitle\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\" class=\"vd-layout-nav-toolbar-content\">\r\n\t\t\t<mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"logo && !icon\" class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n\t\t\t<span *ngIf=\"toolbarTitle\">{{toolbarTitle}}</span>&nbsp;\r\n\t\t\t<span *ngIf=\"editMode == false\">[<span i18n=\"@@add\">Add</span>]</span>\r\n\t\t\t<span *ngIf=\"editMode == true\">[<span i18n=\"@@edit\" *ngIf=\"editMode == true\">Edit</span>]</span>\r\n\t\t</span>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom content -->\r\n\t\t<ng-content select=\"[vd-toolbar-content]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<span flex></span>\r\n\r\n\t\t<!-- #region Actions -->\r\n\t\t<vd-dynamic-menu *ngIf=\"editMode==true\" [items]=\"actions\" [data]=\"data\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t<!-- #endregion-->\r\n\r\n\t\t<!-- #region Custom right content -->\r\n\t\t<ng-content select=\"[vd-toolbar-content-right]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\t</mat-toolbar>\r\n\t<div class=\"vd-layout-nav-content scrollbar-primary\" cdkScrollable>\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n\t<ng-content select=\"vd-layout-footer\"></ng-content>\r\n</div>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host .vd-layout-nav-wrapper{flex-direction:column;box-sizing:border-box;display:flex;margin:0;width:100%;min-height:100%;height:100%}:host .vd-layout-nav-wrapper .mat-toolbar{padding-left:4px}:host .vd-layout-nav-wrapper .vd-layout-nav-toolbar-content{flex-direction:row;box-sizing:border-box;align-items:center;align-content:center;max-width:100%;justify-content:flex-start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}:host .vd-layout-nav-wrapper .vd-layout-nav-content{flex-direction:column;box-sizing:border-box;display:flex;flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: VdLayoutToggleDirective, selector: "[vdLayoutToggle]", inputs: ["vdLayoutToggle"] }, { kind: "component", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: ["items", "data", "index", "context", "contextMenu"] }] });
26702
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutNavComponent, deps: [{ token: i1$3.Router, optional: true }, { token: i1$3.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Component });
26703
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdLayoutNavComponent, isStandalone: true, selector: "vd-layout-nav", inputs: { toolbarTitle: "toolbarTitle", editMode: "editMode", actions: "actions", data: "data", context: "context", hideToolbar: "hideToolbar", icon: "icon", logo: "logo", color: "color", hideToggle: "hideToggle", backNavigationRoute: "backNavigationRoute", navigationRoute: "navigationRoute" }, outputs: { reload: "reload" }, ngImport: i0, template: "<div class=\"vd-layout-nav-wrapper\">\r\n\t<mat-toolbar *ngIf=\"!hideToolbar || editMode\" [color]=\"color\" class=\"primary-color\" dense>\r\n\t\t<!-- #region Toggle buton -->\r\n\t\t<button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" *ngIf=\"!hideToggle\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n\t\t</button>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Back button -->\r\n\t\t<button mat-icon-button vd-menu-button *ngIf=\"backNavigationRouteEnabled\" (click)=\"handleBackNavigationClick()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n\t\t</button>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom buttons -->\r\n\t\t<ng-content select=\"[vd-menu-button]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Logo with home link -->\r\n\t\t<span *ngIf=\"icon || logo || toolbarTitle\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\" class=\"vd-layout-nav-toolbar-content\">\r\n\t\t\t<mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"logo && !icon\" class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n\t\t\t<span *ngIf=\"toolbarTitle\">{{toolbarTitle}}</span>&nbsp;\r\n\t\t\t<span *ngIf=\"editMode == false\">[<span i18n=\"@@add\">Add</span>]</span>\r\n\t\t\t<span *ngIf=\"editMode == true\">[<span i18n=\"@@edit\" *ngIf=\"editMode == true\">Edit</span>]</span>\r\n\t\t</span>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom content -->\r\n\t\t<ng-content select=\"[vd-toolbar-content]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<span flex></span>\r\n\r\n\t\t<!-- #region Actions -->\r\n\t\t<vd-dynamic-menu *ngIf=\"editMode==true\" [items]=\"actions\" [data]=\"data\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t<!-- #endregion-->\r\n\r\n\t\t<!-- #region Custom right content -->\r\n\t\t<ng-content select=\"[vd-toolbar-content-right]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\t</mat-toolbar>\r\n\t<div class=\"vd-layout-nav-content scrollbar-primary\" cdkScrollable>\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n\t<ng-content select=\"vd-layout-footer\"></ng-content>\r\n</div>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host .vd-layout-nav-wrapper{flex-direction:column;box-sizing:border-box;display:flex;margin:0;width:100%;min-height:100%;height:100%}:host .vd-layout-nav-wrapper .mat-toolbar{padding-left:4px}:host .vd-layout-nav-wrapper .vd-layout-nav-toolbar-content{flex-direction:row;box-sizing:border-box;align-items:center;align-content:center;max-width:100%;justify-content:flex-start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}:host .vd-layout-nav-wrapper .vd-layout-nav-content{flex-direction:column;box-sizing:border-box;display:flex;flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: VdLayoutToggleDirective, selector: "[vdLayoutToggle]", inputs: ["vdLayoutToggle"] }, { kind: "component", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: ["items", "data", "index", "context", "contextMenu"] }] });
26499
26704
  }
26500
26705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdLayoutNavComponent, decorators: [{
26501
26706
  type: Component,
@@ -26507,9 +26712,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
26507
26712
  VdLayoutToggleDirective,
26508
26713
  VdDynamicMenuComponent
26509
26714
  ], template: "<div class=\"vd-layout-nav-wrapper\">\r\n\t<mat-toolbar *ngIf=\"!hideToolbar || editMode\" [color]=\"color\" class=\"primary-color\" dense>\r\n\t\t<!-- #region Toggle buton -->\r\n\t\t<button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" *ngIf=\"!hideToggle\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n\t\t</button>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Back button -->\r\n\t\t<button mat-icon-button vd-menu-button *ngIf=\"backNavigationRouteEnabled\" (click)=\"handleBackNavigationClick()\">\r\n\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n\t\t</button>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom buttons -->\r\n\t\t<ng-content select=\"[vd-menu-button]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Logo with home link -->\r\n\t\t<span *ngIf=\"icon || logo || toolbarTitle\" [class.cursor-pointer]=\"routerEnabled\" (click)=\"handleNavigationClick()\" class=\"vd-layout-nav-toolbar-content\">\r\n\t\t\t<mat-icon *ngIf=\"icon\">{{icon}}</mat-icon>\r\n\t\t\t<mat-icon *ngIf=\"logo && !icon\" class=\"mat-icon-logo\" [svgIcon]=\"logo\"></mat-icon>\r\n\t\t\t<span *ngIf=\"toolbarTitle\">{{toolbarTitle}}</span>&nbsp;\r\n\t\t\t<span *ngIf=\"editMode == false\">[<span i18n=\"@@add\">Add</span>]</span>\r\n\t\t\t<span *ngIf=\"editMode == true\">[<span i18n=\"@@edit\" *ngIf=\"editMode == true\">Edit</span>]</span>\r\n\t\t</span>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<!-- #region Custom content -->\r\n\t\t<ng-content select=\"[vd-toolbar-content]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\r\n\t\t<span flex></span>\r\n\r\n\t\t<!-- #region Actions -->\r\n\t\t<vd-dynamic-menu *ngIf=\"editMode==true\" [items]=\"actions\" [data]=\"data\" [context]=\"context\"></vd-dynamic-menu>\r\n\t\t<!-- #endregion-->\r\n\r\n\t\t<!-- #region Custom right content -->\r\n\t\t<ng-content select=\"[vd-toolbar-content-right]\"></ng-content>\r\n\t\t<!-- #endregion -->\r\n\t</mat-toolbar>\r\n\t<div class=\"vd-layout-nav-content scrollbar-primary\" cdkScrollable>\r\n\t\t<ng-content></ng-content>\r\n\t</div>\r\n\t<ng-content select=\"vd-layout-footer\"></ng-content>\r\n</div>", styles: [":host{display:flex;margin:0;width:100%;min-height:100%;height:100%;overflow:hidden}:host .vd-layout-nav-wrapper{flex-direction:column;box-sizing:border-box;display:flex;margin:0;width:100%;min-height:100%;height:100%}:host .vd-layout-nav-wrapper .mat-toolbar{padding-left:4px}:host .vd-layout-nav-wrapper .vd-layout-nav-toolbar-content{flex-direction:row;box-sizing:border-box;align-items:center;align-content:center;max-width:100%;justify-content:flex-start;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block}:host .vd-layout-nav-wrapper .vd-layout-nav-content{flex-direction:column;box-sizing:border-box;display:flex;flex:1;position:relative;overflow:auto;-webkit-overflow-scrolling:touch}\n"] }]
26510
- }], ctorParameters: () => [{ type: i1$2.Router, decorators: [{
26715
+ }], ctorParameters: () => [{ type: i1$3.Router, decorators: [{
26511
26716
  type: Optional
26512
- }] }, { type: i1$2.ActivatedRoute, decorators: [{
26717
+ }] }, { type: i1$3.ActivatedRoute, decorators: [{
26513
26718
  type: Optional
26514
26719
  }] }], propDecorators: { toolbarTitle: [{
26515
26720
  type: Input
@@ -26561,7 +26766,7 @@ class VdListToolbarComponent {
26561
26766
  */
26562
26767
  actions = [];
26563
26768
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdListToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
26564
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdListToolbarComponent, isStandalone: true, selector: "vd-list-toolbar", inputs: { subtitle: "subtitle", mini: "mini", backButton: "backButton", actions: "actions" }, outputs: { back: "back" }, ngImport: i0, template: "<mat-toolbar dense>\r\n <div layout=\"row\" layout-align=\"start center\" flex>\r\n <button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" [hideWhenOpened]=\"true\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n </button>\r\n <span>{{subtitle}}</span>\r\n <span flex></span>\r\n <vd-dynamic-menu [items]=\"actions\"></vd-dynamic-menu>\r\n </div>\r\n</mat-toolbar>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: ["items", "data", "index", "context", "contextMenu"] }, { kind: "directive", type: VdLayoutToggleDirective, selector: "[vdLayoutToggle]", inputs: ["vdLayoutToggle"] }] });
26769
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdListToolbarComponent, isStandalone: true, selector: "vd-list-toolbar", inputs: { subtitle: "subtitle", mini: "mini", backButton: "backButton", actions: "actions" }, outputs: { back: "back" }, ngImport: i0, template: "<mat-toolbar dense>\r\n <div layout=\"row\" layout-align=\"start center\" flex>\r\n <button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" [hideWhenOpened]=\"true\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"back.emit()\" *ngIf=\"backButton\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n </button>\r\n <span>{{subtitle}}</span>\r\n <span flex></span>\r\n <vd-dynamic-menu [items]=\"actions\"></vd-dynamic-menu>\r\n </div>\r\n</mat-toolbar>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: ["items", "data", "index", "context", "contextMenu"] }, { kind: "directive", type: VdLayoutToggleDirective, selector: "[vdLayoutToggle]", inputs: ["vdLayoutToggle"] }] });
26565
26770
  }
26566
26771
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdListToolbarComponent, decorators: [{
26567
26772
  type: Component,
@@ -26569,9 +26774,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
26569
26774
  CommonModule,
26570
26775
  MatToolbar,
26571
26776
  MatIcon,
26777
+ MatButtonModule,
26572
26778
  VdDynamicMenuComponent,
26573
26779
  VdLayoutToggleDirective
26574
- ], template: "<mat-toolbar dense>\r\n <div layout=\"row\" layout-align=\"start center\" flex>\r\n <button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" [hideWhenOpened]=\"true\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n </button>\r\n <span>{{subtitle}}</span>\r\n <span flex></span>\r\n <vd-dynamic-menu [items]=\"actions\"></vd-dynamic-menu>\r\n </div>\r\n</mat-toolbar>" }]
26780
+ ], template: "<mat-toolbar dense>\r\n <div layout=\"row\" layout-align=\"start center\" flex>\r\n <button mat-icon-button vd-menu-button [vdLayoutToggle]=\"true\" [hideWhenOpened]=\"true\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">menu</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"back.emit()\" *ngIf=\"backButton\">\r\n <mat-icon fontSet=\"material-symbols-outlined\">arrow_back</mat-icon>\r\n </button>\r\n <span>{{subtitle}}</span>\r\n <span flex></span>\r\n <vd-dynamic-menu [items]=\"actions\"></vd-dynamic-menu>\r\n </div>\r\n</mat-toolbar>" }]
26575
26781
  }], propDecorators: { subtitle: [{
26576
26782
  type: Input
26577
26783
  }], mini: [{
@@ -26809,8 +27015,8 @@ class VdNavigationDrawerComponent {
26809
27015
  this._closeSubscription = undefined;
26810
27016
  }
26811
27017
  }
26812
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdNavigationDrawerComponent, deps: [{ token: forwardRef(() => VdLayoutComponent) }, { token: i1$2.Router, optional: true }, { token: i1$3.DomSanitizer }, { token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
26813
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdNavigationDrawerComponent, isStandalone: true, selector: "vd-navigation-drawer", inputs: { sidenavTitle: "sidenavTitle", icon: "icon", logo: "logo", avatar: "avatar", color: "color", navigationRoute: "navigationRoute", backgroundUrl: "backgroundUrl", sideGt: "sideGt", name: "name", email: "email" }, queries: [{ propertyName: "_drawerMenu", predicate: VdNavigationDrawerMenuDirective, descendants: true }, { propertyName: "_toolbar", predicate: VdNavigationDrawerToolbarDirective, descendants: true }], ngImport: i0, template: "<mat-toolbar [color]=\"color\" [style.background-image]=\"backgroundImage\" [class.vd-toolbar-background]=\"!!isBackgroundAvailable\" class=\"vd-nagivation-drawer-toolbar\" [ngClass]=\"{'drawer-mini': mini && !expanded}\" dense flex layout=\"column\">\r\n\t<ng-content select=\"[vd-navigation-drawer-toolbar]\"></ng-content>\r\n\t<ng-container *ngIf=\"!isCustomToolbar && !mini\">\r\n\t\t<div class=\"vd-navigation-drawer-name\" *ngIf=\"email && name\">{{name}}</div>\r\n\t\t<div class=\"vd-navigation-drawer-menu-toggle\" href *ngIf=\"email || name\" (click)=\"toggleMenu()\">\r\n\t\t\t<span class=\"vd-navigation-drawer-label\">{{ email || name }}</span>\r\n\t\t\t<button mat-icon-button class=\"vd-navigation-drawer-menu-button\" *ngIf=\"isMenuAvailable\">\r\n\t\t\t\t<mat-icon *ngIf=\"!menuToggled\">arrow_drop_down</mat-icon>\r\n\t\t\t\t<mat-icon *ngIf=\"menuToggled\">arrow_drop_up</mat-icon>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"mini && !expanded\">\r\n\t\t<div layout=\"column\" layout-align=\"center center\" flex>\r\n\t\t\t<button mat-icon-button (click)=\"toggleMenu()\">\r\n\t\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">format_list_bulleted</mat-icon>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</ng-container>\r\n</mat-toolbar>\r\n\r\n<div class=\"vd-navigation-drawer-content scrollbar-primary\" [@vdCollapse]=\"menuToggled\" [ngClass]=\"{'drawer-mini': mini}\">\r\n\t<ng-content></ng-content>\r\n</div>\r\n\r\n<div class=\"vd-navigation-drawer-menu-content\" [@vdCollapse]=\"!menuToggled\" [ngClass]=\"{'drawer-mini': mini}\">\r\n\t<ng-content select=\"[vd-navigation-drawer-menu]\"></ng-content>\r\n</div>", styles: [":host{width:100%}:host .vd-navigation-drawer-content.ng-animating,:host .vd-navigation-drawer-menu-content.ng-animating{overflow:hidden}:host .vd-navigation-drawer-content ::ng-deep .mat-mdc-nav-list,:host .vd-navigation-drawer-menu-content ::ng-deep .mat-mdc-nav-list{padding-top:0!important;padding-bottom:12px}:host .vd-navigation-drawer-content.drawer-mini ::ng-deep .mat-mdc-nav-list,:host .vd-navigation-drawer-menu-content.drawer-mini ::ng-deep .mat-mdc-nav-list{padding-bottom:0!important}:host mat-toolbar:not(.drawer-mini){padding:16px}:host mat-toolbar.drawer-mini{padding:0!important}:host mat-toolbar.vd-nagivation-drawer-toolbar{flex-direction:column;align-items:stretch}:host mat-toolbar.vd-toolbar-background{background-repeat:no-repeat;background-size:cover}:host mat-toolbar.vd-nagivation-drawer-toolbar:not(.drawer-mini){flex-direction:column;height:auto!important;display:block!important}:host mat-toolbar .vd-navigation-drawer-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host mat-toolbar .vd-navigation-drawer-toolbar-content .vd-nagivation-drawer-toolbar-avatar{border-radius:50%;height:60px;width:60px;margin:0 12px 12px 0}:host mat-toolbar .vd-navigation-drawer-toolbar-content .vd-navigation-drawer-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .vd-navigation-drawer-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .vd-navigation-drawer-menu-toggle{flex-direction:row;box-sizing:border-box;display:flex;cursor:pointer}:host mat-toolbar .vd-navigation-drawer-menu-toggle .vd-navigation-drawer-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .vd-navigation-drawer-menu-toggle .vd-navigation-drawer-menu-button{height:24px;line-height:24px;width:24px;padding:0!important}:host>div{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }], animations: [vdCollapseAnimation] });
27018
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdNavigationDrawerComponent, deps: [{ token: forwardRef(() => VdLayoutComponent) }, { token: i1$3.Router, optional: true }, { token: i1$4.DomSanitizer }, { token: VdMediaService }], target: i0.ɵɵFactoryTarget.Component });
27019
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.3", type: VdNavigationDrawerComponent, isStandalone: true, selector: "vd-navigation-drawer", inputs: { sidenavTitle: "sidenavTitle", icon: "icon", logo: "logo", avatar: "avatar", color: "color", navigationRoute: "navigationRoute", backgroundUrl: "backgroundUrl", sideGt: "sideGt", name: "name", email: "email" }, queries: [{ propertyName: "_drawerMenu", predicate: VdNavigationDrawerMenuDirective, descendants: true }, { propertyName: "_toolbar", predicate: VdNavigationDrawerToolbarDirective, descendants: true }], ngImport: i0, template: "<mat-toolbar [color]=\"color\" [style.background-image]=\"backgroundImage\" [class.vd-toolbar-background]=\"!!isBackgroundAvailable\" class=\"vd-nagivation-drawer-toolbar\" [ngClass]=\"{'drawer-mini': mini && !expanded}\" dense flex layout=\"column\">\r\n\t<ng-content select=\"[vd-navigation-drawer-toolbar]\"></ng-content>\r\n\t<ng-container *ngIf=\"!isCustomToolbar && !mini\">\r\n\t\t<div class=\"vd-navigation-drawer-name\" *ngIf=\"email && name\">{{name}}</div>\r\n\t\t<div class=\"vd-navigation-drawer-menu-toggle\" href *ngIf=\"email || name\" (click)=\"toggleMenu()\">\r\n\t\t\t<span class=\"vd-navigation-drawer-label\">{{ email || name }}</span>\r\n\t\t\t<button mat-icon-button class=\"vd-navigation-drawer-menu-button\" *ngIf=\"isMenuAvailable\">\r\n\t\t\t\t<mat-icon *ngIf=\"!menuToggled\">arrow_drop_down</mat-icon>\r\n\t\t\t\t<mat-icon *ngIf=\"menuToggled\">arrow_drop_up</mat-icon>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</ng-container>\r\n\t<ng-container *ngIf=\"mini && !expanded\">\r\n\t\t<div layout=\"column\" layout-align=\"center center\" flex>\r\n\t\t\t<button mat-icon-button (click)=\"toggleMenu()\">\r\n\t\t\t\t<mat-icon fontSet=\"material-symbols-outlined\">format_list_bulleted</mat-icon>\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</ng-container>\r\n</mat-toolbar>\r\n\r\n<div class=\"vd-navigation-drawer-content scrollbar-primary\" [@vdCollapse]=\"menuToggled\" [ngClass]=\"{'drawer-mini': mini}\">\r\n\t<ng-content></ng-content>\r\n</div>\r\n\r\n<div class=\"vd-navigation-drawer-menu-content\" [@vdCollapse]=\"!menuToggled\" [ngClass]=\"{'drawer-mini': mini}\">\r\n\t<ng-content select=\"[vd-navigation-drawer-menu]\"></ng-content>\r\n</div>", styles: [":host{width:100%}:host .vd-navigation-drawer-content.ng-animating,:host .vd-navigation-drawer-menu-content.ng-animating{overflow:hidden}:host .vd-navigation-drawer-content ::ng-deep .mat-mdc-nav-list,:host .vd-navigation-drawer-menu-content ::ng-deep .mat-mdc-nav-list{padding-top:0!important;padding-bottom:12px}:host .vd-navigation-drawer-content.drawer-mini ::ng-deep .mat-mdc-nav-list,:host .vd-navigation-drawer-menu-content.drawer-mini ::ng-deep .mat-mdc-nav-list{padding-bottom:0!important}:host mat-toolbar:not(.drawer-mini){padding:16px}:host mat-toolbar.drawer-mini{padding:0!important}:host mat-toolbar.vd-nagivation-drawer-toolbar{flex-direction:column;align-items:stretch}:host mat-toolbar.vd-toolbar-background{background-repeat:no-repeat;background-size:cover}:host mat-toolbar.vd-nagivation-drawer-toolbar:not(.drawer-mini){flex-direction:column;height:auto!important;display:block!important}:host mat-toolbar .vd-navigation-drawer-toolbar-content{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;align-content:center;max-width:100%;justify-content:flex-start}:host mat-toolbar .vd-navigation-drawer-toolbar-content .vd-nagivation-drawer-toolbar-avatar{border-radius:50%;height:60px;width:60px;margin:0 12px 12px 0}:host mat-toolbar .vd-navigation-drawer-toolbar-content .vd-navigation-drawer-title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .vd-navigation-drawer-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .vd-navigation-drawer-menu-toggle{flex-direction:row;box-sizing:border-box;display:flex;cursor:pointer}:host mat-toolbar .vd-navigation-drawer-menu-toggle .vd-navigation-drawer-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host mat-toolbar .vd-navigation-drawer-menu-toggle .vd-navigation-drawer-menu-button{height:24px;line-height:24px;width:24px;padding:0!important}:host>div{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i5$3.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }], animations: [vdCollapseAnimation] });
26814
27020
  }
26815
27021
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: VdNavigationDrawerComponent, decorators: [{
26816
27022
  type: Component,
@@ -26823,9 +27029,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
26823
27029
  }], ctorParameters: () => [{ type: VdLayoutComponent, decorators: [{
26824
27030
  type: Inject,
26825
27031
  args: [forwardRef(() => VdLayoutComponent)]
26826
- }] }, { type: i1$2.Router, decorators: [{
27032
+ }] }, { type: i1$3.Router, decorators: [{
26827
27033
  type: Optional
26828
- }] }, { type: i1$3.DomSanitizer }, { type: VdMediaService }], propDecorators: { _drawerMenu: [{
27034
+ }] }, { type: i1$4.DomSanitizer }, { type: VdMediaService }], propDecorators: { _drawerMenu: [{
26829
27035
  type: ContentChildren,
26830
27036
  args: [VdNavigationDrawerMenuDirective, { descendants: true }]
26831
27037
  }], _toolbar: [{
@@ -27196,5 +27402,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImpor
27196
27402
  * Generated bundle index. Do not edit.
27197
27403
  */
27198
27404
 
27199
- export { AbstractMatFormField, AbstractSelectFormField, ActionItem, Api, ApiResponse, AppEvent, AppEventType, AppSetting, AppStorage, AsyncValidationDirective, AuditEntity, AuditUser, AuthHelper, AuthUser, AutofocusDirective, BaseComponent, BaseDirective, BaseEntity, BaseInterceptor, BaseService, BindPipe, CachingInterceptor, Column, ColumnObject, Common, CommonError, CommonHandlerContext, ContextHelper, DIALOG_PROVIDER, DIALOG_PROVIDER_FACTORY, DataSourceFilterDirective, DataSourcePipe, DatePickerHeaderComponent, DisableControlDirective, Display, DisplayNameNumberProjection, DisplayNameProjection, DynamicBuilder, DynamicComponentCompiler, EXPORT_DIALOG_COMPONENT, EmptyStringResetDirective, EnumMetadata, EnumPipe, EnumService, EqualValidator, ErrorMessageBindingStrategy, EventQueueService, Facet, FacetValue, FieldFuncPipe, FileControlDirective, FileService, FileSizePipe, FilterClearComponent, FilterDateComponent, FilterGlue, FilterInputComponent, FilterOperator, FilterPipe, FilterSelectComponent, FirstLetterPipe, Form, FormArrayPipe, FormBuilderConfiguration, FormControlPipe, FormDefinition, FormField, FormFieldDefinition, FormFieldGroup, FormFieldGroupDefinition, FormFieldType, FormGroupPipe, FuncPipe, GenericEmbeddedListComponent, GenericFormBaseComponent, GenericFormComponent, GenericListComponent, GenericReactiveFormComponent, GenericService, GlobalRoles, Grid, GroupFilterPipe, HtmlControlTemplateDirective, IAbstractControl, Icon, ImageFileControlDirective, IpVersion, KeyValue, KeysPipe, LayoutToggle, LoadingScreenInterceptor, LoadingScreenService, MEDIA_PROVIDER, MEDIA_PROVIDER_FACTORY, MatFormFieldEditorDirective, MatFormFieldReadonlyDirective, Menu, MenuClient, MenuDepartment, MenuFormIncludesResolve, MenuItem, MenuItemClient, MenuItemDepartment, MenuItemFormIncludesResolve, MenuItemService, MenuItemTarget, MenuListProjectionResolve, MenuResolve, MenuScope, MenuSettings, MenuSettingsResolve, MessageType, ModifiableEntity, MonthNamePipe, NameNumberProjection, NameProjection, NativeElementInjectorDirective, NumericValueType, OnlyNumberDirective, OrderPipe, Pagination, PaginatorIntl, ParseDecimalDirective, Permission, PlaceholderPipe, PrintService, PropertyJoinPipe, ReactiveFormConfig, ReactiveTypedFormsModule, ResetFormType, RxFormArray, RxFormBuilder, RxFormControl, RxFormControlDirective, RxFormGroup, RxReactiveFormsModule, RxwebFormDirective, RxwebValidators, SafeHtmlPipe, Salutation, SaveAction, SplitPipe, SubMenuResolve, SuffixButton, Table, TableColumn, TableColumnConfig, TableColumnType, TableConfig, TableDataSource, TableDefinition, TableQueryConfig, TableStaticDataSource, TaskDialogData, Templates, TimePipe, TitleCase, TitleProjection, TruncatePipe, TypedForm, TypedFormBuilder, UniqueValidatorDirective, UrlValidationType, Utils, ValidationAlphabetLocale, ValueAccessorBase, ValuesPipe, VdAlertDialogComponent, VdChipsComponent, VdCodeDirective, VdConfirmDialogComponent, VdCustomDirective, VdDelayedHoverDirective, VdDialogActionsDirective, VdDialogComponent, VdDialogContentDirective, VdDialogService, VdDialogTitleDirective, VdDynamicMenuComponent, VdDynamicTableComponent, VdDynamicTableConfigDialogComponent, VdEditorDirective, VdFileDirective, VdFileInputComponent, VdFileModule, VdFilterOptionDirective, VdGenericFormComponent, VdGenericFormCustomFieldDirective, VdLayoutCardOverComponent, VdLayoutCloseDirective, VdLayoutCompactComponent, VdLayoutComponent, VdLayoutFooterComponent, VdLayoutManageListCloseDirective, VdLayoutManageListComponent, VdLayoutManageListOpenDirective, VdLayoutManageListToggleDirective, VdLayoutNavComponent, VdLayoutNavListCloseDirective, VdLayoutNavListComponent, VdLayoutNavListOpenDirective, VdLayoutNavListToggleDirective, VdLayoutOpenDirective, VdLayoutToggleDirective, VdListOptionDirective, VdListToolbarComponent, VdMediaService, VdMediaToggleDirective, VdMenuComponent, VdNavigationDrawerComponent, VdNavigationDrawerMenuDirective, VdNavigationDrawerToolbarDirective, VdPromptDialogComponent, VdSelectComponent, VdSelectOptionDirective, VdSelectTriggerDirective, VdTableFieldDirective, VdTaskDialogComponent, allOf, allOfAsync, alpha, alphaAsync, alphaNumeric, alphaNumericAsync, and, ascii, async, blacklist, choice, choiceAsync, compare, compose, contains, containsAsync, creditCard, creditCardAsync, cusip, custom, customAsync, dataUri, date, dateAsync, different, digit, disable, elementClass, email, endpointMetadataKey, endsWith, endsWithAsync, error, escape, even, extension, extensionAsync, factor, factorAsync, file, fileAsync, fileSize, fileSizeAsync, formDefinitionMetadataKey, formFieldGroupsMetadataKey, formFieldsMetadataKey, getDisplay, getEndpoint, getFormDefinition, getFormGroups, getTableDefinition, greaterThan, greaterThanAsync, greaterThanEqualTo, greaterThanEqualToAsync, grid, headerMetadataKey, hexColor, image, imageAsync, json, latLong, latitude, leapYear, lessThan, lessThanAsync, lessThanEqualTo, lessThanEqualToAsync, longitude, lowerCase, ltrim, mac, mask, maxDate, maxDateAsync, maxLength, maxLengthAsync, maxNumber, maxNumberAsync, maxTime, maxTimeAsync, minDate, minDateAsync, minLength, minLengthAsync, minNumber, minNumberAsync, minTime, minTimeAsync, mixinDisableRipple, mixinDisabled, model, noneOf, noneOfAsync, not, notEmpty, numeric, numericAsync, odd, oneOf, oneOfAsync, or, password, passwordAsync, pattern, patternAsync, port, prefix, primeNumber, prop, propArray, propObject, range, rangeAsync, required, requiredTrue, rtrim, rule, sanitize, startsWith, startsWithAsync, stripLow, suffix, tableColumnsMetadataKey, tableDefinitionMetadataKey, time, timeAsync, toBoolean, toDate, toDouble, toFloat, toInt, toString, trim, unique, updateOn, upperCase, url, urlAsync, vdCollapseAnimation, whitelist };
27405
+ export { AbstractMatFormField, AbstractSelectFormField, ActionItem, Api, ApiResponse, AppEvent, AppEventType, AppSetting, AppStorage, AsyncValidationDirective, AuditEntity, AuditUser, AuthHelper, AuthUser, AutofocusDirective, BaseComponent, BaseDirective, BaseEntity, BaseInterceptor, BaseService, BindPipe, CachingInterceptor, Column, ColumnObject, Common, CommonError, CommonHandlerContext, ConfirmExitGuard, ContextHelper, DIALOG_PROVIDER, DIALOG_PROVIDER_FACTORY, DataSourceFilterDirective, DataSourcePipe, DatePickerHeaderComponent, DisableControlDirective, Display, DisplayNameNumberProjection, DisplayNameProjection, DynamicBuilder, DynamicComponentCompiler, EXPORT_DIALOG_COMPONENT, EmptyStringResetDirective, EnumMetadata, EnumPipe, EnumService, EqualValidator, ErrorMessageBindingStrategy, EventQueueService, Facet, FacetValue, FieldFuncPipe, FileControlDirective, FileService, FileSizePipe, FilterClearComponent, FilterDateComponent, FilterGlue, FilterInputComponent, FilterOperator, FilterPipe, FilterSelectComponent, FirstLetterPipe, Form, FormArrayPipe, FormBuilderConfiguration, FormControlPipe, FormDefinition, FormField, FormFieldDefinition, FormFieldGroup, FormFieldGroupDefinition, FormFieldType, FormGroupPipe, FuncPipe, GenericEmbeddedListComponent, GenericFormBaseComponent, GenericFormComponent, GenericListComponent, GenericReactiveFormComponent, GenericService, GlobalRoles, Grid, GroupFilterPipe, HtmlControlTemplateDirective, IAbstractControl, Icon, ImageFileControlDirective, IpVersion, KeyValue, KeysPipe, LayoutToggle, LoadingScreenInterceptor, LoadingScreenService, MEDIA_PROVIDER, MEDIA_PROVIDER_FACTORY, MatFormFieldEditorDirective, MatFormFieldReadonlyDirective, Menu, MenuClient, MenuDepartment, MenuFormIncludesResolve, MenuItem, MenuItemClient, MenuItemDepartment, MenuItemFormIncludesResolve, MenuItemService, MenuItemTarget, MenuListProjectionResolve, MenuResolve, MenuScope, MenuSettings, MenuSettingsResolve, MessageType, ModifiableEntity, MonthNamePipe, NameNumberProjection, NameProjection, NativeElementInjectorDirective, NumericValueType, OnlyNumberDirective, OrderPipe, Pagination, PaginatorIntl, ParseDecimalDirective, Permission, PlaceholderPipe, PrintService, PropertyJoinPipe, ReactiveFormConfig, ReactiveTypedFormsModule, ResetFormType, RxFormArray, RxFormBuilder, RxFormControl, RxFormControlDirective, RxFormGroup, RxReactiveFormsModule, RxwebFormDirective, RxwebValidators, SafeHtmlPipe, Salutation, SaveAction, SplitPipe, SubMenuResolve, SuffixButton, Table, TableColumn, TableColumnConfig, TableColumnType, TableConfig, TableDataSource, TableDefinition, TableQueryConfig, TableStaticDataSource, TaskDialogData, Templates, TimePipe, TitleCase, TitleProjection, TruncatePipe, TypedForm, TypedFormBuilder, UniqueValidatorDirective, UrlValidationType, Utils, ValidationAlphabetLocale, ValueAccessorBase, ValuesPipe, VdAlertDialogComponent, VdChipsComponent, VdCodeDirective, VdConfirmDialogComponent, VdCustomDirective, VdDelayedHoverDirective, VdDialogActionsDirective, VdDialogComponent, VdDialogContentDirective, VdDialogService, VdDialogTitleDirective, VdDynamicMenuComponent, VdDynamicTableComponent, VdDynamicTableConfigDialogComponent, VdEditorDirective, VdFileDirective, VdFileInputComponent, VdFileModule, VdFilterOptionDirective, VdGenericFormComponent, VdGenericFormCustomFieldDirective, VdLayoutCardOverComponent, VdLayoutCloseDirective, VdLayoutCompactComponent, VdLayoutComponent, VdLayoutFooterComponent, VdLayoutManageListCloseDirective, VdLayoutManageListComponent, VdLayoutManageListOpenDirective, VdLayoutManageListToggleDirective, VdLayoutNavComponent, VdLayoutNavListCloseDirective, VdLayoutNavListComponent, VdLayoutNavListOpenDirective, VdLayoutNavListToggleDirective, VdLayoutOpenDirective, VdLayoutToggleDirective, VdListOptionDirective, VdListToolbarComponent, VdMediaService, VdMediaToggleDirective, VdMenuComponent, VdNavigationDrawerComponent, VdNavigationDrawerMenuDirective, VdNavigationDrawerToolbarDirective, VdPromptDialogComponent, VdSelectComponent, VdSelectOptionDirective, VdSelectTriggerDirective, VdTableFieldDirective, VdTaskDialogComponent, allOf, allOfAsync, alpha, alphaAsync, alphaNumeric, alphaNumericAsync, and, ascii, async, blacklist, choice, choiceAsync, compare, compose, contains, containsAsync, creditCard, creditCardAsync, cusip, custom, customAsync, dataUri, date, dateAsync, different, digit, disable, elementClass, email, endpointMetadataKey, endsWith, endsWithAsync, error, escape, even, extension, extensionAsync, factor, factorAsync, file, fileAsync, fileSize, fileSizeAsync, formDefinitionMetadataKey, formFieldGroupsMetadataKey, formFieldsMetadataKey, getDisplay, getEndpoint, getFormDefinition, getFormGroups, getTableDefinition, greaterThan, greaterThanAsync, greaterThanEqualTo, greaterThanEqualToAsync, grid, headerMetadataKey, hexColor, image, imageAsync, json, latLong, latitude, leapYear, lessThan, lessThanAsync, lessThanEqualTo, lessThanEqualToAsync, longitude, lowerCase, ltrim, mac, mask, maxDate, maxDateAsync, maxLength, maxLengthAsync, maxNumber, maxNumberAsync, maxTime, maxTimeAsync, minDate, minDateAsync, minLength, minLengthAsync, minNumber, minNumberAsync, minTime, minTimeAsync, mixinDisableRipple, mixinDisabled, model, noneOf, noneOfAsync, not, notEmpty, numeric, numericAsync, odd, oneOf, oneOfAsync, or, password, passwordAsync, pattern, patternAsync, port, prefix, primeNumber, prop, propArray, propObject, range, rangeAsync, required, requiredTrue, rtrim, rule, sanitize, startsWith, startsWithAsync, stripLow, suffix, tableColumnsMetadataKey, tableDefinitionMetadataKey, time, timeAsync, toBoolean, toDate, toDouble, toFloat, toInt, toString, trim, unique, updateOn, upperCase, url, urlAsync, vdCollapseAnimation, whitelist };
27200
27406
  //# sourceMappingURL=messaia-cdk.mjs.map