@c10t/nice-component-library 0.0.26 → 0.0.27-b

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.
@@ -436,6 +436,7 @@ class FlatTreeNodeModel {
436
436
  children = [];
437
437
  value;
438
438
  displayValue = '';
439
+ iconClass = '';
439
440
  checked;
440
441
  checkedDisplay;
441
442
  filterChecked;
@@ -5391,7 +5392,7 @@ class CvaSmartTableComponent {
5391
5392
  [patternFilter]="column.patternFilter ? column.patternFilter : ''">
5392
5393
  </cva-input>
5393
5394
  <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT_CURRENCY"
5394
- type="number" #cellComponentRef
5395
+ #cellComponentRef
5395
5396
  [placeholder]="moduleName + '.table.placeholder.input.currency'"
5396
5397
  [isFormControl]="false"
5397
5398
  [alignText]="getAlign(column)"
@@ -5668,7 +5669,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
5668
5669
  [patternFilter]="column.patternFilter ? column.patternFilter : ''">
5669
5670
  </cva-input>
5670
5671
  <cva-input *ngSwitchCase="ColumnTypeEnum.INPUT_CURRENCY"
5671
- type="number" #cellComponentRef
5672
+ #cellComponentRef
5672
5673
  [placeholder]="moduleName + '.table.placeholder.input.currency'"
5673
5674
  [isFormControl]="false"
5674
5675
  [alignText]="getAlign(column)"
@@ -6375,6 +6376,7 @@ class CvaMultiUploadComponent {
6375
6376
  maxSize = null;
6376
6377
  accept = null;
6377
6378
  label = '';
6379
+ placeholder = '';
6378
6380
  required = '';
6379
6381
  disabled = false;
6380
6382
  /* percent label outside css */
@@ -6389,12 +6391,10 @@ class CvaMultiUploadComponent {
6389
6391
  if (!obj) {
6390
6392
  return;
6391
6393
  }
6392
- if (this.multiple) {
6393
- this.files.push(obj);
6394
- }
6395
- else {
6396
- this.files = [obj];
6394
+ if (!this.multiple && this.files.length === 1) {
6395
+ this.files.length = 0;
6397
6396
  }
6397
+ this.files.push(obj);
6398
6398
  this.propagateChange(this.files);
6399
6399
  }
6400
6400
  registerOnChange(fn) {
@@ -6445,6 +6445,7 @@ class CvaMultiUploadComponent {
6445
6445
  const target = event.target;
6446
6446
  if (target && target.files) {
6447
6447
  this.convertToUploadModel(target.files);
6448
+ target.value = '';
6448
6449
  }
6449
6450
  }
6450
6451
  onFileDroppedAction(fileList) {
@@ -6466,41 +6467,43 @@ class CvaMultiUploadComponent {
6466
6467
  return true;
6467
6468
  }
6468
6469
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaMultiUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6469
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaMultiUploadComponent, isStandalone: false, selector: "cva-multi-upload", inputs: { files: "files", multiple: "multiple", maxSize: "maxSize", accept: "accept", label: "label", required: "required", disabled: "disabled", percentOfLabelOutside: "percentOfLabelOutside" }, outputs: { onFileChange: "onFileChange" }, providers: [
6470
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaMultiUploadComponent, isStandalone: false, selector: "cva-multi-upload", inputs: { files: "files", multiple: "multiple", maxSize: "maxSize", accept: "accept", label: "label", placeholder: "placeholder", required: "required", disabled: "disabled", percentOfLabelOutside: "percentOfLabelOutside" }, outputs: { onFileChange: "onFileChange" }, providers: [
6470
6471
  {
6471
6472
  provide: NG_VALUE_ACCESSOR,
6472
6473
  useExisting: forwardRef(() => CvaMultiUploadComponent),
6473
6474
  multi: true,
6474
6475
  },
6475
6476
  ], viewQueries: [{ propertyName: "fileUpload", first: true, predicate: ["fileUpload"], descendants: true }], ngImport: i0, template: `
6476
- <div class="cva-multi-upload"
6477
- fxLayout="row" fxLayout.lt-sm="row wrap">
6478
- <mat-label *ngIf="label" class="label_width"
6479
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
6480
- <div class="label">{{ (label ? label : '') | translate }}<span
6481
- class="required-label-outside">{{ !!required ? '*' : '' }}</span></div>
6482
- </mat-label>
6483
- <div class="uploadArea"
6484
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%"
6485
- appDragDrop (onFileDropped)="onFileDroppedAction($event)">
6486
- <input type="file" [multiple]="multiple" #fileUpload (change)="onFileChangeAction($event)"
6487
- [disabled]="disabled"
6488
- accept="{{accept ? accept.join() : '*/*'}}">
6489
- <mat-card>
6490
- <mat-card-actions>
6491
- <button mat-button class="upload-button" color="warn" (click)="onClick()">
6492
- <mat-icon>add</mat-icon>
6493
- <span>{{ 'common.upload.file' | translate }}</span>
6494
- </button>
6495
- </mat-card-actions>
6496
- <mat-card-content>
6497
- </mat-card-content>
6498
- </mat-card>
6499
- <mat-error *ngIf="sizeError!==null">{{ sizeError + ' ' + ('common.is.over-size' | translate) }}</mat-error>
6500
- <mat-error *ngIf="typeError!==null">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}</mat-error>
6501
- </div>
6502
- </div>
6503
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3$3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3$3.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: DragDropDirective, selector: "[appDragDrop]", outputs: ["onFileDropped"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
6477
+ <div class="cva-multi-upload"
6478
+ fxLayout="row" fxLayout.lt-sm="row wrap">
6479
+ <mat-label *ngIf="label" class="label_width"
6480
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
6481
+ <div class="label">{{ (label ? label : '') | translate }}<span
6482
+ class="required-label-outside">{{ !!required ? '*' : '' }}</span></div>
6483
+ </mat-label>
6484
+ <div class="uploadArea"
6485
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%"
6486
+ appDragDrop (onFileDropped)="onFileDroppedAction($event)">
6487
+ <input type="file" [multiple]="multiple" #fileUpload (change)="onFileChangeAction($event)"
6488
+ [disabled]="disabled"
6489
+ accept="{{accept ? accept.join() : '*/*'}}">
6490
+ <mat-card>
6491
+ <mat-card-actions>
6492
+ <button mat-button class="upload-button" color="warn" (click)="onClick()">
6493
+ <mat-icon>add</mat-icon>
6494
+ <span>{{ !!placeholder ? placeholder : 'common.upload.file' | translate }}</span>
6495
+ </button>
6496
+ </mat-card-actions>
6497
+ <mat-card-content>
6498
+ </mat-card-content>
6499
+ </mat-card>
6500
+ <mat-error *ngIf="sizeError!==null">{{ sizeError + ' ' + ('common.is.over-size' | translate) }}
6501
+ </mat-error>
6502
+ <mat-error *ngIf="typeError!==null">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}
6503
+ </mat-error>
6504
+ </div>
6505
+ </div>
6506
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3$3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i3$3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i3$3.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: DragDropDirective, selector: "[appDragDrop]", outputs: ["onFileDropped"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
6504
6507
  }
6505
6508
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaMultiUploadComponent, decorators: [{
6506
6509
  type: Component,
@@ -6508,34 +6511,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
6508
6511
  selector: 'cva-multi-upload',
6509
6512
  standalone: false,
6510
6513
  template: `
6511
- <div class="cva-multi-upload"
6512
- fxLayout="row" fxLayout.lt-sm="row wrap">
6513
- <mat-label *ngIf="label" class="label_width"
6514
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
6515
- <div class="label">{{ (label ? label : '') | translate }}<span
6516
- class="required-label-outside">{{ !!required ? '*' : '' }}</span></div>
6517
- </mat-label>
6518
- <div class="uploadArea"
6519
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%"
6520
- appDragDrop (onFileDropped)="onFileDroppedAction($event)">
6521
- <input type="file" [multiple]="multiple" #fileUpload (change)="onFileChangeAction($event)"
6522
- [disabled]="disabled"
6523
- accept="{{accept ? accept.join() : '*/*'}}">
6524
- <mat-card>
6525
- <mat-card-actions>
6526
- <button mat-button class="upload-button" color="warn" (click)="onClick()">
6527
- <mat-icon>add</mat-icon>
6528
- <span>{{ 'common.upload.file' | translate }}</span>
6529
- </button>
6530
- </mat-card-actions>
6531
- <mat-card-content>
6532
- </mat-card-content>
6533
- </mat-card>
6534
- <mat-error *ngIf="sizeError!==null">{{ sizeError + ' ' + ('common.is.over-size' | translate) }}</mat-error>
6535
- <mat-error *ngIf="typeError!==null">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}</mat-error>
6536
- </div>
6537
- </div>
6538
- `,
6514
+ <div class="cva-multi-upload"
6515
+ fxLayout="row" fxLayout.lt-sm="row wrap">
6516
+ <mat-label *ngIf="label" class="label_width"
6517
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
6518
+ <div class="label">{{ (label ? label : '') | translate }}<span
6519
+ class="required-label-outside">{{ !!required ? '*' : '' }}</span></div>
6520
+ </mat-label>
6521
+ <div class="uploadArea"
6522
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%"
6523
+ appDragDrop (onFileDropped)="onFileDroppedAction($event)">
6524
+ <input type="file" [multiple]="multiple" #fileUpload (change)="onFileChangeAction($event)"
6525
+ [disabled]="disabled"
6526
+ accept="{{accept ? accept.join() : '*/*'}}">
6527
+ <mat-card>
6528
+ <mat-card-actions>
6529
+ <button mat-button class="upload-button" color="warn" (click)="onClick()">
6530
+ <mat-icon>add</mat-icon>
6531
+ <span>{{ !!placeholder ? placeholder : 'common.upload.file' | translate }}</span>
6532
+ </button>
6533
+ </mat-card-actions>
6534
+ <mat-card-content>
6535
+ </mat-card-content>
6536
+ </mat-card>
6537
+ <mat-error *ngIf="sizeError!==null">{{ sizeError + ' ' + ('common.is.over-size' | translate) }}
6538
+ </mat-error>
6539
+ <mat-error *ngIf="typeError!==null">{{ typeError + ' ' + ('common.is.not-accept' | translate) }}
6540
+ </mat-error>
6541
+ </div>
6542
+ </div>
6543
+ `,
6539
6544
  providers: [
6540
6545
  {
6541
6546
  provide: NG_VALUE_ACCESSOR,
@@ -6557,6 +6562,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
6557
6562
  type: Input
6558
6563
  }], label: [{
6559
6564
  type: Input
6565
+ }], placeholder: [{
6566
+ type: Input
6560
6567
  }], required: [{
6561
6568
  type: Input
6562
6569
  }], disabled: [{
@@ -7831,41 +7838,45 @@ class CvaFlatTreeNodeLeftComponent {
7831
7838
  }
7832
7839
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeNodeLeftComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7833
7840
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeNodeLeftComponent, isStandalone: false, selector: "cva-flat-tree-node-left", inputs: { treeControl: "treeControl", isHideCheckbox: "isHideCheckbox", node: "node", nodeClicked: "nodeClicked" }, outputs: { toggle: "toggle", onParentNodeClick: "onParentNodeClick", onLeafNodeClick: "onLeafNodeClick", ngModelParentChange: "ngModelParentChange", ngModelLeafChange: "ngModelLeafChange" }, ngImport: i0, template: `
7834
- <ng-container [ngSwitch]="hasChild(node)">
7835
- <ng-container *ngSwitchCase="false">
7836
- <div
7837
- class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7838
- (click)="onLeafNodeClick.emit()"
7839
- fxLayoutAlign="space-between center">
7840
- <button *ngIf="node.level > 0" type="button" mat-icon-button disabled></button>
7841
- {{ node.displayValue }}
7842
- </div>
7843
- <mat-checkbox [(ngModel)]="node.checked"
7844
- [checked]="node.checked"
7845
- (ngModelChange)="ngModelLeafChange.emit($event)"
7846
- [disabled]="checkDisabledNode(node)"
7847
- *ngIf="!isHideCheckbox">
7848
- </mat-checkbox>
7849
- </ng-container>
7850
- <ng-container *ngSwitchCase="true">
7851
- <div
7852
- class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7853
- fxLayoutAlign="space-between center">
7854
- <button type="button" mat-icon-button (click)="toggle.emit()"
7855
- [attr.aria-label]="'toggle ' + node.displayValue">
7856
- <i class="fas {{(treeControl && treeControl.isExpanded(node)) ? 'fa-chevron-up' : 'fa-chevron-down'}}"></i>
7857
- </button>
7858
- <span (click)="onParentNodeClick.emit()">{{ node.displayValue }}</span>
7859
- </div>
7860
- <mat-checkbox [(ngModel)]="node.checked"
7861
- *ngIf="!isHideCheckbox"
7862
- [checked]="descendantsAllSelected(node)"
7863
- [disabled]="onDisabledParent(node) || getDisabledInputFunc(node)"
7864
- [indeterminate]="descendantsPartiallySelected(node)"
7865
- (ngModelChange)="ngModelParentChange.emit($event)">
7866
- </mat-checkbox>
7841
+ <ng-container [ngSwitch]="hasChild(node)">
7842
+ <ng-container *ngSwitchCase="false">
7843
+ <div
7844
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7845
+ (click)="onLeafNodeClick.emit()"
7846
+ fxLayoutAlign="space-between center">
7847
+ <button *ngIf="node.level > 0" type="button" mat-icon-button disabled></button>
7848
+ <i *ngIf="node.iconClass" class="{{ node.iconClass }} icon-left"></i>
7849
+ {{ node.displayValue }}
7850
+ </div>
7851
+ <mat-checkbox [(ngModel)]="node.checked"
7852
+ [checked]="node.checked"
7853
+ (ngModelChange)="ngModelLeafChange.emit($event)"
7854
+ [disabled]="checkDisabledNode(node)"
7855
+ *ngIf="!isHideCheckbox">
7856
+ </mat-checkbox>
7857
+ </ng-container>
7858
+ <ng-container *ngSwitchCase="true">
7859
+ <div
7860
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7861
+ fxLayoutAlign="space-between center">
7862
+ <button type="button" mat-icon-button (click)="toggle.emit()"
7863
+ [attr.aria-label]="'toggle ' + node.displayValue">
7864
+ <i class="fas {{(treeControl && treeControl.isExpanded(node)) ? 'fa-chevron-up' : 'fa-chevron-down'}}"></i>
7865
+ </button>
7866
+ <span (click)="onParentNodeClick.emit()">
7867
+ <i *ngIf="node.iconClass" class="{{ node.iconClass }} icon-left"></i>
7868
+ {{ node.displayValue }}
7869
+ </span>
7870
+ </div>
7871
+ <mat-checkbox [(ngModel)]="node.checked"
7872
+ *ngIf="!isHideCheckbox"
7873
+ [checked]="descendantsAllSelected(node)"
7874
+ [disabled]="onDisabledParent(node) || getDisabledInputFunc(node)"
7875
+ [indeterminate]="descendantsPartiallySelected(node)"
7876
+ (ngModelChange)="ngModelParentChange.emit($event)">
7877
+ </mat-checkbox>
7878
+ </ng-container>
7867
7879
  </ng-container>
7868
- </ng-container>
7869
7880
  `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { 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: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i4.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: "directive", type: i8$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
7870
7881
  }
7871
7882
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeNodeLeftComponent, decorators: [{
@@ -7874,41 +7885,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
7874
7885
  selector: 'cva-flat-tree-node-left',
7875
7886
  standalone: false,
7876
7887
  template: `
7877
- <ng-container [ngSwitch]="hasChild(node)">
7878
- <ng-container *ngSwitchCase="false">
7879
- <div
7880
- class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7881
- (click)="onLeafNodeClick.emit()"
7882
- fxLayoutAlign="space-between center">
7883
- <button *ngIf="node.level > 0" type="button" mat-icon-button disabled></button>
7884
- {{ node.displayValue }}
7885
- </div>
7886
- <mat-checkbox [(ngModel)]="node.checked"
7887
- [checked]="node.checked"
7888
- (ngModelChange)="ngModelLeafChange.emit($event)"
7889
- [disabled]="checkDisabledNode(node)"
7890
- *ngIf="!isHideCheckbox">
7891
- </mat-checkbox>
7892
- </ng-container>
7893
- <ng-container *ngSwitchCase="true">
7894
- <div
7895
- class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7896
- fxLayoutAlign="space-between center">
7897
- <button type="button" mat-icon-button (click)="toggle.emit()"
7898
- [attr.aria-label]="'toggle ' + node.displayValue">
7899
- <i class="fas {{(treeControl && treeControl.isExpanded(node)) ? 'fa-chevron-up' : 'fa-chevron-down'}}"></i>
7900
- </button>
7901
- <span (click)="onParentNodeClick.emit()">{{ node.displayValue }}</span>
7902
- </div>
7903
- <mat-checkbox [(ngModel)]="node.checked"
7904
- *ngIf="!isHideCheckbox"
7905
- [checked]="descendantsAllSelected(node)"
7906
- [disabled]="onDisabledParent(node) || getDisabledInputFunc(node)"
7907
- [indeterminate]="descendantsPartiallySelected(node)"
7908
- (ngModelChange)="ngModelParentChange.emit($event)">
7909
- </mat-checkbox>
7888
+ <ng-container [ngSwitch]="hasChild(node)">
7889
+ <ng-container *ngSwitchCase="false">
7890
+ <div
7891
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7892
+ (click)="onLeafNodeClick.emit()"
7893
+ fxLayoutAlign="space-between center">
7894
+ <button *ngIf="node.level > 0" type="button" mat-icon-button disabled></button>
7895
+ <i *ngIf="node.iconClass" class="{{ node.iconClass }} icon-left"></i>
7896
+ {{ node.displayValue }}
7897
+ </div>
7898
+ <mat-checkbox [(ngModel)]="node.checked"
7899
+ [checked]="node.checked"
7900
+ (ngModelChange)="ngModelLeafChange.emit($event)"
7901
+ [disabled]="checkDisabledNode(node)"
7902
+ *ngIf="!isHideCheckbox">
7903
+ </mat-checkbox>
7904
+ </ng-container>
7905
+ <ng-container *ngSwitchCase="true">
7906
+ <div
7907
+ class="label-area {{isHideCheckbox ? 'isClickDiv' : ''}} {{isHideCheckbox && nodeClicked?.value === node.value ? 'nodeSelected': ''}}"
7908
+ fxLayoutAlign="space-between center">
7909
+ <button type="button" mat-icon-button (click)="toggle.emit()"
7910
+ [attr.aria-label]="'toggle ' + node.displayValue">
7911
+ <i class="fas {{(treeControl && treeControl.isExpanded(node)) ? 'fa-chevron-up' : 'fa-chevron-down'}}"></i>
7912
+ </button>
7913
+ <span (click)="onParentNodeClick.emit()">
7914
+ <i *ngIf="node.iconClass" class="{{ node.iconClass }} icon-left"></i>
7915
+ {{ node.displayValue }}
7916
+ </span>
7917
+ </div>
7918
+ <mat-checkbox [(ngModel)]="node.checked"
7919
+ *ngIf="!isHideCheckbox"
7920
+ [checked]="descendantsAllSelected(node)"
7921
+ [disabled]="onDisabledParent(node) || getDisabledInputFunc(node)"
7922
+ [indeterminate]="descendantsPartiallySelected(node)"
7923
+ (ngModelChange)="ngModelParentChange.emit($event)">
7924
+ </mat-checkbox>
7925
+ </ng-container>
7910
7926
  </ng-container>
7911
- </ng-container>
7912
7927
  `,
7913
7928
  }]
7914
7929
  }], propDecorators: { treeControl: [{
@@ -8077,9 +8092,9 @@ class CvaFlatTreeComponent {
8077
8092
  treeConfig;
8078
8093
  isSearchOutSide = false;
8079
8094
  searchTextOutSide = '';
8080
- searchText = '';
8081
8095
  errorMessages = new Map();
8082
8096
  fullDatasource = [];
8097
+ searchText = '';
8083
8098
  filterDatasource = [];
8084
8099
  treeControl;
8085
8100
  treeFlattener;
@@ -8141,9 +8156,6 @@ class CvaFlatTreeComponent {
8141
8156
  ngOnInit() {
8142
8157
  this.callValidator();
8143
8158
  }
8144
- ngAfterViewInit() {
8145
- // this.onChangeSearchText();
8146
- }
8147
8159
  getDisplayInputFunc(node) {
8148
8160
  return typeof (node._displayFuncInput) === 'function' ? node._displayFuncInput(node) : !!node._displayFuncInput;
8149
8161
  }
@@ -8266,13 +8278,8 @@ class CvaFlatTreeComponent {
8266
8278
  this.propagateChange(fn);
8267
8279
  }
8268
8280
  writeValue(obj) {
8269
- // if (this.multiple && !obj) {
8270
- // obj = [];
8271
- // }
8272
8281
  if (obj) {
8273
- // if (this.multiple) {
8274
8282
  this.value = obj;
8275
- // }
8276
8283
  this.mapIndexes = new Map();
8277
8284
  for (let i = 0; i < this.fullDataTreeControl.dataNodes.length; i++) {
8278
8285
  this.mapIndexes.set(this.fullDataTreeControl.dataNodes[i].value, i);
@@ -8451,12 +8458,6 @@ class CvaFlatTreeComponent {
8451
8458
  }
8452
8459
  return node;
8453
8460
  }
8454
- deSelect(node) {
8455
- this.checkLeafNode(false, node, true);
8456
- }
8457
- deSelectParent(node) {
8458
- this.checkParentNode(false, node, true);
8459
- }
8460
8461
  toggleTreeControl(treeControl, node) {
8461
8462
  treeControl.toggle(node);
8462
8463
  const orgNode = this.fullDataTreeControl.dataNodes.find(n => n.value === node.value);
@@ -8591,136 +8592,154 @@ class CvaFlatTreeComponent {
8591
8592
  }
8592
8593
  toggleNodeCheck(node, checked) {
8593
8594
  const isLeaf = !FlatTreeService.hasChild(node);
8594
- // Gọi 1 lần duy nhất nếu parent
8595
- const descendants = isLeaf ? [] : this.fullDataTreeControl.getDescendants(node);
8596
- const affectedNodes = isLeaf ? [node] : descendants.filter(n => !FlatTreeService.hasChild(n));
8597
- for (const leaf of affectedNodes) {
8595
+ // Lấy danh sách node đang hiển thị (filtered)
8596
+ const visibleNodes = isLeaf
8597
+ ? [node]
8598
+ : [...this.getAllChildNode(this.treeControl, node).filter(n => n.display), node];
8599
+ for (const leaf of visibleNodes) {
8598
8600
  if (!leaf.display || this.checkDisabledNode(leaf))
8599
8601
  continue;
8600
8602
  const index = this.value.indexOf(leaf.value);
8601
8603
  if (checked && index < 0) {
8602
8604
  this.value.push(leaf.value);
8603
- this.valueObjRef.set(leaf.value, leaf);
8604
- leaf.checked = true;
8605
8605
  }
8606
8606
  if (!checked && index >= 0) {
8607
8607
  this.value.splice(index, 1);
8608
- this.valueObjRef.delete(leaf.value);
8609
- leaf.checked = false;
8610
- }
8611
- const orgNodeIndex = this.mapIndexes.get(leaf.value);
8612
- if (orgNodeIndex !== undefined) {
8613
- this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = leaf.checked;
8614
8608
  }
8615
8609
  }
8616
- // Nếu node là cha → cập nhật isExpanded
8617
- if (!isLeaf) {
8618
- node.checked = checked;
8619
- const orgNodeIndex = this.mapIndexes.get(node.value);
8620
- if (orgNodeIndex !== undefined) {
8621
- this.fullDataTreeControl.dataNodes[orgNodeIndex].checked = checked;
8622
- this.fullDataTreeControl.dataNodes[orgNodeIndex].isExpanded = false;
8610
+ if (isLeaf) {
8611
+ const parentNode = this.getRootNode(node);
8612
+ if (parentNode && FlatTreeService.hasChild(parentNode)) {
8613
+ const allChild = this.getAllChildNode(this.fullDataTreeControl, parentNode);
8614
+ // Kiểm tra còn node con nào trong value không
8615
+ const hasChildInValue = allChild.some(child => this.value.includes(child.value));
8616
+ if (!hasChildInValue) {
8617
+ const parentIndex = this.value.indexOf(parentNode.value);
8618
+ if (parentIndex >= 0) {
8619
+ this.value.splice(parentIndex, 1);
8620
+ }
8621
+ }
8623
8622
  }
8624
8623
  }
8625
- else {
8626
- node.checked = checked;
8627
- }
8624
+ // Gọi writeValue để cập nhật cho FormControl
8628
8625
  this.writeValue(this.value);
8629
8626
  this.cdr.detectChanges();
8630
8627
  }
8628
+ getTotalSelected(nodes) {
8629
+ let count = 0;
8630
+ for (const node of nodes) {
8631
+ const isLeaf = !FlatTreeService.hasChild(node);
8632
+ if (isLeaf) {
8633
+ if (this.value.includes(node.value)) {
8634
+ count += 1;
8635
+ }
8636
+ }
8637
+ else if (node.children && node.children.length > 0) {
8638
+ const childChecked = this.getTotalSelected(node.children);
8639
+ // Nếu tất cả các con được checked đồng nghĩa cha được checked thì mới cộng
8640
+ if (childChecked === node.children.length) {
8641
+ count += 1;
8642
+ }
8643
+ count += childChecked;
8644
+ }
8645
+ }
8646
+ return count;
8647
+ }
8631
8648
  _getLevel = (node) => node.level;
8632
8649
  _isExpandable = (node) => FlatTreeService.hasChild(node);
8633
8650
  _getChildren = (node) => of(node.children ? node.children : []);
8634
8651
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeComponent, deps: [{ token: i1.TranslateService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i1$2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
8635
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeComponent, isStandalone: false, selector: "cva-flat-tree", inputs: { label: "label", required: "required", value: "value", multiple: "multiple", disabled: "disabled", isView: "isView", isDisplayChooseTreeOnly: "isDisplayChooseTreeOnly", isHideCheckbox: "isHideCheckbox", isCollapseSelected: "isCollapseSelected", selectedLabelTitle: "selectedLabelTitle", viewHeight: "viewHeight", itemSize: "itemSize", percentOfLabelOutside: "percentOfLabelOutside", treeConfig: "treeConfig", isSearchOutSide: "isSearchOutSide", searchTextOutSide: "searchTextOutSide", errorMessages: "errorMessages", fullDatasource: "fullDatasource", isFormControl: "isFormControl" }, outputs: { selectionChange: "selectionChange", onNodeClick: "onNodeClick" }, viewQueries: [{ propertyName: "chooseVirtualScroll", first: true, predicate: ["chooseAreaScrollViewport"], descendants: true }, { propertyName: "selectedVirtualScroll", first: true, predicate: ["selectedScrollViewport"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
8636
- <div class="cva-flat-tree labelOutside"
8637
- fxLayout="row" fxLayout.lt-sm="row wrap">
8638
- <mat-label *ngIf="label && !isSearchOutSide" class="label_width"
8652
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.5", type: CvaFlatTreeComponent, isStandalone: false, selector: "cva-flat-tree", inputs: { label: "label", required: "required", value: "value", multiple: "multiple", disabled: "disabled", isView: "isView", isDisplayChooseTreeOnly: "isDisplayChooseTreeOnly", isHideCheckbox: "isHideCheckbox", isCollapseSelected: "isCollapseSelected", selectedLabelTitle: "selectedLabelTitle", viewHeight: "viewHeight", itemSize: "itemSize", percentOfLabelOutside: "percentOfLabelOutside", treeConfig: "treeConfig", isSearchOutSide: "isSearchOutSide", searchTextOutSide: "searchTextOutSide", errorMessages: "errorMessages", fullDatasource: "fullDatasource", nodeClicked: "nodeClicked", isFormControl: "isFormControl" }, outputs: { selectionChange: "selectionChange", onNodeClick: "onNodeClick" }, viewQueries: [{ propertyName: "chooseVirtualScroll", first: true, predicate: ["chooseAreaScrollViewport"], descendants: true }, { propertyName: "selectedVirtualScroll", first: true, predicate: ["selectedScrollViewport"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
8653
+ <div class="cva-flat-tree labelOutside"
8654
+ fxLayout="row" fxLayout.lt-sm="row wrap">
8655
+ <mat-label *ngIf="label && !isSearchOutSide" class="label_width"
8656
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8657
+ <div class="label">
8658
+ <div>
8659
+ {{ (label ? label : '') | translate }}<span
8660
+ class="required-label-outside">{{ required ? '*' : '' }}</span>
8661
+ </div>
8662
+ </div>
8663
+ </mat-label>
8664
+ <div class="tree-area"
8639
8665
  fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8640
- <div class="label">
8641
- <div>
8642
- {{ (label ? label : '') | translate }}<span class="required-label-outside">{{ required ? '*' : '' }}</span>
8643
- </div>
8644
- </div>
8645
- </mat-label>
8646
- <div class="tree-area"
8647
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8648
- <div fxLayout="row wrap">
8649
- <div class="choose-area"
8650
- *ngIf="!checkIsView(isView) && !isCollapseSelected"
8651
- fxLayout="column" fxFlex="1 1 {{isDisplayChooseTreeOnly ? '100%' : '50%'}}" fxFlex.lt-sm="100%">
8652
- <div class="header-choose-area">
8653
- <div class="title-choose-tree" fxLayout="row" fxLayout.lt-sm="row wrap">
8654
- <mat-label fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%" class="label_width"
8655
- *ngIf="label && isSearchOutSide">
8656
- <div class="label">{{ (label ? label : '') | translate }}<span
8657
- class="required-label-outside">{{ required ? '*' : '' }}</span></div>
8658
- </mat-label>
8659
- <mat-divider *ngIf="label && isSearchOutSide"></mat-divider>
8660
- </div>
8661
- <mat-form-field appearance="outline"
8662
- *ngIf="!isSearchOutSide"
8663
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8664
- <input matInput
8665
- placeholder="{{'common.searchText'|translate}}"
8666
- [(ngModel)]="searchText"
8667
- (ngModelChange)="onChangeSearchText()"
8668
- autocomplete="off">
8669
- </mat-form-field>
8670
- </div>
8671
- <cdk-virtual-scroll-viewport #chooseAreaScrollViewport itemSize="{{itemSize}}"
8672
- [ngStyle]="{height: viewHeight + 'px'}">
8673
- <ng-container *cdkVirtualFor="let node of dataSource">
8674
- <cva-flat-tree-node-left
8675
- [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8676
- [attr.aria-level]="node.level"
8677
- [treeControl]="treeControl"
8678
- [isHideCheckbox]="isHideCheckbox"
8679
- [nodeClicked]="nodeClicked"
8680
- [node]="node"
8681
- (toggle)="toggleTreeControl(treeControl, node)"
8682
- (onParentNodeClick)="onParentNodeClick(node)"
8683
- (onLeafNodeClick)="onLeafNodeClick(node)"
8684
- (ngModelParentChange)="toggleNodeCheck(node, $event)"
8685
- (ngModelLeafChange)="toggleNodeCheck(node, $event)">
8686
- </cva-flat-tree-node-left>
8687
- </ng-container>
8688
- </cdk-virtual-scroll-viewport>
8689
- </div>
8690
- <div class="selected-area {{isCollapseSelected ? 'hiddenTree' : ''}}"
8691
- *ngIf="!isDisplayChooseTreeOnly"
8692
- fxLayout="column" fxFlex="1 1 {{checkIsView(isView) ? '100%' : '50%'}}" fxFlex.lt-sm="100%">
8693
- <div class="header-area" *ngIf="!isView">
8694
- <label>{{ selectedLabelTitle | translate }}{{ '(' + (value ? value.length : 0) + ')' }}</label>
8695
- <div class="collapse-expand-all" (click)="toggleSelectedTree()">
8696
- {{ (isCollapseSelected ? 'common.selected.tree.expandAll' : 'common.selected.tree.collapse') | translate }}
8697
- <i class="fa {{isCollapseSelected ? 'fa-chevron-down' : 'fa-chevron-up'}}"></i>
8698
- </div>
8666
+ <div fxLayout="row wrap">
8667
+ <div class="choose-area"
8668
+ *ngIf="!checkIsView(isView) && !isCollapseSelected"
8669
+ fxLayout="column" fxFlex="1 1 {{isDisplayChooseTreeOnly ? '100%' : '50%'}}"
8670
+ fxFlex.lt-sm="100%">
8671
+ <div class="header-choose-area">
8672
+ <div class="title-choose-tree" fxLayout="row" fxLayout.lt-sm="row wrap">
8673
+ <mat-label fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%" class="label_width"
8674
+ *ngIf="label && isSearchOutSide">
8675
+ <div class="label">{{ (label ? label : '') | translate }}<span
8676
+ class="required-label-outside">{{ required ? '*' : '' }}</span></div>
8677
+ </mat-label>
8678
+ <mat-divider *ngIf="label && isSearchOutSide"></mat-divider>
8679
+ </div>
8680
+ <mat-form-field appearance="outline"
8681
+ *ngIf="!isSearchOutSide"
8682
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8683
+ <input matInput
8684
+ placeholder="{{'common.searchText'|translate}}"
8685
+ [(ngModel)]="searchText"
8686
+ (ngModelChange)="onChangeSearchText()"
8687
+ autocomplete="off">
8688
+ </mat-form-field>
8689
+ </div>
8690
+ <cdk-virtual-scroll-viewport #chooseAreaScrollViewport itemSize="{{itemSize}}"
8691
+ [ngStyle]="{height: viewHeight + 'px'}">
8692
+ <ng-container *cdkVirtualFor="let node of dataSource">
8693
+ <cva-flat-tree-node-left
8694
+ [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8695
+ [attr.aria-level]="node.level"
8696
+ [treeControl]="treeControl"
8697
+ [isHideCheckbox]="isHideCheckbox"
8698
+ [nodeClicked]="nodeClicked"
8699
+ [node]="node"
8700
+ (toggle)="toggleTreeControl(treeControl, node)"
8701
+ (onParentNodeClick)="onParentNodeClick(node)"
8702
+ (onLeafNodeClick)="onLeafNodeClick(node)"
8703
+ (ngModelParentChange)="toggleNodeCheck(node, $event)"
8704
+ (ngModelLeafChange)="toggleNodeCheck(node, $event)">
8705
+ </cva-flat-tree-node-left>
8706
+ </ng-container>
8707
+ </cdk-virtual-scroll-viewport>
8708
+ </div>
8709
+ <div class="selected-area {{isCollapseSelected ? 'hiddenTree' : ''}}"
8710
+ *ngIf="!isDisplayChooseTreeOnly"
8711
+ fxLayout="column" fxFlex="1 1 {{checkIsView(isView) ? '100%' : '50%'}}" fxFlex.lt-sm="100%">
8712
+ <div class="header-area" *ngIf="!isView">
8713
+ <label>{{ selectedLabelTitle | translate }}{{ '(' + getTotalSelected(fullDataDataSource.data) + ')' }}</label>
8714
+ <div class="collapse-expand-all" (click)="toggleSelectedTree()">
8715
+ {{ (isCollapseSelected ? 'common.selected.tree.expandAll' : 'common.selected.tree.collapse') | translate }}
8716
+ <i class="fa {{isCollapseSelected ? 'fa-chevron-down' : 'fa-chevron-up'}}"></i>
8717
+ </div>
8718
+ </div>
8719
+ <cdk-virtual-scroll-viewport #selectedScrollViewport
8720
+ *ngIf="!isCollapseSelected"
8721
+ itemSize="{{itemSize}}" [ngStyle]="{height: viewHeight + 'px'}">
8722
+ <ng-container *cdkVirtualFor="let node of selectedDataSource">
8723
+ <cva-flat-tree-node-right
8724
+ [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8725
+ [attr.aria-level]="node.level"
8726
+ [treeControl]="selectedTreeControl"
8727
+ [node]="node"
8728
+ [isView]="isView"
8729
+ (toggle)="toggleSelectedTree(node)"
8730
+ (deSelectLeafNode)="toggleNodeCheck(node, false)"
8731
+ (deSelectParentNode)="toggleNodeCheck(node, false)">
8732
+ </cva-flat-tree-node-right>
8733
+ </ng-container>
8734
+ </cdk-virtual-scroll-viewport>
8735
+ </div>
8736
+ </div>
8737
+ <mat-hint *ngIf="NsValiator.invalid(formControl)">
8738
+ {{ NsValiator.getErrorMessage(formControl, errorMessages) | translate }}
8739
+ </mat-hint>
8699
8740
  </div>
8700
- <cdk-virtual-scroll-viewport #selectedScrollViewport
8701
- *ngIf="!isCollapseSelected"
8702
- itemSize="{{itemSize}}" [ngStyle]="{height: viewHeight + 'px'}">
8703
- <ng-container *cdkVirtualFor="let node of selectedDataSource">
8704
- <cva-flat-tree-node-right
8705
- [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8706
- [attr.aria-level]="node.level"
8707
- [treeControl]="selectedTreeControl"
8708
- [node]="node"
8709
- [isView]="isView"
8710
- (toggle)="toggleSelectedTree(node)"
8711
- (deSelectLeafNode)="deSelect(node)"
8712
- (deSelectParentNode)="deSelectParent(node)">
8713
- </cva-flat-tree-node-right>
8714
- </ng-container>
8715
- </cdk-virtual-scroll-viewport>
8716
- </div>
8717
8741
  </div>
8718
- <mat-hint *ngIf="NsValiator.invalid(formControl)">
8719
- {{ NsValiator.getErrorMessage(formControl, errorMessages) | translate }}
8720
- </mat-hint>
8721
- </div>
8722
- </div>
8723
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i8.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: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: CvaFlatTreeNodeLeftComponent, selector: "cva-flat-tree-node-left", inputs: ["treeControl", "isHideCheckbox", "node", "nodeClicked"], outputs: ["toggle", "onParentNodeClick", "onLeafNodeClick", "ngModelParentChange", "ngModelLeafChange"] }, { kind: "component", type: CvaFlatTreeNodeRightComponent, selector: "cva-flat-tree-node-right", inputs: ["treeControl", "node", "isView"], outputs: ["toggle", "deSelectLeafNode", "deSelectParentNode"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
8742
+ `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i8.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: i6$2.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i8$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i8$1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i9.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: CvaFlatTreeNodeLeftComponent, selector: "cva-flat-tree-node-left", inputs: ["treeControl", "isHideCheckbox", "node", "nodeClicked"], outputs: ["toggle", "onParentNodeClick", "onLeafNodeClick", "ngModelParentChange", "ngModelLeafChange"] }, { kind: "component", type: CvaFlatTreeNodeRightComponent, selector: "cva-flat-tree-node-right", inputs: ["treeControl", "node", "isView"], outputs: ["toggle", "deSelectLeafNode", "deSelectParentNode"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
8724
8743
  }
8725
8744
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImport: i0, type: CvaFlatTreeComponent, decorators: [{
8726
8745
  type: Component,
@@ -8728,94 +8747,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
8728
8747
  selector: 'cva-flat-tree',
8729
8748
  standalone: false,
8730
8749
  template: `
8731
- <div class="cva-flat-tree labelOutside"
8732
- fxLayout="row" fxLayout.lt-sm="row wrap">
8733
- <mat-label *ngIf="label && !isSearchOutSide" class="label_width"
8750
+ <div class="cva-flat-tree labelOutside"
8751
+ fxLayout="row" fxLayout.lt-sm="row wrap">
8752
+ <mat-label *ngIf="label && !isSearchOutSide" class="label_width"
8753
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8754
+ <div class="label">
8755
+ <div>
8756
+ {{ (label ? label : '') | translate }}<span
8757
+ class="required-label-outside">{{ required ? '*' : '' }}</span>
8758
+ </div>
8759
+ </div>
8760
+ </mat-label>
8761
+ <div class="tree-area"
8734
8762
  fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8735
- <div class="label">
8736
- <div>
8737
- {{ (label ? label : '') | translate }}<span class="required-label-outside">{{ required ? '*' : '' }}</span>
8738
- </div>
8739
- </div>
8740
- </mat-label>
8741
- <div class="tree-area"
8742
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8743
- <div fxLayout="row wrap">
8744
- <div class="choose-area"
8745
- *ngIf="!checkIsView(isView) && !isCollapseSelected"
8746
- fxLayout="column" fxFlex="1 1 {{isDisplayChooseTreeOnly ? '100%' : '50%'}}" fxFlex.lt-sm="100%">
8747
- <div class="header-choose-area">
8748
- <div class="title-choose-tree" fxLayout="row" fxLayout.lt-sm="row wrap">
8749
- <mat-label fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%" class="label_width"
8750
- *ngIf="label && isSearchOutSide">
8751
- <div class="label">{{ (label ? label : '') | translate }}<span
8752
- class="required-label-outside">{{ required ? '*' : '' }}</span></div>
8753
- </mat-label>
8754
- <mat-divider *ngIf="label && isSearchOutSide"></mat-divider>
8755
- </div>
8756
- <mat-form-field appearance="outline"
8757
- *ngIf="!isSearchOutSide"
8758
- fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8759
- <input matInput
8760
- placeholder="{{'common.searchText'|translate}}"
8761
- [(ngModel)]="searchText"
8762
- (ngModelChange)="onChangeSearchText()"
8763
- autocomplete="off">
8764
- </mat-form-field>
8765
- </div>
8766
- <cdk-virtual-scroll-viewport #chooseAreaScrollViewport itemSize="{{itemSize}}"
8767
- [ngStyle]="{height: viewHeight + 'px'}">
8768
- <ng-container *cdkVirtualFor="let node of dataSource">
8769
- <cva-flat-tree-node-left
8770
- [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8771
- [attr.aria-level]="node.level"
8772
- [treeControl]="treeControl"
8773
- [isHideCheckbox]="isHideCheckbox"
8774
- [nodeClicked]="nodeClicked"
8775
- [node]="node"
8776
- (toggle)="toggleTreeControl(treeControl, node)"
8777
- (onParentNodeClick)="onParentNodeClick(node)"
8778
- (onLeafNodeClick)="onLeafNodeClick(node)"
8779
- (ngModelParentChange)="toggleNodeCheck(node, $event)"
8780
- (ngModelLeafChange)="toggleNodeCheck(node, $event)">
8781
- </cva-flat-tree-node-left>
8782
- </ng-container>
8783
- </cdk-virtual-scroll-viewport>
8784
- </div>
8785
- <div class="selected-area {{isCollapseSelected ? 'hiddenTree' : ''}}"
8786
- *ngIf="!isDisplayChooseTreeOnly"
8787
- fxLayout="column" fxFlex="1 1 {{checkIsView(isView) ? '100%' : '50%'}}" fxFlex.lt-sm="100%">
8788
- <div class="header-area" *ngIf="!isView">
8789
- <label>{{ selectedLabelTitle | translate }}{{ '(' + (value ? value.length : 0) + ')' }}</label>
8790
- <div class="collapse-expand-all" (click)="toggleSelectedTree()">
8791
- {{ (isCollapseSelected ? 'common.selected.tree.expandAll' : 'common.selected.tree.collapse') | translate }}
8792
- <i class="fa {{isCollapseSelected ? 'fa-chevron-down' : 'fa-chevron-up'}}"></i>
8793
- </div>
8763
+ <div fxLayout="row wrap">
8764
+ <div class="choose-area"
8765
+ *ngIf="!checkIsView(isView) && !isCollapseSelected"
8766
+ fxLayout="column" fxFlex="1 1 {{isDisplayChooseTreeOnly ? '100%' : '50%'}}"
8767
+ fxFlex.lt-sm="100%">
8768
+ <div class="header-choose-area">
8769
+ <div class="title-choose-tree" fxLayout="row" fxLayout.lt-sm="row wrap">
8770
+ <mat-label fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%" class="label_width"
8771
+ *ngIf="label && isSearchOutSide">
8772
+ <div class="label">{{ (label ? label : '') | translate }}<span
8773
+ class="required-label-outside">{{ required ? '*' : '' }}</span></div>
8774
+ </mat-label>
8775
+ <mat-divider *ngIf="label && isSearchOutSide"></mat-divider>
8776
+ </div>
8777
+ <mat-form-field appearance="outline"
8778
+ *ngIf="!isSearchOutSide"
8779
+ fxLayout="column" fxFlex="auto" fxFlex.lt-md="100%">
8780
+ <input matInput
8781
+ placeholder="{{'common.searchText'|translate}}"
8782
+ [(ngModel)]="searchText"
8783
+ (ngModelChange)="onChangeSearchText()"
8784
+ autocomplete="off">
8785
+ </mat-form-field>
8786
+ </div>
8787
+ <cdk-virtual-scroll-viewport #chooseAreaScrollViewport itemSize="{{itemSize}}"
8788
+ [ngStyle]="{height: viewHeight + 'px'}">
8789
+ <ng-container *cdkVirtualFor="let node of dataSource">
8790
+ <cva-flat-tree-node-left
8791
+ [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8792
+ [attr.aria-level]="node.level"
8793
+ [treeControl]="treeControl"
8794
+ [isHideCheckbox]="isHideCheckbox"
8795
+ [nodeClicked]="nodeClicked"
8796
+ [node]="node"
8797
+ (toggle)="toggleTreeControl(treeControl, node)"
8798
+ (onParentNodeClick)="onParentNodeClick(node)"
8799
+ (onLeafNodeClick)="onLeafNodeClick(node)"
8800
+ (ngModelParentChange)="toggleNodeCheck(node, $event)"
8801
+ (ngModelLeafChange)="toggleNodeCheck(node, $event)">
8802
+ </cva-flat-tree-node-left>
8803
+ </ng-container>
8804
+ </cdk-virtual-scroll-viewport>
8805
+ </div>
8806
+ <div class="selected-area {{isCollapseSelected ? 'hiddenTree' : ''}}"
8807
+ *ngIf="!isDisplayChooseTreeOnly"
8808
+ fxLayout="column" fxFlex="1 1 {{checkIsView(isView) ? '100%' : '50%'}}" fxFlex.lt-sm="100%">
8809
+ <div class="header-area" *ngIf="!isView">
8810
+ <label>{{ selectedLabelTitle | translate }}{{ '(' + getTotalSelected(fullDataDataSource.data) + ')' }}</label>
8811
+ <div class="collapse-expand-all" (click)="toggleSelectedTree()">
8812
+ {{ (isCollapseSelected ? 'common.selected.tree.expandAll' : 'common.selected.tree.collapse') | translate }}
8813
+ <i class="fa {{isCollapseSelected ? 'fa-chevron-down' : 'fa-chevron-up'}}"></i>
8814
+ </div>
8815
+ </div>
8816
+ <cdk-virtual-scroll-viewport #selectedScrollViewport
8817
+ *ngIf="!isCollapseSelected"
8818
+ itemSize="{{itemSize}}" [ngStyle]="{height: viewHeight + 'px'}">
8819
+ <ng-container *cdkVirtualFor="let node of selectedDataSource">
8820
+ <cva-flat-tree-node-right
8821
+ [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8822
+ [attr.aria-level]="node.level"
8823
+ [treeControl]="selectedTreeControl"
8824
+ [node]="node"
8825
+ [isView]="isView"
8826
+ (toggle)="toggleSelectedTree(node)"
8827
+ (deSelectLeafNode)="toggleNodeCheck(node, false)"
8828
+ (deSelectParentNode)="toggleNodeCheck(node, false)">
8829
+ </cva-flat-tree-node-right>
8830
+ </ng-container>
8831
+ </cdk-virtual-scroll-viewport>
8832
+ </div>
8833
+ </div>
8834
+ <mat-hint *ngIf="NsValiator.invalid(formControl)">
8835
+ {{ NsValiator.getErrorMessage(formControl, errorMessages) | translate }}
8836
+ </mat-hint>
8794
8837
  </div>
8795
- <cdk-virtual-scroll-viewport #selectedScrollViewport
8796
- *ngIf="!isCollapseSelected"
8797
- itemSize="{{itemSize}}" [ngStyle]="{height: viewHeight + 'px'}">
8798
- <ng-container *cdkVirtualFor="let node of selectedDataSource">
8799
- <cva-flat-tree-node-right
8800
- [ngStyle]="{height: itemSize + 'px', padding: '0px 0px 0px '+ (node.level * paddingLeft) +'px'}"
8801
- [attr.aria-level]="node.level"
8802
- [treeControl]="selectedTreeControl"
8803
- [node]="node"
8804
- [isView]="isView"
8805
- (toggle)="toggleSelectedTree(node)"
8806
- (deSelectLeafNode)="deSelect(node)"
8807
- (deSelectParentNode)="deSelectParent(node)">
8808
- </cva-flat-tree-node-right>
8809
- </ng-container>
8810
- </cdk-virtual-scroll-viewport>
8811
- </div>
8812
8838
  </div>
8813
- <mat-hint *ngIf="NsValiator.invalid(formControl)">
8814
- {{ NsValiator.getErrorMessage(formControl, errorMessages) | translate }}
8815
- </mat-hint>
8816
- </div>
8817
- </div>
8818
- `,
8839
+ `,
8819
8840
  }]
8820
8841
  }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i1$2.NgControl, decorators: [{
8821
8842
  type: Self
@@ -8861,6 +8882,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.5", ngImpor
8861
8882
  type: Output
8862
8883
  }], onNodeClick: [{
8863
8884
  type: Output
8885
+ }], nodeClicked: [{
8886
+ type: Input
8864
8887
  }], isFormControl: [{
8865
8888
  type: Input
8866
8889
  }], chooseVirtualScroll: [{