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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +11 -7
@@ -8,7 +8,7 @@ import { DetailTemplateDirective } from '../rendering/details/detail-template.di
8
8
  import { ContextService } from '../common/provider.service';
9
9
  import { LogicalCellDirective } from '../navigation/logical-cell.directive';
10
10
  import { FilterCellComponent } from './cell/filter-cell.component';
11
- import { NgFor, NgIf, NgStyle, NgClass } from '@angular/common';
11
+ import { NgStyle, NgClass } from '@angular/common';
12
12
  import { replaceMessagePlaceholder } from '@progress/kendo-angular-common';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "../common/provider.service";
@@ -47,63 +47,71 @@ export class FilterRowComponent {
47
47
  return this.ctx.grid?.isStacked;
48
48
  }
49
49
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterRowComponent, deps: [{ token: i1.ContextService }, { token: i2.ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
50
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FilterRowComponent, isStandalone: true, selector: "[kendoGridFilterRow]", inputs: { columns: "columns", filter: "filter", groups: "groups", detailTemplate: "detailTemplate", logicalRowIndex: "logicalRowIndex", lockedColumnsCount: "lockedColumnsCount" }, host: { properties: { "class.k-filter-row": "this.filterRowClass" } }, ngImport: i0, template: `
51
- <td
50
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilterRowComponent, isStandalone: true, selector: "[kendoGridFilterRow]", inputs: { columns: "columns", filter: "filter", groups: "groups", detailTemplate: "detailTemplate", logicalRowIndex: "logicalRowIndex", lockedColumnsCount: "lockedColumnsCount" }, host: { properties: { "class.k-filter-row": "this.filterRowClass" } }, ngImport: i0, template: `
51
+ @for (g of groups; track g) {
52
+ <td
52
53
  class="k-table-td k-group-cell k-table-group-td"
53
- *ngFor="let g of groups"
54
54
  role="presentation">
55
- </td>
56
- <td
55
+ </td>
56
+ }
57
+ @if (detailTemplate?.templateRef && !isStacked) {
58
+ <td
57
59
  class="k-table-td k-hierarchy-cell"
58
- *ngIf="detailTemplate?.templateRef && !isStacked"
59
60
  role="presentation">
60
- </td>
61
- <td *ngFor="let column of columns; let columnIndex = index"
61
+ </td>
62
+ }
63
+ @for (column of columns; track column; let columnIndex = $index) {
64
+ <td
62
65
  class="k-table-td"
63
66
  [class.k-grid-header-sticky]="column.sticky"
64
67
  [ngStyle]="addStickyStyles(column)"
65
68
  [ngClass]="column.filterClass"
66
69
  [attr.aria-label]="filterLabel($any(column))"
67
70
  kendoGridFilterCell
68
- [column]="$any(column)"
69
- [filter]="filter"
71
+ [column]="$any(column)"
72
+ [filter]="filter"
70
73
  kendoGridLogicalCell
71
- [logicalRowIndex]="logicalRowIndex"
72
- [logicalColIndex]="getLogicalColIndex(columnIndex)"
73
- ></td>
74
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FilterCellComponent, selector: "[kendoGridFilterCell]", inputs: ["column", "filter", "size"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
74
+ [logicalRowIndex]="logicalRowIndex"
75
+ [logicalColIndex]="getLogicalColIndex(columnIndex)"
76
+ ></td>
77
+ }
78
+ `, isInline: true, dependencies: [{ kind: "component", type: FilterCellComponent, selector: "[kendoGridFilterCell]", inputs: ["column", "filter", "size"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
75
79
  }
76
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterRowComponent, decorators: [{
77
81
  type: Component,
78
82
  args: [{
79
83
  selector: '[kendoGridFilterRow]',
80
84
  template: `
81
- <td
85
+ @for (g of groups; track g) {
86
+ <td
82
87
  class="k-table-td k-group-cell k-table-group-td"
83
- *ngFor="let g of groups"
84
88
  role="presentation">
85
- </td>
86
- <td
89
+ </td>
90
+ }
91
+ @if (detailTemplate?.templateRef && !isStacked) {
92
+ <td
87
93
  class="k-table-td k-hierarchy-cell"
88
- *ngIf="detailTemplate?.templateRef && !isStacked"
89
94
  role="presentation">
90
- </td>
91
- <td *ngFor="let column of columns; let columnIndex = index"
95
+ </td>
96
+ }
97
+ @for (column of columns; track column; let columnIndex = $index) {
98
+ <td
92
99
  class="k-table-td"
93
100
  [class.k-grid-header-sticky]="column.sticky"
94
101
  [ngStyle]="addStickyStyles(column)"
95
102
  [ngClass]="column.filterClass"
96
103
  [attr.aria-label]="filterLabel($any(column))"
97
104
  kendoGridFilterCell
98
- [column]="$any(column)"
99
- [filter]="filter"
105
+ [column]="$any(column)"
106
+ [filter]="filter"
100
107
  kendoGridLogicalCell
101
- [logicalRowIndex]="logicalRowIndex"
102
- [logicalColIndex]="getLogicalColIndex(columnIndex)"
103
- ></td>
104
- `,
108
+ [logicalRowIndex]="logicalRowIndex"
109
+ [logicalColIndex]="getLogicalColIndex(columnIndex)"
110
+ ></td>
111
+ }
112
+ `,
105
113
  standalone: true,
106
- imports: [NgFor, NgIf, FilterCellComponent, LogicalCellDirective, NgStyle, NgClass]
114
+ imports: [FilterCellComponent, LogicalCellDirective, NgStyle, NgClass]
107
115
  }]
108
116
  }], ctorParameters: () => [{ type: i1.ContextService }, { type: i2.ColumnInfoService }], propDecorators: { columns: [{
109
117
  type: Input
@@ -9,7 +9,6 @@ import { guid, replaceMessagePlaceholder } from '@progress/kendo-angular-common'
9
9
  import { BooleanFilterRadioButtonDirective } from './filter-radio-button.directive';
10
10
  import { MenuTabbingService } from './menu-tabbing.service';
11
11
  import { ContextService } from '../../common/provider.service';
12
- import { NgFor } from '@angular/common';
13
12
  import { RadioButtonComponent } from '@progress/kendo-angular-inputs';
14
13
  import * as i0 from "@angular/core";
15
14
  import * as i1 from "../../common/provider.service";
@@ -105,24 +104,26 @@ export class BooleanFilterMenuComponent extends BooleanFilterComponent {
105
104
  return replaceMessagePlaceholder(localizationMsg, 'columnName', columnName);
106
105
  }
107
106
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BooleanFilterMenuComponent, deps: [{ token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Component });
108
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: BooleanFilterMenuComponent, isStandalone: true, selector: "kendo-grid-boolean-filter-menu", inputs: { filter: "filter", filterService: "filterService", menuTabbingService: "menuTabbingService" }, host: { properties: { "class.k-filtercell": "this.hostClasses" } }, viewQueries: [{ propertyName: "radioButtons", predicate: BooleanFilterRadioButtonDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
107
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BooleanFilterMenuComponent, isStandalone: true, selector: "kendo-grid-boolean-filter-menu", inputs: { filter: "filter", filterService: "filterService", menuTabbingService: "menuTabbingService" }, host: { properties: { "class.k-filtercell": "this.hostClasses" } }, viewQueries: [{ propertyName: "radioButtons", predicate: BooleanFilterRadioButtonDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: `
109
108
  <ul class="k-radio-list k-reset">
110
- <li *ngFor="let item of items">
111
- <kendo-radiobutton
112
- kendoFilterMenuRadioButton
113
- [columnLabel]="columnLabel"
114
- #input
115
- [size]="ctx.grid?.isActionSheetExpanded ? 'large' : null"
116
- [name]="idPrefix"
117
- [checked]="isSelected(item.value)"
118
- [attr.id]="radioId(item.value)"
119
- (change)="onChange(item.value, input)"
120
- (keydown.shift.tab)="onShiftTab($event)"
121
- ></kendo-radiobutton>
122
- <label class="k-radio-label" [attr.for]="input.focusableId">{{item.text}}</label>
109
+ @for (item of items; track item) {
110
+ <li>
111
+ <kendo-radiobutton
112
+ kendoFilterMenuRadioButton
113
+ [columnLabel]="columnLabel"
114
+ #input
115
+ [size]="ctx.grid?.isActionSheetExpanded ? 'large' : null"
116
+ [name]="idPrefix"
117
+ [checked]="isSelected(item.value)"
118
+ [attr.id]="radioId(item.value)"
119
+ (change)="onChange(item.value, input)"
120
+ (keydown.shift.tab)="onShiftTab($event)"
121
+ ></kendo-radiobutton>
122
+ <label class="k-radio-label" [attr.for]="input.focusableId">{{item.text}}</label>
123
123
  </li>
124
+ }
124
125
  </ul>
125
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: RadioButtonComponent, selector: "kendo-radiobutton", inputs: ["checked"], outputs: ["checkedChange"], exportAs: ["kendoRadioButton"] }, { kind: "directive", type: BooleanFilterRadioButtonDirective, selector: "[kendoFilterMenuRadioButton]", inputs: ["columnLabel"] }] });
126
+ `, isInline: true, dependencies: [{ kind: "component", type: RadioButtonComponent, selector: "kendo-radiobutton", inputs: ["checked"], outputs: ["checkedChange"], exportAs: ["kendoRadioButton"] }, { kind: "directive", type: BooleanFilterRadioButtonDirective, selector: "[kendoFilterMenuRadioButton]", inputs: ["columnLabel"] }] });
126
127
  }
127
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BooleanFilterMenuComponent, decorators: [{
128
129
  type: Component,
@@ -130,24 +131,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
130
131
  selector: 'kendo-grid-boolean-filter-menu',
131
132
  template: `
132
133
  <ul class="k-radio-list k-reset">
133
- <li *ngFor="let item of items">
134
- <kendo-radiobutton
135
- kendoFilterMenuRadioButton
136
- [columnLabel]="columnLabel"
137
- #input
138
- [size]="ctx.grid?.isActionSheetExpanded ? 'large' : null"
139
- [name]="idPrefix"
140
- [checked]="isSelected(item.value)"
141
- [attr.id]="radioId(item.value)"
142
- (change)="onChange(item.value, input)"
143
- (keydown.shift.tab)="onShiftTab($event)"
144
- ></kendo-radiobutton>
145
- <label class="k-radio-label" [attr.for]="input.focusableId">{{item.text}}</label>
134
+ @for (item of items; track item) {
135
+ <li>
136
+ <kendo-radiobutton
137
+ kendoFilterMenuRadioButton
138
+ [columnLabel]="columnLabel"
139
+ #input
140
+ [size]="ctx.grid?.isActionSheetExpanded ? 'large' : null"
141
+ [name]="idPrefix"
142
+ [checked]="isSelected(item.value)"
143
+ [attr.id]="radioId(item.value)"
144
+ (change)="onChange(item.value, input)"
145
+ (keydown.shift.tab)="onShiftTab($event)"
146
+ ></kendo-radiobutton>
147
+ <label class="k-radio-label" [attr.for]="input.focusableId">{{item.text}}</label>
146
148
  </li>
149
+ }
147
150
  </ul>
148
- `,
151
+ `,
149
152
  standalone: true,
150
- imports: [NgFor, RadioButtonComponent, BooleanFilterRadioButtonDirective]
153
+ imports: [RadioButtonComponent, BooleanFilterRadioButtonDirective]
151
154
  }]
152
155
  }], ctorParameters: () => [{ type: i1.ContextService }], propDecorators: { hostClasses: [{
153
156
  type: HostBinding,
@@ -9,7 +9,6 @@ import { DateFilterComponent } from '../date-filter.component';
9
9
  import { setFilter, logicOperators } from '../base-filter-cell.component';
10
10
  import { ContextService } from '../../common/provider.service';
11
11
  import { FilterMenuDropDownListDirective } from './filter-menu-dropdownlist.directive';
12
- import { NgIf } from '@angular/common';
13
12
  import { DateFilterMenuInputComponent } from './date-filter-menu-input.component';
14
13
  import { DropDownListComponent } from '@progress/kendo-angular-dropdowns';
15
14
  import { replaceMessagePlaceholder } from '@progress/kendo-angular-common';
@@ -81,27 +80,27 @@ export class DateFilterMenuComponent extends DateFilterComponent {
81
80
  super.localizationChange();
82
81
  }
83
82
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateFilterMenuComponent, deps: [{ token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Component });
84
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DateFilterMenuComponent, isStandalone: true, selector: "kendo-grid-date-filter-menu", inputs: { filter: "filter", extra: "extra", filterService: "filterService", menuTabbingService: "menuTabbingService" }, host: { properties: { "class.k-filtercell": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: `
83
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DateFilterMenuComponent, isStandalone: true, selector: "kendo-grid-date-filter-menu", inputs: { filter: "filter", extra: "extra", filterService: "filterService", menuTabbingService: "menuTabbingService" }, host: { properties: { "class.k-filtercell": "this.hostClasses" } }, usesInheritance: true, ngImport: i0, template: `
85
84
  <kendo-grid-date-filter-menu-input
86
- [currentFilter]="firstFilter"
87
- [operators]="operators"
88
- [filterService]="filterService"
89
- [column]="column"
90
- [filter]="filter"
91
- [activeView]="activeView"
92
- [bottomView]="bottomView"
93
- [topView]="topView"
94
- [format]="format"
95
- [formatPlaceholder]="formatPlaceholder"
96
- [placeholder]="placeholder"
97
- [min]="min"
98
- [max]="max"
99
- [weekNumber]="weekNumber"
100
- [isFirstDropDown]="true"
101
- [menuTabbingService]="menuTabbingService">
85
+ [currentFilter]="firstFilter"
86
+ [operators]="operators"
87
+ [filterService]="filterService"
88
+ [column]="column"
89
+ [filter]="filter"
90
+ [activeView]="activeView"
91
+ [bottomView]="bottomView"
92
+ [topView]="topView"
93
+ [format]="format"
94
+ [formatPlaceholder]="formatPlaceholder"
95
+ [placeholder]="placeholder"
96
+ [min]="min"
97
+ [max]="max"
98
+ [weekNumber]="weekNumber"
99
+ [isFirstDropDown]="true"
100
+ [menuTabbingService]="menuTabbingService">
102
101
  </kendo-grid-date-filter-menu-input>
103
- <kendo-dropdownlist
104
- *ngIf="extra"
102
+ @if (extra) {
103
+ <kendo-dropdownlist
105
104
  kendoFilterMenuDropDown
106
105
  [adaptiveTitle]="ctx.localization.get('adaptiveFilterOperatorsTitle')"
107
106
  [adaptiveMode]="ctx.grid?.adaptiveMode"
@@ -114,9 +113,10 @@ export class DateFilterMenuComponent extends DateFilterComponent {
114
113
  [value]="filter?.logic"
115
114
  textField="text"
116
115
  valueField="value">
117
- </kendo-dropdownlist>
118
- <kendo-grid-date-filter-menu-input
119
- *ngIf="extra"
116
+ </kendo-dropdownlist>
117
+ }
118
+ @if (extra) {
119
+ <kendo-grid-date-filter-menu-input
120
120
  [operators]="operators"
121
121
  [currentFilter]="secondFilter"
122
122
  [filterService]="filterService"
@@ -132,8 +132,9 @@ export class DateFilterMenuComponent extends DateFilterComponent {
132
132
  [max]="max"
133
133
  [weekNumber]="weekNumber"
134
134
  [menuTabbingService]="menuTabbingService">
135
- </kendo-grid-date-filter-menu-input>
136
- `, isInline: true, dependencies: [{ kind: "component", type: DateFilterMenuInputComponent, selector: "kendo-grid-date-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "menuTabbingService", "format", "formatPlaceholder", "placeholder", "min", "max", "activeView", "bottomView", "topView", "weekNumber", "isFirstDropDown"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
135
+ </kendo-grid-date-filter-menu-input>
136
+ }
137
+ `, isInline: true, dependencies: [{ kind: "component", type: DateFilterMenuInputComponent, selector: "kendo-grid-date-filter-menu-input", inputs: ["operators", "column", "filter", "operator", "currentFilter", "filterService", "menuTabbingService", "format", "formatPlaceholder", "placeholder", "min", "max", "activeView", "bottomView", "topView", "weekNumber", "isFirstDropDown"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }] });
137
138
  }
138
139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DateFilterMenuComponent, decorators: [{
139
140
  type: Component,
@@ -141,25 +142,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
141
142
  selector: 'kendo-grid-date-filter-menu',
142
143
  template: `
143
144
  <kendo-grid-date-filter-menu-input
144
- [currentFilter]="firstFilter"
145
- [operators]="operators"
146
- [filterService]="filterService"
147
- [column]="column"
148
- [filter]="filter"
149
- [activeView]="activeView"
150
- [bottomView]="bottomView"
151
- [topView]="topView"
152
- [format]="format"
153
- [formatPlaceholder]="formatPlaceholder"
154
- [placeholder]="placeholder"
155
- [min]="min"
156
- [max]="max"
157
- [weekNumber]="weekNumber"
158
- [isFirstDropDown]="true"
159
- [menuTabbingService]="menuTabbingService">
145
+ [currentFilter]="firstFilter"
146
+ [operators]="operators"
147
+ [filterService]="filterService"
148
+ [column]="column"
149
+ [filter]="filter"
150
+ [activeView]="activeView"
151
+ [bottomView]="bottomView"
152
+ [topView]="topView"
153
+ [format]="format"
154
+ [formatPlaceholder]="formatPlaceholder"
155
+ [placeholder]="placeholder"
156
+ [min]="min"
157
+ [max]="max"
158
+ [weekNumber]="weekNumber"
159
+ [isFirstDropDown]="true"
160
+ [menuTabbingService]="menuTabbingService">
160
161
  </kendo-grid-date-filter-menu-input>
161
- <kendo-dropdownlist
162
- *ngIf="extra"
162
+ @if (extra) {
163
+ <kendo-dropdownlist
163
164
  kendoFilterMenuDropDown
164
165
  [adaptiveTitle]="ctx.localization.get('adaptiveFilterOperatorsTitle')"
165
166
  [adaptiveMode]="ctx.grid?.adaptiveMode"
@@ -172,9 +173,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
172
173
  [value]="filter?.logic"
173
174
  textField="text"
174
175
  valueField="value">
175
- </kendo-dropdownlist>
176
- <kendo-grid-date-filter-menu-input
177
- *ngIf="extra"
176
+ </kendo-dropdownlist>
177
+ }
178
+ @if (extra) {
179
+ <kendo-grid-date-filter-menu-input
178
180
  [operators]="operators"
179
181
  [currentFilter]="secondFilter"
180
182
  [filterService]="filterService"
@@ -190,10 +192,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
190
192
  [max]="max"
191
193
  [weekNumber]="weekNumber"
192
194
  [menuTabbingService]="menuTabbingService">
193
- </kendo-grid-date-filter-menu-input>
194
- `,
195
+ </kendo-grid-date-filter-menu-input>
196
+ }
197
+ `,
195
198
  standalone: true,
196
- imports: [DateFilterMenuInputComponent, NgIf, DropDownListComponent, FilterMenuDropDownListDirective]
199
+ imports: [DateFilterMenuInputComponent, DropDownListComponent, FilterMenuDropDownListDirective]
197
200
  }]
198
201
  }], ctorParameters: () => [{ type: i1.ContextService }], propDecorators: { hostClasses: [{
199
202
  type: HostBinding,
@@ -11,7 +11,7 @@ import { isPresent, isNullOrEmptyString } from "../../utils";
11
11
  import { cloneFilters } from '../../common/filter-descriptor-differ';
12
12
  import { ContextService } from '../../common/provider.service';
13
13
  import { FilterMenuHostDirective } from './filter-menu-host.directive';
14
- import { NgSwitch, NgSwitchCase, NgIf, NgTemplateOutlet, NgClass } from '@angular/common';
14
+ import { NgTemplateOutlet, NgClass } from '@angular/common';
15
15
  import { FormsModule } from '@angular/forms';
16
16
  import { AdaptiveGridService } from '../../common/adaptiveness.service';
17
17
  import { MultiCheckboxFilterComponent } from '../multicheckbox-filter.component';
@@ -266,55 +266,59 @@ export class FilterMenuContainerComponent {
266
266
  return eq(checkboxFilter, gridFilter);
267
267
  }
268
268
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterMenuContainerComponent, deps: [{ token: i1.FilterService, skipSelf: true }, { token: i1.FilterService }, { token: i2.ContextService }, { token: i0.ChangeDetectorRef }, { token: i3.MenuTabbingService }, { token: i4.AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
269
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FilterMenuContainerComponent, isStandalone: true, selector: "kendo-grid-filter-menu-container", inputs: { column: "column", isLast: "isLast", isExpanded: "isExpanded", menuTabbingService: "menuTabbingService", filter: "filter", actionsClass: "actionsClass" }, outputs: { close: "close" }, providers: [
269
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: FilterMenuContainerComponent, isStandalone: true, selector: "kendo-grid-filter-menu-container", inputs: { column: "column", isLast: "isLast", isExpanded: "isExpanded", menuTabbingService: "menuTabbingService", filter: "filter", actionsClass: "actionsClass" }, outputs: { close: "close" }, providers: [
270
270
  FilterService,
271
271
  MenuTabbingService
272
272
  ], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }], ngImport: i0, template: `
273
273
  <form (submit)="submit()" (reset)="reset()"
274
- class="k-filter-menu"
275
- [ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
276
- <div class="k-filter-menu-container">
277
- <ng-container [ngSwitch]="hasTemplate">
278
- <ng-container *ngSwitchCase="false">
279
- <ng-container *ngIf="!isMultiFilter; else multiFilter"
280
- kendoFilterMenuHost
281
- [filterService]="childService"
282
- [column]="column"
283
- [filter]="childFilter"
284
- [menuTabbingService]="menuTabbingService">
285
- </ng-container>
286
- <ng-template #multiFilter>
287
- <kendo-grid-multicheckbox-filter style="display: contents;" [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
288
- </ng-template>
289
- </ng-container>
290
- <ng-container *ngSwitchCase="true">
291
- <ng-template
292
- *ngIf="column.filterMenuTemplateRef"
293
- [ngTemplateOutlet]="column.filterMenuTemplateRef"
294
- [ngTemplateOutletContext]="templateContext"
295
- >
296
- </ng-template>
297
- </ng-container>
298
- </ng-container>
299
- <div *ngIf="!ctx.grid?.isActionSheetExpanded" [ngClass]="actionsClass">
300
- <button #filterButton kendoButton
301
- themeColor="primary"
302
- type="submit"
303
- [ngClass]="{'k-button-rectangle': !isMultiFilter}"
304
- [disabled]="disabled"
305
- [icon]="getButtonIcon('filter', 'icon')"
306
- [svgIcon]="getButtonIcon('filter', 'svgIcon')"
307
- (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
308
- <button #resetButton kendoButton
309
- type="reset"
310
- [ngClass]="{'k-button-rectangle': !isMultiFilter}"
311
- [icon]="getButtonIcon('reset', 'icon')"
312
- [svgIcon]="getButtonIcon('reset', 'svgIcon')"
313
- (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
314
- </div>
315
- </div>
274
+ class="k-filter-menu"
275
+ [ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
276
+ <div class="k-filter-menu-container">
277
+ @switch (hasTemplate) {
278
+ @case (false) {
279
+ @if (!isMultiFilter) {
280
+ <ng-container
281
+ kendoFilterMenuHost
282
+ [filterService]="childService"
283
+ [column]="column"
284
+ [filter]="childFilter"
285
+ [menuTabbingService]="menuTabbingService">
286
+ </ng-container>
287
+ } @else {
288
+ <kendo-grid-multicheckbox-filter style="display: contents;" [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
289
+ }
290
+ }
291
+ @case (true) {
292
+ @if (column.filterMenuTemplateRef) {
293
+ <ng-template
294
+ [ngTemplateOutlet]="column.filterMenuTemplateRef"
295
+ [ngTemplateOutletContext]="templateContext"
296
+ >
297
+ </ng-template>
298
+ }
299
+ }
300
+ }
301
+ @if (!ctx.grid?.isActionSheetExpanded) {
302
+ <div [ngClass]="actionsClass">
303
+ <button #filterButton kendoButton
304
+ themeColor="primary"
305
+ type="submit"
306
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
307
+ [disabled]="disabled"
308
+ [icon]="getButtonIcon('filter', 'icon')"
309
+ [svgIcon]="getButtonIcon('filter', 'svgIcon')"
310
+ (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
311
+ <button #resetButton kendoButton
312
+ type="reset"
313
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
314
+ [icon]="getButtonIcon('reset', 'icon')"
315
+ [svgIcon]="getButtonIcon('reset', 'svgIcon')"
316
+ (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
317
+ </div>
318
+ }
319
+ </div>
316
320
  </form>
317
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiCheckboxFilterComponent, selector: "kendo-grid-multicheckbox-filter", inputs: ["column"], outputs: ["filterChange"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
321
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiCheckboxFilterComponent, selector: "kendo-grid-multicheckbox-filter", inputs: ["column"], outputs: ["filterChange"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
318
322
  }
319
323
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterMenuContainerComponent, decorators: [{
320
324
  type: Component,
@@ -326,52 +330,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
326
330
  selector: 'kendo-grid-filter-menu-container',
327
331
  template: `
328
332
  <form (submit)="submit()" (reset)="reset()"
329
- class="k-filter-menu"
330
- [ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
331
- <div class="k-filter-menu-container">
332
- <ng-container [ngSwitch]="hasTemplate">
333
- <ng-container *ngSwitchCase="false">
334
- <ng-container *ngIf="!isMultiFilter; else multiFilter"
335
- kendoFilterMenuHost
336
- [filterService]="childService"
337
- [column]="column"
338
- [filter]="childFilter"
339
- [menuTabbingService]="menuTabbingService">
340
- </ng-container>
341
- <ng-template #multiFilter>
342
- <kendo-grid-multicheckbox-filter style="display: contents;" [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
343
- </ng-template>
344
- </ng-container>
345
- <ng-container *ngSwitchCase="true">
346
- <ng-template
347
- *ngIf="column.filterMenuTemplateRef"
348
- [ngTemplateOutlet]="column.filterMenuTemplateRef"
349
- [ngTemplateOutletContext]="templateContext"
350
- >
351
- </ng-template>
352
- </ng-container>
353
- </ng-container>
354
- <div *ngIf="!ctx.grid?.isActionSheetExpanded" [ngClass]="actionsClass">
355
- <button #filterButton kendoButton
356
- themeColor="primary"
357
- type="submit"
358
- [ngClass]="{'k-button-rectangle': !isMultiFilter}"
359
- [disabled]="disabled"
360
- [icon]="getButtonIcon('filter', 'icon')"
361
- [svgIcon]="getButtonIcon('filter', 'svgIcon')"
362
- (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
363
- <button #resetButton kendoButton
364
- type="reset"
365
- [ngClass]="{'k-button-rectangle': !isMultiFilter}"
366
- [icon]="getButtonIcon('reset', 'icon')"
367
- [svgIcon]="getButtonIcon('reset', 'svgIcon')"
368
- (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
369
- </div>
370
- </div>
333
+ class="k-filter-menu"
334
+ [ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
335
+ <div class="k-filter-menu-container">
336
+ @switch (hasTemplate) {
337
+ @case (false) {
338
+ @if (!isMultiFilter) {
339
+ <ng-container
340
+ kendoFilterMenuHost
341
+ [filterService]="childService"
342
+ [column]="column"
343
+ [filter]="childFilter"
344
+ [menuTabbingService]="menuTabbingService">
345
+ </ng-container>
346
+ } @else {
347
+ <kendo-grid-multicheckbox-filter style="display: contents;" [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
348
+ }
349
+ }
350
+ @case (true) {
351
+ @if (column.filterMenuTemplateRef) {
352
+ <ng-template
353
+ [ngTemplateOutlet]="column.filterMenuTemplateRef"
354
+ [ngTemplateOutletContext]="templateContext"
355
+ >
356
+ </ng-template>
357
+ }
358
+ }
359
+ }
360
+ @if (!ctx.grid?.isActionSheetExpanded) {
361
+ <div [ngClass]="actionsClass">
362
+ <button #filterButton kendoButton
363
+ themeColor="primary"
364
+ type="submit"
365
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
366
+ [disabled]="disabled"
367
+ [icon]="getButtonIcon('filter', 'icon')"
368
+ [svgIcon]="getButtonIcon('filter', 'svgIcon')"
369
+ (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
370
+ <button #resetButton kendoButton
371
+ type="reset"
372
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
373
+ [icon]="getButtonIcon('reset', 'icon')"
374
+ [svgIcon]="getButtonIcon('reset', 'svgIcon')"
375
+ (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
376
+ </div>
377
+ }
378
+ </div>
371
379
  </form>
372
- `,
380
+ `,
373
381
  standalone: true,
374
- imports: [FormsModule, NgSwitch, NgSwitchCase, FilterMenuHostDirective, NgIf, NgTemplateOutlet, NgClass, MultiCheckboxFilterComponent, ButtonComponent]
382
+ imports: [FormsModule, FilterMenuHostDirective, NgTemplateOutlet, NgClass, MultiCheckboxFilterComponent, ButtonComponent]
375
383
  }]
376
384
  }], ctorParameters: () => [{ type: i1.FilterService, decorators: [{
377
385
  type: SkipSelf