@progress/kendo-angular-grid 19.3.1-develop.4 → 20.0.0-develop.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/codemods/template-transformer/index.js +94 -0
  2. package/codemods/utils.js +553 -0
  3. package/codemods/v20/grid-kendogridgroupbinding.js +51 -0
  4. package/common/provider.service.d.ts +3 -2
  5. package/databinding.directive.d.ts +0 -3
  6. package/directives.d.ts +3 -4
  7. package/esm2022/common/error-messages.mjs +0 -6
  8. package/esm2022/common/provider.service.mjs +1 -0
  9. package/esm2022/data/data.iterators.mjs +0 -7
  10. package/esm2022/databinding.directive.mjs +4 -4
  11. package/esm2022/directives.mjs +0 -3
  12. package/esm2022/grid.component.mjs +64 -31
  13. package/esm2022/grid.module.mjs +15 -16
  14. package/esm2022/grouping/group-header.component.mjs +6 -3
  15. package/esm2022/index.mjs +0 -1
  16. package/esm2022/navigation/navigation-metadata.mjs +4 -2
  17. package/esm2022/navigation/navigation.service.mjs +4 -2
  18. package/esm2022/package-metadata.mjs +2 -2
  19. package/esm2022/pdf/pdf.component.mjs +16 -0
  20. package/esm2022/pdf/pdf.service.mjs +1 -0
  21. package/esm2022/rendering/list.component.mjs +188 -92
  22. package/esm2022/rendering/table-body.component.mjs +19 -5
  23. package/esm2022/scrolling/row-height.service.mjs +23 -65
  24. package/esm2022/scrolling/scroller.service.mjs +175 -35
  25. package/fesm2022/progress-kendo-angular-grid.mjs +509 -588
  26. package/grid.component.d.ts +8 -6
  27. package/grid.module.d.ts +14 -15
  28. package/grouping/group-header.component.d.ts +1 -1
  29. package/index.d.ts +0 -2
  30. package/navigation/navigation-metadata.d.ts +2 -1
  31. package/package.json +36 -21
  32. package/pdf/pdf.component.d.ts +1 -0
  33. package/pdf/pdf.service.d.ts +1 -0
  34. package/rendering/list.component.d.ts +11 -5
  35. package/rendering/table-body.component.d.ts +3 -2
  36. package/schematics/ngAdd/index.js +4 -4
  37. package/scrolling/row-height.service.d.ts +3 -8
  38. package/scrolling/scroller.service.d.ts +35 -9
  39. package/esm2022/grouping/group-scroll-binding.directive.mjs +0 -347
  40. package/esm2022/grouping/virtual-group-result.interface.mjs +0 -5
  41. package/grouping/group-scroll-binding.directive.d.ts +0 -85
  42. package/grouping/virtual-group-result.interface.d.ts +0 -18
@@ -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 index_1 = require("../template-transformer/index");
31
+ const utils_1 = require("../utils");
32
+ const fs = __importStar(require("fs"));
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, index_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;
@@ -6,8 +6,8 @@ import { Renderer2 } from '@angular/core';
6
6
  import { LocalizationService } from '@progress/kendo-angular-l10n';
7
7
  import type { GridComponent } from '../grid.component';
8
8
  import { GridToolbarNavigationService } from '../rendering/toolbar/toolbar-navigation.service';
9
- import type { GroupBindingDirective } from '../grouping/group-scroll-binding.directive';
10
9
  import type { DataBindingDirective } from '../databinding.directive';
10
+ import type { ScrollerService } from '../scrolling/scroller.service';
11
11
  import { HighlightDirective } from '../highlight/highlight.directive';
12
12
  import * as i0 from "@angular/core";
13
13
  /**
@@ -26,7 +26,8 @@ export declare class ContextService {
26
26
  topToolbarNavigation: GridToolbarNavigationService;
27
27
  bottomToolbarNavigation: GridToolbarNavigationService;
28
28
  navigable: boolean;
29
- dataBindingDirective: DataBindingDirective | GroupBindingDirective;
29
+ scroller: ScrollerService;
30
+ dataBindingDirective: DataBindingDirective;
30
31
  highlightDirective: HighlightDirective;
31
32
  constructor(renderer: Renderer2, localization: LocalizationService);
32
33
  static ɵfac: i0.ɵɵFactoryDeclaration<ContextService, never>;
@@ -77,9 +77,6 @@ export declare class DataBindingDirective implements OnInit, OnDestroy, DoCheck,
77
77
  * @hidden
78
78
  */
79
79
  ngOnDestroy(): void;
80
- /**
81
- * @hidden
82
- */
83
80
  ngOnChanges(changes: {
84
81
  [propertyName: string]: SimpleChange;
85
82
  }): void;
package/directives.d.ts CHANGED
@@ -126,7 +126,6 @@ import { InCellEditingDirective } from "./editing-directives/in-cell-editing.dir
126
126
  import { ExternalEditingDirective } from "./editing-directives/external-editing.directive";
127
127
  import { ExpandDetailsDirective } from "./rendering/details-expand.directive";
128
128
  import { ExpandGroupDirective } from "./rendering/groups-expand.directive";
129
- import { GroupBindingDirective } from "./grouping/group-scroll-binding.directive";
130
129
  import { GridMarqueeDirective } from "./selection/marquee.directive";
131
130
  import { GridSpacerComponent } from "./rendering/common/spacer.component";
132
131
  import { GridToolbarFocusableDirective } from "./rendering/toolbar/toolbar-focusable.directive";
@@ -240,13 +239,13 @@ export declare const KENDO_GRID_BODY_EXPORTS: readonly [typeof CommandColumnComp
240
239
  *
241
240
  * Utility array that contains the Grid module declarations
242
241
  */
243
- export declare const KENDO_GRID_DECLARATIONS: readonly [typeof GridComponent, typeof ListComponent, typeof ToolbarComponent, typeof LocalizedMessagesDirective, typeof CustomMessagesComponent, typeof DataBindingDirective, typeof ToolbarTemplateDirective, typeof SelectionDirective, typeof HighlightDirective, typeof TemplateEditingDirective, typeof ReactiveEditingDirective, typeof InCellEditingDirective, typeof ExternalEditingDirective, typeof ExpandDetailsDirective, typeof ExpandGroupDirective, typeof GroupBindingDirective, typeof GridMarqueeDirective, typeof GridSpacerComponent, typeof GridToolbarFocusableDirective, typeof StatusBarComponent, typeof StatusBarTemplateDirective, typeof GridClipboardDirective, typeof FormComponent, typeof DialogFormComponent, typeof FormFormFieldComponent, typeof UndoRedoDirective];
242
+ export declare const KENDO_GRID_DECLARATIONS: readonly [typeof GridComponent, typeof ListComponent, typeof ToolbarComponent, typeof LocalizedMessagesDirective, typeof CustomMessagesComponent, typeof DataBindingDirective, typeof ToolbarTemplateDirective, typeof SelectionDirective, typeof HighlightDirective, typeof TemplateEditingDirective, typeof ReactiveEditingDirective, typeof InCellEditingDirective, typeof ExternalEditingDirective, typeof ExpandDetailsDirective, typeof ExpandGroupDirective, typeof GridMarqueeDirective, typeof GridSpacerComponent, typeof GridToolbarFocusableDirective, typeof StatusBarComponent, typeof StatusBarTemplateDirective, typeof GridClipboardDirective, typeof FormComponent, typeof DialogFormComponent, typeof FormFormFieldComponent, typeof UndoRedoDirective];
244
243
  /**
245
244
  * @hidden
246
245
  *
247
246
  * Utility array that contains the Grid module exports
248
247
  */
249
- export declare const KENDO_GRID_EXPORTS: readonly [typeof GridComponent, typeof ToolbarTemplateDirective, typeof ToolbarComponent, typeof GridSpacerComponent, typeof StatusBarTemplateDirective, typeof DataBindingDirective, typeof SelectionDirective, typeof HighlightDirective, typeof CustomMessagesComponent, typeof GroupBindingDirective, typeof TemplateEditingDirective, typeof ReactiveEditingDirective, typeof InCellEditingDirective, typeof ExternalEditingDirective, typeof ExpandDetailsDirective, typeof ExpandGroupDirective, typeof GridToolbarFocusableDirective, typeof GroupHeaderTemplateDirective, typeof GroupHeaderColumnTemplateDirective, typeof GroupFooterTemplateDirective, typeof GroupHeaderComponent, typeof GroupPanelComponent, typeof ColumnComponent, typeof ColumnGroupComponent, typeof LogicalCellDirective, typeof LogicalRowDirective, typeof FocusableDirective, typeof FooterTemplateDirective, typeof ColGroupComponent, typeof ResizableContainerDirective, typeof TemplateContextDirective, typeof FieldAccessorPipe, typeof DetailTemplateDirective, typeof SpanColumnComponent, typeof LoadingComponent, typeof GridTableDirective, typeof CommandColumnComponent, typeof CheckboxColumnComponent, typeof SelectionCheckboxDirective, typeof CellTemplateDirective, typeof EditTemplateDirective, typeof RowDragHandleTemplateDirective, typeof RowDragHintTemplateDirective, typeof TableBodyComponent, typeof NoRecordsTemplateDirective, typeof CellComponent, typeof EditCommandDirective, typeof CancelCommandDirective, typeof SaveCommandDirective, typeof RemoveCommandDirective, typeof AddCommandDirective, typeof AddCommandToolbarDirective, typeof EditCommandToolbarDirective, typeof SaveCommandToolbarDirective, typeof RemoveCommandToolbarDirective, typeof CancelCommandToolbarDirective, typeof CellLoadingTemplateDirective, typeof LoadingTemplateDirective, typeof RowReorderColumnComponent, typeof SortCommandToolbarDirective, typeof FilterCommandToolbarDirective, typeof AIAssistantToolbarDirective, typeof GroupCommandToolbarDirective, typeof SelectAllToolbarToolComponent, typeof HeaderComponent, typeof HeaderTemplateDirective, typeof ColumnHandleDirective, typeof SelectAllCheckboxDirective, typeof FilterRowComponent, typeof FilterCellComponent, typeof FilterCellTemplateDirective, typeof StringFilterCellComponent, typeof NumericFilterCellComponent, typeof AutoCompleteFilterCellComponent, typeof BooleanFilterCellComponent, typeof FilterCellHostDirective, typeof FilterCellWrapperComponent, typeof DateFilterCellComponent, typeof FilterCellOperatorsComponent, typeof ContainsFilterOperatorComponent, typeof DoesNotContainFilterOperatorComponent, typeof EndsWithFilterOperatorComponent, typeof EqualFilterOperatorComponent, typeof IsEmptyFilterOperatorComponent, typeof IsNotEmptyFilterOperatorComponent, typeof IsNotNullFilterOperatorComponent, typeof IsNullFilterOperatorComponent, typeof NotEqualFilterOperatorComponent, typeof StartsWithFilterOperatorComponent, typeof GreaterFilterOperatorComponent, typeof GreaterOrEqualToFilterOperatorComponent, typeof LessFilterOperatorComponent, typeof LessOrEqualToFilterOperatorComponent, typeof AfterFilterOperatorComponent, typeof AfterEqFilterOperatorComponent, typeof BeforeEqFilterOperatorComponent, typeof BeforeFilterOperatorComponent, typeof FilterMenuComponent, typeof FilterMenuContainerComponent, typeof FilterMenuInputWrapperComponent, typeof StringFilterMenuInputComponent, typeof StringFilterMenuComponent, typeof FilterMenuTemplateDirective, typeof NumericFilterMenuComponent, typeof NumericFilterMenuInputComponent, typeof DateFilterMenuInputComponent, typeof DateFilterMenuComponent, typeof FilterMenuHostDirective, typeof BooleanFilterMenuComponent, typeof FilterMenuDropDownListDirective, typeof BooleanFilterRadioButtonDirective, typeof ColumnChooserComponent, typeof ColumnChooserToolbarDirective, typeof ColumnMenuFilterComponent, typeof ColumnMenuItemComponent, typeof ColumnMenuItemContentTemplateDirective, typeof ColumnMenuSortComponent, typeof ColumnMenuLockComponent, typeof ColumnMenuStickComponent, typeof ColumnMenuPositionComponent, typeof ColumnMenuChooserComponent, typeof ColumnMenuTemplateDirective, typeof ColumnMenuContainerComponent, typeof ColumnMenuItemDirective, typeof ColumnMenuComponent, typeof ColumnMenuAutoSizeColumnComponent, typeof ColumnMenuAutoSizeAllColumnsComponent, typeof GridClipboardDirective, typeof UndoRedoDirective, typeof UndoCommandToolbarDirective, typeof RedoCommandToolbarDirective];
248
+ export declare const KENDO_GRID_EXPORTS: readonly [typeof GridComponent, typeof ToolbarTemplateDirective, typeof ToolbarComponent, typeof GridSpacerComponent, typeof StatusBarTemplateDirective, typeof DataBindingDirective, typeof SelectionDirective, typeof HighlightDirective, typeof CustomMessagesComponent, typeof TemplateEditingDirective, typeof ReactiveEditingDirective, typeof InCellEditingDirective, typeof ExternalEditingDirective, typeof ExpandDetailsDirective, typeof ExpandGroupDirective, typeof GridToolbarFocusableDirective, typeof GroupHeaderTemplateDirective, typeof GroupHeaderColumnTemplateDirective, typeof GroupFooterTemplateDirective, typeof GroupHeaderComponent, typeof GroupPanelComponent, typeof ColumnComponent, typeof ColumnGroupComponent, typeof LogicalCellDirective, typeof LogicalRowDirective, typeof FocusableDirective, typeof FooterTemplateDirective, typeof ColGroupComponent, typeof ResizableContainerDirective, typeof TemplateContextDirective, typeof FieldAccessorPipe, typeof DetailTemplateDirective, typeof SpanColumnComponent, typeof LoadingComponent, typeof GridTableDirective, typeof CommandColumnComponent, typeof CheckboxColumnComponent, typeof SelectionCheckboxDirective, typeof CellTemplateDirective, typeof EditTemplateDirective, typeof RowDragHandleTemplateDirective, typeof RowDragHintTemplateDirective, typeof TableBodyComponent, typeof NoRecordsTemplateDirective, typeof CellComponent, typeof EditCommandDirective, typeof CancelCommandDirective, typeof SaveCommandDirective, typeof RemoveCommandDirective, typeof AddCommandDirective, typeof AddCommandToolbarDirective, typeof EditCommandToolbarDirective, typeof SaveCommandToolbarDirective, typeof RemoveCommandToolbarDirective, typeof CancelCommandToolbarDirective, typeof CellLoadingTemplateDirective, typeof LoadingTemplateDirective, typeof RowReorderColumnComponent, typeof SortCommandToolbarDirective, typeof FilterCommandToolbarDirective, typeof AIAssistantToolbarDirective, typeof GroupCommandToolbarDirective, typeof SelectAllToolbarToolComponent, typeof HeaderComponent, typeof HeaderTemplateDirective, typeof ColumnHandleDirective, typeof SelectAllCheckboxDirective, typeof FilterRowComponent, typeof FilterCellComponent, typeof FilterCellTemplateDirective, typeof StringFilterCellComponent, typeof NumericFilterCellComponent, typeof AutoCompleteFilterCellComponent, typeof BooleanFilterCellComponent, typeof FilterCellHostDirective, typeof FilterCellWrapperComponent, typeof DateFilterCellComponent, typeof FilterCellOperatorsComponent, typeof ContainsFilterOperatorComponent, typeof DoesNotContainFilterOperatorComponent, typeof EndsWithFilterOperatorComponent, typeof EqualFilterOperatorComponent, typeof IsEmptyFilterOperatorComponent, typeof IsNotEmptyFilterOperatorComponent, typeof IsNotNullFilterOperatorComponent, typeof IsNullFilterOperatorComponent, typeof NotEqualFilterOperatorComponent, typeof StartsWithFilterOperatorComponent, typeof GreaterFilterOperatorComponent, typeof GreaterOrEqualToFilterOperatorComponent, typeof LessFilterOperatorComponent, typeof LessOrEqualToFilterOperatorComponent, typeof AfterFilterOperatorComponent, typeof AfterEqFilterOperatorComponent, typeof BeforeEqFilterOperatorComponent, typeof BeforeFilterOperatorComponent, typeof FilterMenuComponent, typeof FilterMenuContainerComponent, typeof FilterMenuInputWrapperComponent, typeof StringFilterMenuInputComponent, typeof StringFilterMenuComponent, typeof FilterMenuTemplateDirective, typeof NumericFilterMenuComponent, typeof NumericFilterMenuInputComponent, typeof DateFilterMenuInputComponent, typeof DateFilterMenuComponent, typeof FilterMenuHostDirective, typeof BooleanFilterMenuComponent, typeof FilterMenuDropDownListDirective, typeof BooleanFilterRadioButtonDirective, typeof ColumnChooserComponent, typeof ColumnChooserToolbarDirective, typeof ColumnMenuFilterComponent, typeof ColumnMenuItemComponent, typeof ColumnMenuItemContentTemplateDirective, typeof ColumnMenuSortComponent, typeof ColumnMenuLockComponent, typeof ColumnMenuStickComponent, typeof ColumnMenuPositionComponent, typeof ColumnMenuChooserComponent, typeof ColumnMenuTemplateDirective, typeof ColumnMenuContainerComponent, typeof ColumnMenuItemDirective, typeof ColumnMenuComponent, typeof ColumnMenuAutoSizeColumnComponent, typeof ColumnMenuAutoSizeAllColumnsComponent, typeof GridClipboardDirective, typeof UndoRedoDirective, typeof UndoCommandToolbarDirective, typeof RedoCommandToolbarDirective];
250
249
  /**
251
250
  * @hidden
252
251
  *
@@ -271,4 +270,4 @@ export declare const KENDO_GRID_PDF_EXPORT: readonly [typeof PDFComponent, typeo
271
270
  * export class AppModule {}
272
271
  * ```
273
272
  */
274
- export declare const KENDO_GRID: readonly [typeof GridComponent, typeof ToolbarTemplateDirective, typeof ToolbarComponent, typeof GridSpacerComponent, typeof StatusBarTemplateDirective, typeof DataBindingDirective, typeof SelectionDirective, typeof HighlightDirective, typeof CustomMessagesComponent, typeof GroupBindingDirective, typeof TemplateEditingDirective, typeof ReactiveEditingDirective, typeof InCellEditingDirective, typeof ExternalEditingDirective, typeof ExpandDetailsDirective, typeof ExpandGroupDirective, typeof GridToolbarFocusableDirective, typeof GroupHeaderTemplateDirective, typeof GroupHeaderColumnTemplateDirective, typeof GroupFooterTemplateDirective, typeof GroupHeaderComponent, typeof GroupPanelComponent, typeof ColumnComponent, typeof ColumnGroupComponent, typeof LogicalCellDirective, typeof LogicalRowDirective, typeof FocusableDirective, typeof FooterTemplateDirective, typeof ColGroupComponent, typeof ResizableContainerDirective, typeof TemplateContextDirective, typeof FieldAccessorPipe, typeof DetailTemplateDirective, typeof SpanColumnComponent, typeof LoadingComponent, typeof GridTableDirective, typeof CommandColumnComponent, typeof CheckboxColumnComponent, typeof SelectionCheckboxDirective, typeof CellTemplateDirective, typeof EditTemplateDirective, typeof RowDragHandleTemplateDirective, typeof RowDragHintTemplateDirective, typeof TableBodyComponent, typeof NoRecordsTemplateDirective, typeof CellComponent, typeof EditCommandDirective, typeof CancelCommandDirective, typeof SaveCommandDirective, typeof RemoveCommandDirective, typeof AddCommandDirective, typeof AddCommandToolbarDirective, typeof EditCommandToolbarDirective, typeof SaveCommandToolbarDirective, typeof RemoveCommandToolbarDirective, typeof CancelCommandToolbarDirective, typeof CellLoadingTemplateDirective, typeof LoadingTemplateDirective, typeof RowReorderColumnComponent, typeof SortCommandToolbarDirective, typeof FilterCommandToolbarDirective, typeof AIAssistantToolbarDirective, typeof GroupCommandToolbarDirective, typeof SelectAllToolbarToolComponent, typeof HeaderComponent, typeof HeaderTemplateDirective, typeof ColumnHandleDirective, typeof SelectAllCheckboxDirective, typeof FilterRowComponent, typeof FilterCellComponent, typeof FilterCellTemplateDirective, typeof StringFilterCellComponent, typeof NumericFilterCellComponent, typeof AutoCompleteFilterCellComponent, typeof BooleanFilterCellComponent, typeof FilterCellHostDirective, typeof FilterCellWrapperComponent, typeof DateFilterCellComponent, typeof FilterCellOperatorsComponent, typeof ContainsFilterOperatorComponent, typeof DoesNotContainFilterOperatorComponent, typeof EndsWithFilterOperatorComponent, typeof EqualFilterOperatorComponent, typeof IsEmptyFilterOperatorComponent, typeof IsNotEmptyFilterOperatorComponent, typeof IsNotNullFilterOperatorComponent, typeof IsNullFilterOperatorComponent, typeof NotEqualFilterOperatorComponent, typeof StartsWithFilterOperatorComponent, typeof GreaterFilterOperatorComponent, typeof GreaterOrEqualToFilterOperatorComponent, typeof LessFilterOperatorComponent, typeof LessOrEqualToFilterOperatorComponent, typeof AfterFilterOperatorComponent, typeof AfterEqFilterOperatorComponent, typeof BeforeEqFilterOperatorComponent, typeof BeforeFilterOperatorComponent, typeof FilterMenuComponent, typeof FilterMenuContainerComponent, typeof FilterMenuInputWrapperComponent, typeof StringFilterMenuInputComponent, typeof StringFilterMenuComponent, typeof FilterMenuTemplateDirective, typeof NumericFilterMenuComponent, typeof NumericFilterMenuInputComponent, typeof DateFilterMenuInputComponent, typeof DateFilterMenuComponent, typeof FilterMenuHostDirective, typeof BooleanFilterMenuComponent, typeof FilterMenuDropDownListDirective, typeof BooleanFilterRadioButtonDirective, typeof ColumnChooserComponent, typeof ColumnChooserToolbarDirective, typeof ColumnMenuFilterComponent, typeof ColumnMenuItemComponent, typeof ColumnMenuItemContentTemplateDirective, typeof ColumnMenuSortComponent, typeof ColumnMenuLockComponent, typeof ColumnMenuStickComponent, typeof ColumnMenuPositionComponent, typeof ColumnMenuChooserComponent, typeof ColumnMenuTemplateDirective, typeof ColumnMenuContainerComponent, typeof ColumnMenuItemDirective, typeof ColumnMenuComponent, typeof ColumnMenuAutoSizeColumnComponent, typeof ColumnMenuAutoSizeAllColumnsComponent, typeof GridClipboardDirective, typeof UndoRedoDirective, typeof UndoCommandToolbarDirective, typeof RedoCommandToolbarDirective, typeof ExcelComponent, typeof ExcelCommandDirective, typeof ExcelCommandToolbarDirective, typeof ExcelColumnComponent, typeof ExcelColumnGroupComponent, typeof ExcelFooterTemplateDirective, typeof ExcelGroupFooterTemplateDirective, typeof ExcelGroupHeaderColumnTemplateDirective, typeof ExcelGroupHeaderTemplateDirective, typeof PDFComponent, typeof PDFMarginComponent, typeof PDFCommandDirective, typeof PDFTemplateDirective, typeof PDFCommandToolbarDirective];
273
+ export declare const KENDO_GRID: readonly [typeof GridComponent, typeof ToolbarTemplateDirective, typeof ToolbarComponent, typeof GridSpacerComponent, typeof StatusBarTemplateDirective, typeof DataBindingDirective, typeof SelectionDirective, typeof HighlightDirective, typeof CustomMessagesComponent, typeof TemplateEditingDirective, typeof ReactiveEditingDirective, typeof InCellEditingDirective, typeof ExternalEditingDirective, typeof ExpandDetailsDirective, typeof ExpandGroupDirective, typeof GridToolbarFocusableDirective, typeof GroupHeaderTemplateDirective, typeof GroupHeaderColumnTemplateDirective, typeof GroupFooterTemplateDirective, typeof GroupHeaderComponent, typeof GroupPanelComponent, typeof ColumnComponent, typeof ColumnGroupComponent, typeof LogicalCellDirective, typeof LogicalRowDirective, typeof FocusableDirective, typeof FooterTemplateDirective, typeof ColGroupComponent, typeof ResizableContainerDirective, typeof TemplateContextDirective, typeof FieldAccessorPipe, typeof DetailTemplateDirective, typeof SpanColumnComponent, typeof LoadingComponent, typeof GridTableDirective, typeof CommandColumnComponent, typeof CheckboxColumnComponent, typeof SelectionCheckboxDirective, typeof CellTemplateDirective, typeof EditTemplateDirective, typeof RowDragHandleTemplateDirective, typeof RowDragHintTemplateDirective, typeof TableBodyComponent, typeof NoRecordsTemplateDirective, typeof CellComponent, typeof EditCommandDirective, typeof CancelCommandDirective, typeof SaveCommandDirective, typeof RemoveCommandDirective, typeof AddCommandDirective, typeof AddCommandToolbarDirective, typeof EditCommandToolbarDirective, typeof SaveCommandToolbarDirective, typeof RemoveCommandToolbarDirective, typeof CancelCommandToolbarDirective, typeof CellLoadingTemplateDirective, typeof LoadingTemplateDirective, typeof RowReorderColumnComponent, typeof SortCommandToolbarDirective, typeof FilterCommandToolbarDirective, typeof AIAssistantToolbarDirective, typeof GroupCommandToolbarDirective, typeof SelectAllToolbarToolComponent, typeof HeaderComponent, typeof HeaderTemplateDirective, typeof ColumnHandleDirective, typeof SelectAllCheckboxDirective, typeof FilterRowComponent, typeof FilterCellComponent, typeof FilterCellTemplateDirective, typeof StringFilterCellComponent, typeof NumericFilterCellComponent, typeof AutoCompleteFilterCellComponent, typeof BooleanFilterCellComponent, typeof FilterCellHostDirective, typeof FilterCellWrapperComponent, typeof DateFilterCellComponent, typeof FilterCellOperatorsComponent, typeof ContainsFilterOperatorComponent, typeof DoesNotContainFilterOperatorComponent, typeof EndsWithFilterOperatorComponent, typeof EqualFilterOperatorComponent, typeof IsEmptyFilterOperatorComponent, typeof IsNotEmptyFilterOperatorComponent, typeof IsNotNullFilterOperatorComponent, typeof IsNullFilterOperatorComponent, typeof NotEqualFilterOperatorComponent, typeof StartsWithFilterOperatorComponent, typeof GreaterFilterOperatorComponent, typeof GreaterOrEqualToFilterOperatorComponent, typeof LessFilterOperatorComponent, typeof LessOrEqualToFilterOperatorComponent, typeof AfterFilterOperatorComponent, typeof AfterEqFilterOperatorComponent, typeof BeforeEqFilterOperatorComponent, typeof BeforeFilterOperatorComponent, typeof FilterMenuComponent, typeof FilterMenuContainerComponent, typeof FilterMenuInputWrapperComponent, typeof StringFilterMenuInputComponent, typeof StringFilterMenuComponent, typeof FilterMenuTemplateDirective, typeof NumericFilterMenuComponent, typeof NumericFilterMenuInputComponent, typeof DateFilterMenuInputComponent, typeof DateFilterMenuComponent, typeof FilterMenuHostDirective, typeof BooleanFilterMenuComponent, typeof FilterMenuDropDownListDirective, typeof BooleanFilterRadioButtonDirective, typeof ColumnChooserComponent, typeof ColumnChooserToolbarDirective, typeof ColumnMenuFilterComponent, typeof ColumnMenuItemComponent, typeof ColumnMenuItemContentTemplateDirective, typeof ColumnMenuSortComponent, typeof ColumnMenuLockComponent, typeof ColumnMenuStickComponent, typeof ColumnMenuPositionComponent, typeof ColumnMenuChooserComponent, typeof ColumnMenuTemplateDirective, typeof ColumnMenuContainerComponent, typeof ColumnMenuItemDirective, typeof ColumnMenuComponent, typeof ColumnMenuAutoSizeColumnComponent, typeof ColumnMenuAutoSizeAllColumnsComponent, typeof GridClipboardDirective, typeof UndoRedoDirective, typeof UndoCommandToolbarDirective, typeof RedoCommandToolbarDirective, typeof ExcelComponent, typeof ExcelCommandDirective, typeof ExcelCommandToolbarDirective, typeof ExcelColumnComponent, typeof ExcelColumnGroupComponent, typeof ExcelFooterTemplateDirective, typeof ExcelGroupFooterTemplateDirective, typeof ExcelGroupHeaderColumnTemplateDirective, typeof ExcelGroupHeaderTemplateDirective, typeof PDFComponent, typeof PDFMarginComponent, typeof PDFCommandDirective, typeof PDFTemplateDirective, typeof PDFCommandToolbarDirective];
@@ -50,9 +50,6 @@ export const GridConfigurationErrorMessages = {
50
50
  functionType: (propName, fn) => `${propName} must be a function, but received ${JSON.stringify(fn)}.`,
51
51
  incompatibleFeatures: (feat1Name, feat2Name) => `'Having both ${feat1Name} and ${feat2Name} is not supported.'`,
52
52
  nonLockedColumnPresent: 'There should be at least one non-locked column. See https://www.telerik.com/kendo-angular-ui/components/grid/columns/locked/#toc-known-limitations',
53
- rowHeightVirtual: `The virtual scrolling functionality requires setting the rowHeight (and detailRowHeight when there are detail rows).
54
- Row height and detail row height settings should be set only when virtual scrolling mode is enabled.
55
- See https://www.telerik.com/kendo-angular-ui/components/grid/scroll-modes/virtual/#toc-getting-started.`,
56
53
  focusNavigable: 'The Grid should be configured as navigable to control focus. See https://www.telerik.com/kendo-angular-ui/components/grid/keyboard-navigation/.',
57
54
  expandCollapseMethods: (expandMethodName, collapseMethodName, directiveName, callbackName) => `The ${expandMethodName} and ${collapseMethodName} methods should not be called
58
55
  when using the ${directiveName} directive or the ${callbackName} callback.
@@ -60,9 +57,6 @@ export const GridConfigurationErrorMessages = {
60
57
  requiredEditService: `The default edit service of the editing directives works only when binding to plain array.
61
58
  Please provide an editService. See https://www.telerik.com/kendo-angular-ui/components/grid/editing/editing-directives/#toc-custom-editing-service.`,
62
59
  requiredModule: (exportedType, moduleName, componentSelector) => `Creating ${exportedType} requires including the ${moduleName} and adding the ${componentSelector} component.`,
63
- groupBindingDirectives: `Using the "kendoGridGroupBinding" directive in combination with the "kendoGridExpandGroupBy" directive
64
- or the "isGroupExpanded" callback is not supported. To use grouping with the "kendoGridGroupBinding" directive,
65
- set the Grid "groupable" property to "true".`,
66
60
  unsupportedMethod: (methodName, suggestedMethodName) => `Using ${methodName} in this context is not supported. Use ${suggestedMethodName} instead.`,
67
61
  unsupportedToolbarConfig: `
68
62
  Defining both a toolbar template and a ToolBarComponent within the Grid is not supported.
@@ -23,6 +23,7 @@ export class ContextService {
23
23
  topToolbarNavigation;
24
24
  bottomToolbarNavigation;
25
25
  navigable;
26
+ scroller;
26
27
  dataBindingDirective;
27
28
  highlightDirective;
28
29
  constructor(renderer, localization) {
@@ -8,10 +8,6 @@ const isGroupItem = (source) => {
8
8
  return source.items !== undefined &&
9
9
  source.field !== undefined;
10
10
  };
11
- const isVirtualGroupItem = (source) => {
12
- return source.offset !== undefined &&
13
- source.skipHeader !== undefined;
14
- };
15
11
  const flattenGroups = (groups) => (groups.reduce((acc, curr) => {
16
12
  if (isGroupItem(curr)) {
17
13
  return acc.concat(flattenGroups(curr.items));
@@ -34,9 +30,6 @@ export const itemAt = (data, index) => {
34
30
  export const getIterator = (data, { footers, level, dataIndex, parentGroupIndex, groupIndex, parentGroup }) => {
35
31
  const first = data[0];
36
32
  if (isPresent(first) && isGroupItem(first)) {
37
- if (isVirtualGroupItem(first)) {
38
- groupIndex = isPresent(first.offset) ? first.offset : groupIndex;
39
- }
40
33
  return new GroupIterator(data, footers, level, dataIndex, parentGroupIndex, groupIndex, parentGroup);
41
34
  }
42
35
  return new ItemIterator(data, dataIndex, parentGroupIndex, parentGroup);
@@ -132,9 +132,6 @@ export class DataBindingDirective {
132
132
  this.rowReorderSubscription.unsubscribe();
133
133
  }
134
134
  }
135
- /**
136
- * @hidden
137
- */
138
135
  ngOnChanges(changes) {
139
136
  if (anyChanged(["pageSize", "skip", "sort", "group", "filter"], changes)) {
140
137
  this.rebind();
@@ -177,7 +174,7 @@ export class DataBindingDirective {
177
174
  }
178
175
  }
179
176
  process(state) {
180
- if (this.grid.isVirtual && (!isPresent(state.take) || state.take === 0)) {
177
+ if (this.grid.isVirtual && ((!isPresent(state.take) || state.take === 0) && !state.group?.length)) {
181
178
  return {
182
179
  data: [],
183
180
  total: this.originalData?.length || 0
@@ -193,6 +190,9 @@ export class DataBindingDirective {
193
190
  this.filter = filter;
194
191
  }
195
192
  updateGridData() {
193
+ if (this.grid.isVirtual && !this.grid.pageable && this.state.group?.length) {
194
+ this.state.take = undefined;
195
+ }
196
196
  this.grid.data = this.process(this.state);
197
197
  this.grid.updateNavigationMetadata();
198
198
  this.dataChanged = false;
@@ -134,7 +134,6 @@ import { InCellEditingDirective } from "./editing-directives/in-cell-editing.dir
134
134
  import { ExternalEditingDirective } from "./editing-directives/external-editing.directive";
135
135
  import { ExpandDetailsDirective } from "./rendering/details-expand.directive";
136
136
  import { ExpandGroupDirective } from "./rendering/groups-expand.directive";
137
- import { GroupBindingDirective } from "./grouping/group-scroll-binding.directive";
138
137
  import { GridMarqueeDirective } from "./selection/marquee.directive";
139
138
  import { GridSpacerComponent } from "./rendering/common/spacer.component";
140
139
  import { GridToolbarFocusableDirective } from "./rendering/toolbar/toolbar-focusable.directive";
@@ -414,7 +413,6 @@ export const KENDO_GRID_DECLARATIONS = [
414
413
  ExternalEditingDirective,
415
414
  ExpandDetailsDirective,
416
415
  ExpandGroupDirective,
417
- GroupBindingDirective,
418
416
  GridMarqueeDirective,
419
417
  GridSpacerComponent,
420
418
  GridToolbarFocusableDirective,
@@ -441,7 +439,6 @@ export const KENDO_GRID_EXPORTS = [
441
439
  SelectionDirective,
442
440
  HighlightDirective,
443
441
  CustomMessagesComponent,
444
- GroupBindingDirective,
445
442
  TemplateEditingDirective,
446
443
  ReactiveEditingDirective,
447
444
  InCellEditingDirective,
@@ -71,7 +71,7 @@ import { CellLoadingTemplateDirective } from './rendering/cell-loading.template.
71
71
  import { ContextService } from './common/provider.service';
72
72
  import { LoadingTemplateDirective } from './rendering/loading-template.directive';
73
73
  import { SizingOptionsService } from './layout/sizing-options.service';
74
- import { DraggableDirective, WatermarkOverlayComponent, guid, shouldShowValidationUI, getLicenseMessage } from '@progress/kendo-angular-common';
74
+ import { DraggableDirective, ResizeSensorComponent, WatermarkOverlayComponent, guid, shouldShowValidationUI, getLicenseMessage } from '@progress/kendo-angular-common';
75
75
  import { DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
76
76
  import { RowReorderService } from './row-reordering/row-reorder.service';
77
77
  import { StatusBarTemplateDirective } from './aggregates/status-bar-template.directive';
@@ -271,9 +271,8 @@ export class GridComponent {
271
271
  */
272
272
  height;
273
273
  /**
274
- * Represents the row height in pixels for each Grid row (`tr`) element.
275
- * Required for [virtual scrolling]({% slug scrollmmodes_grid %}).
276
- * Set `rowHeight` to match the actual DOM row height. The property does not change the height of the rows in the UI.
274
+ * Sets the `style.height` attribute of each Grid data or group header/footer row (`tr`) element in the DOM in pixels.
275
+ * If some row cells have content that requires more space, the row automatically expands to fit the content.
277
276
  */
278
277
  rowHeight;
279
278
  /**
@@ -283,9 +282,8 @@ export class GridComponent {
283
282
  */
284
283
  adaptiveMode = 'none';
285
284
  /**
286
- * Represents the height in pixels for each Grid detail row (`tr`) element.
287
- * Required for [virtual scrolling]({% slug scrollmmodes_grid %}).
288
- * Set `detailRowHeight` to match the actual DOM detail row height. The property does not change the height of the rows in the UI.
285
+ * Sets the `style.height` attribute of each Grid detail row (`tr.k-detail-row`) element in the DOM in pixels.
286
+ * If the detail row has content that requires more space, the row automatically expands to fit the content.
289
287
  */
290
288
  detailRowHeight;
291
289
  /**
@@ -396,14 +394,14 @@ export class GridComponent {
396
394
  */
397
395
  get showTopPager() {
398
396
  const position = this.pageable.position;
399
- return !this.isVirtual && this.pageable !== false && ['top', 'both'].indexOf(position) > -1;
397
+ return this.pageable !== false && ['top', 'both'].indexOf(position) > -1;
400
398
  }
401
399
  /**
402
400
  * @hidden
403
401
  */
404
402
  get showBottomPager() {
405
403
  const position = this.pageable.position;
406
- return !this.isVirtual && this.pageable !== false && position !== 'top';
404
+ return this.pageable !== false && position !== 'top';
407
405
  }
408
406
  /**
409
407
  * @hidden
@@ -868,7 +866,7 @@ export class GridComponent {
868
866
  cellLoadingTemplateChildren;
869
867
  get cellLoadingTemplate() {
870
868
  if (this._cellLoadingTemplate) {
871
- return this._customDetailTemplate;
869
+ return this._cellLoadingTemplate;
872
870
  }
873
871
  return this.cellLoadingTemplateChildren ? this.cellLoadingTemplateChildren.first : undefined;
874
872
  }
@@ -1484,6 +1482,15 @@ export class GridComponent {
1484
1482
  }
1485
1483
  this.columnRangeChangeSubscription.unsubscribe();
1486
1484
  }
1485
+ /**
1486
+ * @hidden
1487
+ */
1488
+ onResize() {
1489
+ if (this.isVirtual) {
1490
+ this.ctx.scroller.update();
1491
+ this.listComponent.resetNavigationViewport();
1492
+ }
1493
+ }
1487
1494
  /**
1488
1495
  * @hidden
1489
1496
  */
@@ -2026,12 +2033,6 @@ export class GridComponent {
2026
2033
  if (this.columnList.filter(x => x.locked && x.parent && !x.parent.isLocked).length) {
2027
2034
  throw new Error(ColumnConfigurationErrorMessages.lockedParent);
2028
2035
  }
2029
- if (this.detailRowHeight && !this.isVirtual) {
2030
- console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
2031
- }
2032
- if (!this.detailRowHeight && this.isVirtual && this.detailTemplate) {
2033
- console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
2034
- }
2035
2036
  if (!this.isStacked && stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2036
2037
  console.warn(ColumnConfigurationErrorMessages.requiredWidth('Sticky'));
2037
2038
  }
@@ -2099,11 +2100,21 @@ export class GridComponent {
2099
2100
  }
2100
2101
  attachStateChangesEmitter() {
2101
2102
  this.stateChangeSubscription =
2102
- merge(this.pageChange.pipe(map(x => ({
2103
+ merge(this.pageChange.pipe(tap(() => {
2104
+ if (this.pageable) {
2105
+ this.ctx.scroller?.reset();
2106
+ }
2107
+ }), map(x => ({
2103
2108
  filter: this.filter, group: this.group, skip: x.skip, sort: this.sort, take: x.take
2104
- }))), this.sortChange.pipe(map(sort => ({ filter: this.filter, group: this.group, skip: this.skip, sort: sort, take: this.pageSize }))), this.groupChange.pipe(map(group => ({
2105
- filter: this.filter, group: group, skip: this.skip, sort: this.sort, take: this.pageSize
2106
- }))), this.filterChange.pipe(map(filter => ({
2109
+ }))), this.sortChange.pipe(tap(() => {
2110
+ this.ctx.scroller?.reset();
2111
+ }), map(sort => ({ filter: this.filter, group: this.group, skip: this.isVirtual && !this.pageable ? 0 : this.skip, sort: sort, take: this.pageSize }))), this.groupChange.pipe(tap(() => {
2112
+ this.ctx.scroller?.reset();
2113
+ }), map(group => ({
2114
+ filter: this.filter, group: group, skip: this.pageable ? this.skip : 0, sort: this.sort, take: (this.pageable || !group?.length) ? this.pageSize : undefined
2115
+ }))), this.filterChange.pipe(tap(() => {
2116
+ this.ctx.scroller?.reset();
2117
+ }), map(filter => ({
2107
2118
  filter: filter, group: this.group, skip: 0, sort: this.sort, take: this.pageSize
2108
2119
  }))))
2109
2120
  .subscribe(x => {
@@ -2112,11 +2123,18 @@ export class GridComponent {
2112
2123
  if (this.selectable && this.selectableSettings?.enabled && this.isVirtual) {
2113
2124
  this.blockArrowSelection = true;
2114
2125
  }
2126
+ this.isVirtual && this.ctx.scroller?.resetVirtualSkip();
2115
2127
  this.dataStateChange.emit(x);
2116
2128
  hasObservers(this.gridStateChange) && this.gridStateChange.emit({ ...this.currentState, ...x });
2117
2129
  });
2118
2130
  this.stateChangeSubscription.add(merge(this.columnReorder, this.columnResize, this.columnVisibilityChange, this.columnLockedChange, this.columnStickyChange).pipe(flatMap(() => this.ngZone.onStable.pipe(take(1))))
2119
- .subscribe(() => this.ngZone.run(() => hasObservers(this.gridStateChange) && this.gridStateChange.emit(this.currentState))));
2131
+ .subscribe(() => this.ngZone.run(() => {
2132
+ hasObservers(this.gridStateChange) && this.gridStateChange.emit(this.currentState);
2133
+ if (this.isVirtual) {
2134
+ this.ctx.scroller?.update();
2135
+ this.listComponent?.resetNavigationViewport();
2136
+ }
2137
+ })));
2120
2138
  }
2121
2139
  attachEditHandlers() {
2122
2140
  if (!this.editService) {
@@ -2301,12 +2319,25 @@ export class GridComponent {
2301
2319
  _rowClass = () => null;
2302
2320
  navigationMetadata() {
2303
2321
  const isVirtual = this.isVirtual;
2304
- const pageSize = this.pageSize;
2305
- const dataRows = isVirtual ? this.view.total : pageSize;
2322
+ const dataVirtualization = isVirtual && !this.pageable && !this.group?.length;
2323
+ const groupedVirtual = isVirtual && this.group?.length > 0;
2324
+ let dataRows;
2325
+ if (this.pageable) {
2326
+ dataRows = this.skip + Math.min(this.pageSize, this.view.length); // last page might have less rows than the rest
2327
+ }
2328
+ else {
2329
+ dataRows = this.view.total;
2330
+ }
2331
+ if (groupedVirtual) {
2332
+ dataRows = this.ctx.scroller?.total ?? 0;
2333
+ if (!dataVirtualization) {
2334
+ dataRows += this.skip;
2335
+ }
2336
+ }
2306
2337
  const addRowOffset = this.editService.hasNewItem ? 1 : 0;
2307
2338
  const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
2308
2339
  const headerRows = this.isStacked ? 0 : this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
2309
- return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.isStacked);
2340
+ return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.showFooter ? 1 : 0, this.isStacked);
2310
2341
  }
2311
2342
  applyAutoSize() {
2312
2343
  const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
@@ -2388,10 +2419,8 @@ export class GridComponent {
2388
2419
  }
2389
2420
  if (this.groupsService.isExpanded({ groupIndex: index }) !== expand) {
2390
2421
  this.groupsService.toggleRow({ index }, false);
2391
- if (this.ctx.dataBindingDirective && isPresent(this.ctx.dataBindingDirective.groupExpand)) {
2392
- this.ctx.dataBindingDirective[`group${expand ? 'Expand' : 'Collapse'}`]({ groupIndex: index });
2393
- }
2394
2422
  }
2423
+ this.changeDetectorRef.markForCheck();
2395
2424
  }
2396
2425
  shouldResetSelection(selectableChanges) {
2397
2426
  const previousValue = selectableChanges.previousValue;
@@ -3139,6 +3168,8 @@ export class GridComponent {
3139
3168
  </thead>
3140
3169
  <tbody kendoGridTableBody
3141
3170
  [isLoading]="loading"
3171
+ [rowHeight]="rowHeight"
3172
+ [detailRowHeight]="detailRowHeight"
3142
3173
  [groups]="group"
3143
3174
  [rowsToRender]="rowsToRender"
3144
3175
  [skip]="skip"
@@ -3253,11 +3284,11 @@ export class GridComponent {
3253
3284
  <div #dialogContainer></div>
3254
3285
 
3255
3286
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
3256
-
3287
+ <kendo-resize-sensor *ngIf="isVirtual" (resize)="onResize()"></kendo-resize-sensor>
3257
3288
  <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
3258
3289
 
3259
3290
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
3260
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GridToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i27.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i27.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i27.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i27.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i27.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i27.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i27.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i27.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i27.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }], encapsulation: i0.ViewEncapsulation.None });
3291
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GridToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass", "rowHeight", "detailRowHeight"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i27.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i27.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i27.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i27.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i27.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i27.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i27.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i27.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i27.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], encapsulation: i0.ViewEncapsulation.None });
3261
3292
  }
3262
3293
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
3263
3294
  type: Component,
@@ -3994,6 +4025,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3994
4025
  </thead>
3995
4026
  <tbody kendoGridTableBody
3996
4027
  [isLoading]="loading"
4028
+ [rowHeight]="rowHeight"
4029
+ [detailRowHeight]="detailRowHeight"
3997
4030
  [groups]="group"
3998
4031
  [rowsToRender]="rowsToRender"
3999
4032
  [skip]="skip"
@@ -4108,7 +4141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4108
4141
  <div #dialogContainer></div>
4109
4142
 
4110
4143
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
4111
-
4144
+ <kendo-resize-sensor *ngIf="isVirtual" (resize)="onResize()"></kendo-resize-sensor>
4112
4145
  <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
4113
4146
 
4114
4147
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
@@ -4119,7 +4152,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4119
4152
  TableDirective, GridTableDirective, ColGroupComponent, HeaderComponent, ResizableContainerDirective,
4120
4153
  ListComponent, DragTargetContainerDirective, DropTargetContainerDirective, DraggableDirective,
4121
4154
  GridMarqueeDirective, FooterComponent, TableBodyComponent, LoadingComponent, StatusBarComponent,
4122
- IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet, AdaptiveRendererComponent
4155
+ IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet, AdaptiveRendererComponent, ResizeSensorComponent
4123
4156
  ]
4124
4157
  }]
4125
4158
  }], ctorParameters: function () { return [{ type: i1.BrowserSupportService }, { type: i2.SelectionService }, { type: i3.CellSelectionService }, { type: i0.ElementRef }, { type: i4.GroupInfoService }, { type: i5.GroupsService }, { type: i6.ChangeNotificationService }, { type: i7.DetailsService }, { type: i8.EditService }, { type: i9.FilterService }, { type: i10.PDFService }, { type: i11.ResponsiveService }, { type: i0.Renderer2 }, { type: i12.ExcelService }, { type: i0.NgZone }, { type: i13.ScrollSyncService }, { type: i14.DomEventsService }, { type: i15.ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: i16.ColumnReorderService }, { type: i17.ColumnInfoService }, { type: i18.NavigationService }, { type: i19.SortService }, { type: i20.ScrollRequestService }, { type: i21.LocalizationService }, { type: i22.ContextService }, { type: i23.SizingOptionsService }, { type: i24.AdaptiveGridService }, { type: i25.RowReorderService }, { type: i26.DataMappingService }]; }, propDecorators: { data: [{