@progress/kendo-angular-grid 19.1.2-develop.8 → 19.2.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,46 @@
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
+ import { QueryList } from '@angular/core';
6
+ import { RowspanService } from '../rendering/rowspan.service';
7
+ import { GroupsService } from '../grouping/groups.service';
8
+ import { GridItem } from './grid-item.interface';
9
+ import { DetailsService } from '../rendering/details/details.service';
10
+ import { ColumnBase } from '../columns/column-base';
11
+ import { DetailTemplateDirective } from '../rendering/details/detail-template.directive';
12
+ import * as i0 from "@angular/core";
13
+ /**
14
+ * @hidden
15
+ */
16
+ export declare class DataMappingService {
17
+ private rowspanService;
18
+ private groupsService;
19
+ private detailsService;
20
+ private recalculateRowspan;
21
+ private dataArray;
22
+ constructor(rowspanService: RowspanService, groupsService: GroupsService, detailsService: DetailsService);
23
+ private isGroup;
24
+ /**
25
+ * Maps the data to the Grid row items, applying rowspan and detail row logic.
26
+ */
27
+ dataMapper(data: any, nonLockedColumnsToRender: QueryList<ColumnBase>, lockedLeafColumns: QueryList<ColumnBase>, detailTemplate: DetailTemplateDirective, showFooter: boolean): Array<GridItem & {
28
+ showDataItem?: boolean;
29
+ showDetailRow?: boolean;
30
+ cells?: any[];
31
+ isExpanded?: boolean;
32
+ }>;
33
+ private isDataItem;
34
+ private isFooter;
35
+ private isFooterItemInExpandedGroup;
36
+ private isDataItemInExpandedGroup;
37
+ private isInExpandedGroup;
38
+ private isParentGroupExpanded;
39
+ private isExpanded;
40
+ private shouldRenderItem;
41
+ private shouldSkipCell;
42
+ private cachedDataArray;
43
+ private getRowspan;
44
+ static ɵfac: i0.ɵɵFactoryDeclaration<DataMappingService, never>;
45
+ static ɵprov: i0.ɵɵInjectableDeclaration<DataMappingService>;
46
+ }
@@ -0,0 +1,125 @@
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
+ import { Injectable } from '@angular/core';
6
+ import { RowspanService } from '../rendering/rowspan.service';
7
+ import { GroupsService } from '../grouping/groups.service';
8
+ import { DetailsService } from '../rendering/details/details.service';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../rendering/rowspan.service";
11
+ import * as i2 from "../grouping/groups.service";
12
+ import * as i3 from "../rendering/details/details.service";
13
+ /**
14
+ * @hidden
15
+ */
16
+ export class DataMappingService {
17
+ rowspanService;
18
+ groupsService;
19
+ detailsService;
20
+ recalculateRowspan = true;
21
+ dataArray = null;
22
+ constructor(rowspanService, groupsService, detailsService) {
23
+ this.rowspanService = rowspanService;
24
+ this.groupsService = groupsService;
25
+ this.detailsService = detailsService;
26
+ }
27
+ isGroup(item) {
28
+ return item.type === 'group';
29
+ }
30
+ /**
31
+ * Maps the data to the Grid row items, applying rowspan and detail row logic.
32
+ */
33
+ dataMapper(data, nonLockedColumnsToRender, lockedLeafColumns, detailTemplate, showFooter) {
34
+ const result = [];
35
+ if (!data || !nonLockedColumnsToRender && !lockedLeafColumns) {
36
+ return [];
37
+ }
38
+ let dataIndex = 0;
39
+ for (const item of data) {
40
+ if (this.shouldRenderItem(item, detailTemplate, showFooter)) {
41
+ if (item.type === 'data') {
42
+ item.cells = [];
43
+ for (let i = 0; i < (lockedLeafColumns.length + nonLockedColumnsToRender.length); i++) {
44
+ const column = i < lockedLeafColumns.length ? lockedLeafColumns.get(i) : nonLockedColumnsToRender.get(i - lockedLeafColumns.length);
45
+ const cell = {};
46
+ if (column.cellRowspan && this.shouldSkipCell(dataIndex, i)) {
47
+ cell.skip = true;
48
+ }
49
+ else {
50
+ cell.rowspan = column.cellRowspan ? this.getRowspan({
51
+ index: dataIndex,
52
+ dataItem: item
53
+ }, column, i, data) : 1;
54
+ }
55
+ item.cells.push(cell);
56
+ }
57
+ }
58
+ result.push(item);
59
+ }
60
+ dataIndex++;
61
+ }
62
+ this.recalculateRowspan = true;
63
+ this.rowspanService.reset();
64
+ return result;
65
+ }
66
+ isDataItem(item) {
67
+ return !this.isGroup(item) && !this.isFooter(item);
68
+ }
69
+ isFooter(item) {
70
+ return item.type === 'footer';
71
+ }
72
+ isFooterItemInExpandedGroup(item) {
73
+ const footerItem = { data: item.data, index: item.groupIndex, parentGroup: item.group.parentGroup };
74
+ return this.isInExpandedGroup(footerItem);
75
+ }
76
+ isDataItemInExpandedGroup(item) {
77
+ const dataItem = { data: item.group.data, index: item.groupIndex, parentGroup: item.group.parentGroup };
78
+ return this.isInExpandedGroup(dataItem);
79
+ }
80
+ isInExpandedGroup(item) {
81
+ return this.groupsService.isInExpandedGroup(item);
82
+ }
83
+ isParentGroupExpanded(item) {
84
+ return this.groupsService.isInExpandedGroup(item.parentGroup);
85
+ }
86
+ isExpanded(viewItem) {
87
+ return this.detailsService.isExpanded(viewItem.index, viewItem.data);
88
+ }
89
+ shouldRenderItem(item, detailTemplate, showFooter) {
90
+ const renderGroupHeader = this.isGroup(item) && this.isParentGroupExpanded(item);
91
+ const renderDataItem = this.isDataItem(item) && (!item.group || this.isDataItemInExpandedGroup(item));
92
+ const renderDetailTemplate = renderDataItem && detailTemplate?.templateRef && detailTemplate.showIf(item.data, item.index) && this.isExpanded(item);
93
+ const isVisibleFooter = this.isFooter(item) && item.group && (this.isFooterItemInExpandedGroup(item) || (showFooter && this.isParentGroupExpanded(item.group)));
94
+ const renderFooter = isVisibleFooter && !item.data.hideFooter;
95
+ item.showDataItem = renderDataItem;
96
+ item.showDetailRow = renderDataItem && renderDetailTemplate;
97
+ item.isExpanded = this.isExpanded(item);
98
+ return renderGroupHeader || renderDataItem || renderDetailTemplate || renderFooter;
99
+ }
100
+ shouldSkipCell(rowIndex, colIndex) {
101
+ return this.rowspanService.shouldSkip(rowIndex, colIndex);
102
+ }
103
+ cachedDataArray(data) {
104
+ if (!this.dataArray) {
105
+ this.dataArray = data.map(item => item);
106
+ }
107
+ return this.dataArray;
108
+ }
109
+ getRowspan(row, column, colIndex, data) {
110
+ if (this.recalculateRowspan) {
111
+ this.dataArray = null;
112
+ this.recalculateRowspan = false;
113
+ }
114
+ const rowspan = column.cellRowspan(row, column, this.cachedDataArray(data));
115
+ if (rowspan > 1) {
116
+ this.rowspanService.addCells(row.index, colIndex, rowspan);
117
+ }
118
+ return rowspan;
119
+ }
120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataMappingService, deps: [{ token: i1.RowspanService }, { token: i2.GroupsService }, { token: i3.DetailsService }], target: i0.ɵɵFactoryTarget.Injectable });
121
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataMappingService });
122
+ }
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataMappingService, decorators: [{
124
+ type: Injectable
125
+ }], ctorParameters: function () { return [{ type: i1.RowspanService }, { type: i2.GroupsService }, { type: i3.DetailsService }]; } });
@@ -174,6 +174,12 @@ export class DataBindingDirective {
174
174
  }
175
175
  }
176
176
  process(state) {
177
+ if (this.grid.isVirtual && (!isPresent(state.take) || state.take === 0)) {
178
+ return {
179
+ data: [],
180
+ total: this.originalData?.length || 0
181
+ };
182
+ }
177
183
  return process(this.originalData, state);
178
184
  }
179
185
  applyState({ skip, take, sort, group, filter }) {
@@ -72,7 +72,7 @@ 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
74
  import { DraggableDirective, WatermarkOverlayComponent, guid, shouldShowValidationUI } from '@progress/kendo-angular-common';
75
- import { AdaptiveService, DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
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';
78
78
  import { CellSelectionAggregateService } from './aggregates/selection-aggregate.service';
@@ -100,6 +100,7 @@ import { AdaptiveGridService } from './common/adaptiveness.service';
100
100
  import { AdaptiveRendererComponent } from './adaptiveness/adaptive-renderer.component';
101
101
  import { ColumnMenuService } from './column-menu/column-menu.service';
102
102
  import { MenuTabbingService } from './filtering/menu/menu-tabbing.service';
103
+ import { DataMappingService } from './data/data-mapping.service';
103
104
  import * as i0 from "@angular/core";
104
105
  import * as i1 from "./layout/browser-support.service";
105
106
  import * as i2 from "./selection/selection.service";
@@ -124,9 +125,9 @@ import * as i20 from "./scrolling/scroll-request.service";
124
125
  import * as i21 from "@progress/kendo-angular-l10n";
125
126
  import * as i22 from "./common/provider.service";
126
127
  import * as i23 from "./layout/sizing-options.service";
127
- import * as i24 from "@progress/kendo-angular-utils";
128
- import * as i25 from "./common/adaptiveness.service";
129
- import * as i26 from "./row-reordering/row-reorder.service";
128
+ import * as i24 from "./common/adaptiveness.service";
129
+ import * as i25 from "./row-reordering/row-reorder.service";
130
+ import * as i26 from "./data/data-mapping.service";
130
131
  import * as i27 from "@progress/kendo-angular-pager";
131
132
  const createControl = (source) => (acc, key) => {
132
133
  acc[key] = new FormControl(source[key]);
@@ -206,9 +207,9 @@ export class GridComponent {
206
207
  localization;
207
208
  ctx;
208
209
  sizingService;
209
- adaptiveService;
210
210
  adaptiveGridService;
211
211
  rowReorderService;
212
+ dataMappingService;
212
213
  /**
213
214
  * Sets the data of the Grid. If you provide an array, the Grid gets the total count automatically.
214
215
  * ([more information and example]({% slug binding_grid %})).
@@ -1119,6 +1120,7 @@ export class GridComponent {
1119
1120
  */
1120
1121
  blockArrowSelection = false;
1121
1122
  undoRedoService;
1123
+ rowsToRender;
1122
1124
  selectionSubscription;
1123
1125
  stateChangeSubscription;
1124
1126
  groupExpandCollapseSubscription;
@@ -1144,7 +1146,7 @@ export class GridComponent {
1144
1146
  rowReorderSubscription;
1145
1147
  rtl = false;
1146
1148
  _rowSticky;
1147
- constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization, ctx, sizingService, adaptiveService, adaptiveGridService, rowReorderService) {
1149
+ constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization, ctx, sizingService, adaptiveGridService, rowReorderService, dataMappingService) {
1148
1150
  this.supportService = supportService;
1149
1151
  this.selectionService = selectionService;
1150
1152
  this.cellSelectionService = cellSelectionService;
@@ -1172,9 +1174,9 @@ export class GridComponent {
1172
1174
  this.localization = localization;
1173
1175
  this.ctx = ctx;
1174
1176
  this.sizingService = sizingService;
1175
- this.adaptiveService = adaptiveService;
1176
1177
  this.adaptiveGridService = adaptiveGridService;
1177
1178
  this.rowReorderService = rowReorderService;
1179
+ this.dataMappingService = dataMappingService;
1178
1180
  const isValid = validatePackage(packageMetadata);
1179
1181
  this.showLicenseWatermark = shouldShowValidationUI(isValid);
1180
1182
  this.ctx.grid = this;
@@ -1281,6 +1283,11 @@ export class GridComponent {
1281
1283
  this.initSelectionService();
1282
1284
  this.updateNavigationMetadata();
1283
1285
  }
1286
+ ngDoCheck() {
1287
+ if (!this.isScrollable) {
1288
+ this.rowsToRender = this.dataMappingService.dataMapper(this.view, this.nonLockedLeafColumns, this.lockedLeafColumns, this.detailTemplate, this.showGroupFooters);
1289
+ }
1290
+ }
1284
1291
  ngOnChanges(changes) {
1285
1292
  if (isChanged("data", changes)) {
1286
1293
  this.onDataChange();
@@ -1976,10 +1983,7 @@ export class GridComponent {
1976
1983
  if (this.columnList.filter(x => x.locked && x.parent && !x.parent.isLocked).length) {
1977
1984
  throw new Error(ColumnConfigurationErrorMessages.lockedParent);
1978
1985
  }
1979
- if ((this.rowHeight || this.detailRowHeight) && !this.isVirtual) {
1980
- console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
1981
- }
1982
- if (!this.rowHeight && this.isVirtual) {
1986
+ if (this.detailRowHeight && !this.isVirtual) {
1983
1987
  console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
1984
1988
  }
1985
1989
  if (!this.detailRowHeight && this.isVirtual && this.detailTemplate) {
@@ -2026,9 +2030,6 @@ export class GridComponent {
2026
2030
  }
2027
2031
  this.dataStateChange.emit(x);
2028
2032
  hasObservers(this.gridStateChange) && this.gridStateChange.emit({ ...this.currentState, ...x });
2029
- if (this.undoRedoService) {
2030
- this.undoRedoService.originalEvent = x;
2031
- }
2032
2033
  });
2033
2034
  this.stateChangeSubscription.add(merge(this.columnReorder, this.columnResize, this.columnVisibilityChange, this.columnLockedChange, this.columnStickyChange).pipe(flatMap(() => this.ngZone.onStable.pipe(take(1))))
2034
2035
  .subscribe(() => this.ngZone.run(() => hasObservers(this.gridStateChange) && this.gridStateChange.emit(this.currentState))));
@@ -2324,7 +2325,7 @@ export class GridComponent {
2324
2325
  this.dragTargetContainer?.notify();
2325
2326
  this.dropTargetContainer?.notify();
2326
2327
  }
2327
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, deps: [{ token: i1.BrowserSupportService }, { token: i2.SelectionService }, { token: i3.CellSelectionService }, { token: i0.ElementRef }, { token: i4.GroupInfoService }, { token: i5.GroupsService }, { token: i6.ChangeNotificationService }, { token: i7.DetailsService }, { token: i8.EditService }, { token: i9.FilterService }, { token: i10.PDFService }, { token: i11.ResponsiveService }, { token: i0.Renderer2 }, { token: i12.ExcelService }, { token: i0.NgZone }, { token: i13.ScrollSyncService }, { token: i14.DomEventsService }, { token: i15.ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: i16.ColumnReorderService }, { token: i17.ColumnInfoService }, { token: i18.NavigationService }, { token: i19.SortService }, { token: i20.ScrollRequestService }, { token: i21.LocalizationService }, { token: i22.ContextService }, { token: i23.SizingOptionsService }, { token: i24.AdaptiveService }, { token: i25.AdaptiveGridService }, { token: i26.RowReorderService }], target: i0.ɵɵFactoryTarget.Component });
2328
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, deps: [{ token: i1.BrowserSupportService }, { token: i2.SelectionService }, { token: i3.CellSelectionService }, { token: i0.ElementRef }, { token: i4.GroupInfoService }, { token: i5.GroupsService }, { token: i6.ChangeNotificationService }, { token: i7.DetailsService }, { token: i8.EditService }, { token: i9.FilterService }, { token: i10.PDFService }, { token: i11.ResponsiveService }, { token: i0.Renderer2 }, { token: i12.ExcelService }, { token: i0.NgZone }, { token: i13.ScrollSyncService }, { token: i14.DomEventsService }, { token: i15.ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: i16.ColumnReorderService }, { token: i17.ColumnInfoService }, { token: i18.NavigationService }, { token: i19.SortService }, { token: i20.ScrollRequestService }, { token: i21.LocalizationService }, { token: i22.ContextService }, { token: i23.SizingOptionsService }, { token: i24.AdaptiveGridService }, { token: i25.RowReorderService }, { token: i26.DataMappingService }], target: i0.ɵɵFactoryTarget.Component });
2328
2329
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GridComponent, isStandalone: true, selector: "kendo-grid", inputs: { data: "data", pageSize: "pageSize", height: "height", rowHeight: "rowHeight", adaptiveMode: "adaptiveMode", detailRowHeight: "detailRowHeight", skip: "skip", scrollable: "scrollable", selectable: "selectable", sort: "sort", size: "size", trackBy: "trackBy", filter: "filter", group: "group", virtualColumns: "virtualColumns", filterable: "filterable", sortable: "sortable", pageable: "pageable", groupable: "groupable", gridResizable: "gridResizable", rowReorderable: "rowReorderable", navigable: "navigable", autoSize: "autoSize", rowClass: "rowClass", rowSticky: "rowSticky", rowSelected: "rowSelected", isRowSelectable: "isRowSelectable", cellSelected: "cellSelected", resizable: "resizable", reorderable: "reorderable", loading: "loading", columnMenu: "columnMenu", hideHeader: "hideHeader", showInactiveTools: "showInactiveTools", isDetailExpanded: "isDetailExpanded", isGroupExpanded: "isGroupExpanded" }, outputs: { filterChange: "filterChange", pageChange: "pageChange", groupChange: "groupChange", sortChange: "sortChange", selectionChange: "selectionChange", rowReorder: "rowReorder", dataStateChange: "dataStateChange", gridStateChange: "gridStateChange", groupExpand: "groupExpand", groupCollapse: "groupCollapse", detailExpand: "detailExpand", detailCollapse: "detailCollapse", edit: "edit", cancel: "cancel", save: "save", remove: "remove", add: "add", cellClose: "cellClose", cellClick: "cellClick", pdfExport: "pdfExport", excelExport: "excelExport", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", columnStickyChange: "columnStickyChange", scrollBottom: "scrollBottom", contentScroll: "contentScroll" }, host: { properties: { "attr.dir": "this.dir", "class.k-grid": "this.hostClass", "class.k-grid-sm": "this.sizeSmallClass", "class.k-grid-md": "this.sizeMediumClass", "class.k-grid-lockedcolumns": "this.lockedClasses", "class.k-grid-virtual": "this.virtualClasses", "class.k-grid-no-scrollbar": "this.noScrollbarClass", "class.k-grid-resizable": "this.isResizable", "style.minWidth": "this.minWidth", "style.maxWidth": "this.maxWidth", "style.minHeight": "this.minHeight", "style.maxHeight": "this.maxHeight" } }, providers: [
2329
2330
  BrowserSupportService,
2330
2331
  LocalizationService,
@@ -2374,7 +2375,8 @@ export class GridComponent {
2374
2375
  RowspanService,
2375
2376
  AdaptiveGridService,
2376
2377
  ColumnMenuService,
2377
- MenuTabbingService
2378
+ MenuTabbingService,
2379
+ DataMappingService
2378
2380
  ], queries: [{ propertyName: "columns", predicate: ColumnBase }, { propertyName: "detailTemplateChildren", predicate: DetailTemplateDirective }, { propertyName: "cellLoadingTemplateChildren", predicate: CellLoadingTemplateDirective }, { propertyName: "loadingTemplateChildren", predicate: LoadingTemplateDirective }, { propertyName: "statusBarTemplateChildren", predicate: StatusBarTemplateDirective }, { propertyName: "noRecordsTemplateChildren", predicate: NoRecordsTemplateDirective }, { propertyName: "pagerTemplateChildren", predicate: PagerTemplateDirective }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], viewQueries: [{ propertyName: "lockedHeader", first: true, predicate: ["lockedHeader"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "ariaRoot", first: true, predicate: ["ariaRoot"], descendants: true, static: true }, { propertyName: "dragTargetContainer", first: true, predicate: DragTargetContainerDirective, descendants: true }, { propertyName: "dropTargetContainer", first: true, predicate: DropTargetContainerDirective, descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "adaptiveRenderer", first: true, predicate: AdaptiveRendererComponent, descendants: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoGrid"], usesOnChanges: true, ngImport: i0, template: `
2379
2381
  <ng-container kendoGridLocalizedMessages
2380
2382
  i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
@@ -3026,7 +3028,7 @@ export class GridComponent {
3026
3028
  <tbody kendoGridTableBody
3027
3029
  [isLoading]="loading"
3028
3030
  [groups]="group"
3029
- [data]="$any(view)"
3031
+ [rowsToRender]="rowsToRender"
3030
3032
  [skip]="skip"
3031
3033
  [columns]="$any(leafColumns)"
3032
3034
  [totalColumnsCount]="leafColumns.length"
@@ -3035,7 +3037,6 @@ export class GridComponent {
3035
3037
  [filterable]="filterable"
3036
3038
  [noRecordsTemplate]="noRecordsTemplate"
3037
3039
  [detailTemplate]="detailTemplate"
3038
- [showGroupFooters]="showGroupFooters"
3039
3040
  [trackBy]="trackBy"
3040
3041
  [rowClass]="rowClass"
3041
3042
  kendoDraggable
@@ -3142,7 +3143,7 @@ export class GridComponent {
3142
3143
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
3143
3144
 
3144
3145
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3145
- `, 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", "stickyRowHeight", "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", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "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]" }, { 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 });
3146
+ `, 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]" }, { 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 });
3146
3147
  }
3147
3148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
3148
3149
  type: Component,
@@ -3198,7 +3199,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3198
3199
  RowspanService,
3199
3200
  AdaptiveGridService,
3200
3201
  ColumnMenuService,
3201
- MenuTabbingService
3202
+ MenuTabbingService,
3203
+ DataMappingService
3202
3204
  ],
3203
3205
  selector: 'kendo-grid',
3204
3206
  template: `
@@ -3852,7 +3854,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3852
3854
  <tbody kendoGridTableBody
3853
3855
  [isLoading]="loading"
3854
3856
  [groups]="group"
3855
- [data]="$any(view)"
3857
+ [rowsToRender]="rowsToRender"
3856
3858
  [skip]="skip"
3857
3859
  [columns]="$any(leafColumns)"
3858
3860
  [totalColumnsCount]="leafColumns.length"
@@ -3861,7 +3863,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3861
3863
  [filterable]="filterable"
3862
3864
  [noRecordsTemplate]="noRecordsTemplate"
3863
3865
  [detailTemplate]="detailTemplate"
3864
- [showGroupFooters]="showGroupFooters"
3865
3866
  [trackBy]="trackBy"
3866
3867
  [rowClass]="rowClass"
3867
3868
  kendoDraggable
@@ -3978,7 +3979,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3978
3979
  IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet, AdaptiveRendererComponent
3979
3980
  ]
3980
3981
  }]
3981
- }], 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.AdaptiveService }, { type: i25.AdaptiveGridService }, { type: i26.RowReorderService }]; }, propDecorators: { data: [{
3982
+ }], 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: [{
3982
3983
  type: Input
3983
3984
  }], pageSize: [{
3984
3985
  type: Input
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1750679864,
14
- version: '19.1.2-develop.8',
13
+ publishDate: 1750784754,
14
+ version: '19.2.0-develop.1',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };