@progress/kendo-angular-grid 19.0.0-develop.23 → 19.0.0-develop.25

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 (29) hide show
  1. package/codemods/template-transformer/index.js +94 -0
  2. package/codemods/utils.js +131 -0
  3. package/codemods/v19/grid-kendogridgroupbinding.js +51 -0
  4. package/codemods/v19/index.js +51 -0
  5. package/column-menu/column-menu-item.component.d.ts +16 -3
  6. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +1 -1
  7. package/esm2022/column-menu/column-menu-autosize-all.component.mjs +1 -1
  8. package/esm2022/column-menu/column-menu-autosize.component.mjs +1 -1
  9. package/esm2022/column-menu/column-menu-chooser.component.mjs +1 -1
  10. package/esm2022/column-menu/column-menu-filter.component.mjs +1 -1
  11. package/esm2022/column-menu/column-menu-item.component.mjs +33 -11
  12. package/esm2022/column-menu/column-menu-lock.component.mjs +1 -1
  13. package/esm2022/column-menu/column-menu-position.component.mjs +1 -1
  14. package/esm2022/column-menu/column-menu-sort.component.mjs +1 -1
  15. package/esm2022/column-menu/column-menu-stick.component.mjs +1 -1
  16. package/esm2022/grid.component.mjs +65 -9
  17. package/esm2022/package-metadata.mjs +2 -2
  18. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +2 -0
  19. package/esm2022/rendering/toolbar/tools/filter-command-tool.directive.mjs +14 -3
  20. package/esm2022/rendering/toolbar/tools/filter-tool-wrapper.component.mjs +1 -0
  21. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +56 -8
  22. package/esm2022/rendering/toolbar/tools/sort-command-tool.directive.mjs +14 -4
  23. package/fesm2022/progress-kendo-angular-grid.mjs +192 -44
  24. package/grid.component.d.ts +13 -0
  25. package/package.json +41 -21
  26. package/rendering/toolbar/tools/filter-command-tool.directive.d.ts +5 -0
  27. package/rendering/toolbar/tools/filter-toolbar-tool.component.d.ts +10 -2
  28. package/rendering/toolbar/tools/sort-command-tool.directive.d.ts +5 -0
  29. package/schematics/ngAdd/index.js +4 -4
@@ -0,0 +1,94 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.templateTransformer = void 0;
8
+ const node_html_parser_1 = require("node-html-parser");
9
+ function templateTransformer(root, j, ...processFns) {
10
+ root
11
+ .find(j.ClassDeclaration)
12
+ .forEach(classPath => {
13
+ // Skip if no decorators
14
+ const classNode = classPath.node;
15
+ if (!classNode.decorators || !classNode.decorators.length)
16
+ return;
17
+ // Find Component decorator
18
+ const componentDecorator = classNode.decorators.find((decorator) => {
19
+ if (decorator.expression && decorator.expression.type === 'CallExpression') {
20
+ const callee = decorator.expression.callee;
21
+ // Handle direct Component identifier
22
+ if (callee.type === 'Identifier' && callee.name === 'Component') {
23
+ return true;
24
+ }
25
+ // Handle angular.core.Component or similar
26
+ if (callee.type === 'MemberExpression' &&
27
+ callee.property &&
28
+ callee.property.type === 'Identifier' &&
29
+ callee.property.name === 'Component') {
30
+ return true;
31
+ }
32
+ }
33
+ return false;
34
+ });
35
+ if (!componentDecorator || !componentDecorator.expression)
36
+ return;
37
+ const expression = componentDecorator.expression;
38
+ if (expression.type !== 'CallExpression' || !expression.arguments.length)
39
+ return;
40
+ const componentOptions = expression.arguments[0];
41
+ if (componentOptions.type !== 'ObjectExpression')
42
+ return;
43
+ // Find template and templateUrl properties
44
+ const props = componentOptions.properties || [];
45
+ const templateProp = props.find((prop) => (prop.key.type === 'Identifier' && prop.key.name === 'template') ||
46
+ (prop.key.type === 'StringLiteral' && prop.key.value === 'template'));
47
+ // const templateUrlProp = props.find((prop: any) =>
48
+ // (prop.key.type === 'Identifier' && prop.key.name === 'templateUrl') ||
49
+ // (prop.key.type === 'StringLiteral' && prop.key.value === 'templateUrl')
50
+ // );
51
+ // Process inline template
52
+ if (templateProp) {
53
+ // Extract template based on node type
54
+ let originalTemplate;
55
+ if (templateProp.value.type === 'StringLiteral' || templateProp.value.type === 'Literal') {
56
+ originalTemplate = templateProp.value.value;
57
+ }
58
+ else if (templateProp.value.type === 'TemplateLiteral') {
59
+ // For template literals, join quasis
60
+ if (templateProp.value.quasis && templateProp.value.quasis.length) {
61
+ originalTemplate = templateProp.value.quasis
62
+ .map((q) => q.value.cooked || q.value.raw)
63
+ .join('');
64
+ }
65
+ else {
66
+ console.warn('Could not process TemplateLiteral properly');
67
+ return;
68
+ }
69
+ }
70
+ else {
71
+ console.warn(`Unsupported template type: ${templateProp.value.type}`);
72
+ return;
73
+ }
74
+ const root = (0, node_html_parser_1.parse)(originalTemplate);
75
+ processFns.forEach(fn => {
76
+ fn(root);
77
+ });
78
+ // Transform template using Angular compiler
79
+ const transformedTemplate = root.toString();
80
+ if (transformedTemplate !== originalTemplate) {
81
+ // Update template property
82
+ if (templateProp.value.type === 'TemplateLiteral') {
83
+ // For template literals, create a new template literal
84
+ templateProp.value = j.templateLiteral([j.templateElement({ cooked: transformedTemplate, raw: transformedTemplate }, true)], []);
85
+ }
86
+ else {
87
+ // For string literals, update the value
88
+ templateProp.value.value = transformedTemplate;
89
+ }
90
+ }
91
+ }
92
+ });
93
+ }
94
+ exports.templateTransformer = templateTransformer;
@@ -0,0 +1,131 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.htmlAttributeTransformer = exports.tsPropertyTransformer = exports.templateAttributeTransformer = void 0;
11
+ const node_html_parser_1 = __importDefault(require("node-html-parser"));
12
+ const templateAttributeTransformer = (root, tagName, attributeName, newAttributeName) => {
13
+ const elements = Array.from(root.getElementsByTagName(tagName)) || [];
14
+ for (const element of elements) {
15
+ // Handle bound attributes like [title]="foo" or [title]="'foo'"
16
+ const boundAttr = element.getAttribute(`[${attributeName}]`);
17
+ if (boundAttr) {
18
+ element.setAttribute(`[${newAttributeName}]`, boundAttr);
19
+ element.removeAttribute(`[${attributeName}]`);
20
+ }
21
+ }
22
+ };
23
+ exports.templateAttributeTransformer = templateAttributeTransformer;
24
+ const tsPropertyTransformer = (root, j, componentType, propertyName, newPropertyName) => {
25
+ // Find all class properties that are of type DropDownListComponent
26
+ const properties = new Set();
27
+ // Find properties with type annotations
28
+ root
29
+ .find(j.ClassProperty, {
30
+ typeAnnotation: {
31
+ typeAnnotation: {
32
+ typeName: {
33
+ name: componentType
34
+ }
35
+ }
36
+ }
37
+ })
38
+ .forEach(path => {
39
+ if (path.node.key.type === 'Identifier') {
40
+ properties.add(path.node.key.name);
41
+ }
42
+ });
43
+ // Find function parameters of type componentType
44
+ const parameters = new Set();
45
+ root
46
+ .find(j.FunctionDeclaration)
47
+ .forEach(path => {
48
+ if (path.node.params) {
49
+ path.node.params.forEach(param => {
50
+ if (param.type === 'Identifier' &&
51
+ param.typeAnnotation &&
52
+ param.typeAnnotation.typeAnnotation?.type === 'TSTypeReference' &&
53
+ param.typeAnnotation.typeAnnotation.typeName.type === 'Identifier' &&
54
+ param.typeAnnotation.typeAnnotation.typeName.name === componentType) {
55
+ parameters.add(param.name);
56
+ }
57
+ });
58
+ }
59
+ });
60
+ // Also check method declarations in classes
61
+ root
62
+ .find(j.ClassMethod)
63
+ .forEach(path => {
64
+ if (path.node.params) {
65
+ path.node.params.forEach(param => {
66
+ if (param.type === 'Identifier' &&
67
+ param.typeAnnotation &&
68
+ param.typeAnnotation.typeAnnotation?.type === 'TSTypeReference' &&
69
+ param.typeAnnotation.typeAnnotation.typeName.type === 'Identifier' &&
70
+ param.typeAnnotation.typeAnnotation.typeName.name === componentType) {
71
+ parameters.add(param.name);
72
+ }
73
+ });
74
+ }
75
+ });
76
+ // Find all member expressions where title property is accessed on any componentType instance
77
+ root
78
+ .find(j.MemberExpression, {
79
+ property: {
80
+ type: 'Identifier',
81
+ name: propertyName
82
+ }
83
+ })
84
+ .filter(path => {
85
+ // Filter to only include accesses on properties that are componentType instances
86
+ if (path.node.object.type === 'MemberExpression' &&
87
+ path.node.object.property.type === 'Identifier') {
88
+ // handle properties of this
89
+ if (path.node.object.object.type === 'ThisExpression' &&
90
+ properties.has(path.node.object.property.name)) {
91
+ return true;
92
+ }
93
+ }
94
+ // Handle function parameters
95
+ if (path.node.object.type === 'Identifier' &&
96
+ parameters.has(path.node.object.name)) {
97
+ return true;
98
+ }
99
+ return false;
100
+ })
101
+ .forEach(path => {
102
+ // Replace old property name with new property name
103
+ if (path.node.property.type === 'Identifier') {
104
+ path.node.property.name = newPropertyName;
105
+ }
106
+ });
107
+ };
108
+ exports.tsPropertyTransformer = tsPropertyTransformer;
109
+ const htmlAttributeTransformer = (fileInfo, tagName, oldName, newName) => {
110
+ const fileContent = fileInfo.source;
111
+ const root = (0, node_html_parser_1.default)(fileContent);
112
+ let modified = false;
113
+ // Locate elements using [oldName] binding and update the old attribute to the new one
114
+ const elements = Array.from(root.querySelectorAll(tagName));
115
+ for (const element of elements) {
116
+ const boundTitleAttr = element.getAttribute(`[${oldName}]`);
117
+ if (boundTitleAttr) {
118
+ element.removeAttribute(`[${oldName}]`);
119
+ element.setAttribute(`[${newName}]`, boundTitleAttr);
120
+ modified = true;
121
+ }
122
+ }
123
+ // Return modified content if changes were made
124
+ if (modified) {
125
+ const updatedContent = root.toString();
126
+ return updatedContent;
127
+ }
128
+ // Return original content if no changes were made or if there was an error
129
+ return fileContent;
130
+ };
131
+ exports.htmlAttributeTransformer = htmlAttributeTransformer;
@@ -0,0 +1,51 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ const template_transformer_1 = require("../template-transformer");
31
+ const fs = __importStar(require("fs"));
32
+ const utils_1 = require("../utils");
33
+ function default_1(fileInfo, api) {
34
+ const filePath = fileInfo.path;
35
+ // Check if the file is an HTML file
36
+ if (filePath.endsWith('.html')) {
37
+ let updatedContent = fileInfo.source;
38
+ updatedContent = (0, utils_1.htmlAttributeTransformer)({ ...fileInfo, source: updatedContent }, 'kendo-grid', 'kendoGridGroupBinding', 'kendoGridBinding');
39
+ // Only write to file once after all transformations
40
+ fs.writeFileSync(filePath, updatedContent, 'utf-8');
41
+ return;
42
+ }
43
+ const j = api.jscodeshift;
44
+ const rootSource = j(fileInfo.source);
45
+ (0, template_transformer_1.templateTransformer)(rootSource, j, (root) => {
46
+ // Using node-html-parser to parse and manipulate the template: https://github.com/taoqf/node-html-parser
47
+ (0, utils_1.templateAttributeTransformer)(root, 'kendo-grid', 'kendoGridGroupBinding', 'kendoGridBinding');
48
+ });
49
+ return rootSource.toSource();
50
+ }
51
+ exports.default = default_1;
@@ -0,0 +1,51 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ "use strict";
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ const template_transformer_1 = require("../template-transformer");
31
+ const fs = __importStar(require("fs"));
32
+ const utils_1 = require("../utils");
33
+ function default_1(fileInfo, api) {
34
+ const filePath = fileInfo.path;
35
+ // Check if the file is an HTML file
36
+ if (filePath.endsWith('.html')) {
37
+ let updatedContent = fileInfo.source;
38
+ updatedContent = (0, utils_1.htmlAttributeTransformer)({ ...fileInfo, source: updatedContent }, 'kendo-grid', 'kendoGridGroupBinding', 'kendoGridBinding');
39
+ // Only write to file once after all transformations
40
+ fs.writeFileSync(filePath, updatedContent, 'utf-8');
41
+ return;
42
+ }
43
+ const j = api.jscodeshift;
44
+ const rootSource = j(fileInfo.source);
45
+ (0, template_transformer_1.templateTransformer)(rootSource, j, (root) => {
46
+ // Using node-html-parser to parse and manipulate the template: https://github.com/taoqf/node-html-parser
47
+ (0, utils_1.templateAttributeTransformer)(root, 'kendo-grid', 'kendoGridGroupBinding', 'kendoGridBinding');
48
+ });
49
+ return rootSource.toSource();
50
+ }
51
+ exports.default = default_1;
@@ -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 { EventEmitter, OnChanges, AfterViewInit, NgZone } from '@angular/core';
5
+ import { EventEmitter, OnChanges, AfterViewInit, NgZone, ElementRef } from '@angular/core';
6
6
  import { ColumnMenuItemContentTemplateDirective } from './column-menu-item-content-template.directive';
7
7
  import { SVGIcon } from '@progress/kendo-svg-icons';
8
8
  import { ColumnMenuService } from './column-menu.service';
@@ -28,6 +28,7 @@ export declare class ColumnMenuItemComponent implements AfterViewInit, OnChanges
28
28
  private ngZone;
29
29
  ctx: ContextService;
30
30
  adaptiveGridService: AdaptiveGridService;
31
+ element: ElementRef;
31
32
  /**
32
33
  * @hidden
33
34
  */
@@ -57,6 +58,14 @@ export declare class ColumnMenuItemComponent implements AfterViewInit, OnChanges
57
58
  * Defines the [SVG icon](slug:svgicon_list) to be rendered within the item.
58
59
  */
59
60
  svgIcon: SVGIcon;
61
+ /**
62
+ * @hidden
63
+ */
64
+ indicatorIcon: string;
65
+ /**
66
+ * @hidden
67
+ */
68
+ indicatorSVGIcon: SVGIcon;
60
69
  /**
61
70
  * Specifies the item text.
62
71
  */
@@ -73,6 +82,10 @@ export declare class ColumnMenuItemComponent implements AfterViewInit, OnChanges
73
82
  * Specifies if the item is expanded.
74
83
  */
75
84
  expanded: boolean;
85
+ /**
86
+ * @hidden
87
+ */
88
+ focused: boolean;
76
89
  /**
77
90
  * Represents the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) class.
78
91
  * Required to include the item in the column menu keyboard navigation sequence.
@@ -95,7 +108,7 @@ export declare class ColumnMenuItemComponent implements AfterViewInit, OnChanges
95
108
  get hasFilters(): boolean;
96
109
  get expandedIcon(): string;
97
110
  get expandedSvgIcon(): SVGIcon;
98
- constructor(ngZone: NgZone, ctx: ContextService, adaptiveGridService: AdaptiveGridService);
111
+ constructor(ngZone: NgZone, ctx: ContextService, adaptiveGridService: AdaptiveGridService, element: ElementRef);
99
112
  ngAfterViewInit(): void;
100
113
  ngOnChanges(changes: any): void;
101
114
  /**
@@ -116,5 +129,5 @@ export declare class ColumnMenuItemComponent implements AfterViewInit, OnChanges
116
129
  onClick(e: any): void;
117
130
  private updateContentState;
118
131
  static ɵfac: i0.ɵɵFactoryDeclaration<ColumnMenuItemComponent, never>;
119
- static ɵcmp: i0.ɵɵComponentDeclaration<ColumnMenuItemComponent, "kendo-grid-columnmenu-item", never, { "icon": { "alias": "icon"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "text": { "alias": "text"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "service": { "alias": "service"; "required": false; }; "column": { "alias": "column"; "required": false; }; }, { "itemClick": "itemClick"; "expand": "expand"; "collapse": "collapse"; }, ["contentTemplate"], never, true, never>;
132
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnMenuItemComponent, "kendo-grid-columnmenu-item", never, { "icon": { "alias": "icon"; "required": false; }; "svgIcon": { "alias": "svgIcon"; "required": false; }; "indicatorIcon": { "alias": "indicatorIcon"; "required": false; }; "indicatorSVGIcon": { "alias": "indicatorSVGIcon"; "required": false; }; "text": { "alias": "text"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "focused": { "alias": "focused"; "required": false; }; "service": { "alias": "service"; "required": false; }; "column": { "alias": "column"; "required": false; }; }, { "itemClick": "itemClick"; "expand": "expand"; "collapse": "collapse"; }, ["contentTemplate"], never, true, never>;
120
133
  }
@@ -660,7 +660,7 @@ export class AdaptiveRendererComponent {
660
660
  {{messageFor('filterFilterButton')}}
661
661
  </button>
662
662
  </ng-template>
663
- `, 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["actions", "actionsLayout", "overlayClickClose", "title", "subtitle", "items", "cssClass", "cssStyle", "animation", "expanded", "titleId", "initialFocus"], outputs: ["expandedChange", "action", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "component", type: ActionSheetViewComponent, selector: "kendo-actionsheet-view", inputs: ["title", "subtitle", "titleId"] }, { kind: "component", type: FilterToolbarToolComponent, selector: "kendo-filter-toolbar-tool", outputs: ["close"] }, { kind: "component", type: ButtonDirective, 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: "directive", type: ActionSheetHeaderTemplateDirective, selector: "[kendoActionSheetHeaderTemplate]" }, { kind: "directive", type: ActionSheetContentTemplateDirective, selector: "[kendoActionSheetContentTemplate]" }, { kind: "directive", type: ActionSheetFooterTemplateDirective, selector: "[kendoActionSheetFooterTemplate]" }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { kind: "component", type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: FormComponent, selector: "kendo-grid-external-form", inputs: ["controls", "formSettings", "formGroup", "actionButtons"], outputs: ["formSubmit"] }] });
663
+ `, 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["actions", "actionsLayout", "overlayClickClose", "title", "subtitle", "items", "cssClass", "cssStyle", "animation", "expanded", "titleId", "initialFocus"], outputs: ["expandedChange", "action", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "component", type: ActionSheetViewComponent, selector: "kendo-actionsheet-view", inputs: ["title", "subtitle", "titleId"] }, { kind: "component", type: FilterToolbarToolComponent, selector: "kendo-filter-toolbar-tool", outputs: ["close"] }, { kind: "component", type: ButtonDirective, 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: "directive", type: ActionSheetHeaderTemplateDirective, selector: "[kendoActionSheetHeaderTemplate]" }, { kind: "directive", type: ActionSheetContentTemplateDirective, selector: "[kendoActionSheetContentTemplate]" }, { kind: "directive", type: ActionSheetFooterTemplateDirective, selector: "[kendoActionSheetFooterTemplate]" }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { kind: "component", type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: FormComponent, selector: "kendo-grid-external-form", inputs: ["controls", "formSettings", "formGroup", "actionButtons"], outputs: ["formSubmit"] }] });
664
664
  }
665
665
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdaptiveRendererComponent, decorators: [{
666
666
  type: Component,
@@ -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", "column"], 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", "indicatorSVGIcon", "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", "column"], 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", "indicatorSVGIcon", "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", "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"] }] });
121
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "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,
@@ -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", "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"] }] });
100
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "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,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, 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
8
  import { chevronDownIcon, chevronRightIcon, chevronUpIcon, filterIcon, sortAscSmallIcon, sortDescSmallIcon } from '@progress/kendo-svg-icons';
@@ -37,6 +37,7 @@ export class ColumnMenuItemComponent {
37
37
  ngZone;
38
38
  ctx;
39
39
  adaptiveGridService;
40
+ element;
40
41
  /**
41
42
  * @hidden
42
43
  */
@@ -66,6 +67,14 @@ export class ColumnMenuItemComponent {
66
67
  * Defines the [SVG icon](slug:svgicon_list) to be rendered within the item.
67
68
  */
68
69
  svgIcon;
70
+ /**
71
+ * @hidden
72
+ */
73
+ indicatorIcon;
74
+ /**
75
+ * @hidden
76
+ */
77
+ indicatorSVGIcon;
69
78
  /**
70
79
  * Specifies the item text.
71
80
  */
@@ -82,6 +91,10 @@ export class ColumnMenuItemComponent {
82
91
  * Specifies if the item is expanded.
83
92
  */
84
93
  expanded;
94
+ /**
95
+ * @hidden
96
+ */
97
+ focused;
85
98
  /**
86
99
  * Represents the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) class.
87
100
  * Required to include the item in the column menu keyboard navigation sequence.
@@ -116,10 +129,11 @@ export class ColumnMenuItemComponent {
116
129
  }
117
130
  return this.expanded ? this.chevronUpIcon : this.chevronDownIcon;
118
131
  }
119
- constructor(ngZone, ctx, adaptiveGridService) {
132
+ constructor(ngZone, ctx, adaptiveGridService, element) {
120
133
  this.ngZone = ngZone;
121
134
  this.ctx = ctx;
122
135
  this.adaptiveGridService = adaptiveGridService;
136
+ this.element = element;
123
137
  }
124
138
  ngAfterViewInit() {
125
139
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
@@ -177,8 +191,8 @@ export class ColumnMenuItemComponent {
177
191
  updateContentState() {
178
192
  this.contentState = this.expanded ? 'expanded' : 'collapsed';
179
193
  }
180
- 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 }], target: i0.ɵɵFactoryTarget.Component });
181
- 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", column: "column" }, outputs: { itemClick: "itemClick", expand: "expand", collapse: "collapse" }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ColumnMenuItemContentTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
194
+ 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 });
195
+ 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", indicatorSVGIcon: "indicatorSVGIcon", 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: `
182
196
  <div *ngIf="contentTemplate; else content" class="k-expander">
183
197
  <ng-container [ngTemplateOutlet]="content"></ng-container>
184
198
  </div>
@@ -190,6 +204,7 @@ export class ColumnMenuItemComponent {
190
204
  (keydown.enter)="onClick($event)"
191
205
  [class.k-selected]="selected"
192
206
  [class.k-disabled]="disabled"
207
+ [class.k-focus]="focused"
193
208
  role="button"
194
209
  [attr.aria-expanded]="expanded"
195
210
  [attr.aria-controls]="expanded ? contentId : undefined">
@@ -198,11 +213,11 @@ export class ColumnMenuItemComponent {
198
213
  [name]="icon"
199
214
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
200
215
  {{ text }}
201
- <span *ngIf="ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'sortToolbarTool' && sortDescriptor(column.field).dir"
216
+ <span *ngIf="(ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'sortToolbarTool' && sortDescriptor(column.field).dir) || indicatorIcon || indicatorSVGIcon"
202
217
  class="k-columnmenu-indicators">
203
218
  <kendo-icon-wrapper
204
- [name]="sortDescriptor(column.field).dir === 'asc' ? 'sort-asc-small' : 'sort-desc-small'"
205
- [svgIcon]="sortDescriptor(column.field).dir === 'asc' ? sortAscSmallIcon : sortDescSmallIcon">
219
+ [name]="indicatorIcon ? indicatorIcon : sortDescriptor(column.field).dir === 'asc' ? 'sort-asc-small' : 'sort-desc-small'"
220
+ [svgIcon]="indicatorSVGIcon ? indicatorSVGIcon : sortDescriptor(column.field).dir === 'asc' ? sortAscSmallIcon : sortDescSmallIcon">
206
221
  </kendo-icon-wrapper>
207
222
  <span *ngIf="showSortNumbering(column)" class="k-sort-index">{{sortOrder(column.field)}}</span>
208
223
  </span>
@@ -288,6 +303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
288
303
  (keydown.enter)="onClick($event)"
289
304
  [class.k-selected]="selected"
290
305
  [class.k-disabled]="disabled"
306
+ [class.k-focus]="focused"
291
307
  role="button"
292
308
  [attr.aria-expanded]="expanded"
293
309
  [attr.aria-controls]="expanded ? contentId : undefined">
@@ -296,11 +312,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
296
312
  [name]="icon"
297
313
  [svgIcon]="svgIcon"></kendo-icon-wrapper>
298
314
  {{ text }}
299
- <span *ngIf="ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'sortToolbarTool' && sortDescriptor(column.field).dir"
315
+ <span *ngIf="(ctx.grid.isActionSheetExpanded && adaptiveGridService.viewType === 'sortToolbarTool' && sortDescriptor(column.field).dir) || indicatorIcon || indicatorSVGIcon"
300
316
  class="k-columnmenu-indicators">
301
317
  <kendo-icon-wrapper
302
- [name]="sortDescriptor(column.field).dir === 'asc' ? 'sort-asc-small' : 'sort-desc-small'"
303
- [svgIcon]="sortDescriptor(column.field).dir === 'asc' ? sortAscSmallIcon : sortDescSmallIcon">
318
+ [name]="indicatorIcon ? indicatorIcon : sortDescriptor(column.field).dir === 'asc' ? 'sort-asc-small' : 'sort-desc-small'"
319
+ [svgIcon]="indicatorSVGIcon ? indicatorSVGIcon : sortDescriptor(column.field).dir === 'asc' ? sortAscSmallIcon : sortDescSmallIcon">
304
320
  </kendo-icon-wrapper>
305
321
  <span *ngIf="showSortNumbering(column)" class="k-sort-index">{{sortOrder(column.field)}}</span>
306
322
  </span>
@@ -327,7 +343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
327
343
  standalone: true,
328
344
  imports: [IconWrapperComponent, NgIf, NgTemplateOutlet]
329
345
  }]
330
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.ContextService }, { type: i2.AdaptiveGridService }]; }, propDecorators: { itemClick: [{
346
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.ContextService }, { type: i2.AdaptiveGridService }, { type: i0.ElementRef }]; }, propDecorators: { itemClick: [{
331
347
  type: Output
332
348
  }], expand: [{
333
349
  type: Output
@@ -337,6 +353,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
337
353
  type: Input
338
354
  }], svgIcon: [{
339
355
  type: Input
356
+ }], indicatorIcon: [{
357
+ type: Input
358
+ }], indicatorSVGIcon: [{
359
+ type: Input
340
360
  }], text: [{
341
361
  type: Input
342
362
  }], selected: [{
@@ -345,6 +365,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
345
365
  type: Input
346
366
  }], expanded: [{
347
367
  type: Input
368
+ }], focused: [{
369
+ type: Input
348
370
  }], service: [{
349
371
  type: Input
350
372
  }], column: [{
@@ -89,7 +89,7 @@ export class ColumnMenuLockComponent extends ColumnMenuItemBase {
89
89
  (itemClick)="toggleColumn()"
90
90
  [disabled]="disabled">
91
91
  </kendo-grid-columnmenu-item>
92
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
92
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
93
93
  }
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuLockComponent, decorators: [{
95
95
  type: Component,
@@ -138,7 +138,7 @@ export class ColumnMenuPositionComponent extends ColumnMenuItemBase {
138
138
  </kendo-grid-columnmenu-stick>
139
139
  </ng-template>
140
140
  </kendo-grid-columnmenu-item>
141
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }] });
141
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }] });
142
142
  }
143
143
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuPositionComponent, decorators: [{
144
144
  type: Component,