@trudb/tru-common-lib 0.2.549 → 0.2.551

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.
@@ -3260,47 +3260,73 @@ class TruToolbarDropdown {
3260
3260
  select;
3261
3261
  filteredOptions = [];
3262
3262
  selectedOptions = [];
3263
- selectAll = false;
3263
+ selectAllState = 'unchecked';
3264
3264
  selectAllLabel = 'Select All';
3265
+ visibleOptions = new Set();
3265
3266
  constructor() {
3266
3267
  }
3267
3268
  ngOnInit() {
3268
3269
  }
3269
3270
  ngAfterViewInit() {
3271
+ if (this.multiple)
3272
+ this.updateSelectAllState(this.select.value);
3270
3273
  }
3271
3274
  ngOnChanges(changes) {
3272
- this.filteredOptions = this.options;
3275
+ this.setFilteredOptions(this.options ?? []);
3276
+ if (this.select && this.multiple)
3277
+ this.updateSelectAllState(this.select.value);
3273
3278
  }
3274
3279
  toggleSelectAll = () => {
3275
- this.selectAll = !this.selectAll;
3276
- if (this.selectAll) {
3277
- this.select.options.forEach((item) => item.select());
3278
- }
3279
- else {
3280
- this.select.options.forEach((item) => item.deselect());
3281
- }
3280
+ const shouldSelect = this.selectAllState !== 'checked';
3281
+ this.select.options.forEach((item) => {
3282
+ if (!this.visibleOptions.has(item.value))
3283
+ return;
3284
+ if (shouldSelect && !item.selected)
3285
+ item.select();
3286
+ if (!shouldSelect && item.selected)
3287
+ item.deselect();
3288
+ });
3289
+ this.updateSelectAllState(this.select.value);
3282
3290
  };
3283
3291
  onSelectionChange = (event) => {
3284
3292
  this.selectedOptionChange.emit(event.source.value);
3285
3293
  this.selectionChange.emit(event.value);
3286
- if (event.value.length) {
3287
- this.selectAll = true;
3288
- this.selectAllLabel = 'Deselect All';
3289
- }
3290
- else {
3291
- this.selectAll = false;
3292
- this.selectAllLabel = 'Select All';
3293
- }
3294
+ if (this.multiple)
3295
+ this.updateSelectAllState(event.value);
3294
3296
  };
3295
3297
  onFilterChange = (event) => {
3296
3298
  const searchInput = event.target.value.toLowerCase();
3297
- this.filteredOptions = this.options.filter((option) => {
3299
+ const filteredOptions = (this.options ?? []).filter((option) => {
3298
3300
  const label = option.label.toLowerCase();
3299
3301
  return label.includes(searchInput);
3300
3302
  });
3303
+ this.setFilteredOptions(filteredOptions);
3304
+ this.updateSelectAllState(this.select.value);
3305
+ };
3306
+ isOptionVisible = (option) => {
3307
+ return this.visibleOptions.has(option);
3308
+ };
3309
+ setFilteredOptions = (options) => {
3310
+ this.filteredOptions = options;
3311
+ this.visibleOptions = new Set(options);
3312
+ };
3313
+ updateSelectAllState = (value) => {
3314
+ const selectedOptions = Array.isArray(value) ? value : [];
3315
+ const visibleOptions = this.filteredOptions ?? [];
3316
+ const selectedVisibleCount = visibleOptions.filter(option => selectedOptions.includes(option)).length;
3317
+ if (!selectedVisibleCount) {
3318
+ this.selectAllState = 'unchecked';
3319
+ }
3320
+ else if (selectedVisibleCount === visibleOptions.length) {
3321
+ this.selectAllState = 'checked';
3322
+ }
3323
+ else {
3324
+ this.selectAllState = 'indeterminate';
3325
+ }
3326
+ this.selectAllLabel = this.selectAllState === 'checked' ? 'Deselect All' : 'Select All';
3301
3327
  };
3302
3328
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TruToolbarDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component });
3303
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TruToolbarDropdown, isStandalone: true, selector: "tru-toolbar-dropdown", inputs: { config: "config", options: "options", tooltip: "tooltip", multiple: "multiple", filterable: "filterable", filterTooltip: "filterTooltip", width: "width", selectedOption: "selectedOption", disabled: "disabled" }, outputs: { selectedOptionChange: "selectedOptionChange", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field>\r\n @if (multiple) {\r\n <mat-select #select\r\n [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n tru-mat-select-panel\r\n multiple>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <div class=\"select-all-pseudo-checkbox-container\">\r\n <mat-pseudo-checkbox [(ngModel)]=\"selectAll\" (click)=\"toggleSelectAll()\" [ngClass]=\"{ 'mat-pseudo-checkbox-checked': selectAll }\"></mat-pseudo-checkbox>\r\n <span>{{selectAllLabel}}</span>\r\n </div>\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n } @else {\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n [hideSingleSelectionIndicator]=\"true\"\r\n tru-mat-select-panel>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n }\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar p{font-size:12px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:12px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}::ng-deep .toolbar input::placeholder{font-size:12px;opacity:.75}::ng-deep .toolbar .mat-mdc-select-placeholder{font-size:12px;opacity:.75}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\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: FormsModule }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: 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: TruMatSelectPanel, selector: "[tru-mat-select-panel]" }, { kind: "component", type: MatPseudoCheckbox, selector: "mat-pseudo-checkbox", inputs: ["state", "disabled", "appearance"] }, { kind: "component", type: MatFormField$1, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatOption$1, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
3329
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: TruToolbarDropdown, isStandalone: true, selector: "tru-toolbar-dropdown", inputs: { config: "config", options: "options", tooltip: "tooltip", multiple: "multiple", filterable: "filterable", filterTooltip: "filterTooltip", width: "width", selectedOption: "selectedOption", disabled: "disabled" }, outputs: { selectedOptionChange: "selectedOptionChange", selectionChange: "selectionChange" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["select"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field>\r\n @if (multiple) {\r\n <mat-select #select\r\n [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n tru-mat-select-panel\r\n multiple>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <div class=\"select-all-pseudo-checkbox-container\">\r\n <mat-pseudo-checkbox [state]=\"selectAllState\" (click)=\"toggleSelectAll()\"></mat-pseudo-checkbox>\r\n <span>{{selectAllLabel}}</span>\r\n </div>\r\n <mat-option *ngFor=\"let option of options\"\r\n [value]=\"option\"\r\n [disabled]=\"!isOptionVisible(option)\"\r\n [style.display]=\"isOptionVisible(option) ? null : 'none'\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n } @else {\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n [hideSingleSelectionIndicator]=\"true\"\r\n tru-mat-select-panel>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n }\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar p{font-size:12px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:12px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}::ng-deep .toolbar input::placeholder{font-size:12px;opacity:.75}::ng-deep .toolbar .mat-mdc-select-placeholder{font-size:12px;opacity:.75}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\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: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: 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: TruMatSelectPanel, selector: "[tru-mat-select-panel]" }, { kind: "component", type: MatPseudoCheckbox, selector: "mat-pseudo-checkbox", inputs: ["state", "disabled", "appearance"] }, { kind: "component", type: MatFormField$1, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatOption$1, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], encapsulation: i0.ViewEncapsulation.None });
3304
3330
  }
3305
3331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TruToolbarDropdown, decorators: [{
3306
3332
  type: Component,
@@ -3313,7 +3339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
3313
3339
  MatPseudoCheckbox,
3314
3340
  MatFormField$1,
3315
3341
  MatOption$1
3316
- ], encapsulation: ViewEncapsulation.None, template: "<mat-form-field>\r\n @if (multiple) {\r\n <mat-select #select\r\n [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n tru-mat-select-panel\r\n multiple>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <div class=\"select-all-pseudo-checkbox-container\">\r\n <mat-pseudo-checkbox [(ngModel)]=\"selectAll\" (click)=\"toggleSelectAll()\" [ngClass]=\"{ 'mat-pseudo-checkbox-checked': selectAll }\"></mat-pseudo-checkbox>\r\n <span>{{selectAllLabel}}</span>\r\n </div>\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n } @else {\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n [hideSingleSelectionIndicator]=\"true\"\r\n tru-mat-select-panel>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n }\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar p{font-size:12px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:12px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}::ng-deep .toolbar input::placeholder{font-size:12px;opacity:.75}::ng-deep .toolbar .mat-mdc-select-placeholder{font-size:12px;opacity:.75}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\n"] }]
3342
+ ], encapsulation: ViewEncapsulation.None, template: "<mat-form-field>\r\n @if (multiple) {\r\n <mat-select #select\r\n [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n tru-mat-select-panel\r\n multiple>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <div class=\"select-all-pseudo-checkbox-container\">\r\n <mat-pseudo-checkbox [state]=\"selectAllState\" (click)=\"toggleSelectAll()\"></mat-pseudo-checkbox>\r\n <span>{{selectAllLabel}}</span>\r\n </div>\r\n <mat-option *ngFor=\"let option of options\"\r\n [value]=\"option\"\r\n [disabled]=\"!isOptionVisible(option)\"\r\n [style.display]=\"isOptionVisible(option) ? null : 'none'\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n } @else {\r\n <mat-select [(ngModel)]=\"selectedOption\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"tooltip\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n [style.width.px]=\"width\"\r\n [hideSingleSelectionIndicator]=\"true\"\r\n tru-mat-select-panel>\r\n <input matInput\r\n *ngIf=\"filterable\"\r\n [placeholder]=\"filterTooltip\"\r\n (input)=\"onFilterChange($event)\"\r\n type=\"text\"\r\n autocomplete=\"off\" />\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option\">\r\n {{option.label}}\r\n </mat-option>\r\n </mat-select>\r\n }\r\n</mat-form-field>\r\n\r\n", styles: [".toolbar{height:25px}.toolbar p{font-size:12px}.toolbar .toolbar-btn{height:26px}.toolbar .mat-mdc-form-field{display:block;height:25px;width:auto}.toolbar .mat-mdc-text-field-wrapper{margin-top:1px;height:23px}.toolbar .mat-mdc-form-field-infix{padding:0;border-top:0;width:auto;height:25px}.mat-mdc-option{height:25px;font-size:14px}.toolbar .mdc-text-field--no-label:not(.mdc-text-field--outlined):not(.mdc-text-field--textarea) .mat-mdc-form-field-infix .toolbar .mat-mdc-select-arrow-wrapper{padding:0!important}.toolbar .mat-mdc-text-field-wrapper:not(.mdc-text-field--outlined) .mat-mdc-form-field-infix{padding:0!important}.toolbar .mat-mdc-select-arrow{padding-left:5px}.toolbar .mat-mdc-select-value-text{font-size:12px}.toolbar-group,.toolbar-group-vertical{position:relative;display:flex;vertical-align:middle;height:25px}.toolbar-group>.toolbar-btn,.toolbar-group-vertical>.toolbar-btn{position:relative;float:left}.toolbar-group>.toolbar-btn:hover,.toolbar-group-vertical>.toolbar-btn:hover,.toolbar-group>.toolbar-btn:focus,.toolbar-group-vertical>.toolbar-btn:focus,.toolbar-group>.toolbar-btn:active,.toolbar-group-vertical>.toolbar-btn:active,.toolbar-group>.toolbar-btn.active,.toolbar-group-vertical>.toolbar-btn.active{z-index:2}.toolbar-group .toolbar-btn+.toolbar-btn,.toolbar-group .toolbar-btn+.toolbar-group,.toolbar-group .toolbar-group+.toolbar-btn,.toolbar-group .toolbar-group+.toolbar-group{margin-left:-1px}.toolbar-group>.toolbar-btn:not(:first-child):not(:last-child){border-radius:0}.toolbar-group>.toolbar-btn:first-child{margin-left:0}.toolbar-group>.toolbar-btn:first-child:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.toolbar-group>.toolbar-btn:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.toolbar-group>.toolbar-btn{padding:1px 5px;font-size:12px;line-height:1;border-radius:0}.toolbar-group .btn_iconOnly{padding:0;margin:0}.toolbar-group .btn_iconOnly i{vertical-align:15%}.toolbar-group div{padding:0;margin:0}.toolbar-group button{padding:0!important}.toolbar-group span,.toolbar-group i{padding:0;margin:0}.toolbar-group button{vertical-align:top}::ng-deep .toolbar .mat-mdc-option{min-height:unset;height:35px}::ng-deep .toolbar input::placeholder{font-size:12px;opacity:.75}::ng-deep .toolbar .mat-mdc-select-placeholder{font-size:12px;opacity:.75}\n", ".toolbar .mat-mdc-select{width:auto;min-width:90px;padding-top:0!important;font-family:Calibri,Helvetica,Arial,sans-serif!important;background-color:#ebebeb;height:24px;margin-left:2px;margin-right:2px;padding-left:8px;padding-right:3px}.toolbar .mdc-line-ripple{display:none}\n"] }]
3317
3343
  }], ctorParameters: () => [], propDecorators: { config: [{
3318
3344
  type: Input
3319
3345
  }], options: [{
@@ -8165,8 +8191,8 @@ class TruGridValidationDialog {
8165
8191
  config;
8166
8192
  close = new EventEmitter();
8167
8193
  errorMsg = '';
8168
- rowElement;
8169
- cellElement;
8194
+ rowElement = null;
8195
+ cellElement = null;
8170
8196
  listeners = [];
8171
8197
  constructor(renderer, elementRef, util) {
8172
8198
  this.renderer = renderer;
@@ -8211,19 +8237,14 @@ class TruGridValidationDialog {
8211
8237
  this.errorMsg = this.config.errorMsg;
8212
8238
  this.rowElement = this.util.findClosestAncestorByClass(this.elementRef.nativeElement, '.ag-row');
8213
8239
  this.cellElement = this.util.findClosestAncestorByClass(this.elementRef.nativeElement, '.ag-cell-value');
8214
- this.rowElement.style.zIndex = '10000000000';
8215
- this.cellElement.classList.add('show');
8216
- this.errorMsg = this.config.errorMsg;
8240
+ this.rowElement?.classList.add('validation-dialog-open');
8241
+ this.cellElement?.classList.add('show');
8217
8242
  }
8218
8243
  ngAfterViewInit() {
8219
8244
  }
8220
8245
  ngOnDestroy() {
8221
- this.rowElement = this.util.findClosestAncestorByClass(this.elementRef.nativeElement, '.ag-row');
8222
- this.cellElement = this.util.findClosestAncestorByClass(this.elementRef.nativeElement, '.ag-cell-value');
8223
- if (this.rowElement)
8224
- this.rowElement.style.zIndex = 'auto';
8225
- if (this.cellElement)
8226
- this.cellElement.classList.remove('show');
8246
+ this.rowElement?.classList.remove('validation-dialog-open');
8247
+ this.cellElement?.classList.remove('show');
8227
8248
  this.listeners.forEach(l => l());
8228
8249
  }
8229
8250
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TruGridValidationDialog, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: TruUtil }], target: i0.ɵɵFactoryTarget.Component });
@@ -8798,9 +8819,8 @@ class TruDataGrid {
8798
8819
  this.rowCount = 'Rows: ' + count;
8799
8820
  },
8800
8821
  onCellEditingStarted: (params) => {
8822
+ this.destroyValidationDialog();
8801
8823
  this.dataGridClipboard.clearAnimations();
8802
- if (params.colDef.cellEditorPopup && this.validationDialog)
8803
- this.validationDialog.destroy();
8804
8824
  },
8805
8825
  onCellEditingStopped: (params) => {
8806
8826
  params.api.refreshCells({
@@ -9140,8 +9160,16 @@ class TruDataGrid {
9140
9160
  }
9141
9161
  };
9142
9162
  validationDialog = null;
9163
+ destroyValidationDialog = () => {
9164
+ const componentRef = this.validationDialog;
9165
+ this.validationDialog = null;
9166
+ componentRef?.destroy();
9167
+ };
9143
9168
  addValidationDialog = (config, hostElement) => {
9144
- let target = hostElement.querySelectorAll('.dialog-target')[0];
9169
+ this.destroyValidationDialog();
9170
+ let target = hostElement.querySelector('.dialog-target');
9171
+ if (!target)
9172
+ return;
9145
9173
  let dialogElement = document.createElement('div');
9146
9174
  dialogElement.classList.add('invalid');
9147
9175
  target.appendChild(dialogElement);
@@ -9151,8 +9179,11 @@ class TruDataGrid {
9151
9179
  });
9152
9180
  componentRef.instance.config = config;
9153
9181
  componentRef.instance.close.subscribe(() => {
9182
+ if (this.validationDialog === componentRef)
9183
+ this.destroyValidationDialog();
9184
+ else
9185
+ componentRef.destroy();
9154
9186
  this.api.refreshCells({ force: true });
9155
- componentRef.destroy();
9156
9187
  });
9157
9188
  this.validationDialog = componentRef;
9158
9189
  this.app.attachView(componentRef.hostView);
@@ -9333,13 +9364,11 @@ class TruDataGrid {
9333
9364
  }
9334
9365
  }
9335
9366
  else {
9336
- if (this.validationDialog)
9337
- this.validationDialog.destroy();
9367
+ this.destroyValidationDialog();
9338
9368
  }
9339
9369
  }
9340
9370
  onCellMouseOut(e) {
9341
- if (this.validationDialog)
9342
- this.validationDialog.destroy();
9371
+ this.destroyValidationDialog();
9343
9372
  }
9344
9373
  onRightClick(event) {
9345
9374
  event.preventDefault();
@@ -9467,6 +9496,7 @@ class TruDataGrid {
9467
9496
  this.resizeGrid();
9468
9497
  }
9469
9498
  ngOnDestroy() {
9499
+ this.destroyValidationDialog();
9470
9500
  this.teardownScrollObservers();
9471
9501
  this.teardownDetailResizeObservers();
9472
9502
  this.subs.forEach(s => s.unsubscribe());
@@ -9663,7 +9693,7 @@ class TruDataGrid {
9663
9693
  }
9664
9694
  };
9665
9695
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TruDataGrid, deps: [{ token: TruDataContext }, { token: TruComponentLookup }, { token: TruSearchResultViewManager }, { token: TruAppEnvironment }, { token: TruSearchViewEventHandler }, { token: TruUiNotification }, { token: TruConnectionHub }, { token: TruWindowEventHandler }, { token: TruDataGridClipboard }, { token: TruUtil }, { token: i0.ApplicationRef }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: TruDesktopViewEventNotifier }, { token: TruTabGroupEventNotifier, optional: true }], target: i0.ɵɵFactoryTarget.Component });
9666
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: TruDataGrid, isStandalone: true, selector: "tru-data-grid", inputs: { config: "config", entity: "entity", name: "name" }, host: { properties: { "class.tru-data-grid": "true" } }, viewQueries: [{ propertyName: "dataGridContainer", first: true, predicate: ["dataGridContainer"], descendants: true }, { propertyName: "customToolbarContainer", first: true, predicate: ["customToolbarContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType === TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"viewMenuItems.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"viewMenuItems.length\">\r\n <tru-toolbar-menu *ngFor=\"let viewMenuItem of viewMenuItems\" [config]=\"viewMenuItem\"></tru-toolbar-menu>\r\n </div>\r\n <ng-container #customToolbarContainer></ng-container>\r\n </tru-toolbar>\r\n </div>\r\n <div #dataGridContainer class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"22\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [suppressRowClickSelection]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseDown)=\"onCellMouseDown($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\"\r\n (contextmenu)=\"onRightClick($event)\"\r\n (rowClicked)=\"onRowClicked($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{rowCount}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">Selected: {{api ? api.getSelectedRows().length : 0}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid .ag-body-viewport{padding-bottom:var(--grid-footer-height, 23px)}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px;font-size:12px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}.detail-container .ag-root-wrapper{height:calc(100% - 50px)!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important}::ng-deep .mat-mdc-tab-group .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.search-container .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row{border-color:#d8dbe3}.tru-data-grid .ag-row.ag-row-inline-editing:has(.ag-cell-popup-editing){z-index:unset!important}.ag-row.popup-editing{z-index:unset!important}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing:not(.invalid){border-color:#006dcc!important}.ag-ltr .ag-header-cell-resize{right:-5px}.ag-header-cell-text{font-size:12px!important}.ag-cell-inline-editing{height:21px!important}.ag-cell{height:21px;border-right:solid #d8dbe3 1px!important}.ag-cell ng-component{pointer-events:none}.ag-has-focus .ag-cell-focus:not(.invalid){border:solid #006dcc 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#fff;font-weight:700;background-color:#006dcc}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell{background-color:#f5f5f5!important}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell:hover{background-color:#2196f31a!important}.ag-header-cell{background-color:#f5f5f5}.ag-column-focus .ag-header-control-sort-container rect{fill:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc;z-index:20}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-viewport .ag-row-selected{background-color:#efefef}.ag-viewport .ag-row-selected .ag-cell{background-color:unset!important}.ag-row-selected~.ag-row-selected .ag-cell{border-top-color:#dde2eb}*:not(.ag-row-selected):not(.ag-row-inline-editing)+.ag-row-selected .ag-cell{border-top-color:#006dcc}.ag-row-selected:has(+:not(.ag-row-selected)):not(.ag-row-inline-editing) .ag-cell{border-bottom-color:#006dcc}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:3px;height:3px;border-bottom:solid 3px transparent;border-right:solid 3px transparent;border-left:solid 3px red;border-top:solid 3px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes ants-marching{0%{background-position:0 0,0 100%,0 0,100% 0}to{background-position:40px 0,-40px 100%,0 -40px,100% 40px}}.animated-border{background-size:10px 0px,10px 0px,1px 10px,1px 10px;background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-image:linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%);animation:ants-marching 1s linear infinite}.animated-border.ag-row-selected{background-color:#efefef!important}.animated-border .ag-cell{background-color:unset!important;border-top:none!important;border-bottom:none!important}.animated-border:not(.animated-border+.animated-border){background-size:10px 1px,10px 0px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)){background-size:10px 0px,10px 1px,1px 10px,1px 10px}.animated-border:not(.animated-border+.animated-border).animated-border:has(+:not(.animated-border)){background-size:10px 1px,10px 1px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)) .ag-cell{height:20px!important}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}.detail-container .mat-mdc-tab-body-content tru-data-grid{--grid-scroll-left: 0px;--grid-scroll-right: 0px;--grid-scroll-bottom: 80px;--grid-scroll-visible: 1;display:flex;flex-direction:column;height:100%;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid ag-grid-angular{position:relative!important;inset:0!important;height:calc(100% - var(--grid-footer-height, 23px))!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root-wrapper,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root{height:100%!important;top:0!important;bottom:0!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .tru-data-grid-container{flex:1 1 auto;position:relative;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-viewport{position:relative!important;padding-bottom:calc(var(--grid-footer-height, 23px) + (var(--grid-scroll-bottom, 80px) - var(--grid-footer-height, 23px)) * var(--grid-scroll-visible, 1))!important;overflow-x:auto!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll-viewport,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll{position:fixed!important;left:var(--grid-scroll-left, 0px)!important;right:var(--grid-scroll-right, 0px)!important;width:calc(100% - var(--grid-scroll-left, 0px) - var(--grid-scroll-right, 0px))!important;bottom:var(--grid-scroll-bottom, 80px)!important;height:calc(16px * var(--grid-scroll-visible, 1))!important;min-height:calc(16px * var(--grid-scroll-visible, 1))!important;display:block!important;opacity:var(--grid-scroll-visible, 1)!important;pointer-events:calc(var(--grid-scroll-visible, 1))!important;overflow-x:scroll!important;overflow-y:hidden!important;z-index:9999!important;background:transparent!important}\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: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "component", type: TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: TruToolbarSeparator, selector: "tru-toolbar-separator" }, { kind: "component", type: TruToolbarMenu, selector: "tru-toolbar-menu", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9696
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: TruDataGrid, isStandalone: true, selector: "tru-data-grid", inputs: { config: "config", entity: "entity", name: "name" }, host: { properties: { "class.tru-data-grid": "true" } }, viewQueries: [{ propertyName: "dataGridContainer", first: true, predicate: ["dataGridContainer"], descendants: true }, { propertyName: "customToolbarContainer", first: true, predicate: ["customToolbarContainer"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType === TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"viewMenuItems.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"viewMenuItems.length\">\r\n <tru-toolbar-menu *ngFor=\"let viewMenuItem of viewMenuItems\" [config]=\"viewMenuItem\"></tru-toolbar-menu>\r\n </div>\r\n <ng-container #customToolbarContainer></ng-container>\r\n </tru-toolbar>\r\n </div>\r\n <div #dataGridContainer class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"22\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [suppressRowClickSelection]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseDown)=\"onCellMouseDown($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\"\r\n (contextmenu)=\"onRightClick($event)\"\r\n (rowClicked)=\"onRowClicked($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{rowCount}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">Selected: {{api ? api.getSelectedRows().length : 0}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid .ag-body-viewport{padding-bottom:var(--grid-footer-height, 23px)}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px;font-size:12px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}.detail-container .ag-root-wrapper{height:calc(100% - 50px)!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important}::ng-deep .mat-mdc-tab-group .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.search-container .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row{border-color:#d8dbe3}.tru-data-grid .ag-row.validation-dialog-open{z-index:2}.ag-row.popup-editing{z-index:unset!important}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing:not(.invalid){border-color:#006dcc!important}.ag-ltr .ag-header-cell-resize{right:-5px}.ag-header-cell-text{font-size:12px!important}.ag-cell-inline-editing{height:21px!important}.ag-cell{height:21px;border-right:solid #d8dbe3 1px!important}.ag-cell ng-component{pointer-events:none}.ag-has-focus .ag-cell-focus:not(.invalid){border:solid #006dcc 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#fff;font-weight:700;background-color:#006dcc}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell{background-color:#f5f5f5!important}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell:hover{background-color:#2196f31a!important}.ag-header-cell{background-color:#f5f5f5}.ag-column-focus .ag-header-control-sort-container rect{fill:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-viewport .ag-row-selected{background-color:#efefef}.ag-viewport .ag-row-selected .ag-cell{background-color:unset!important}.ag-row-selected~.ag-row-selected .ag-cell{border-top-color:#dde2eb}*:not(.ag-row-selected):not(.ag-row-inline-editing)+.ag-row-selected .ag-cell{border-top-color:#006dcc}.ag-row-selected:has(+:not(.ag-row-selected)):not(.ag-row-inline-editing) .ag-cell{border-bottom-color:#006dcc}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:3px;height:3px;border-bottom:solid 3px transparent;border-right:solid 3px transparent;border-left:solid 3px red;border-top:solid 3px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes ants-marching{0%{background-position:0 0,0 100%,0 0,100% 0}to{background-position:40px 0,-40px 100%,0 -40px,100% 40px}}.animated-border{background-size:10px 0px,10px 0px,1px 10px,1px 10px;background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-image:linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%);animation:ants-marching 1s linear infinite}.animated-border.ag-row-selected{background-color:#efefef!important}.animated-border .ag-cell{background-color:unset!important;border-top:none!important;border-bottom:none!important}.animated-border:not(.animated-border+.animated-border){background-size:10px 1px,10px 0px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)){background-size:10px 0px,10px 1px,1px 10px,1px 10px}.animated-border:not(.animated-border+.animated-border).animated-border:has(+:not(.animated-border)){background-size:10px 1px,10px 1px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)) .ag-cell{height:20px!important}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}.detail-container .mat-mdc-tab-body-content tru-data-grid{--grid-scroll-left: 0px;--grid-scroll-right: 0px;--grid-scroll-bottom: 80px;--grid-scroll-visible: 1;display:flex;flex-direction:column;height:100%;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid ag-grid-angular{position:relative!important;inset:0!important;height:calc(100% - var(--grid-footer-height, 23px))!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root-wrapper,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root{height:100%!important;top:0!important;bottom:0!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .tru-data-grid-container{flex:1 1 auto;position:relative;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-viewport{position:relative!important;padding-bottom:calc(var(--grid-footer-height, 23px) + (var(--grid-scroll-bottom, 80px) - var(--grid-footer-height, 23px)) * var(--grid-scroll-visible, 1))!important;overflow-x:auto!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll-viewport,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll{position:fixed!important;left:var(--grid-scroll-left, 0px)!important;right:var(--grid-scroll-right, 0px)!important;width:calc(100% - var(--grid-scroll-left, 0px) - var(--grid-scroll-right, 0px))!important;bottom:var(--grid-scroll-bottom, 80px)!important;height:calc(16px * var(--grid-scroll-visible, 1))!important;min-height:calc(16px * var(--grid-scroll-visible, 1))!important;display:block!important;opacity:var(--grid-scroll-visible, 1)!important;pointer-events:calc(var(--grid-scroll-visible, 1))!important;overflow-x:scroll!important;overflow-y:hidden!important;z-index:9999!important;background:transparent!important}\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: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "findSearchValue", "findOptions", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableCellSpan", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "treeDataChildrenField", "treeDataParentIdField", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "enableRowPinning", "isRowPinnable", "isRowPinned", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "rowNumbers", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "themeCssLayer", "styleNonce", "themeStyleContainer", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "findChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "rowResizeStarted", "rowResizeEnded", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "pinnedRowsChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }, { kind: "component", type: TruToolbar, selector: "tru-toolbar", inputs: ["config"] }, { kind: "component", type: TruToolbarButton, selector: "tru-toolbar-button", inputs: ["config", "icon", "text", "disabled", "tooltip", "type"], outputs: ["onClick", "onKeydown"] }, { kind: "component", type: TruToolbarDropdown, selector: "tru-toolbar-dropdown", inputs: ["config", "options", "tooltip", "multiple", "filterable", "filterTooltip", "width", "selectedOption", "disabled"], outputs: ["selectedOptionChange", "selectionChange"] }, { kind: "component", type: TruToolbarSeparator, selector: "tru-toolbar-separator" }, { kind: "component", type: TruToolbarMenu, selector: "tru-toolbar-menu", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
9667
9697
  }
9668
9698
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: TruDataGrid, decorators: [{
9669
9699
  type: Component,
@@ -9680,7 +9710,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
9680
9710
  TruToolbarDropdown,
9681
9711
  TruToolbarSeparator,
9682
9712
  TruToolbarMenu
9683
- ], template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType === TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"viewMenuItems.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"viewMenuItems.length\">\r\n <tru-toolbar-menu *ngFor=\"let viewMenuItem of viewMenuItems\" [config]=\"viewMenuItem\"></tru-toolbar-menu>\r\n </div>\r\n <ng-container #customToolbarContainer></ng-container>\r\n </tru-toolbar>\r\n </div>\r\n <div #dataGridContainer class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"22\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [suppressRowClickSelection]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseDown)=\"onCellMouseDown($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\"\r\n (contextmenu)=\"onRightClick($event)\"\r\n (rowClicked)=\"onRowClicked($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{rowCount}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">Selected: {{api ? api.getSelectedRows().length : 0}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid .ag-body-viewport{padding-bottom:var(--grid-footer-height, 23px)}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px;font-size:12px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}.detail-container .ag-root-wrapper{height:calc(100% - 50px)!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important}::ng-deep .mat-mdc-tab-group .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.search-container .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row{border-color:#d8dbe3}.tru-data-grid .ag-row.ag-row-inline-editing:has(.ag-cell-popup-editing){z-index:unset!important}.ag-row.popup-editing{z-index:unset!important}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing:not(.invalid){border-color:#006dcc!important}.ag-ltr .ag-header-cell-resize{right:-5px}.ag-header-cell-text{font-size:12px!important}.ag-cell-inline-editing{height:21px!important}.ag-cell{height:21px;border-right:solid #d8dbe3 1px!important}.ag-cell ng-component{pointer-events:none}.ag-has-focus .ag-cell-focus:not(.invalid){border:solid #006dcc 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#fff;font-weight:700;background-color:#006dcc}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell{background-color:#f5f5f5!important}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell:hover{background-color:#2196f31a!important}.ag-header-cell{background-color:#f5f5f5}.ag-column-focus .ag-header-control-sort-container rect{fill:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc;z-index:20}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-viewport .ag-row-selected{background-color:#efefef}.ag-viewport .ag-row-selected .ag-cell{background-color:unset!important}.ag-row-selected~.ag-row-selected .ag-cell{border-top-color:#dde2eb}*:not(.ag-row-selected):not(.ag-row-inline-editing)+.ag-row-selected .ag-cell{border-top-color:#006dcc}.ag-row-selected:has(+:not(.ag-row-selected)):not(.ag-row-inline-editing) .ag-cell{border-bottom-color:#006dcc}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:3px;height:3px;border-bottom:solid 3px transparent;border-right:solid 3px transparent;border-left:solid 3px red;border-top:solid 3px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes ants-marching{0%{background-position:0 0,0 100%,0 0,100% 0}to{background-position:40px 0,-40px 100%,0 -40px,100% 40px}}.animated-border{background-size:10px 0px,10px 0px,1px 10px,1px 10px;background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-image:linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%);animation:ants-marching 1s linear infinite}.animated-border.ag-row-selected{background-color:#efefef!important}.animated-border .ag-cell{background-color:unset!important;border-top:none!important;border-bottom:none!important}.animated-border:not(.animated-border+.animated-border){background-size:10px 1px,10px 0px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)){background-size:10px 0px,10px 1px,1px 10px,1px 10px}.animated-border:not(.animated-border+.animated-border).animated-border:has(+:not(.animated-border)){background-size:10px 1px,10px 1px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)) .ag-cell{height:20px!important}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}.detail-container .mat-mdc-tab-body-content tru-data-grid{--grid-scroll-left: 0px;--grid-scroll-right: 0px;--grid-scroll-bottom: 80px;--grid-scroll-visible: 1;display:flex;flex-direction:column;height:100%;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid ag-grid-angular{position:relative!important;inset:0!important;height:calc(100% - var(--grid-footer-height, 23px))!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root-wrapper,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root{height:100%!important;top:0!important;bottom:0!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .tru-data-grid-container{flex:1 1 auto;position:relative;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-viewport{position:relative!important;padding-bottom:calc(var(--grid-footer-height, 23px) + (var(--grid-scroll-bottom, 80px) - var(--grid-footer-height, 23px)) * var(--grid-scroll-visible, 1))!important;overflow-x:auto!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll-viewport,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll{position:fixed!important;left:var(--grid-scroll-left, 0px)!important;right:var(--grid-scroll-right, 0px)!important;width:calc(100% - var(--grid-scroll-left, 0px) - var(--grid-scroll-right, 0px))!important;bottom:var(--grid-scroll-bottom, 80px)!important;height:calc(16px * var(--grid-scroll-visible, 1))!important;min-height:calc(16px * var(--grid-scroll-visible, 1))!important;display:block!important;opacity:var(--grid-scroll-visible, 1)!important;pointer-events:calc(var(--grid-scroll-visible, 1))!important;overflow-x:scroll!important;overflow-y:hidden!important;z-index:9999!important;background:transparent!important}\n"] }]
9713
+ ], template: "<div [ngClass]=\"{'tru-data-grid-label-offset': label}\">\r\n <span class=\"tru-data-grid-label\" *ngIf=\"label\">{{label}}</span>\r\n <div class=\"tru-data-grid-toolbar-container\">\r\n <tru-toolbar>\r\n <tru-toolbar-dropdown [options]=\"unassociatedChoices\"\r\n [(selectedOption)]=\"selectedUnassociatedChoice\"\r\n [disabled]=\"!this.config.tableConfig.canAdd\"\r\n (selectionChange)=\"onUnassociatedChoiceChanged($event)\"\r\n *ngIf=\"gridType === TruDataGridTypes.DetailManyToMany\">\r\n </tru-toolbar-dropdown>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-add-icon'\" [tooltip]=\"'Add - [Ctrl + I]'\" [disabled]=\"!canAdd()\" (onClick)=\"onAdd()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-delete-icon'\" [tooltip]=\"'Delete - [Ctrl + D]'\" (click)=\"onDelete()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-keep-icon'\" [tooltip]=\"'Keep selected records - [Ctrl + K]'\" (click)=\"onKeep()\"></tru-toolbar-button>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-remove-icon'\" [tooltip]=\"'Remove selected records - [Ctrl + R]'\" (click)=\"onRemove()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"parentToolbarTemplate\"></tru-toolbar-separator>\r\n <ng-container *ngTemplateOutlet=\"parentToolbarTemplate\"></ng-container>\r\n <tru-toolbar-separator></tru-toolbar-separator>\r\n <tru-toolbar-button [icon]=\"'tru-toolbar-export-icon'\" [tooltip]=\"'Export'\" (click)=\"onExport()\"></tru-toolbar-button>\r\n <tru-toolbar-separator *ngIf=\"viewMenuItems.length\"></tru-toolbar-separator>\r\n <div *ngIf=\"viewMenuItems.length\">\r\n <tru-toolbar-menu *ngFor=\"let viewMenuItem of viewMenuItems\" [config]=\"viewMenuItem\"></tru-toolbar-menu>\r\n </div>\r\n <ng-container #customToolbarContainer></ng-container>\r\n </tru-toolbar>\r\n </div>\r\n <div #dataGridContainer class=\"tru-data-grid-container\">\r\n <ag-grid-angular class=\"ag-theme-alpine\"\r\n [gridOptions]=\"gridOptions\"\r\n [rowData]=\"rowData\"\r\n [columnDefs]=\"columnDefs\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [headerHeight]=\"25\"\r\n [rowHeight]=\"22\"\r\n [rowBuffer]=\"50\"\r\n [enterNavigatesVertically]=\"true\"\r\n [enterNavigatesVerticallyAfterEdit]=\"true\"\r\n [suppressRowHoverHighlight]=\"true\"\r\n [suppressRowClickSelection]=\"true\"\r\n [stopEditingWhenCellsLoseFocus]=\"false\"\r\n (cellClicked)=\"onCellClicked($event)\"\r\n (cellDoubleClicked)=\"onCellDoubleClicked($event)\"\r\n (cellKeyDown)=\"onCellKeyDown($event)\"\r\n (rowDataChanged)=\"onRowDataChanged($event)\"\r\n (cellMouseDown)=\"onCellMouseDown($event)\"\r\n (cellMouseOver)=\"onCellMouseOver($event)\"\r\n (cellMouseOut)=\"onCellMouseOut($event)\"\r\n (contextmenu)=\"onRightClick($event)\"\r\n (rowClicked)=\"onRowClicked($event)\">\r\n </ag-grid-angular>\r\n </div>\r\n <div class=\"tru-data-grid-statusbar-container\">\r\n <div class=\"tru-data-grid-statusbar-values-container\">\r\n <p class=\"tru-data-grid-statusbar-values-text\">{{rowCount}}</p>\r\n <p class=\"tru-data-grid-statusbar-values-text\">Selected: {{api ? api.getSelectedRows().length : 0}}</p>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".tru-data-grid-label{font-size:14px;font-weight:700;margin-bottom:5px;display:flex}.tru-data-grid:first-of-type+.tru-data-grid{margin-left:5px}.tru-data-grid-toolbar-container{display:inline-flex}.tru-data-grid-container{min-height:200px}.tru-data-grid .ag-body-viewport{padding-bottom:var(--grid-footer-height, 23px)}.tru-data-grid-statusbar-container{position:absolute!important;left:0;right:0;bottom:0;height:23px;background:#006dcc;border-bottom-left-radius:0;border-bottom-right-radius:0;border-top:1px solid #e7e7e7}.tru-data-grid-statusbar-container p{float:left;color:#fff;font-weight:700;margin-left:10px;margin-top:0!important;line-height:23px;font-size:12px}.detail-container .tru-data-grid{position:relative}.detail-container .mat-mdc-tab-body-content{height:100%;overflow:hidden!important}.detail-container .ag-root-wrapper{height:calc(100% - 50px)!important}ag-grid-angular{position:absolute;inset:28px 0 23px;width:100%;height:100%}.tru-data-grid-label-offset ag-grid-angular{top:48px;height:calc(100% - 70px)}.ag-root-wrapper{border-top:0px!important}.ag-root{top:0;bottom:23px!important}::ng-deep .mat-mdc-tab-group .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.search-container .ag-root.ag-layout-normal{height:calc(100% - 50px)!important}.ag-header-cell{padding-left:0!important;padding-right:0!important}.ag-header-cell-resize:after{top:unset!important;height:25px!important}.ag-header-row{font-weight:500!important}.ag-header-cell-label{justify-content:center}.ag-row{border-color:#d8dbe3}.tru-data-grid .ag-row.validation-dialog-open{z-index:2}.ag-row.popup-editing{z-index:unset!important}.ag-row .ag-cell-value{padding-left:2px!important;padding-right:2px!important}.ag-row .ag-cell-value.invalid{border:1px solid red!important;border-radius:0}.ag-row .ag-cell-value.ag-cell-inline-editing:not(.invalid){border-color:#006dcc!important}.ag-ltr .ag-header-cell-resize{right:-5px}.ag-header-cell-text{font-size:12px!important}.ag-cell-inline-editing{height:21px!important}.ag-cell{height:21px;border-right:solid #d8dbe3 1px!important}.ag-cell ng-component{pointer-events:none}.ag-has-focus .ag-cell-focus:not(.invalid){border:solid #006dcc 1px!important}.ag-pinned-left-cols-container .ag-cell.ag-cell-focus{border:solid #dde2eb 1px!important;border-top:0px!important;border-bottom:0px!important}.ag-pinned-left-cols-container .ag-row-selected .ag-cell,.ag-pinned-left-cols-container .ag-row-focus .ag-cell{border:0px solid #dde2eb!important;border-right:2px solid #006dcc!important;color:#fff;font-weight:700;background-color:#006dcc}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell{background-color:#f5f5f5!important}.ag-pinned-left-cols-container *:not(.ag-row-selected):not(.ag-row-focus) .ag-cell:hover{background-color:#2196f31a!important}.ag-header-cell{background-color:#f5f5f5}.ag-column-focus .ag-header-control-sort-container rect{fill:#ddd}.ag-header-cell.ag-column-focus{border:0px solid #dde2eb!important;border-bottom:2px solid #006dcc!important;color:#006dcc;font-weight:700;background-color:#ddd}.ag-header-cell-comp-wrapper{display:block!important}.ag-cell-label-container{padding:0!important}.ag-pk-aligned-cell{text-align:center}.ag-horizontal-left-spacer{overflow:hidden}.ag-popup-editor{background:#fff;padding:10px;border:solid 1px #006dcc}.ag-overlay-loading-center{border:none!important;box-shadow:none!important}.ag-viewport .ag-row-selected{background-color:#efefef}.ag-viewport .ag-row-selected .ag-cell{background-color:unset!important}.ag-row-selected~.ag-row-selected .ag-cell{border-top-color:#dde2eb}*:not(.ag-row-selected):not(.ag-row-inline-editing)+.ag-row-selected .ag-cell{border-top-color:#006dcc}.ag-row-selected:has(+:not(.ag-row-selected)):not(.ag-row-inline-editing) .ag-cell{border-bottom-color:#006dcc}.ag-cell.invalid .invalid-flag{box-sizing:border-box;position:absolute;left:0;top:0;width:3px;height:3px;border-bottom:solid 3px transparent;border-right:solid 3px transparent;border-left:solid 3px red;border-top:solid 3px red}.ag-grid-row-has-changes-gradient{background-color:#fff;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#fff,endColorstr=#ffffff);background-image:-moz-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:linear-gradient(top,#fff 0% 25%,#dbffdf);background-image:-webkit-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-o-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-ms-linear-gradient(top,#fff 0%,#ffffff 25%,#dbffdf 100%);background-image:-webkit-gradient(linear,right top,right bottom,color-stop(0%,#fff),color-stop(25%,#ffffff),color-stop(100%,#dbffdf))}@keyframes ants-marching{0%{background-position:0 0,0 100%,0 0,100% 0}to{background-position:40px 0,-40px 100%,0 -40px,100% 40px}}.animated-border{background-size:10px 0px,10px 0px,1px 10px,1px 10px;background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-image:linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to right,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%),linear-gradient(to bottom,#006dcc 50%,transparent 50%);animation:ants-marching 1s linear infinite}.animated-border.ag-row-selected{background-color:#efefef!important}.animated-border .ag-cell{background-color:unset!important;border-top:none!important;border-bottom:none!important}.animated-border:not(.animated-border+.animated-border){background-size:10px 1px,10px 0px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)){background-size:10px 0px,10px 1px,1px 10px,1px 10px}.animated-border:not(.animated-border+.animated-border).animated-border:has(+:not(.animated-border)){background-size:10px 1px,10px 1px,1px 10px,1px 10px}.animated-border:has(+:not(.animated-border)) .ag-cell{height:20px!important}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin{animation-name:spin;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear}.detail-container .mat-mdc-tab-body-content tru-data-grid{--grid-scroll-left: 0px;--grid-scroll-right: 0px;--grid-scroll-bottom: 80px;--grid-scroll-visible: 1;display:flex;flex-direction:column;height:100%;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid ag-grid-angular{position:relative!important;inset:0!important;height:calc(100% - var(--grid-footer-height, 23px))!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root-wrapper,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-root{height:100%!important;top:0!important;bottom:0!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .tru-data-grid-container{flex:1 1 auto;position:relative;min-height:0}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-viewport{position:relative!important;padding-bottom:calc(var(--grid-footer-height, 23px) + (var(--grid-scroll-bottom, 80px) - var(--grid-footer-height, 23px)) * var(--grid-scroll-visible, 1))!important;overflow-x:auto!important}.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll-viewport,.detail-container .mat-mdc-tab-body-content tru-data-grid .ag-body-horizontal-scroll{position:fixed!important;left:var(--grid-scroll-left, 0px)!important;right:var(--grid-scroll-right, 0px)!important;width:calc(100% - var(--grid-scroll-left, 0px) - var(--grid-scroll-right, 0px))!important;bottom:var(--grid-scroll-bottom, 80px)!important;height:calc(16px * var(--grid-scroll-visible, 1))!important;min-height:calc(16px * var(--grid-scroll-visible, 1))!important;display:block!important;opacity:var(--grid-scroll-visible, 1)!important;pointer-events:calc(var(--grid-scroll-visible, 1))!important;overflow-x:scroll!important;overflow-y:hidden!important;z-index:9999!important;background:transparent!important}\n"] }]
9684
9714
  }], ctorParameters: () => [{ type: TruDataContext }, { type: TruComponentLookup }, { type: TruSearchResultViewManager }, { type: TruAppEnvironment }, { type: TruSearchViewEventHandler }, { type: TruUiNotification }, { type: TruConnectionHub }, { type: TruWindowEventHandler }, { type: TruDataGridClipboard }, { type: TruUtil }, { type: i0.ApplicationRef }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: TruDesktopViewEventNotifier }, { type: TruTabGroupEventNotifier, decorators: [{
9685
9715
  type: Optional
9686
9716
  }] }], propDecorators: { dataGridContainer: [{