@progress/kendo-angular-grid 21.1.1-develop.2 → 21.2.0-develop.2

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.
Files changed (48) hide show
  1. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +850 -756
  2. package/esm2022/aggregates/status-bar.component.mjs +13 -11
  3. package/esm2022/column-menu/column-chooser-content.component.mjs +133 -123
  4. package/esm2022/column-menu/column-list.component.mjs +62 -59
  5. package/esm2022/column-menu/column-menu-autosize-all.component.mjs +12 -11
  6. package/esm2022/column-menu/column-menu-autosize.component.mjs +12 -11
  7. package/esm2022/column-menu/column-menu-item.component.mjs +221 -85
  8. package/esm2022/column-menu/column-menu-position.component.mjs +46 -43
  9. package/esm2022/column-menu/column-menu.component.mjs +401 -315
  10. package/esm2022/editing/add-command.directive.mjs +27 -17
  11. package/esm2022/editing/cancel-command.directive.mjs +27 -17
  12. package/esm2022/editing/edit-command.directive.mjs +27 -17
  13. package/esm2022/editing/form/form-formfield.component.mjs +97 -70
  14. package/esm2022/editing/form/form.component.mjs +77 -61
  15. package/esm2022/editing/remove-command.directive.mjs +27 -17
  16. package/esm2022/editing/save-command.directive.mjs +27 -17
  17. package/esm2022/excel/excel-command.directive.mjs +27 -17
  18. package/esm2022/filtering/cell/filter-cell-operators.component.mjs +20 -17
  19. package/esm2022/filtering/cell/filter-cell.component.mjs +35 -33
  20. package/esm2022/filtering/filter-row.component.mjs +37 -29
  21. package/esm2022/filtering/menu/boolean-filter-menu.component.mjs +34 -31
  22. package/esm2022/filtering/menu/date-filter-menu.component.mjs +52 -49
  23. package/esm2022/filtering/menu/filter-menu-container.component.mjs +97 -89
  24. package/esm2022/filtering/menu/numeric-filter-menu.component.mjs +50 -47
  25. package/esm2022/filtering/menu/string-filter-menu.component.mjs +36 -33
  26. package/esm2022/filtering/multicheckbox-filter.component.mjs +54 -43
  27. package/esm2022/grid.component.mjs +1579 -1483
  28. package/esm2022/grouping/group-header.component.mjs +113 -89
  29. package/esm2022/grouping/group-panel.component.mjs +82 -75
  30. package/esm2022/package-metadata.mjs +2 -2
  31. package/esm2022/pdf/pdf-command.directive.mjs +27 -17
  32. package/esm2022/rendering/cell.component.mjs +411 -365
  33. package/esm2022/rendering/common/col-group.component.mjs +25 -15
  34. package/esm2022/rendering/common/loading.component.mjs +23 -19
  35. package/esm2022/rendering/details/detail-template.directive.mjs +6 -4
  36. package/esm2022/rendering/footer/footer.component.mjs +128 -112
  37. package/esm2022/rendering/header/header.component.mjs +412 -351
  38. package/esm2022/rendering/list.component.mjs +225 -202
  39. package/esm2022/rendering/table-body.component.mjs +553 -493
  40. package/esm2022/rendering/toolbar/toolbar.component.mjs +13 -11
  41. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-assistant.component.mjs +86 -79
  42. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +54 -51
  43. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +138 -115
  44. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +72 -65
  45. package/fesm2022/progress-kendo-angular-grid.mjs +6426 -5525
  46. package/package.json +24 -24
  47. package/rendering/details/detail-template.directive.d.ts +6 -4
  48. package/schematics/ngAdd/index.js +7 -7
@@ -7,7 +7,6 @@ import { DetailTemplateDirective } from '../details/detail-template.directive';
7
7
  import { ColumnBase } from "../../columns/column-base";
8
8
  import { columnsToRender } from '../../columns/column-common';
9
9
  import { isNullOrEmptyString, isTruthy } from '../../utils';
10
- import { NgFor, NgIf } from '@angular/common';
11
10
  import { ContextService } from '../../common/provider.service';
12
11
  import { isPresent } from '@progress/kendo-angular-common';
13
12
  import * as i0 from "@angular/core";
@@ -51,15 +50,21 @@ export class ColGroupComponent {
51
50
  return this.sort.find(item => item.field === field) || { field };
52
51
  }
53
52
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ColGroupComponent, deps: [{ token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Component });
54
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ColGroupComponent, isStandalone: true, selector: "[kendoGridColGroup]", inputs: { columns: "columns", groups: "groups", detailTemplate: "detailTemplate", sort: "sort" }, ngImport: i0, template: `
53
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ColGroupComponent, isStandalone: true, selector: "[kendoGridColGroup]", inputs: { columns: "columns", groups: "groups", detailTemplate: "detailTemplate", sort: "sort" }, ngImport: i0, template: `
55
54
  <ng-container>
56
- <col [class.k-group-col]="true" *ngFor="let g of groups" />
57
- <col [class.k-hierarchy-col]="true" *ngIf="detailTemplate?.templateRef && !isStacked"/>
58
- <col *ngFor="let column of columnsToRender; trackBy: trackBy;"
59
- [style.width]="getColumnWidth(column)"
60
- [class.k-sorted]="isSorted(getColumnComponent(column))"/>
55
+ @for (g of groups; track g) {
56
+ <col [class.k-group-col]="true" />
57
+ }
58
+ @if (detailTemplate?.templateRef && !isStacked) {
59
+ <col [class.k-hierarchy-col]="true"/>
60
+ }
61
+ @for (column of columnsToRender; track $index) {
62
+ <col
63
+ [style.width]="getColumnWidth(column)"
64
+ [class.k-sorted]="isSorted(getColumnComponent(column))"/>
65
+ }
61
66
  </ng-container>
62
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
67
+ `, isInline: true });
63
68
  }
64
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ColGroupComponent, decorators: [{
65
70
  type: Component,
@@ -67,15 +72,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
67
72
  selector: '[kendoGridColGroup]',
68
73
  template: `
69
74
  <ng-container>
70
- <col [class.k-group-col]="true" *ngFor="let g of groups" />
71
- <col [class.k-hierarchy-col]="true" *ngIf="detailTemplate?.templateRef && !isStacked"/>
72
- <col *ngFor="let column of columnsToRender; trackBy: trackBy;"
73
- [style.width]="getColumnWidth(column)"
74
- [class.k-sorted]="isSorted(getColumnComponent(column))"/>
75
+ @for (g of groups; track g) {
76
+ <col [class.k-group-col]="true" />
77
+ }
78
+ @if (detailTemplate?.templateRef && !isStacked) {
79
+ <col [class.k-hierarchy-col]="true"/>
80
+ }
81
+ @for (column of columnsToRender; track $index) {
82
+ <col
83
+ [style.width]="getColumnWidth(column)"
84
+ [class.k-sorted]="isSorted(getColumnComponent(column))"/>
85
+ }
75
86
  </ng-container>
76
87
  `,
77
- standalone: true,
78
- imports: [NgFor, NgIf]
88
+ standalone: true
79
89
  }]
80
90
  }], ctorParameters: () => [{ type: i1.ContextService }], propDecorators: { columns: [{
81
91
  type: Input
@@ -5,7 +5,7 @@
5
5
  import { Component, HostBinding, Input } from '@angular/core';
6
6
  import { ContextService } from '../../common/provider.service';
7
7
  import { LoadingTemplateDirective } from '../loading-template.directive';
8
- import { NgIf, NgTemplateOutlet } from '@angular/common';
8
+ import { NgTemplateOutlet } from '@angular/common';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "../../common/provider.service";
11
11
  /**
@@ -22,31 +22,35 @@ export class LoadingComponent {
22
22
  this.ctx = ctx;
23
23
  }
24
24
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoadingComponent, deps: [{ token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Component });
25
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LoadingComponent, isStandalone: true, selector: "[kendoGridLoading]", inputs: { loadingTemplate: "loadingTemplate" }, host: { properties: { "class.k-loading-mask": "this.hostClass" } }, ngImport: i0, template: `
26
- <ng-container *ngIf="!loadingTemplate">
27
- <span class="k-loading-text">{{ loadingText }}</span>
28
- <div class="k-loading-image"></div>
29
- <div class="k-loading-color"></div>
30
- </ng-container>
31
- <ng-template *ngIf="loadingTemplate" [ngTemplateOutlet]="loadingTemplate?.templateRef">
32
- </ng-template>
33
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
25
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LoadingComponent, isStandalone: true, selector: "[kendoGridLoading]", inputs: { loadingTemplate: "loadingTemplate" }, host: { properties: { "class.k-loading-mask": "this.hostClass" } }, ngImport: i0, template: `
26
+ @if (!loadingTemplate) {
27
+ <span class="k-loading-text">{{ loadingText }}</span>
28
+ <div class="k-loading-image"></div>
29
+ <div class="k-loading-color"></div>
30
+ }
31
+ @if (loadingTemplate) {
32
+ <ng-template [ngTemplateOutlet]="loadingTemplate?.templateRef">
33
+ </ng-template>
34
+ }
35
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
34
36
  }
35
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoadingComponent, decorators: [{
36
38
  type: Component,
37
39
  args: [{
38
40
  selector: '[kendoGridLoading]',
39
41
  template: `
40
- <ng-container *ngIf="!loadingTemplate">
41
- <span class="k-loading-text">{{ loadingText }}</span>
42
- <div class="k-loading-image"></div>
43
- <div class="k-loading-color"></div>
44
- </ng-container>
45
- <ng-template *ngIf="loadingTemplate" [ngTemplateOutlet]="loadingTemplate?.templateRef">
46
- </ng-template>
47
- `,
42
+ @if (!loadingTemplate) {
43
+ <span class="k-loading-text">{{ loadingText }}</span>
44
+ <div class="k-loading-image"></div>
45
+ <div class="k-loading-color"></div>
46
+ }
47
+ @if (loadingTemplate) {
48
+ <ng-template [ngTemplateOutlet]="loadingTemplate?.templateRef">
49
+ </ng-template>
50
+ }
51
+ `,
48
52
  standalone: true,
49
- imports: [NgIf, NgTemplateOutlet]
53
+ imports: [NgTemplateOutlet]
50
54
  }]
51
55
  }], ctorParameters: () => [{ type: i1.ContextService }], propDecorators: { hostClass: [{
52
56
  type: HostBinding,
@@ -14,10 +14,12 @@ import * as i0 from "@angular/core";
14
14
  * <kendo-grid [data]="data" selectable="true" style="height: 160px">
15
15
  * <kendo-grid-column field="ProductName"></kendo-grid-column>
16
16
  * <ng-template kendoGridDetailTemplate let-dataItem>
17
- * <div *ngIf="dataItem.Category">
18
- * <header>{{dataItem.Category?.CategoryName}}</header>
19
- * span>{{dataItem.Category?.Description}}</span>
20
- * </div>
17
+ * @if (dataItem.Category) {
18
+ * <div>
19
+ * <header>{{dataItem.Category?.CategoryName}}</header>
20
+ * <span>{{dataItem.Category?.Description}}</span>
21
+ * </div>
22
+ * }
21
23
  * </ng-template>
22
24
  * </kendo-grid>
23
25
  * ```
@@ -10,7 +10,7 @@ import { isPresent } from '../../utils';
10
10
  import { ColumnsContainer } from '../../columns/columns-container';
11
11
  import { isColumnGroupComponent } from '../../columns/column-group.component';
12
12
  import { LogicalCellDirective } from '../../navigation/logical-cell.directive';
13
- import { NgFor, NgIf, NgClass, NgStyle } from '@angular/common';
13
+ import { NgClass, NgStyle } from '@angular/common';
14
14
  import { LogicalRowDirective } from '../../navigation/logical-row.directive';
15
15
  import { TemplateContextDirective } from '@progress/kendo-angular-common';
16
16
  import { ContextService } from '../../common/provider.service';
@@ -68,79 +68,87 @@ export class FooterComponent {
68
68
  return this.ctx.grid?.isStacked;
69
69
  }
70
70
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FooterComponent, deps: [{ token: i1.ColumnInfoService }, { token: i2.ContextService }], target: i0.ɵɵFactoryTarget.Component });
71
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FooterComponent, isStandalone: true, selector: "[kendoGridFooter]", inputs: { columns: "columns", groups: "groups", detailTemplate: "detailTemplate", scrollable: "scrollable", lockedColumnsCount: "lockedColumnsCount", logicalRowIndex: "logicalRowIndex", totalColumns: "totalColumns", totalColumnsCount: "totalColumnsCount" }, host: { properties: { "class.k-grid-footer": "this.footerClass", "class.k-table-tfoot": "this.hostClass", "attr.role": "this.hostRole" } }, ngImport: i0, template: `
71
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FooterComponent, isStandalone: true, selector: "[kendoGridFooter]", inputs: { columns: "columns", groups: "groups", detailTemplate: "detailTemplate", scrollable: "scrollable", lockedColumnsCount: "lockedColumnsCount", logicalRowIndex: "logicalRowIndex", totalColumns: "totalColumns", totalColumnsCount: "totalColumnsCount" }, host: { properties: { "class.k-grid-footer": "this.footerClass", "class.k-table-tfoot": "this.hostClass", "attr.role": "this.hostRole" } }, ngImport: i0, template: `
72
72
  <ng-container>
73
- <tr
74
- class="k-footer-template"
75
- kendoGridLogicalRow
76
- [logicalRowIndex]="logicalRowIndex"
77
- [logicalSlaveRow]="lockedColumnsCount > 0 && !isStacked"
78
- [logicalCellsCount]="columns.length"
79
- [logicalSlaveCellsCount]="unlockedColumnsCount"
80
- [totalColumns]="totalColumns"
81
- >
82
- <ng-container *ngIf="!isStacked">
83
- <td
84
- class="k-table-td k-group-cell k-table-group-td"
85
- role="presentation"
86
- *ngFor="let g of groups">
87
- </td>
88
- </ng-container>
73
+ <tr
74
+ class="k-footer-template"
75
+ kendoGridLogicalRow
76
+ [logicalRowIndex]="logicalRowIndex"
77
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStacked"
78
+ [logicalCellsCount]="columns.length"
79
+ [logicalSlaveCellsCount]="unlockedColumnsCount"
80
+ [totalColumns]="totalColumns"
81
+ >
82
+ @if (!isStacked) {
83
+ @for (g of groups; track g) {
89
84
  <td
90
- role="presentation"
91
- class="k-table-td k-hierarchy-cell"
92
- *ngIf="detailTemplate?.templateRef && !isStacked">
85
+ class="k-table-td k-group-cell k-table-group-td"
86
+ role="presentation"
87
+ >
93
88
  </td>
94
- <ng-container *ngIf="!isStacked">
95
- <ng-container *ngFor="let column of columnsToRender; let columnIndex = index; trackBy: trackByIndex;">
96
- <td *ngIf="!isColumnGroupComponent(column)"
97
- kendoGridLogicalCell
98
- class="k-table-td"
99
- [logicalRowIndex]="logicalRowIndex"
100
- [logicalColIndex]="logicalColumnIndex(column)"
101
- role="gridcell"
102
- aria-selected="false"
103
- [class.k-grid-footer-sticky]="column.sticky"
104
- [ngClass]="column.footerClass"
105
- [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
106
- <ng-template
89
+ }
90
+ }
91
+ @if (detailTemplate?.templateRef && !isStacked) {
92
+ <td
93
+ role="presentation"
94
+ class="k-table-td k-hierarchy-cell"
95
+ >
96
+ </td>
97
+ }
98
+ @if (!isStacked) {
99
+ @for (column of columnsToRender; track $index; let columnIndex = $index) {
100
+ @if (!isColumnGroupComponent(column)) {
101
+ <td
102
+ kendoGridLogicalCell
103
+ class="k-table-td"
104
+ [logicalRowIndex]="logicalRowIndex"
105
+ [logicalColIndex]="logicalColumnIndex(column)"
106
+ role="gridcell"
107
+ aria-selected="false"
108
+ [class.k-grid-footer-sticky]="column.sticky"
109
+ [ngClass]="column.footerClass"
110
+ [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
111
+ <ng-template
107
112
  [templateContext]="{
108
113
  templateRef: column.footerTemplateRef,
109
114
  columnIndex: column.leafIndex,
110
115
  column: column,
111
116
  $implicit: column
112
117
  }">
113
- </ng-template>
114
- </td>
115
- </ng-container>
116
- </ng-container>
118
+ </ng-template>
119
+ </td>
120
+ }
121
+ }
122
+ }
117
123
 
118
- <ng-container *ngIf="isStacked">
119
- <td kendoGridLogicalCell
120
- class="k-table-td"
121
- [logicalRowIndex]="logicalRowIndex"
122
- [logicalColIndex]="detailTemplate ? 1 : 0"
123
- role="gridcell"
124
- aria-selected="false">
125
- <div class="k-grid-column-template">
126
- <ng-container *ngFor="let column of columnsToRender; trackBy: trackByIndex;">
127
- <div class="k-column-template-item" *ngIf="column.footerTemplateRef">
128
- <ng-template
124
+ @if (isStacked) {
125
+ <td kendoGridLogicalCell
126
+ class="k-table-td"
127
+ [logicalRowIndex]="logicalRowIndex"
128
+ [logicalColIndex]="detailTemplate ? 1 : 0"
129
+ role="gridcell"
130
+ aria-selected="false">
131
+ <div class="k-grid-column-template">
132
+ @for (column of columnsToRender; track $index) {
133
+ @if (column.footerTemplateRef) {
134
+ <div class="k-column-template-item">
135
+ <ng-template
129
136
  [templateContext]="{
130
137
  templateRef: column.footerTemplateRef,
131
138
  columnIndex: column.leafIndex,
132
139
  column: column,
133
140
  $implicit: column
134
141
  }">
135
- </ng-template>
136
- </div>
137
- </ng-container>
138
- </div>
139
- </td>
140
- </ng-container>
141
- </tr>
142
+ </ng-template>
143
+ </div>
144
+ }
145
+ }
146
+ </div>
147
+ </td>
148
+ }
149
+ </tr>
142
150
  </ng-container>
143
- `, isInline: true, dependencies: [{ kind: "directive", type: LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "totalColumns"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
151
+ `, isInline: true, dependencies: [{ kind: "directive", type: LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "totalColumns"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
144
152
  }
145
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FooterComponent, decorators: [{
146
154
  type: Component,
@@ -148,79 +156,87 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
148
156
  selector: '[kendoGridFooter]',
149
157
  template: `
150
158
  <ng-container>
151
- <tr
152
- class="k-footer-template"
153
- kendoGridLogicalRow
154
- [logicalRowIndex]="logicalRowIndex"
155
- [logicalSlaveRow]="lockedColumnsCount > 0 && !isStacked"
156
- [logicalCellsCount]="columns.length"
157
- [logicalSlaveCellsCount]="unlockedColumnsCount"
158
- [totalColumns]="totalColumns"
159
- >
160
- <ng-container *ngIf="!isStacked">
161
- <td
162
- class="k-table-td k-group-cell k-table-group-td"
163
- role="presentation"
164
- *ngFor="let g of groups">
165
- </td>
166
- </ng-container>
159
+ <tr
160
+ class="k-footer-template"
161
+ kendoGridLogicalRow
162
+ [logicalRowIndex]="logicalRowIndex"
163
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStacked"
164
+ [logicalCellsCount]="columns.length"
165
+ [logicalSlaveCellsCount]="unlockedColumnsCount"
166
+ [totalColumns]="totalColumns"
167
+ >
168
+ @if (!isStacked) {
169
+ @for (g of groups; track g) {
167
170
  <td
168
- role="presentation"
169
- class="k-table-td k-hierarchy-cell"
170
- *ngIf="detailTemplate?.templateRef && !isStacked">
171
+ class="k-table-td k-group-cell k-table-group-td"
172
+ role="presentation"
173
+ >
171
174
  </td>
172
- <ng-container *ngIf="!isStacked">
173
- <ng-container *ngFor="let column of columnsToRender; let columnIndex = index; trackBy: trackByIndex;">
174
- <td *ngIf="!isColumnGroupComponent(column)"
175
- kendoGridLogicalCell
176
- class="k-table-td"
177
- [logicalRowIndex]="logicalRowIndex"
178
- [logicalColIndex]="logicalColumnIndex(column)"
179
- role="gridcell"
180
- aria-selected="false"
181
- [class.k-grid-footer-sticky]="column.sticky"
182
- [ngClass]="column.footerClass"
183
- [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
184
- <ng-template
175
+ }
176
+ }
177
+ @if (detailTemplate?.templateRef && !isStacked) {
178
+ <td
179
+ role="presentation"
180
+ class="k-table-td k-hierarchy-cell"
181
+ >
182
+ </td>
183
+ }
184
+ @if (!isStacked) {
185
+ @for (column of columnsToRender; track $index; let columnIndex = $index) {
186
+ @if (!isColumnGroupComponent(column)) {
187
+ <td
188
+ kendoGridLogicalCell
189
+ class="k-table-td"
190
+ [logicalRowIndex]="logicalRowIndex"
191
+ [logicalColIndex]="logicalColumnIndex(column)"
192
+ role="gridcell"
193
+ aria-selected="false"
194
+ [class.k-grid-footer-sticky]="column.sticky"
195
+ [ngClass]="column.footerClass"
196
+ [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
197
+ <ng-template
185
198
  [templateContext]="{
186
199
  templateRef: column.footerTemplateRef,
187
200
  columnIndex: column.leafIndex,
188
201
  column: column,
189
202
  $implicit: column
190
203
  }">
191
- </ng-template>
192
- </td>
193
- </ng-container>
194
- </ng-container>
204
+ </ng-template>
205
+ </td>
206
+ }
207
+ }
208
+ }
195
209
 
196
- <ng-container *ngIf="isStacked">
197
- <td kendoGridLogicalCell
198
- class="k-table-td"
199
- [logicalRowIndex]="logicalRowIndex"
200
- [logicalColIndex]="detailTemplate ? 1 : 0"
201
- role="gridcell"
202
- aria-selected="false">
203
- <div class="k-grid-column-template">
204
- <ng-container *ngFor="let column of columnsToRender; trackBy: trackByIndex;">
205
- <div class="k-column-template-item" *ngIf="column.footerTemplateRef">
206
- <ng-template
210
+ @if (isStacked) {
211
+ <td kendoGridLogicalCell
212
+ class="k-table-td"
213
+ [logicalRowIndex]="logicalRowIndex"
214
+ [logicalColIndex]="detailTemplate ? 1 : 0"
215
+ role="gridcell"
216
+ aria-selected="false">
217
+ <div class="k-grid-column-template">
218
+ @for (column of columnsToRender; track $index) {
219
+ @if (column.footerTemplateRef) {
220
+ <div class="k-column-template-item">
221
+ <ng-template
207
222
  [templateContext]="{
208
223
  templateRef: column.footerTemplateRef,
209
224
  columnIndex: column.leafIndex,
210
225
  column: column,
211
226
  $implicit: column
212
227
  }">
213
- </ng-template>
214
- </div>
215
- </ng-container>
216
- </div>
217
- </td>
218
- </ng-container>
219
- </tr>
228
+ </ng-template>
229
+ </div>
230
+ }
231
+ }
232
+ </div>
233
+ </td>
234
+ }
235
+ </tr>
220
236
  </ng-container>
221
237
  `,
222
238
  standalone: true,
223
- imports: [LogicalRowDirective, NgFor, NgIf, LogicalCellDirective, NgClass, NgStyle, TemplateContextDirective]
239
+ imports: [LogicalRowDirective, LogicalCellDirective, NgClass, NgStyle, TemplateContextDirective]
224
240
  }]
225
241
  }], ctorParameters: () => [{ type: i1.ColumnInfoService }, { type: i2.ContextService }], propDecorators: { columns: [{
226
242
  type: Input