@progress/kendo-angular-grid 19.0.0-develop.8 → 19.0.0

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 (133) hide show
  1. package/adaptiveness/adaptive-mode.d.ts +12 -0
  2. package/adaptiveness/adaptive-renderer.component.d.ts +89 -0
  3. package/codemods/template-transformer/index.js +94 -0
  4. package/codemods/utils.js +553 -0
  5. package/codemods/v19/grid-kendogridgroupbinding.js +51 -0
  6. package/column-menu/column-chooser.component.d.ts +4 -0
  7. package/column-menu/column-list.component.d.ts +10 -3
  8. package/column-menu/column-menu-item.component.d.ts +48 -3
  9. package/column-menu/column-menu-item.directive.d.ts +5 -2
  10. package/column-menu/column-menu.component.d.ts +4 -2
  11. package/columns/column-base.d.ts +5 -0
  12. package/columns/span-column.component.d.ts +2 -2
  13. package/common/adaptiveness.service.d.ts +50 -0
  14. package/common/single-popup.service.d.ts +3 -1
  15. package/common/toolbar-tool-base.directive.d.ts +26 -0
  16. package/directives.d.ts +13 -5
  17. package/editing/add-command-tool.directive.d.ts +7 -6
  18. package/editing/cancel-command-tool.directive.d.ts +38 -0
  19. package/editing/edit-command-tool.directive.d.ts +38 -0
  20. package/editing/edit.service.d.ts +1 -1
  21. package/editing/remove-command-tool.directive.d.ts +39 -0
  22. package/editing/save-command-tool.directive.d.ts +38 -0
  23. package/editing/toolbar-editing-tool-base.directive.d.ts +29 -0
  24. package/editing-directives/editing-directive-base.d.ts +4 -1
  25. package/editing-directives/external-editing.directive.d.ts +3 -1
  26. package/esm2022/adaptiveness/adaptive-mode.mjs +5 -0
  27. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +1197 -0
  28. package/esm2022/column-menu/column-chooser.component.mjs +13 -11
  29. package/esm2022/column-menu/column-list.component.mjs +51 -8
  30. package/esm2022/column-menu/column-menu-autosize-all.component.mjs +1 -1
  31. package/esm2022/column-menu/column-menu-autosize.component.mjs +1 -1
  32. package/esm2022/column-menu/column-menu-chooser.component.mjs +1 -1
  33. package/esm2022/column-menu/column-menu-container.component.mjs +1 -1
  34. package/esm2022/column-menu/column-menu-filter.component.mjs +1 -1
  35. package/esm2022/column-menu/column-menu-item.component.mjs +123 -12
  36. package/esm2022/column-menu/column-menu-item.directive.mjs +14 -5
  37. package/esm2022/column-menu/column-menu-lock.component.mjs +1 -1
  38. package/esm2022/column-menu/column-menu-position.component.mjs +1 -1
  39. package/esm2022/column-menu/column-menu-sort.component.mjs +1 -1
  40. package/esm2022/column-menu/column-menu-stick.component.mjs +1 -1
  41. package/esm2022/column-menu/column-menu.component.mjs +68 -44
  42. package/esm2022/column-resizing/column-handle.directive.mjs +2 -2
  43. package/esm2022/columns/column-base.mjs +9 -0
  44. package/esm2022/columns/columns-container.mjs +1 -1
  45. package/esm2022/columns/span-column.component.mjs +9 -9
  46. package/esm2022/common/adaptiveness.service.mjs +72 -0
  47. package/esm2022/common/single-popup.service.mjs +9 -3
  48. package/esm2022/common/toolbar-tool-base.directive.mjs +81 -0
  49. package/esm2022/directives.mjs +21 -4
  50. package/esm2022/editing/add-command-tool.directive.mjs +12 -15
  51. package/esm2022/editing/cancel-command-tool.directive.mjs +64 -0
  52. package/esm2022/editing/edit-command-tool.directive.mjs +59 -0
  53. package/esm2022/editing/remove-command-tool.directive.mjs +60 -0
  54. package/esm2022/editing/remove-command.directive.mjs +1 -0
  55. package/esm2022/editing/save-command-tool.directive.mjs +64 -0
  56. package/esm2022/editing/toolbar-editing-tool-base.directive.mjs +94 -0
  57. package/esm2022/editing-directives/editing-directive-base.mjs +5 -2
  58. package/esm2022/editing-directives/external-editing.directive.mjs +28 -14
  59. package/esm2022/excel/excel-command-tool.directive.mjs +12 -17
  60. package/esm2022/filtering/filter-input.directive.mjs +14 -2
  61. package/esm2022/filtering/menu/boolean-filter-menu.component.mjs +4 -2
  62. package/esm2022/filtering/menu/date-filter-menu-input.component.mjs +4 -0
  63. package/esm2022/filtering/menu/date-filter-menu.component.mjs +6 -0
  64. package/esm2022/filtering/menu/filter-menu-container.component.mjs +24 -10
  65. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +26 -4
  66. package/esm2022/filtering/menu/filter-menu.component.mjs +44 -29
  67. package/esm2022/filtering/menu/numeric-filter-menu-input.component.mjs +2 -0
  68. package/esm2022/filtering/menu/numeric-filter-menu.component.mjs +6 -0
  69. package/esm2022/filtering/menu/string-filter-menu-input.component.mjs +2 -0
  70. package/esm2022/filtering/menu/string-filter-menu.component.mjs +10 -1
  71. package/esm2022/grid.component.mjs +376 -82
  72. package/esm2022/grid.module.mjs +115 -101
  73. package/esm2022/index.mjs +11 -1
  74. package/esm2022/localization/messages.mjs +128 -2
  75. package/esm2022/navigation/toolbar-tool-name.mjs +17 -0
  76. package/esm2022/package-metadata.mjs +2 -2
  77. package/esm2022/pdf/pdf-command-tool.directive.mjs +12 -15
  78. package/esm2022/rendering/cell.component.mjs +3 -3
  79. package/esm2022/rendering/header/header.component.mjs +1 -1
  80. package/esm2022/rendering/list.component.mjs +1 -1
  81. package/esm2022/rendering/table-body.component.mjs +1 -1
  82. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +210 -0
  83. package/esm2022/rendering/toolbar/tools/filter-command-tool.directive.mjs +69 -34
  84. package/esm2022/rendering/toolbar/tools/filter-tool-wrapper.component.mjs +29 -8
  85. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +78 -8
  86. package/esm2022/rendering/toolbar/tools/group-command-tool.directive.mjs +206 -0
  87. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +425 -0
  88. package/esm2022/rendering/toolbar/tools/sort-command-tool.directive.mjs +54 -20
  89. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +24 -8
  90. package/esm2022/selection/selection.service.mjs +11 -0
  91. package/esm2022/state-management/grid-state.models.mjs +26 -0
  92. package/esm2022/state-management/redo-command-tool.mjs +66 -0
  93. package/esm2022/state-management/undo-command-tool.mjs +66 -0
  94. package/esm2022/state-management/undo-redo.directive.mjs +178 -0
  95. package/esm2022/state-management/undo-redo.service.mjs +22 -0
  96. package/esm2022/state-management/undo-redo.stack.mjs +232 -0
  97. package/esm2022/utils.mjs +13 -13
  98. package/excel/excel-command-tool.directive.d.ts +5 -5
  99. package/fesm2022/progress-kendo-angular-grid.mjs +7384 -3773
  100. package/filtering/filter-input.directive.d.ts +1 -0
  101. package/filtering/menu/date-filter-menu-input.component.d.ts +1 -1
  102. package/filtering/menu/filter-menu-container.component.d.ts +15 -4
  103. package/filtering/menu/filter-menu-input-wrapper.component.d.ts +8 -3
  104. package/filtering/menu/filter-menu.component.d.ts +6 -3
  105. package/filtering/menu/numeric-filter-menu-input.component.d.ts +1 -1
  106. package/filtering/menu/string-filter-menu-input.component.d.ts +1 -1
  107. package/filtering/menu/string-filter-menu.component.d.ts +1 -0
  108. package/grid.component.d.ts +86 -33
  109. package/grid.module.d.ts +108 -100
  110. package/index.d.ts +10 -1
  111. package/localization/messages.d.ts +86 -2
  112. package/navigation/toolbar-tool-name.d.ts +17 -0
  113. package/package.json +36 -20
  114. package/pdf/pdf-command-tool.directive.d.ts +6 -5
  115. package/rendering/cell.component.d.ts +1 -1
  116. package/{column-menu → rendering/toolbar/tools}/column-chooser-tool.directive.d.ts +18 -6
  117. package/rendering/toolbar/tools/filter-command-tool.directive.d.ts +10 -1
  118. package/rendering/toolbar/tools/filter-tool-wrapper.component.d.ts +6 -5
  119. package/rendering/toolbar/tools/filter-toolbar-tool.component.d.ts +11 -2
  120. package/rendering/toolbar/tools/group-command-tool.directive.d.ts +51 -0
  121. package/rendering/toolbar/tools/group-toolbar-tool.component.d.ts +61 -0
  122. package/rendering/toolbar/tools/sort-command-tool.directive.d.ts +10 -1
  123. package/rendering/toolbar/tools/sort-toolbar-tool.component.d.ts +5 -1
  124. package/schematics/ngAdd/index.js +4 -4
  125. package/selection/selection.service.d.ts +1 -0
  126. package/state-management/grid-state.models.d.ts +58 -0
  127. package/state-management/redo-command-tool.d.ts +38 -0
  128. package/state-management/undo-command-tool.d.ts +38 -0
  129. package/state-management/undo-redo.directive.d.ts +51 -0
  130. package/state-management/undo-redo.service.d.ts +19 -0
  131. package/state-management/undo-redo.stack.d.ts +104 -0
  132. package/utils.d.ts +11 -5
  133. package/esm2022/column-menu/column-chooser-tool.directive.mjs +0 -172
@@ -70,6 +70,10 @@ export class ColumnChooserComponent {
70
70
  ngOnDestroy() {
71
71
  this.close();
72
72
  }
73
+ /**
74
+ * @hidden
75
+ */
76
+ messageFor = token => this.ctx.localization.get(token);
73
77
  /**
74
78
  * @hidden
75
79
  */
@@ -154,28 +158,27 @@ export class ColumnChooserComponent {
154
158
  type="button"
155
159
  (click)="toggle(anchor, template)"
156
160
  fillMode="flat"
157
- [attr.title]="ctx.localization.get('columns')"
161
+ [attr.title]="messageFor('columns')"
158
162
  icon="columns"
159
163
  [svgIcon]="columnsIcon"
160
164
  [attr.aria-haspopup]="'dialog'"
161
165
  [attr.aria-expanded]="!!(popupRef)"
162
166
  [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
163
167
  <ng-template #template>
164
- <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
165
168
  <kendo-grid-columnlist
166
169
  #columnList
167
170
  [columns]="columns"
168
- [ariaLabel]="ctx.localization.get('columns')"
171
+ [ariaLabel]="messageFor('columns')"
169
172
  [isLast]="true"
170
- [applyText]="ctx.localization.get('columnsApply')"
171
- [resetText]="ctx.localization.get('columnsReset')"
173
+ [applyText]="messageFor('columnsApply')"
174
+ [resetText]="messageFor('columnsReset')"
172
175
  [autoSync]="autoSync"
173
176
  [allowHideAll]="allowHideAll"
174
177
  (apply)="onApply($event)"
175
178
  (columnChange)="onChange($event)">
176
179
  </kendo-grid-columnlist>
177
180
  </ng-template>
178
- `, isInline: true, dependencies: [{ 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"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
181
+ `, isInline: true, dependencies: [{ 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"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
179
182
  }
180
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
181
184
  type: Component,
@@ -187,21 +190,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
187
190
  type="button"
188
191
  (click)="toggle(anchor, template)"
189
192
  fillMode="flat"
190
- [attr.title]="ctx.localization.get('columns')"
193
+ [attr.title]="messageFor('columns')"
191
194
  icon="columns"
192
195
  [svgIcon]="columnsIcon"
193
196
  [attr.aria-haspopup]="'dialog'"
194
197
  [attr.aria-expanded]="!!(popupRef)"
195
198
  [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
196
199
  <ng-template #template>
197
- <span class='k-column-chooser-title'>{{ ctx.localization.get('columns') }}</span>
198
200
  <kendo-grid-columnlist
199
201
  #columnList
200
202
  [columns]="columns"
201
- [ariaLabel]="ctx.localization.get('columns')"
203
+ [ariaLabel]="messageFor('columns')"
202
204
  [isLast]="true"
203
- [applyText]="ctx.localization.get('columnsApply')"
204
- [resetText]="ctx.localization.get('columnsReset')"
205
+ [applyText]="messageFor('columnsApply')"
206
+ [resetText]="messageFor('columnsReset')"
205
207
  [autoSync]="autoSync"
206
208
  [allowHideAll]="allowHideAll"
207
209
  (apply)="onApply($event)"
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, HostBinding, Input, ElementRef, NgZone, Renderer2, Output, EventEmitter, ViewChild, ViewChildren, QueryList } from '@angular/core';
5
+ import { Component, HostBinding, Input, ElementRef, NgZone, Renderer2, Output, EventEmitter, ViewChild, ViewChildren, QueryList, Optional } from '@angular/core';
6
6
  import { ColumnMenuService } from './column-menu.service';
7
7
  import { ColumnListKeyboardNavigation } from './column-list-kb-nav.service';
8
8
  import { ColumnMenuChooserItemCheckedDirective } from './column-chooser-item-checked.directive';
@@ -13,8 +13,12 @@ import { CheckBoxComponent } from '@progress/kendo-angular-inputs';
13
13
  import { take } from 'rxjs/operators';
14
14
  import { arrowRotateCcwIcon, checkIcon } from '@progress/kendo-svg-icons';
15
15
  import { ButtonDirective } from '@progress/kendo-angular-buttons';
16
+ import { ContextService } from '../common/provider.service';
17
+ import { AdaptiveGridService } from '../common/adaptiveness.service';
16
18
  import * as i0 from "@angular/core";
17
19
  import * as i1 from "./column-list-kb-nav.service";
20
+ import * as i2 from "../common/adaptiveness.service";
21
+ import * as i3 from "../common/provider.service";
18
22
  /**
19
23
  * @hidden
20
24
  */
@@ -23,9 +27,17 @@ export class ColumnListComponent {
23
27
  ngZone;
24
28
  renderer;
25
29
  listNavigationService;
30
+ adaptiveGridService;
31
+ ctx;
26
32
  checkIcon = checkIcon;
27
33
  arrowRotateCcwIcon = arrowRotateCcwIcon;
28
34
  className = true;
35
+ get listSizeMd() {
36
+ return !(this.ctx?.grid?.isActionSheetExpanded);
37
+ }
38
+ get listSizeLg() {
39
+ return this.ctx?.grid?.isActionSheetExpanded;
40
+ }
29
41
  reset = new EventEmitter();
30
42
  apply = new EventEmitter();
31
43
  columnChange = new EventEmitter();
@@ -37,6 +49,7 @@ export class ColumnListComponent {
37
49
  get columns() {
38
50
  return this._columns;
39
51
  }
52
+ showActions = true;
40
53
  autoSync = true;
41
54
  ariaLabel;
42
55
  allowHideAll = false;
@@ -58,11 +71,13 @@ export class ColumnListComponent {
58
71
  _columns;
59
72
  allColumns;
60
73
  domSubscriptions = new Subscription();
61
- constructor(element, ngZone, renderer, listNavigationService) {
74
+ constructor(element, ngZone, renderer, listNavigationService, adaptiveGridService, ctx) {
62
75
  this.element = element;
63
76
  this.ngZone = ngZone;
64
77
  this.renderer = renderer;
65
78
  this.listNavigationService = listNavigationService;
79
+ this.adaptiveGridService = adaptiveGridService;
80
+ this.ctx = ctx;
66
81
  }
67
82
  ngOnInit() {
68
83
  if (!this.element) {
@@ -70,6 +85,7 @@ export class ColumnListComponent {
70
85
  }
71
86
  this.ngZone.runOutsideAngular(() => {
72
87
  this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'click', (e) => {
88
+ e.stopImmediatePropagation();
73
89
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
74
90
  this.handleCheckBoxClick(e);
75
91
  });
@@ -80,9 +96,16 @@ export class ColumnListComponent {
80
96
  ngAfterViewInit() {
81
97
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
82
98
  this.listNavigationService.items = this.options.toArray();
83
- this.listNavigationService.toggle(0, true);
99
+ if (!this.ctx) {
100
+ this.listNavigationService.toggle(0, true);
101
+ }
84
102
  this.updateDisabled();
85
103
  });
104
+ if (this.ctx?.grid?.isActionSheetExpanded) {
105
+ this.domSubscriptions.add(this.adaptiveGridService.animationEnd.subscribe(() => {
106
+ this.listNavigationService.toggle(0, true);
107
+ }));
108
+ }
86
109
  }
87
110
  ngOnChanges(changes) {
88
111
  if (!this.service) {
@@ -250,8 +273,8 @@ export class ColumnListComponent {
250
273
  }
251
274
  }
252
275
  };
253
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ColumnListKeyboardNavigation }], target: i0.ɵɵFactoryTarget.Component });
254
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnListComponent, isStandalone: true, selector: "kendo-grid-columnlist", inputs: { columns: "columns", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }, { propertyName: "checkboxes", predicate: CheckBoxComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
276
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.ColumnListKeyboardNavigation }, { token: i2.AdaptiveGridService, optional: true }, { token: i3.ContextService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
277
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnListComponent, isStandalone: true, selector: "kendo-grid-columnlist", inputs: { columns: "columns", showActions: "showActions", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className", "class.k-column-list-md": "this.listSizeMd", "class.k-column-list-lg": "this.listSizeLg" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }, { propertyName: "checkboxes", predicate: CheckBoxComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
255
278
  <div
256
279
  class="k-column-list"
257
280
  role="listbox"
@@ -271,11 +294,13 @@ export class ColumnListComponent {
271
294
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
272
295
  </label>
273
296
  </div>
274
- <div [ngClass]="actionsClass" *ngIf="!autoSync">
297
+ <div [ngClass]="actionsClass" *ngIf="!autoSync && showActions">
275
298
  <button
276
299
  #applyButton
277
300
  kendoButton
278
301
  type="button"
302
+ icon="check"
303
+ [svgIcon]="checkIcon"
279
304
  themeColor="primary"
280
305
  (click)="applyChanges()"
281
306
  (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); applyChanges();"
@@ -284,6 +309,8 @@ export class ColumnListComponent {
284
309
  #resetButton
285
310
  kendoButton
286
311
  type="button"
312
+ icon="reset"
313
+ [svgIcon]="arrowRotateCcwIcon"
287
314
  (keydown.tab)="onTab($event)"
288
315
  (click)="cancelChanges()"
289
316
  (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); cancelChanges();"
@@ -316,11 +343,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
316
343
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
317
344
  </label>
318
345
  </div>
319
- <div [ngClass]="actionsClass" *ngIf="!autoSync">
346
+ <div [ngClass]="actionsClass" *ngIf="!autoSync && showActions">
320
347
  <button
321
348
  #applyButton
322
349
  kendoButton
323
350
  type="button"
351
+ icon="check"
352
+ [svgIcon]="checkIcon"
324
353
  themeColor="primary"
325
354
  (click)="applyChanges()"
326
355
  (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); applyChanges();"
@@ -329,6 +358,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
329
358
  #resetButton
330
359
  kendoButton
331
360
  type="button"
361
+ icon="reset"
362
+ [svgIcon]="arrowRotateCcwIcon"
332
363
  (keydown.tab)="onTab($event)"
333
364
  (click)="cancelChanges()"
334
365
  (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); cancelChanges();"
@@ -338,9 +369,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
338
369
  standalone: true,
339
370
  imports: [NgFor, ColumnMenuChooserItemCheckedDirective, NgIf, NgClass, CheckBoxComponent, ButtonDirective]
340
371
  }]
341
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ColumnListKeyboardNavigation }]; }, propDecorators: { className: [{
372
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.ColumnListKeyboardNavigation }, { type: i2.AdaptiveGridService, decorators: [{
373
+ type: Optional
374
+ }] }, { type: i3.ContextService, decorators: [{
375
+ type: Optional
376
+ }] }]; }, propDecorators: { className: [{
342
377
  type: HostBinding,
343
378
  args: ["class.k-column-list-wrapper"]
379
+ }], listSizeMd: [{
380
+ type: HostBinding,
381
+ args: ['class.k-column-list-md']
382
+ }], listSizeLg: [{
383
+ type: HostBinding,
384
+ args: ['class.k-column-list-lg']
344
385
  }], reset: [{
345
386
  type: Output
346
387
  }], apply: [{
@@ -349,6 +390,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
349
390
  type: Output
350
391
  }], columns: [{
351
392
  type: Input
393
+ }], showActions: [{
394
+ type: Input
352
395
  }], autoSync: [{
353
396
  type: Input
354
397
  }], ariaLabel: [{
@@ -58,7 +58,7 @@ export class ColumnMenuAutoSizeAllColumnsComponent extends ColumnMenuItemBase {
58
58
  [svgIcon]="displayInlineFlexIcon"
59
59
  (itemClick)="autoSizeAllColumns()"
60
60
  ></kendo-grid-columnmenu-item>
61
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
61
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
62
62
  }
63
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuAutoSizeAllColumnsComponent, decorators: [{
64
64
  type: Component,
@@ -64,7 +64,7 @@ export class ColumnMenuAutoSizeColumnComponent extends ColumnMenuItemBase {
64
64
  [svgIcon]="maxWidthIcon"
65
65
  (itemClick)="autoSizeColumn()"
66
66
  ></kendo-grid-columnmenu-item>
67
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
67
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
68
68
  }
69
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuAutoSizeColumnComponent, decorators: [{
70
70
  type: Component,
@@ -118,7 +118,7 @@ export class ColumnMenuChooserComponent extends ColumnMenuItemBase {
118
118
  </kendo-grid-columnlist>
119
119
  </ng-template>
120
120
  </kendo-grid-columnmenu-item>
121
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
121
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
124
124
  type: Component,
@@ -33,7 +33,7 @@ export class ColumnMenuContainerComponent {
33
33
  else {
34
34
  return;
35
35
  }
36
- this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable.focus());
36
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable?.focus());
37
37
  }
38
38
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuContainerComponent, deps: [{ token: i1.ColumnMenuService }, { token: NgZone }], target: i0.ɵɵFactoryTarget.Component });
39
39
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuContainerComponent, isStandalone: true, selector: "kendo-grid-columnmenu-container", queries: [{ propertyName: "columnMenuItems", predicate: ColumnMenuItemDirective, descendants: true }], ngImport: i0, template: `
@@ -97,7 +97,7 @@ export class ColumnMenuFilterComponent extends ColumnMenuItemBase {
97
97
  </kendo-grid-filter-menu-container>
98
98
  </ng-template>
99
99
  </kendo-grid-columnmenu-item>
100
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }] });
100
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }] });
101
101
  }
102
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuFilterComponent, decorators: [{
103
103
  type: Component,
@@ -2,16 +2,24 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, Input, Output, EventEmitter, ContentChild, NgZone } from '@angular/core';
5
+ import { Component, Input, Output, EventEmitter, ContentChild, NgZone, ElementRef } from '@angular/core';
6
6
  import { trigger, transition, style, animate, state } from '@angular/animations';
7
7
  import { ColumnMenuItemContentTemplateDirective } from './column-menu-item-content-template.directive';
8
- import { chevronDownIcon, chevronUpIcon } from '@progress/kendo-svg-icons';
8
+ import { chevronDownIcon, chevronRightIcon, chevronUpIcon, filterIcon, sortAscSmallIcon, sortDescSmallIcon } from '@progress/kendo-svg-icons';
9
9
  import { guid } from '@progress/kendo-angular-common';
10
10
  import { ColumnMenuService } from './column-menu.service';
11
11
  import { NgIf, NgTemplateOutlet } from '@angular/common';
12
12
  import { IconWrapperComponent } from '@progress/kendo-angular-icons';
13
13
  import { take } from 'rxjs/operators';
14
+ import { ContextService } from '../common/provider.service';
15
+ import { filtersByField } from '../filtering/base-filter-cell.component';
16
+ import { AdaptiveGridService } from '../common/adaptiveness.service';
17
+ import { ColumnComponent } from '../columns/column.component';
18
+ import { normalize } from '../columns/sort-settings';
19
+ import { isPresent } from '../utils';
14
20
  import * as i0 from "@angular/core";
21
+ import * as i1 from "../common/provider.service";
22
+ import * as i2 from "../common/adaptiveness.service";
15
23
  /**
16
24
  * Represents an item that can be placed inside a
17
25
  * [ColumnMenuTemplate]({% slug api_grid_columnmenutemplatedirective %}) directive.
@@ -27,6 +35,17 @@ import * as i0 from "@angular/core";
27
35
  */
28
36
  export class ColumnMenuItemComponent {
29
37
  ngZone;
38
+ ctx;
39
+ adaptiveGridService;
40
+ element;
41
+ /**
42
+ * @hidden
43
+ */
44
+ sortAscSmallIcon = sortAscSmallIcon;
45
+ /**
46
+ * @hidden
47
+ */
48
+ sortDescSmallIcon = sortDescSmallIcon;
30
49
  /**
31
50
  * Fires when the item is clicked.
32
51
  */
@@ -48,6 +67,10 @@ export class ColumnMenuItemComponent {
48
67
  * Defines the [SVG icon](slug:svgicon_list) to be rendered within the item.
49
68
  */
50
69
  svgIcon;
70
+ /**
71
+ * @hidden
72
+ */
73
+ indicatorIcon;
51
74
  /**
52
75
  * Specifies the item text.
53
76
  */
@@ -64,24 +87,49 @@ export class ColumnMenuItemComponent {
64
87
  * Specifies if the item is expanded.
65
88
  */
66
89
  expanded;
90
+ /**
91
+ * @hidden
92
+ */
93
+ focused;
67
94
  /**
68
95
  * Represents the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) class.
69
96
  * Required to include the item in the column menu keyboard navigation sequence.
70
97
  */
71
98
  service;
99
+ /**
100
+ * @hidden
101
+ */
102
+ column;
72
103
  contentTemplate;
73
104
  contentState = 'collapsed';
74
105
  contentId;
75
106
  chevronUpIcon = chevronUpIcon;
76
107
  chevronDownIcon = chevronDownIcon;
108
+ chevronRightIcon = chevronRightIcon;
109
+ filterIcon = filterIcon;
110
+ /**
111
+ * @hidden
112
+ */
113
+ get hasFilters() {
114
+ return filtersByField(this.ctx.grid.filter, this.column.field).length > 0;
115
+ }
77
116
  get expandedIcon() {
117
+ if (this.ctx.grid.isActionSheetExpanded) {
118
+ return 'arrow-chevron-right';
119
+ }
78
120
  return this.expanded ? 'arrow-chevron-up' : 'arrow-chevron-down';
79
121
  }
80
122
  get expandedSvgIcon() {
123
+ if (this.ctx.grid.isActionSheetExpanded) {
124
+ return this.chevronRightIcon;
125
+ }
81
126
  return this.expanded ? this.chevronUpIcon : this.chevronDownIcon;
82
127
  }
83
- constructor(ngZone) {
128
+ constructor(ngZone, ctx, adaptiveGridService, element) {
84
129
  this.ngZone = ngZone;
130
+ this.ctx = ctx;
131
+ this.adaptiveGridService = adaptiveGridService;
132
+ this.element = element;
85
133
  }
86
134
  ngAfterViewInit() {
87
135
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
@@ -93,14 +141,41 @@ export class ColumnMenuItemComponent {
93
141
  this.updateContentState();
94
142
  }
95
143
  }
144
+ /**
145
+ * @hidden
146
+ */
147
+ sortDescriptor(field) {
148
+ return this.ctx.grid.sort.find(item => item.field === field) || { field };
149
+ }
150
+ /**
151
+ * @hidden
152
+ */
153
+ showSortNumbering(column) {
154
+ const { showIndexes } = normalize(this.ctx.grid.sortable);
155
+ return showIndexes
156
+ && this.ctx.grid.sort
157
+ && this.ctx.grid.sort.filter(({ dir }) => isPresent(dir)).length > 1
158
+ && this.sortOrder(column.field) > 0;
159
+ }
160
+ /**
161
+ * @hidden
162
+ */
163
+ sortOrder(field) {
164
+ return this.ctx.grid.sort
165
+ .filter(({ dir }) => isPresent(dir))
166
+ .findIndex(x => x.field === field)
167
+ + 1;
168
+ }
96
169
  /**
97
170
  * @hidden
98
171
  */
99
172
  onClick(e) {
100
173
  this.itemClick.emit(e);
101
174
  if (this.contentTemplate) {
102
- this.expanded = !this.expanded;
103
- this.updateContentState();
175
+ if (!this.ctx.grid.isActionSheetExpanded) {
176
+ this.expanded = !this.expanded;
177
+ this.updateContentState();
178
+ }
104
179
  if (this.expanded) {
105
180
  this.expand.emit();
106
181
  }
@@ -112,8 +187,8 @@ export class ColumnMenuItemComponent {
112
187
  updateContentState() {
113
188
  this.contentState = this.expanded ? 'expanded' : 'collapsed';
114
189
  }
115
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuItemComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
116
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuItemComponent, isStandalone: true, selector: "kendo-grid-columnmenu-item", inputs: { icon: "icon", svgIcon: "svgIcon", text: "text", selected: "selected", disabled: "disabled", expanded: "expanded", service: "service" }, outputs: { itemClick: "itemClick", expand: "expand", collapse: "collapse" }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ColumnMenuItemContentTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
190
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuItemComponent, deps: [{ token: i0.NgZone }, { token: i1.ContextService }, { token: i2.AdaptiveGridService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuItemComponent, isStandalone: true, selector: "kendo-grid-columnmenu-item", inputs: { icon: "icon", svgIcon: "svgIcon", indicatorIcon: "indicatorIcon", text: "text", selected: "selected", disabled: "disabled", expanded: "expanded", focused: "focused", service: "service", column: "column" }, outputs: { itemClick: "itemClick", expand: "expand", collapse: "collapse" }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ColumnMenuItemContentTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
117
192
  <div *ngIf="contentTemplate; else content" class="k-expander">
118
193
  <ng-container [ngTemplateOutlet]="content"></ng-container>
119
194
  </div>
@@ -125,6 +200,7 @@ export class ColumnMenuItemComponent {
125
200
  (keydown.enter)="onClick($event)"
126
201
  [class.k-selected]="selected"
127
202
  [class.k-disabled]="disabled"
203
+ [class.k-focus]="focused"
128
204
  role="button"
129
205
  [attr.aria-expanded]="expanded"
130
206
  [attr.aria-controls]="expanded ? contentId : undefined">
@@ -133,8 +209,22 @@ export class ColumnMenuItemComponent {
133
209
  [name]="icon"
134
210
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
135
211
  {{ text }}
136
- <span *ngIf="contentTemplate" class="k-spacer"></span>
137
- <span *ngIf="contentTemplate" class="k-expander-indicator">
212
+ <span *ngIf="(ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'sortToolbarTool' && sortDescriptor(column.field).dir)"
213
+ class="k-columnmenu-indicators">
214
+ <kendo-icon-wrapper
215
+ [name]="sortDescriptor(column.field).dir === 'asc' ? 'sort-asc-small' : 'sort-desc-small'"
216
+ [svgIcon]="sortDescriptor(column.field).dir === 'asc' ? sortAscSmallIcon : sortDescSmallIcon">
217
+ </kendo-icon-wrapper>
218
+ <span *ngIf="showSortNumbering(column)" class="k-sort-index">{{sortOrder(column.field)}}</span>
219
+ </span>
220
+ <kendo-icon-wrapper
221
+ *ngIf="(ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'filterToolbarTool' && hasFilters) || indicatorIcon"
222
+ class="k-columnmenu-indicators"
223
+ name="filter"
224
+ [svgIcon]="filterIcon">
225
+ </kendo-icon-wrapper>
226
+ <span *ngIf="contentTemplate && adaptiveGridService.viewType !== 'sortToolbarTool'" class="k-spacer"></span>
227
+ <span *ngIf="contentTemplate && adaptiveGridService.viewType !== 'sortToolbarTool'" class="k-expander-indicator">
138
228
  <kendo-icon-wrapper
139
229
  [name]="expandedIcon"
140
230
  [svgIcon]="expandedSvgIcon">
@@ -209,6 +299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
209
299
  (keydown.enter)="onClick($event)"
210
300
  [class.k-selected]="selected"
211
301
  [class.k-disabled]="disabled"
302
+ [class.k-focus]="focused"
212
303
  role="button"
213
304
  [attr.aria-expanded]="expanded"
214
305
  [attr.aria-controls]="expanded ? contentId : undefined">
@@ -217,8 +308,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
217
308
  [name]="icon"
218
309
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
219
310
  {{ text }}
220
- <span *ngIf="contentTemplate" class="k-spacer"></span>
221
- <span *ngIf="contentTemplate" class="k-expander-indicator">
311
+ <span *ngIf="(ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'sortToolbarTool' && sortDescriptor(column.field).dir)"
312
+ class="k-columnmenu-indicators">
313
+ <kendo-icon-wrapper
314
+ [name]="sortDescriptor(column.field).dir === 'asc' ? 'sort-asc-small' : 'sort-desc-small'"
315
+ [svgIcon]="sortDescriptor(column.field).dir === 'asc' ? sortAscSmallIcon : sortDescSmallIcon">
316
+ </kendo-icon-wrapper>
317
+ <span *ngIf="showSortNumbering(column)" class="k-sort-index">{{sortOrder(column.field)}}</span>
318
+ </span>
319
+ <kendo-icon-wrapper
320
+ *ngIf="(ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'filterToolbarTool' && hasFilters) || indicatorIcon"
321
+ class="k-columnmenu-indicators"
322
+ name="filter"
323
+ [svgIcon]="filterIcon">
324
+ </kendo-icon-wrapper>
325
+ <span *ngIf="contentTemplate && adaptiveGridService.viewType !== 'sortToolbarTool'" class="k-spacer"></span>
326
+ <span *ngIf="contentTemplate && adaptiveGridService.viewType !== 'sortToolbarTool'" class="k-expander-indicator">
222
327
  <kendo-icon-wrapper
223
328
  [name]="expandedIcon"
224
329
  [svgIcon]="expandedSvgIcon">
@@ -234,7 +339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
234
339
  standalone: true,
235
340
  imports: [IconWrapperComponent, NgIf, NgTemplateOutlet]
236
341
  }]
237
- }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { itemClick: [{
342
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.ContextService }, { type: i2.AdaptiveGridService }, { type: i0.ElementRef }]; }, propDecorators: { itemClick: [{
238
343
  type: Output
239
344
  }], expand: [{
240
345
  type: Output
@@ -244,6 +349,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
244
349
  type: Input
245
350
  }], svgIcon: [{
246
351
  type: Input
352
+ }], indicatorIcon: [{
353
+ type: Input
247
354
  }], text: [{
248
355
  type: Input
249
356
  }], selected: [{
@@ -252,8 +359,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
252
359
  type: Input
253
360
  }], expanded: [{
254
361
  type: Input
362
+ }], focused: [{
363
+ type: Input
255
364
  }], service: [{
256
365
  type: Input
366
+ }], column: [{
367
+ type: Input
257
368
  }], contentTemplate: [{
258
369
  type: ContentChild,
259
370
  args: [ColumnMenuItemContentTemplateDirective]
@@ -2,17 +2,21 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Directive, ElementRef, Input, NgZone, Renderer2 } from '@angular/core';
5
+ import { ChangeDetectorRef, Directive, ElementRef, Input, NgZone, Renderer2 } from '@angular/core';
6
6
  import { Subscription } from 'rxjs';
7
7
  import { Keys } from '@progress/kendo-angular-common';
8
8
  import { ColumnMenuPositionComponent } from './column-menu-position.component';
9
9
  import { ColumnMenuChooserComponent } from './column-menu-chooser.component';
10
10
  import { ColumnMenuFilterComponent } from './column-menu-filter.component';
11
+ import { ContextService } from '../common/provider.service';
11
12
  import * as i0 from "@angular/core";
13
+ import * as i1 from "../common/provider.service";
12
14
  export class ColumnMenuItemDirective {
13
15
  hostElement;
14
16
  renderer;
15
17
  ngZone;
18
+ cdr;
19
+ ctx;
16
20
  /**
17
21
  * The reference to the Grid column menu item. Required to include the item in the built-in keyboard navigation.
18
22
  */
@@ -55,6 +59,9 @@ export class ColumnMenuItemDirective {
55
59
  });
56
60
  if (this.isExpandableItem()) {
57
61
  this.menuItemComponent.isLast = true;
62
+ if (this.ctx.grid.isActionSheetExpanded) {
63
+ this.cdr.detectChanges();
64
+ }
58
65
  }
59
66
  }
60
67
  this._isLast = value;
@@ -69,10 +76,12 @@ export class ColumnMenuItemDirective {
69
76
  _isLast = false;
70
77
  columnMenuItems;
71
78
  subs = new Subscription();
72
- constructor(hostElement, renderer, ngZone) {
79
+ constructor(hostElement, renderer, ngZone, cdr, ctx) {
73
80
  this.hostElement = hostElement;
74
81
  this.renderer = renderer;
75
82
  this.ngZone = ngZone;
83
+ this.cdr = cdr;
84
+ this.ctx = ctx;
76
85
  }
77
86
  ngAfterViewInit() {
78
87
  this.columnMenuItems = this.hostElement.nativeElement.querySelectorAll('.k-columnmenu-item');
@@ -80,7 +89,7 @@ export class ColumnMenuItemDirective {
80
89
  if (this.menuItemComponent instanceof ColumnMenuFilterComponent) {
81
90
  this.menuItemComponent.service.menuTabbingService.isColumnMenu = true;
82
91
  }
83
- this.menuItemComponent.service?.columnMenuContainer.templateMenuItems.push(this);
92
+ this.menuItemComponent.service?.columnMenuContainer?.templateMenuItems.push(this);
84
93
  }
85
94
  ngOnDestroy() {
86
95
  if (this.subs) {
@@ -112,7 +121,7 @@ export class ColumnMenuItemDirective {
112
121
  this.menuItemComponent instanceof ColumnMenuChooserComponent ||
113
122
  this.menuItemComponent instanceof ColumnMenuPositionComponent;
114
123
  }
115
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuItemDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuItemDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.ContextService }], target: i0.ɵɵFactoryTarget.Directive });
116
125
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuItemDirective, isStandalone: true, selector: "[kendoGridColumnMenuItem]", inputs: { menuItemComponent: ["kendoGridColumnMenuItem", "menuItemComponent"] }, ngImport: i0 });
117
126
  }
118
127
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuItemDirective, decorators: [{
@@ -121,7 +130,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
121
130
  selector: '[kendoGridColumnMenuItem]',
122
131
  standalone: true
123
132
  }]
124
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { menuItemComponent: [{
133
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.ContextService }]; }, propDecorators: { menuItemComponent: [{
125
134
  type: Input,
126
135
  args: ['kendoGridColumnMenuItem']
127
136
  }] } });