@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
@@ -12,7 +12,7 @@ import { caretAltDownIcon, caretAltRightIcon, caretAltLeftIcon } from '@progress
12
12
  import { FieldAccessorPipe } from '../rendering/common/field-accessor.pipe';
13
13
  import { IconWrapperComponent } from '@progress/kendo-angular-icons';
14
14
  import { LogicalCellDirective } from '../navigation/logical-cell.directive';
15
- import { NgIf, NgFor, NgTemplateOutlet } from '@angular/common';
15
+ import { NgTemplateOutlet } from '@angular/common';
16
16
  import { TemplateContextDirective } from '@progress/kendo-angular-common';
17
17
  import * as i0 from "@angular/core";
18
18
  import * as i1 from "./groups.service";
@@ -118,13 +118,16 @@ export class GroupHeaderComponent {
118
118
  return this.ctx.grid?.isStacked;
119
119
  }
120
120
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupHeaderComponent, deps: [{ token: i1.GroupsService }, { token: i2.GroupInfoService }, { token: i3.ContextService }], target: i0.ɵɵFactoryTarget.Component });
121
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GroupHeaderComponent, isStandalone: true, selector: "[kendoGridGroupHeader]", inputs: { rowIndex: "rowIndex", logicalRowIndex: "logicalRowIndex", item: "item", skipGroupDecoration: "skipGroupDecoration", hasDetails: "hasDetails", totalColumnsCount: "totalColumnsCount", hasGroupHeaderColumn: "hasGroupHeaderColumn", groupHeaderColumns: "groupHeaderColumns", columns: "columns", groups: "groups" }, host: { properties: { "class.k-grouping-row": "this.groupItemClass", "class.k-table-group-row": "this.tableGroupRowClass" } }, ngImport: i0, template: `
122
- <ng-container *ngIf="!skipGroupDecoration">
121
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GroupHeaderComponent, isStandalone: true, selector: "[kendoGridGroupHeader]", inputs: { rowIndex: "rowIndex", logicalRowIndex: "logicalRowIndex", item: "item", skipGroupDecoration: "skipGroupDecoration", hasDetails: "hasDetails", totalColumnsCount: "totalColumnsCount", hasGroupHeaderColumn: "hasGroupHeaderColumn", groupHeaderColumns: "groupHeaderColumns", columns: "columns", groups: "groups" }, host: { properties: { "class.k-grouping-row": "this.groupItemClass", "class.k-table-group-row": "this.tableGroupRowClass" } }, ngImport: i0, template: `
122
+ @if (!skipGroupDecoration) {
123
+ @for (g of prefixGroupCell(item); track $index) {
123
124
  <td class="k-group-cell k-table-td k-table-group-td"
124
- role="presentation"
125
- *ngFor="let g of prefixGroupCell(item)"></td>
126
- </ng-container>
127
- <td [attr.colspan]="groupSpan(item)" *ngIf="!(skipGroupDecoration && hasGroupHeaderColumn)"
125
+ role="presentation"
126
+ ></td>
127
+ }
128
+ }
129
+ @if (!(skipGroupDecoration && hasGroupHeaderColumn)) {
130
+ <td [attr.colspan]="groupSpan(item)"
128
131
  [attr.role]="ariaRole()"
129
132
  aria-selected="false"
130
133
  class="k-table-td"
@@ -136,19 +139,19 @@ export class GroupHeaderComponent {
136
139
  [groupItem]="item"
137
140
  [colSpan]="logicalColSpan()">
138
141
  <p class="k-reset">
139
- <ng-container *ngIf="!skipGroupDecoration">
140
- <a href="#" tabindex="-1" (click)="toggleGroup(item, $event)"
141
- role="presentation"
142
- [attr.title]="groupButtonTitle"
143
- [attr.aria-label]="groupButtonTitle">
144
- <kendo-icon-wrapper
145
- [name]="arrowIcon"
146
- [svgIcon]="arrowSVGIcon"></kendo-icon-wrapper>
147
- </a>
148
- <ng-container *ngIf="!groupHeaderTemplate(item)">
149
- {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
150
- </ng-container>
151
- <ng-template
142
+ @if (!skipGroupDecoration) {
143
+ <a href="#" tabindex="-1" (click)="toggleGroup(item, $event)"
144
+ role="presentation"
145
+ [attr.title]="groupButtonTitle"
146
+ [attr.aria-label]="groupButtonTitle">
147
+ <kendo-icon-wrapper
148
+ [name]="arrowIcon"
149
+ [svgIcon]="arrowSVGIcon"></kendo-icon-wrapper>
150
+ </a>
151
+ @if (!groupHeaderTemplate(item)) {
152
+ {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
153
+ }
154
+ <ng-template
152
155
  [templateContext]="{
153
156
  templateRef: groupHeaderTemplate(item),
154
157
  group: item.data,
@@ -159,13 +162,15 @@ export class GroupHeaderComponent {
159
162
  expanded: isExpanded,
160
163
  $implicit: item.data
161
164
  }">
162
- </ng-template>
163
- </ng-container>
165
+ </ng-template>
166
+ }
164
167
  </p>
165
- <div class="k-grid-column-template" *ngIf="isStacked">
166
- <ng-container *ngFor="let column of groupHeaderColumns; let index = index">
167
- <div class="k-column-template-item" *ngIf="column.groupHeaderColumnTemplateRef">
168
- <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
168
+ @if (isStacked) {
169
+ <div class="k-grid-column-template">
170
+ @for (column of groupHeaderColumns; track column; let index = $index) {
171
+ @if (column.groupHeaderColumnTemplateRef) {
172
+ <div class="k-column-template-item">
173
+ <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
169
174
  [ngTemplateOutletContext]="{
170
175
  group: item.data,
171
176
  aggregates: item.data?.aggregates,
@@ -174,24 +179,29 @@ export class GroupHeaderComponent {
174
179
  index: item.index,
175
180
  $implicit: item.data
176
181
  }">
177
- </ng-template>
182
+ </ng-template>
178
183
  </div>
179
- </ng-container>
180
- </div>
181
- </td>
182
- <ng-container *ngIf="hasGroupHeaderColumn && !isStacked">
183
- <td *ngFor="let column of groupHeaderColumns; let index = index"
184
- role="gridcell"
185
- class="k-table-td"
186
- aria-selected="false"
187
- kendoGridLogicalCell
188
- [logicalRowIndex]="logicalRowIndex"
189
- [logicalColIndex]="index + 1"
190
- [logicalSlaveCell]="false"
191
- [groupItem]="item"
192
- [colSpan]="1"
193
- >
194
- <ng-template *ngIf="column.groupHeaderColumnTemplateRef" [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
184
+ }
185
+ }
186
+ </div>
187
+ }
188
+ </td>
189
+ }
190
+ @if (hasGroupHeaderColumn && !isStacked) {
191
+ @for (column of groupHeaderColumns; track column; let index = $index) {
192
+ <td
193
+ role="gridcell"
194
+ class="k-table-td"
195
+ aria-selected="false"
196
+ kendoGridLogicalCell
197
+ [logicalRowIndex]="logicalRowIndex"
198
+ [logicalColIndex]="index + 1"
199
+ [logicalSlaveCell]="false"
200
+ [groupItem]="item"
201
+ [colSpan]="1"
202
+ >
203
+ @if (column.groupHeaderColumnTemplateRef) {
204
+ <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
195
205
  [ngTemplateOutletContext]="{
196
206
  group: item.data,
197
207
  aggregates: item.data?.aggregates,
@@ -201,21 +211,26 @@ export class GroupHeaderComponent {
201
211
  $implicit: item.data
202
212
  }">
203
213
  </ng-template>
214
+ }
204
215
  </td>
205
- </ng-container>
206
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: FieldAccessorPipe, name: "valueOf" }] });
216
+ }
217
+ }
218
+ `, isInline: true, dependencies: [{ kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: FieldAccessorPipe, name: "valueOf" }] });
207
219
  }
208
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupHeaderComponent, decorators: [{
209
221
  type: Component,
210
222
  args: [{
211
223
  selector: '[kendoGridGroupHeader]',
212
224
  template: `
213
- <ng-container *ngIf="!skipGroupDecoration">
225
+ @if (!skipGroupDecoration) {
226
+ @for (g of prefixGroupCell(item); track $index) {
214
227
  <td class="k-group-cell k-table-td k-table-group-td"
215
- role="presentation"
216
- *ngFor="let g of prefixGroupCell(item)"></td>
217
- </ng-container>
218
- <td [attr.colspan]="groupSpan(item)" *ngIf="!(skipGroupDecoration && hasGroupHeaderColumn)"
228
+ role="presentation"
229
+ ></td>
230
+ }
231
+ }
232
+ @if (!(skipGroupDecoration && hasGroupHeaderColumn)) {
233
+ <td [attr.colspan]="groupSpan(item)"
219
234
  [attr.role]="ariaRole()"
220
235
  aria-selected="false"
221
236
  class="k-table-td"
@@ -227,19 +242,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
227
242
  [groupItem]="item"
228
243
  [colSpan]="logicalColSpan()">
229
244
  <p class="k-reset">
230
- <ng-container *ngIf="!skipGroupDecoration">
231
- <a href="#" tabindex="-1" (click)="toggleGroup(item, $event)"
232
- role="presentation"
233
- [attr.title]="groupButtonTitle"
234
- [attr.aria-label]="groupButtonTitle">
235
- <kendo-icon-wrapper
236
- [name]="arrowIcon"
237
- [svgIcon]="arrowSVGIcon"></kendo-icon-wrapper>
238
- </a>
239
- <ng-container *ngIf="!groupHeaderTemplate(item)">
240
- {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
241
- </ng-container>
242
- <ng-template
245
+ @if (!skipGroupDecoration) {
246
+ <a href="#" tabindex="-1" (click)="toggleGroup(item, $event)"
247
+ role="presentation"
248
+ [attr.title]="groupButtonTitle"
249
+ [attr.aria-label]="groupButtonTitle">
250
+ <kendo-icon-wrapper
251
+ [name]="arrowIcon"
252
+ [svgIcon]="arrowSVGIcon"></kendo-icon-wrapper>
253
+ </a>
254
+ @if (!groupHeaderTemplate(item)) {
255
+ {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
256
+ }
257
+ <ng-template
243
258
  [templateContext]="{
244
259
  templateRef: groupHeaderTemplate(item),
245
260
  group: item.data,
@@ -250,13 +265,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
250
265
  expanded: isExpanded,
251
266
  $implicit: item.data
252
267
  }">
253
- </ng-template>
254
- </ng-container>
268
+ </ng-template>
269
+ }
255
270
  </p>
256
- <div class="k-grid-column-template" *ngIf="isStacked">
257
- <ng-container *ngFor="let column of groupHeaderColumns; let index = index">
258
- <div class="k-column-template-item" *ngIf="column.groupHeaderColumnTemplateRef">
259
- <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
271
+ @if (isStacked) {
272
+ <div class="k-grid-column-template">
273
+ @for (column of groupHeaderColumns; track column; let index = $index) {
274
+ @if (column.groupHeaderColumnTemplateRef) {
275
+ <div class="k-column-template-item">
276
+ <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
260
277
  [ngTemplateOutletContext]="{
261
278
  group: item.data,
262
279
  aggregates: item.data?.aggregates,
@@ -265,24 +282,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
265
282
  index: item.index,
266
283
  $implicit: item.data
267
284
  }">
268
- </ng-template>
285
+ </ng-template>
269
286
  </div>
270
- </ng-container>
271
- </div>
272
- </td>
273
- <ng-container *ngIf="hasGroupHeaderColumn && !isStacked">
274
- <td *ngFor="let column of groupHeaderColumns; let index = index"
275
- role="gridcell"
276
- class="k-table-td"
277
- aria-selected="false"
278
- kendoGridLogicalCell
279
- [logicalRowIndex]="logicalRowIndex"
280
- [logicalColIndex]="index + 1"
281
- [logicalSlaveCell]="false"
282
- [groupItem]="item"
283
- [colSpan]="1"
284
- >
285
- <ng-template *ngIf="column.groupHeaderColumnTemplateRef" [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
287
+ }
288
+ }
289
+ </div>
290
+ }
291
+ </td>
292
+ }
293
+ @if (hasGroupHeaderColumn && !isStacked) {
294
+ @for (column of groupHeaderColumns; track column; let index = $index) {
295
+ <td
296
+ role="gridcell"
297
+ class="k-table-td"
298
+ aria-selected="false"
299
+ kendoGridLogicalCell
300
+ [logicalRowIndex]="logicalRowIndex"
301
+ [logicalColIndex]="index + 1"
302
+ [logicalSlaveCell]="false"
303
+ [groupItem]="item"
304
+ [colSpan]="1"
305
+ >
306
+ @if (column.groupHeaderColumnTemplateRef) {
307
+ <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
286
308
  [ngTemplateOutletContext]="{
287
309
  group: item.data,
288
310
  aggregates: item.data?.aggregates,
@@ -292,11 +314,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
292
314
  $implicit: item.data
293
315
  }">
294
316
  </ng-template>
317
+ }
295
318
  </td>
296
- </ng-container>
297
- `,
319
+ }
320
+ }
321
+ `,
298
322
  standalone: true,
299
- imports: [NgIf, NgFor, LogicalCellDirective, IconWrapperComponent, TemplateContextDirective, NgTemplateOutlet, FieldAccessorPipe]
323
+ imports: [LogicalCellDirective, IconWrapperComponent, TemplateContextDirective, NgTemplateOutlet, FieldAccessorPipe]
300
324
  }]
301
325
  }], ctorParameters: () => [{ type: i1.GroupsService }, { type: i2.GroupInfoService }, { type: i3.ContextService }], propDecorators: { rowIndex: [{
302
326
  type: Input
@@ -19,7 +19,6 @@ import { closest } from '../rendering/common/dom-queries';
19
19
  import { DraggableDirective, EventsOutsideAngularDirective, Keys, normalizeNumpadKeys } from '@progress/kendo-angular-common';
20
20
  import { IconWrapperComponent } from '@progress/kendo-angular-icons';
21
21
  import { DraggableColumnDirective } from '../dragdrop/draggable-column.directive';
22
- import { NgIf, NgFor } from '@angular/common';
23
22
  import * as i0 from "@angular/core";
24
23
  import * as i1 from "../dragdrop/drag-hint.service";
25
24
  import * as i2 from "../dragdrop/drop-cue.service";
@@ -289,26 +288,27 @@ export class GroupPanelComponent {
289
288
  }
290
289
  }
291
290
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupPanelComponent, deps: [{ token: i1.DragHintService }, { token: i2.DropCueService }, { token: i3.GroupInfoService }, { token: i4.ContextService }, { token: i0.ChangeDetectorRef }, { token: i5.PopupService }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
292
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GroupPanelComponent, isStandalone: true, selector: "kendo-grid-group-panel", inputs: { text: "text", navigable: "navigable", groups: "groups" }, outputs: { change: "change" }, host: { properties: { "class.k-grouping-header": "this.groupHeaderClass" } }, viewQueries: [{ propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], ngImport: i0, template: `
293
- <div
294
- *ngIf="groups.length === 0"
291
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GroupPanelComponent, isStandalone: true, selector: "kendo-grid-group-panel", inputs: { text: "text", navigable: "navigable", groups: "groups" }, outputs: { change: "change" }, host: { properties: { "class.k-grouping-header": "this.groupHeaderClass" } }, viewQueries: [{ propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], ngImport: i0, template: `
292
+ @if (groups.length === 0) {
293
+ <div
295
294
  class="k-grouping-drop-container"
296
295
  [context]="{
297
296
  lastTarget: true
298
297
  }"
299
298
  kendoDropTarget
300
- >
299
+ >
301
300
  {{ text }}
302
- </div>
303
-
304
- <kendo-chiplist
305
- *ngIf="groups.length !== 0"
301
+ </div>
302
+ }
303
+
304
+ @if (groups.length !== 0) {
305
+ <kendo-chiplist
306
306
  [navigable]="navigable"
307
307
  role="none"
308
308
  [orientation]="null"
309
- >
310
- <kendo-chip
311
- *ngFor="let group of groups; let index = index; let first = first; let last = last;"
309
+ >
310
+ @for (group of groups; track group; let index = $index; let first = $first; let last = $last) {
311
+ <kendo-chip
312
312
  #chip
313
313
  kendoDropTarget
314
314
  kendoDraggableColumn
@@ -333,43 +333,46 @@ export class GroupPanelComponent {
333
333
  (remove)="remove(group)"
334
334
  (menuToggle)="toggleMenu(chip, first, last, group.field)"
335
335
  (keydown.alt.arrowdown)="$event.preventDefault(); toggleMenu(chip, first, last, group.field)"
336
- >
337
- </kendo-chip>
338
- </kendo-chiplist>
339
-
340
- <div
341
- *ngIf="groups.length !== 0"
336
+ >
337
+ </kendo-chip>
338
+ }
339
+ </kendo-chiplist>
340
+ }
341
+
342
+ @if (groups.length !== 0) {
343
+ <div
342
344
  class="k-grouping-drop-container"
343
345
  [context]="{
344
346
  lastTarget: true
345
347
  }"
346
348
  kendoDropTarget
347
- >&nbsp;</div>
348
-
349
+ >&nbsp;</div>
350
+ }
351
+
349
352
  <ng-template #defaultTemplate>
350
353
  <ul unselectable="on" role="menu" class="k-group k-menu-group k-reset k-menu-group-md" [kendoEventsOutsideAngular]="{
351
354
  keydown: handleKeyDown,
352
355
  click: handleClick
353
356
  }">
354
- <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
355
- <span class="k-link k-menu-link" [class.k-disabled]="first">
356
- <kendo-icon-wrapper
357
- [name]="rtl ? 'arrow-right' : 'arrow-left'"
358
- [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
359
- <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
360
- </span>
361
- </li>
362
- <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
363
- <span class="k-link k-menu-link" [class.k-disabled]="last">
364
- <kendo-icon-wrapper
365
- [name]="rtl ? 'arrow-left' : 'arrow-right'"
366
- [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
367
- <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
368
- </span>
369
- </li>
370
- </ul>
357
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
358
+ <span class="k-link k-menu-link" [class.k-disabled]="first">
359
+ <kendo-icon-wrapper
360
+ [name]="rtl ? 'arrow-right' : 'arrow-left'"
361
+ [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
362
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
363
+ </span>
364
+ </li>
365
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
366
+ <span class="k-link k-menu-link" [class.k-disabled]="last">
367
+ <kendo-icon-wrapper
368
+ [name]="rtl ? 'arrow-left' : 'arrow-right'"
369
+ [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
370
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
371
+ </span>
372
+ </li>
373
+ </ul>
371
374
  </ng-template>
372
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { kind: "component", type: ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["orientation", "selection", "size", "role", "navigable"], outputs: ["selectedChange", "remove"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "svgIcon", "iconClass", "avatarSettings", "selected", "removable", "removeIcon", "removeSvgIcon", "hasMenu", "menuIcon", "menuSvgIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "menuToggle", "contentClick"] }, { kind: "directive", type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
375
+ `, isInline: true, dependencies: [{ kind: "directive", type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { kind: "component", type: ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["orientation", "selection", "size", "role", "navigable"], outputs: ["selectedChange", "remove"] }, { kind: "component", type: ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "svgIcon", "iconClass", "avatarSettings", "selected", "removable", "removeIcon", "removeSvgIcon", "hasMenu", "menuIcon", "menuSvgIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "menuToggle", "contentClick"] }, { kind: "directive", type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
373
376
  }
374
377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GroupPanelComponent, decorators: [{
375
378
  type: Component,
@@ -377,25 +380,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
377
380
  changeDetection: ChangeDetectionStrategy.OnPush,
378
381
  selector: 'kendo-grid-group-panel',
379
382
  template: `
380
- <div
381
- *ngIf="groups.length === 0"
383
+ @if (groups.length === 0) {
384
+ <div
382
385
  class="k-grouping-drop-container"
383
386
  [context]="{
384
387
  lastTarget: true
385
388
  }"
386
389
  kendoDropTarget
387
- >
390
+ >
388
391
  {{ text }}
389
- </div>
390
-
391
- <kendo-chiplist
392
- *ngIf="groups.length !== 0"
392
+ </div>
393
+ }
394
+
395
+ @if (groups.length !== 0) {
396
+ <kendo-chiplist
393
397
  [navigable]="navigable"
394
398
  role="none"
395
399
  [orientation]="null"
396
- >
397
- <kendo-chip
398
- *ngFor="let group of groups; let index = index; let first = first; let last = last;"
400
+ >
401
+ @for (group of groups; track group; let index = $index; let first = $first; let last = $last) {
402
+ <kendo-chip
399
403
  #chip
400
404
  kendoDropTarget
401
405
  kendoDraggableColumn
@@ -420,45 +424,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
420
424
  (remove)="remove(group)"
421
425
  (menuToggle)="toggleMenu(chip, first, last, group.field)"
422
426
  (keydown.alt.arrowdown)="$event.preventDefault(); toggleMenu(chip, first, last, group.field)"
423
- >
424
- </kendo-chip>
425
- </kendo-chiplist>
426
-
427
- <div
428
- *ngIf="groups.length !== 0"
427
+ >
428
+ </kendo-chip>
429
+ }
430
+ </kendo-chiplist>
431
+ }
432
+
433
+ @if (groups.length !== 0) {
434
+ <div
429
435
  class="k-grouping-drop-container"
430
436
  [context]="{
431
437
  lastTarget: true
432
438
  }"
433
439
  kendoDropTarget
434
- >&nbsp;</div>
435
-
440
+ >&nbsp;</div>
441
+ }
442
+
436
443
  <ng-template #defaultTemplate>
437
444
  <ul unselectable="on" role="menu" class="k-group k-menu-group k-reset k-menu-group-md" [kendoEventsOutsideAngular]="{
438
445
  keydown: handleKeyDown,
439
446
  click: handleClick
440
447
  }">
441
- <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
442
- <span class="k-link k-menu-link" [class.k-disabled]="first">
443
- <kendo-icon-wrapper
444
- [name]="rtl ? 'arrow-right' : 'arrow-left'"
445
- [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
446
- <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
447
- </span>
448
- </li>
449
- <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
450
- <span class="k-link k-menu-link" [class.k-disabled]="last">
451
- <kendo-icon-wrapper
452
- [name]="rtl ? 'arrow-left' : 'arrow-right'"
453
- [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
454
- <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
455
- </span>
456
- </li>
457
- </ul>
448
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
449
+ <span class="k-link k-menu-link" [class.k-disabled]="first">
450
+ <kendo-icon-wrapper
451
+ [name]="rtl ? 'arrow-right' : 'arrow-left'"
452
+ [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
453
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
454
+ </span>
455
+ </li>
456
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
457
+ <span class="k-link k-menu-link" [class.k-disabled]="last">
458
+ <kendo-icon-wrapper
459
+ [name]="rtl ? 'arrow-left' : 'arrow-right'"
460
+ [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
461
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
462
+ </span>
463
+ </li>
464
+ </ul>
458
465
  </ng-template>
459
- `,
466
+ `,
460
467
  standalone: true,
461
- imports: [NgIf, DropTargetDirective, ChipListComponent, NgFor, ChipComponent, DraggableColumnDirective, DraggableDirective, EventsOutsideAngularDirective, IconWrapperComponent]
468
+ imports: [DropTargetDirective, ChipListComponent, ChipComponent, DraggableColumnDirective, DraggableDirective, EventsOutsideAngularDirective, IconWrapperComponent]
462
469
  }]
463
470
  }], ctorParameters: () => [{ type: i1.DragHintService }, { type: i2.DropCueService }, { type: i3.GroupInfoService }, { type: i4.ContextService }, { type: i0.ChangeDetectorRef }, { type: i5.PopupService }, { type: i0.NgZone }, { type: i0.Renderer2 }], propDecorators: { change: [{
464
471
  type: Output
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1763729253,
14
- version: '21.1.1-develop.2',
13
+ publishDate: 1764002331,
14
+ version: '21.2.0-develop.2',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -7,7 +7,7 @@ import { Button } from '@progress/kendo-angular-buttons';
7
7
  import { ContextService } from '../common/provider.service';
8
8
  import { PDFService } from './pdf.service';
9
9
  import { IconWrapperComponent } from '@progress/kendo-angular-icons';
10
- import { NgIf, NgClass } from '@angular/common';
10
+ import { NgClass } from '@angular/common';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "./pdf.service";
13
13
  import * as i2 from "../common/provider.service";
@@ -47,37 +47,47 @@ export class PDFCommandDirective extends Button {
47
47
  this.ngZone = ngZone;
48
48
  }
49
49
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PDFCommandDirective, deps: [{ token: i1.PDFService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i2.ContextService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
50
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PDFCommandDirective, isStandalone: true, selector: "[kendoGridPDFCommand]", host: { listeners: { "click": "onClick($event)" }, properties: { "class.k-grid-pdf": "this.pdfClass" } }, usesInheritance: true, ngImport: i0, template: `
51
- <kendo-icon-wrapper
52
- *ngIf="icon || svgIcon"
50
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PDFCommandDirective, isStandalone: true, selector: "[kendoGridPDFCommand]", host: { listeners: { "click": "onClick($event)" }, properties: { "class.k-grid-pdf": "this.pdfClass" } }, usesInheritance: true, ngImport: i0, template: `
51
+ @if (icon || svgIcon) {
52
+ <kendo-icon-wrapper
53
53
  innerCssClass="k-button-icon"
54
54
  [name]="icon"
55
- [svgIcon]="svgIcon"></kendo-icon-wrapper>
56
- <span *ngIf="imageUrl" class="k-button-icon k-icon">
55
+ [svgIcon]="svgIcon"></kendo-icon-wrapper>
56
+ }
57
+ @if (imageUrl) {
58
+ <span class="k-button-icon k-icon">
57
59
  <img [src]="imageUrl" class="k-image" role="presentation" />
58
- </span>
59
- <span *ngIf="iconClass" class="k-button-icon" [ngClass]="iconClass"></span>
60
+ </span>
61
+ }
62
+ @if (iconClass) {
63
+ <span class="k-button-icon" [ngClass]="iconClass"></span>
64
+ }
60
65
  <span class="k-button-text"><ng-content></ng-content></span>
61
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
66
+ `, isInline: true, dependencies: [{ kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
62
67
  }
63
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PDFCommandDirective, decorators: [{
64
69
  type: Component,
65
70
  args: [{
66
71
  selector: '[kendoGridPDFCommand]',
67
72
  template: `
68
- <kendo-icon-wrapper
69
- *ngIf="icon || svgIcon"
73
+ @if (icon || svgIcon) {
74
+ <kendo-icon-wrapper
70
75
  innerCssClass="k-button-icon"
71
76
  [name]="icon"
72
- [svgIcon]="svgIcon"></kendo-icon-wrapper>
73
- <span *ngIf="imageUrl" class="k-button-icon k-icon">
77
+ [svgIcon]="svgIcon"></kendo-icon-wrapper>
78
+ }
79
+ @if (imageUrl) {
80
+ <span class="k-button-icon k-icon">
74
81
  <img [src]="imageUrl" class="k-image" role="presentation" />
75
- </span>
76
- <span *ngIf="iconClass" class="k-button-icon" [ngClass]="iconClass"></span>
82
+ </span>
83
+ }
84
+ @if (iconClass) {
85
+ <span class="k-button-icon" [ngClass]="iconClass"></span>
86
+ }
77
87
  <span class="k-button-text"><ng-content></ng-content></span>
78
- `,
88
+ `,
79
89
  standalone: true,
80
- imports: [NgIf, IconWrapperComponent, NgClass]
90
+ imports: [IconWrapperComponent, NgClass]
81
91
  }]
82
92
  }], ctorParameters: () => [{ type: i1.PDFService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i2.ContextService }, { type: i0.NgZone }], propDecorators: { onClick: [{
83
93
  type: HostListener,