@progress/kendo-angular-grid 18.0.1-develop.2 → 18.1.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/columns/cell-rowspan.d.ts +10 -0
  2. package/columns/column-base.d.ts +8 -2
  3. package/editing-directives/local-row-edit.service.d.ts +1 -1
  4. package/esm2022/aggregates/selection-aggregate.service.mjs +1 -1
  5. package/esm2022/columns/cell-rowspan.mjs +5 -0
  6. package/esm2022/columns/column-base.mjs +13 -2
  7. package/esm2022/dragdrop/draggable-column.directive.mjs +2 -2
  8. package/esm2022/editing-directives/local-row-edit.service.mjs +1 -1
  9. package/esm2022/grid.component.mjs +6 -3
  10. package/esm2022/grouping/group-panel.component.mjs +1 -1
  11. package/esm2022/navigation/logical-cell.directive.mjs +7 -1
  12. package/esm2022/navigation/navigation.service.mjs +27 -35
  13. package/esm2022/package-metadata.mjs +2 -2
  14. package/esm2022/pdf/pdf.component.mjs +1 -1
  15. package/esm2022/rendering/cell.component.mjs +1 -1
  16. package/esm2022/rendering/common/col-group.component.mjs +1 -1
  17. package/esm2022/rendering/footer/footer.component.mjs +1 -1
  18. package/esm2022/rendering/header/header.component.mjs +2 -2
  19. package/esm2022/rendering/list.component.mjs +14 -5
  20. package/esm2022/rendering/rowspan.service.mjs +24 -0
  21. package/esm2022/rendering/table-body.component.mjs +106 -64
  22. package/esm2022/selection/selection-default.mjs +1 -1
  23. package/fesm2022/progress-kendo-angular-grid.mjs +202 -123
  24. package/index.d.ts +1 -0
  25. package/navigation/logical-cell.directive.d.ts +1 -0
  26. package/navigation/navigation.service.d.ts +2 -0
  27. package/package.json +19 -19
  28. package/pdf/pdf.component.d.ts +1 -1
  29. package/rendering/cell.component.d.ts +1 -1
  30. package/rendering/common/col-group.component.d.ts +1 -1
  31. package/rendering/footer/footer.component.d.ts +1 -1
  32. package/rendering/header/header.component.d.ts +1 -1
  33. package/rendering/list.component.d.ts +4 -1
  34. package/rendering/rowspan.service.d.ts +14 -0
  35. package/rendering/table-body.component.d.ts +9 -2
  36. package/schematics/ngAdd/index.js +4 -4
@@ -2279,6 +2279,10 @@ class ColumnBase {
2279
2279
  *
2280
2280
  */
2281
2281
  footerClass;
2282
+ /**
2283
+ * Defines a function that is used to determine the rowspan of each column cell.
2284
+ */
2285
+ cellRowspan;
2282
2286
  /**
2283
2287
  * @hidden
2284
2288
  */
@@ -2373,8 +2377,13 @@ class ColumnBase {
2373
2377
  throw new Error(ColumnConfigurationErrorMessages.columnNested);
2374
2378
  }
2375
2379
  }
2380
+ ngOnChanges(changes) {
2381
+ if (isDevMode() && changes['cellRowspan'] && typeof changes['cellRowspan'].currentValue !== 'function') {
2382
+ throw new Error(GridConfigurationErrorMessages.functionType('cellRowspan', changes['cellRowspan'].currentValue));
2383
+ }
2384
+ }
2376
2385
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnBase, deps: [{ token: ColumnBase }, { token: IdService }], target: i0.ɵɵFactoryTarget.Component });
2377
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnBase, selector: "kendo-grid-column-base", inputs: { resizable: "resizable", reorderable: "reorderable", minResizableWidth: "minResizableWidth", maxResizableWidth: "maxResizableWidth", title: "title", width: "width", autoSize: "autoSize", locked: "locked", sticky: "sticky", hidden: "hidden", media: "media", lockable: "lockable", stickable: "stickable", columnMenu: "columnMenu", includeInChooser: "includeInChooser", tableCellsRole: "tableCellsRole", style: "style", headerStyle: "headerStyle", filterStyle: "filterStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", filterClass: "filterClass", footerClass: "footerClass" }, queries: [{ propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "headerTemplates", predicate: HeaderTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], ngImport: i0, template: ``, isInline: true });
2386
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnBase, selector: "kendo-grid-column-base", inputs: { resizable: "resizable", reorderable: "reorderable", minResizableWidth: "minResizableWidth", maxResizableWidth: "maxResizableWidth", title: "title", width: "width", autoSize: "autoSize", locked: "locked", sticky: "sticky", hidden: "hidden", media: "media", lockable: "lockable", stickable: "stickable", columnMenu: "columnMenu", includeInChooser: "includeInChooser", tableCellsRole: "tableCellsRole", style: "style", headerStyle: "headerStyle", filterStyle: "filterStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", filterClass: "filterClass", footerClass: "footerClass", cellRowspan: "cellRowspan" }, queries: [{ propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "headerTemplates", predicate: HeaderTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], usesOnChanges: true, ngImport: i0, template: ``, isInline: true });
2378
2387
  }
2379
2388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnBase, decorators: [{
2380
2389
  type: Component,
@@ -2431,6 +2440,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2431
2440
  type: Input
2432
2441
  }], footerClass: [{
2433
2442
  type: Input
2443
+ }], cellRowspan: [{
2444
+ type: Input
2434
2445
  }], headerTemplates: [{
2435
2446
  type: ContentChildren,
2436
2447
  args: [HeaderTemplateDirective, { descendants: false }]
@@ -3310,6 +3321,7 @@ class NavigationService {
3310
3321
  pagerIsNavigable = false;
3311
3322
  tableIsNavigable = false;
3312
3323
  toolbarIsNavigable = false;
3324
+ lastCellRowIndex;
3313
3325
  get activeDataRow() {
3314
3326
  return Math.max(0, this.activeRowIndex - this.meta.headerRows);
3315
3327
  }
@@ -3578,78 +3590,62 @@ class NavigationService {
3578
3590
  .forEach(cell => cell.focusGroup && cell.focusGroup.activate());
3579
3591
  }
3580
3592
  moveCursorFwd() {
3593
+ this.lastCellRowIndex = this.activeCell.rowIndex;
3581
3594
  return this.ctx.localization.rtl ? this.cursor.moveLeft() : this.cursor.moveRight();
3582
3595
  }
3583
3596
  moveCursorBwd() {
3597
+ this.lastCellRowIndex = this.activeCell.rowIndex;
3584
3598
  return this.ctx.localization.rtl ? this.cursor.moveRight() : this.cursor.moveLeft();
3585
3599
  }
3586
3600
  onCursorKeydown(args) {
3587
3601
  let preventDefault = false;
3588
3602
  const modifier = args.ctrlKey || args.metaKey;
3589
- const step = modifier ? 5 : 1;
3603
+ let step = modifier ? 5 : 1;
3604
+ const rowspan = +args.target?.getAttribute('rowspan');
3605
+ let rowspanOffset = 0;
3590
3606
  if (!this.onCellKeydown(args)) {
3591
3607
  return;
3592
3608
  }
3593
3609
  const row = this.cursor.row;
3610
+ const dir = args.keyCode === Keys.ArrowDown ? 'Down' : 'Up';
3611
+ const right = args.keyCode === Keys.ArrowRight;
3594
3612
  switch (args.keyCode) {
3595
3613
  case Keys.ArrowDown:
3596
- if (args.shiftKey) {
3597
- if (this.ctx.grid.blockArrowSelection) {
3598
- return;
3599
- }
3600
- preventDefault = this.cursor.moveDown(step);
3601
- if (this.activeRow?.dataItem) {
3602
- this.handleVerticalArrowSelection(step);
3603
- }
3604
- }
3605
- else {
3606
- preventDefault = this.cursor.moveDown(step);
3607
- }
3608
- break;
3609
3614
  case Keys.ArrowUp:
3615
+ if (rowspan > 1) {
3616
+ rowspanOffset = this.calculateRowspanOffset(dir, rowspan);
3617
+ step += rowspanOffset;
3618
+ }
3610
3619
  if (args.shiftKey) {
3611
3620
  if (this.ctx.grid.blockArrowSelection) {
3612
3621
  return;
3613
3622
  }
3614
- preventDefault = this.cursor.moveUp(step);
3623
+ preventDefault = this.cursor[`move${dir}`](step);
3615
3624
  if (this.activeRow?.dataItem) {
3616
- this.handleVerticalArrowSelection(-step);
3625
+ const sign = dir === 'Down' ? 1 : -1;
3626
+ this.handleVerticalArrowSelection(sign * step);
3617
3627
  }
3618
3628
  }
3619
3629
  else {
3620
- preventDefault = this.cursor.moveUp(step);
3630
+ preventDefault = this.cursor[`move${dir}`](step);
3621
3631
  }
3632
+ this.lastCellRowIndex = this.activeRowIndex;
3622
3633
  break;
3623
3634
  case Keys.ArrowRight:
3624
- if (args.altKey && this.ctx.grid.resizable && this.isColumnResizable) {
3625
- this.columnResize(true);
3626
- break;
3627
- }
3628
- if (args.shiftKey) {
3629
- if (this.ctx.grid.blockArrowSelection) {
3630
- return;
3631
- }
3632
- preventDefault = this.moveCursorFwd();
3633
- this.handleHorizontalArrowSelection(args);
3634
- }
3635
- else {
3636
- preventDefault = this.moveCursorFwd();
3637
- }
3638
- break;
3639
3635
  case Keys.ArrowLeft:
3640
3636
  if (args.altKey && this.ctx.grid.resizable && this.isColumnResizable) {
3641
- this.columnResize(false);
3637
+ this.columnResize(right);
3642
3638
  break;
3643
3639
  }
3644
3640
  if (args.shiftKey) {
3645
3641
  if (this.ctx.grid.blockArrowSelection) {
3646
3642
  return;
3647
3643
  }
3648
- preventDefault = this.moveCursorBwd();
3644
+ preventDefault = this[`moveCursor${right ? 'Fwd' : 'Bwd'}`]();
3649
3645
  this.handleHorizontalArrowSelection(args);
3650
3646
  }
3651
3647
  else {
3652
- preventDefault = this.moveCursorBwd();
3648
+ preventDefault = this[`moveCursor${right ? 'Fwd' : 'Bwd'}`]();
3653
3649
  }
3654
3650
  break;
3655
3651
  case Keys.PageDown:
@@ -3902,6 +3898,13 @@ class NavigationService {
3902
3898
  const ev = rowSelectionService.selectRange(startRowIndex, endRowIndex);
3903
3899
  rowSelectionService.changes.emit(ev);
3904
3900
  }
3901
+ calculateRowspanOffset(direction, cellRowspan) {
3902
+ if (!isPresent$1(this.lastCellRowIndex)) {
3903
+ return 0;
3904
+ }
3905
+ const offset = direction === 'Up' ? Math.abs(this.lastCellRowIndex - this.activeRowIndex) : (this.activeRowIndex + cellRowspan - this.lastCellRowIndex - 1);
3906
+ return offset;
3907
+ }
3905
3908
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: DomEventsService }, { token: i44.PagerContextService }, { token: ScrollRequestService }, { token: GroupsService }, { token: DetailsService }, { token: FocusRoot }, { token: EditService }, { token: i0.ChangeDetectorRef }, { token: ContextService }, { token: ColumnResizingService }, { token: FocusableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
3906
3909
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService });
3907
3910
  }
@@ -3957,13 +3960,13 @@ class DraggableColumnDirective {
3957
3960
  this.renderer = renderer;
3958
3961
  }
3959
3962
  ngOnInit() {
3960
- this.subscriptions.add(this.zone.runOutsideAngular(() => this.draggable.kendoPress.pipe(filter(_ => this.enabled), filter(({ originalEvent: { target } }) => target === this.element.nativeElement || skipButtons(target)), tap((e) => {
3963
+ this.subscriptions.add(this.zone.runOutsideAngular(() => this.draggable.kendoPress.pipe(filter(() => this.enabled), filter(({ originalEvent: { target } }) => target === this.element.nativeElement || skipButtons(target)), tap((e) => {
3961
3964
  const originalEvent = e.originalEvent;
3962
3965
  if (!e.isTouch) {
3963
3966
  originalEvent.preventDefault();
3964
3967
  }
3965
3968
  this.nav.navigateTo(originalEvent.target);
3966
- }), switchMap(preventOnDblClick$1(this.draggable.kendoRelease)), tap((_) => {
3969
+ }), switchMap(preventOnDblClick$1(this.draggable.kendoRelease)), tap(() => {
3967
3970
  this.hint.create(this.context.hint);
3968
3971
  this.cue.create();
3969
3972
  }), switchMap(down => this.draggable.kendoDrag.pipe(tap((e) => {
@@ -4269,7 +4272,7 @@ class ColGroupComponent {
4269
4272
  get columnsToRender() {
4270
4273
  return columnsToRender(this.columns);
4271
4274
  }
4272
- trackBy(index, _item) {
4275
+ trackBy(index) {
4273
4276
  return index;
4274
4277
  }
4275
4278
  isSorted(column) {
@@ -4758,6 +4761,9 @@ class LogicalCellDirective {
4758
4761
  return this.idService.cellId(this.logicalRowIndex, this.logicalColIndex);
4759
4762
  }
4760
4763
  }
4764
+ get cellRowspan() {
4765
+ return String(this.rowSpan);
4766
+ }
4761
4767
  get ariaColIndex() {
4762
4768
  if (this.logicalSlaveCell || this.logicalColIndex === -1) {
4763
4769
  return undefined;
@@ -4864,7 +4870,7 @@ class LogicalCellDirective {
4864
4870
  return this.navigationService.isCellFocused(this);
4865
4871
  }
4866
4872
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LogicalCellDirective, deps: [{ token: FocusGroup }, { token: i0.ElementRef }, { token: ColumnInfoService }, { token: IdService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: CELL_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
4867
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: LogicalCellDirective, isStandalone: true, selector: "[kendoGridLogicalCell]", inputs: { logicalColIndex: "logicalColIndex", logicalRowIndex: "logicalRowIndex", logicalSlaveCell: "logicalSlaveCell", colIndex: "colIndex", colSpan: "colSpan", rowSpan: "rowSpan", groupItem: "groupItem", dataRowIndex: "dataRowIndex", dataItem: "dataItem", detailExpandCell: "detailExpandCell", headerLabelText: "headerLabelText" }, host: { properties: { "attr.id": "this.id", "attr.aria-colindex": "this.ariaColIndex" } }, providers: [{
4873
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: LogicalCellDirective, isStandalone: true, selector: "[kendoGridLogicalCell]", inputs: { logicalColIndex: "logicalColIndex", logicalRowIndex: "logicalRowIndex", logicalSlaveCell: "logicalSlaveCell", colIndex: "colIndex", colSpan: "colSpan", rowSpan: "rowSpan", groupItem: "groupItem", dataRowIndex: "dataRowIndex", dataItem: "dataItem", detailExpandCell: "detailExpandCell", headerLabelText: "headerLabelText" }, host: { properties: { "attr.id": "this.id", "attr.rowspan": "this.cellRowspan", "attr.aria-colindex": "this.ariaColIndex" } }, providers: [{
4868
4874
  provide: FocusGroup,
4869
4875
  deps: [FocusRoot],
4870
4876
  useClass: FocusGroup
@@ -4911,6 +4917,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4911
4917
  }], id: [{
4912
4918
  type: HostBinding,
4913
4919
  args: ['attr.id']
4920
+ }], cellRowspan: [{
4921
+ type: HostBinding,
4922
+ args: ['attr.rowspan']
4914
4923
  }], ariaColIndex: [{
4915
4924
  type: HostBinding,
4916
4925
  args: ['attr.aria-colindex']
@@ -5719,7 +5728,7 @@ class GroupPanelComponent {
5719
5728
  .reduce((acc, target) => merge(acc, target.leave), from([]));
5720
5729
  const dropStream = this.dropTargets
5721
5730
  .reduce((acc, target) => merge(acc, target.drop), from([]));
5722
- this.targetSubscription.add(enterStream.pipe(tap(_ => {
5731
+ this.targetSubscription.add(enterStream.pipe(tap(() => {
5723
5732
  this.hint.removeLock();
5724
5733
  this.destroyMenu();
5725
5734
  }), filter(({ draggable, target }) => this.canDrop(draggable.context, target.context)), tap(this.enter.bind(this)), switchMapTo(dropStream.pipe(takeUntil(leaveStream.pipe(tap(this.leave.bind(this))))))).subscribe(this.drop.bind(this)));
@@ -14243,7 +14252,7 @@ class PDFComponent extends PDFExportComponent {
14243
14252
  /**
14244
14253
  * @hidden
14245
14254
  */
14246
- saveAs(_) {
14255
+ saveAs() {
14247
14256
  throw new Error(GridConfigurationErrorMessages.unsupportedMethod('saveAs', 'GridComponent.saveAsPDF'));
14248
14257
  }
14249
14258
  /**
@@ -14927,7 +14936,7 @@ class CellSelectionAggregateService {
14927
14936
  return true;
14928
14937
  }
14929
14938
  init() {
14930
- this.sub.add(this.ctx.grid.dataStateChange.subscribe(_ => {
14939
+ this.sub.add(this.ctx.grid.dataStateChange.subscribe(() => {
14931
14940
  // nullifies aggregates and sets default count to avoid mismatching state -
14932
14941
  // https://github.com/telerik/kendo-angular-private/issues/2964
14933
14942
  this.nullifyAggregates();
@@ -16241,7 +16250,7 @@ class HeaderComponent {
16241
16250
  }
16242
16251
  canDrop(draggable, target) {
16243
16252
  isDocumentAvailable() && this.zone.runOutsideAngular(() => {
16244
- document.addEventListener('pointerup', e => {
16253
+ document.addEventListener('pointerup', () => {
16245
16254
  this.stopSorting = true;
16246
16255
  setTimeout(() => this.stopSorting = false);
16247
16256
  }, {
@@ -16266,7 +16275,7 @@ class HeaderComponent {
16266
16275
  isCheckboxColumn(column) {
16267
16276
  return isCheckboxColumn(column) && !column.templateRef;
16268
16277
  }
16269
- trackByIndex(index, _item) {
16278
+ trackByIndex(index) {
16270
16279
  return index;
16271
16280
  }
16272
16281
  addStickyStyles(column) {
@@ -16919,7 +16928,7 @@ class FooterComponent {
16919
16928
  get columnsToRender() {
16920
16929
  return columnsToRender(this.columns || []);
16921
16930
  }
16922
- trackByIndex(index, _item) {
16931
+ trackByIndex(index) {
16923
16932
  return index;
16924
16933
  }
16925
16934
  logicalColumnIndex(column) {
@@ -17518,7 +17527,7 @@ class CellComponent {
17518
17527
  ngDoCheck() {
17519
17528
  this.updateCellContext();
17520
17529
  }
17521
- ngOnChanges(_changes) {
17530
+ ngOnChanges() {
17522
17531
  this.updateTemplateContext();
17523
17532
  }
17524
17533
  ngAfterContentChecked() {
@@ -17772,6 +17781,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17772
17781
  type: Input
17773
17782
  }] } });
17774
17783
 
17784
+ /**
17785
+ * @hidden
17786
+ */
17787
+ class RowspanService {
17788
+ skipCells = [];
17789
+ addCells(rowIndex, colIndex, rowspan) {
17790
+ for (let i = 1; i < rowspan; i++) {
17791
+ if (!this.skipCells.some(this.cellExists(rowIndex + i, colIndex))) {
17792
+ this.skipCells.push({ rowIndex: rowIndex + i, colIndex });
17793
+ }
17794
+ }
17795
+ }
17796
+ reset() {
17797
+ this.skipCells = [];
17798
+ }
17799
+ shouldSkip(rowIndex, colIndex) {
17800
+ return !!this.skipCells.find(this.cellExists(rowIndex, colIndex));
17801
+ }
17802
+ cellExists = (rowIndex, colIndex) => cell => cell.rowIndex === rowIndex && cell.colIndex === colIndex;
17803
+ }
17804
+
17775
17805
  const columnCellIndex = (cell, cells) => {
17776
17806
  let cellIndex = 0;
17777
17807
  for (let idx = 0; idx < cells.length; idx++) {
@@ -17800,6 +17830,7 @@ class TableBodyComponent {
17800
17830
  cellSelectionService;
17801
17831
  columnInfoService;
17802
17832
  navigationService;
17833
+ rowspanService;
17803
17834
  columns = [];
17804
17835
  allColumns;
17805
17836
  groups = [];
@@ -17822,6 +17853,7 @@ class TableBodyComponent {
17822
17853
  trackBy = defaultTrackBy;
17823
17854
  rowSticky;
17824
17855
  totalColumns;
17856
+ rowClass = () => null;
17825
17857
  hostClass = true;
17826
17858
  groupHeaderSlaveCellsCount;
17827
17859
  groupHeaderColumns;
@@ -17832,8 +17864,9 @@ class TableBodyComponent {
17832
17864
  clickTimeout;
17833
17865
  minusIcon = minusIcon;
17834
17866
  plusIcon = plusIcon;
17835
- rowClass = () => null;
17836
- constructor(detailsService, groupsService, changeNotification, editService, ctx, ngZone, renderer, element, domEvents, selectionService, cellSelectionService, columnInfoService, navigationService) {
17867
+ dataArray;
17868
+ rerender = false;
17869
+ constructor(detailsService, groupsService, changeNotification, editService, ctx, ngZone, renderer, element, domEvents, selectionService, cellSelectionService, columnInfoService, navigationService, rowspanService) {
17837
17870
  this.detailsService = detailsService;
17838
17871
  this.groupsService = groupsService;
17839
17872
  this.changeNotification = changeNotification;
@@ -17847,6 +17880,7 @@ class TableBodyComponent {
17847
17880
  this.cellSelectionService = cellSelectionService;
17848
17881
  this.columnInfoService = columnInfoService;
17849
17882
  this.navigationService = navigationService;
17883
+ this.rowspanService = rowspanService;
17850
17884
  this.noRecordsText = this.ctx.localization.get('noRecords');
17851
17885
  this.cellKeydownSubscription = this.navigationService.cellKeydown.subscribe((args) => this.cellKeydownHandler(args));
17852
17886
  this.trackByWrapper = this.trackByWrapper.bind(this);
@@ -17855,6 +17889,12 @@ class TableBodyComponent {
17855
17889
  get newDataItem() {
17856
17890
  return this.editService.newDataItem;
17857
17891
  }
17892
+ get cachedDataArray() {
17893
+ if (!this.dataArray) {
17894
+ this.dataArray = this.data.map(item => item);
17895
+ }
17896
+ return this.dataArray;
17897
+ }
17858
17898
  // Number of unlocked columns in the next table, if any
17859
17899
  unlockedColumnsCount(item) {
17860
17900
  const allColumns = this.allColumns || this.columns;
@@ -17868,6 +17908,24 @@ class TableBodyComponent {
17868
17908
  const headerFooterColumnsCount = this.totalColumnsCount - this.lockedColumnsCount - (this.allColumns || this.columns).length;
17869
17909
  return item && this.isDataItem(item) ? contentColumnsCount : headerFooterColumnsCount;
17870
17910
  }
17911
+ shouldSkipCell(rowIndex, colIndex) {
17912
+ return this.rowspanService.shouldSkip(rowIndex, colIndex);
17913
+ }
17914
+ getRowspan(row, column, colIndex) {
17915
+ if (this.rerender) {
17916
+ this.dataArray = null;
17917
+ this.rerender = false;
17918
+ }
17919
+ const rowspan = column.cellRowspan(row, column, this.cachedDataArray);
17920
+ if (rowspan > 1) {
17921
+ this.rowspanService.addCells(row.index, colIndex, rowspan);
17922
+ }
17923
+ this.ngZone.runOutsideAngular(() => setTimeout(() => {
17924
+ this.rerender = true;
17925
+ this.rowspanService.reset();
17926
+ }));
17927
+ return rowspan;
17928
+ }
17871
17929
  isAriaSelected(item, column) {
17872
17930
  return this.cellSelectionService.isCellSelected(item, column) ||
17873
17931
  this.isRowSelected(item) ? 'true' : 'false';
@@ -18171,7 +18229,7 @@ class TableBodyComponent {
18171
18229
  });
18172
18230
  }
18173
18231
  }
18174
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableBodyComponent, deps: [{ token: DetailsService }, { token: GroupsService }, { token: ChangeNotificationService }, { token: EditService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DomEventsService }, { token: SelectionService }, { token: CellSelectionService }, { token: ColumnInfoService }, { token: NavigationService }], target: i0.ɵɵFactoryTarget.Component });
18232
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableBodyComponent, deps: [{ token: DetailsService }, { token: GroupsService }, { token: ChangeNotificationService }, { token: EditService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DomEventsService }, { token: SelectionService }, { token: CellSelectionService }, { token: ColumnInfoService }, { token: NavigationService }, { token: RowspanService }], target: i0.ɵɵFactoryTarget.Component });
18175
18233
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableBodyComponent, isStandalone: true, selector: "[kendoGridTableBody]", inputs: { columns: "columns", allColumns: "allColumns", groups: "groups", detailTemplate: "detailTemplate", noRecordsTemplate: "noRecordsTemplate", data: "data", skip: "skip", selectable: "selectable", filterable: "filterable", noRecordsText: "noRecordsText", isLocked: "isLocked", isLoading: "isLoading", isVirtual: "isVirtual", cellLoadingTemplate: "cellLoadingTemplate", skipGroupDecoration: "skipGroupDecoration", showGroupFooters: "showGroupFooters", lockedColumnsCount: "lockedColumnsCount", totalColumnsCount: "totalColumnsCount", virtualColumns: "virtualColumns", trackBy: "trackBy", rowSticky: "rowSticky", totalColumns: "totalColumns", rowClass: "rowClass" }, host: { properties: { "class.k-table-tbody": "this.hostClass" } }, usesOnChanges: true, ngImport: i0, template: `
18176
18234
  <ng-container *ngIf="editService.hasNewItem">
18177
18235
  <tr class="k-grid-add-row k-grid-edit-row k-master-row"
@@ -18287,35 +18345,41 @@ class TableBodyComponent {
18287
18345
  [svgIcon]="detailButtonSvgIcon(item)"></kendo-icon-wrapper>
18288
18346
  </a>
18289
18347
  </td>
18290
- <td
18291
- kendoGridCell
18292
- [rowIndex]="$any(item).index"
18293
- [columnIndex]="lockedColumnsCount + columnIndex"
18294
- [attr.data-kendo-grid-column-index]="lockedColumnsCount + columnIndex"
18295
- [column]="column"
18296
- [dataItem]="item.data"
18297
- [isLoading]="isLoading"
18298
- [isVirtual]="isVirtual"
18299
- [loadingTemplate]="cellLoadingTemplate"
18300
- kendoGridLogicalCell
18301
- [logicalRowIndex]="logicalRowIndex(rowIndex)"
18302
- [logicalColIndex]="logicalColIndex(column)"
18303
- [dataRowIndex]="$any(item).index"
18304
- [dataItem]="item.data"
18305
- [colIndex]="columnIndex"
18306
- [colSpan]="column.colspan"
18307
- [attr.role]="column.tableCellsRole"
18308
- class="k-table-td"
18309
- [attr.aria-selected]="lockedColumnsCount < 1 && isSelectable({ dataItem: item.data, index: $any(item).index }) ? isAriaSelected(item, column) : undefined"
18310
- [class.k-grid-content-sticky]="column.sticky"
18311
- [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag"
18312
- [ngClass]="column.cssClass"
18313
- [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
18314
- [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
18315
- [attr.colspan]="column.colspan"
18316
- [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
18317
- *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
18318
- </td>
18348
+ <ng-container *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
18349
+ <td *ngIf="column.cellRowspan ? !shouldSkipCell(rowIndex, lockedColumnsCount + columnIndex) : true"
18350
+ kendoGridCell
18351
+ [rowIndex]="$any(item).index"
18352
+ [columnIndex]="lockedColumnsCount + columnIndex"
18353
+ [attr.data-kendo-grid-column-index]="lockedColumnsCount + columnIndex"
18354
+ [column]="column"
18355
+ [dataItem]="item.data"
18356
+ [isLoading]="isLoading"
18357
+ [isVirtual]="isVirtual"
18358
+ [loadingTemplate]="cellLoadingTemplate"
18359
+ kendoGridLogicalCell
18360
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
18361
+ [logicalColIndex]="logicalColIndex(column)"
18362
+ [dataRowIndex]="$any(item).index"
18363
+ [dataItem]="item.data"
18364
+ [colIndex]="columnIndex"
18365
+ [colSpan]="column.colspan"
18366
+ [rowSpan]="column.cellRowspan ? getRowspan({
18367
+ index: rowIndex,
18368
+ dataItem: item
18369
+ }, column, lockedColumnsCount + columnIndex) : 1"
18370
+ [attr.role]="column.tableCellsRole"
18371
+ class="k-table-td"
18372
+ [attr.aria-selected]="lockedColumnsCount < 1 && isSelectable({ dataItem: item.data, index: $any(item).index }) ? isAriaSelected(item, column) : undefined"
18373
+ [class.k-grid-content-sticky]="column.sticky"
18374
+ [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag"
18375
+ [ngClass]="column.cssClass"
18376
+ [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
18377
+ [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
18378
+ [attr.colspan]="column.colspan"
18379
+ [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
18380
+ >
18381
+ </td>
18382
+ </ng-container>
18319
18383
  </tr>
18320
18384
  <tr *ngIf="isDataItem(item) &&
18321
18385
  (!$any(item).group || isDataItemInExpandedGroup($any(item))) &&
@@ -18516,35 +18580,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18516
18580
  [svgIcon]="detailButtonSvgIcon(item)"></kendo-icon-wrapper>
18517
18581
  </a>
18518
18582
  </td>
18519
- <td
18520
- kendoGridCell
18521
- [rowIndex]="$any(item).index"
18522
- [columnIndex]="lockedColumnsCount + columnIndex"
18523
- [attr.data-kendo-grid-column-index]="lockedColumnsCount + columnIndex"
18524
- [column]="column"
18525
- [dataItem]="item.data"
18526
- [isLoading]="isLoading"
18527
- [isVirtual]="isVirtual"
18528
- [loadingTemplate]="cellLoadingTemplate"
18529
- kendoGridLogicalCell
18530
- [logicalRowIndex]="logicalRowIndex(rowIndex)"
18531
- [logicalColIndex]="logicalColIndex(column)"
18532
- [dataRowIndex]="$any(item).index"
18533
- [dataItem]="item.data"
18534
- [colIndex]="columnIndex"
18535
- [colSpan]="column.colspan"
18536
- [attr.role]="column.tableCellsRole"
18537
- class="k-table-td"
18538
- [attr.aria-selected]="lockedColumnsCount < 1 && isSelectable({ dataItem: item.data, index: $any(item).index }) ? isAriaSelected(item, column) : undefined"
18539
- [class.k-grid-content-sticky]="column.sticky"
18540
- [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag"
18541
- [ngClass]="column.cssClass"
18542
- [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
18543
- [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
18544
- [attr.colspan]="column.colspan"
18545
- [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
18546
- *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
18547
- </td>
18583
+ <ng-container *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
18584
+ <td *ngIf="column.cellRowspan ? !shouldSkipCell(rowIndex, lockedColumnsCount + columnIndex) : true"
18585
+ kendoGridCell
18586
+ [rowIndex]="$any(item).index"
18587
+ [columnIndex]="lockedColumnsCount + columnIndex"
18588
+ [attr.data-kendo-grid-column-index]="lockedColumnsCount + columnIndex"
18589
+ [column]="column"
18590
+ [dataItem]="item.data"
18591
+ [isLoading]="isLoading"
18592
+ [isVirtual]="isVirtual"
18593
+ [loadingTemplate]="cellLoadingTemplate"
18594
+ kendoGridLogicalCell
18595
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
18596
+ [logicalColIndex]="logicalColIndex(column)"
18597
+ [dataRowIndex]="$any(item).index"
18598
+ [dataItem]="item.data"
18599
+ [colIndex]="columnIndex"
18600
+ [colSpan]="column.colspan"
18601
+ [rowSpan]="column.cellRowspan ? getRowspan({
18602
+ index: rowIndex,
18603
+ dataItem: item
18604
+ }, column, lockedColumnsCount + columnIndex) : 1"
18605
+ [attr.role]="column.tableCellsRole"
18606
+ class="k-table-td"
18607
+ [attr.aria-selected]="lockedColumnsCount < 1 && isSelectable({ dataItem: item.data, index: $any(item).index }) ? isAriaSelected(item, column) : undefined"
18608
+ [class.k-grid-content-sticky]="column.sticky"
18609
+ [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag"
18610
+ [ngClass]="column.cssClass"
18611
+ [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
18612
+ [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
18613
+ [attr.colspan]="column.colspan"
18614
+ [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
18615
+ >
18616
+ </td>
18617
+ </ng-container>
18548
18618
  </tr>
18549
18619
  <tr *ngIf="isDataItem(item) &&
18550
18620
  (!$any(item).group || isDataItemInExpandedGroup($any(item))) &&
@@ -18631,7 +18701,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18631
18701
  GroupHeaderComponent, IconWrapperComponent, NgTemplateOutlet, ResizeSensorComponent
18632
18702
  ]
18633
18703
  }]
18634
- }], ctorParameters: function () { return [{ type: DetailsService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: EditService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: DomEventsService }, { type: SelectionService }, { type: CellSelectionService }, { type: ColumnInfoService }, { type: NavigationService }]; }, propDecorators: { columns: [{
18704
+ }], ctorParameters: function () { return [{ type: DetailsService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: EditService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: DomEventsService }, { type: SelectionService }, { type: CellSelectionService }, { type: ColumnInfoService }, { type: NavigationService }, { type: RowspanService }]; }, propDecorators: { columns: [{
18635
18705
  type: Input
18636
18706
  }], allColumns: [{
18637
18707
  type: Input
@@ -18675,11 +18745,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18675
18745
  type: Input
18676
18746
  }], totalColumns: [{
18677
18747
  type: Input
18748
+ }], rowClass: [{
18749
+ type: Input
18678
18750
  }], hostClass: [{
18679
18751
  type: HostBinding,
18680
18752
  args: ['class.k-table-tbody']
18681
- }], rowClass: [{
18682
- type: Input
18683
18753
  }] } });
18684
18754
 
18685
18755
  /**
@@ -19410,8 +19480,8 @@ const packageMetadata = {
19410
19480
  productName: 'Kendo UI for Angular',
19411
19481
  productCode: 'KENDOUIANGULAR',
19412
19482
  productCodes: ['KENDOUIANGULAR'],
19413
- publishDate: 1738068736,
19414
- version: '18.0.1-develop.2',
19483
+ publishDate: 1738141621,
19484
+ version: '18.1.0-develop.1',
19415
19485
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
19416
19486
  };
19417
19487
 
@@ -19965,7 +20035,7 @@ class Selection {
19965
20035
  this.ctx.grid.rowSelected = (row) => this.rowSelectionState.has(this.getItemKey(row));
19966
20036
  }
19967
20037
  if (!isPresent(this.ctx.grid.isRowSelectable)) {
19968
- this.ctx.grid.isRowSelectable = (_row) => Boolean(this.ctx.grid.selectable);
20038
+ this.ctx.grid.isRowSelectable = () => Boolean(this.ctx.grid.selectable);
19969
20039
  }
19970
20040
  if (!isPresent(this.ctx.grid.cellSelected)) {
19971
20041
  this.ctx.grid.cellSelected = (row, column, colIndex) => {
@@ -21486,6 +21556,7 @@ class ListComponent {
21486
21556
  changeDetector;
21487
21557
  pdfService;
21488
21558
  columnInfo;
21559
+ rowspanService;
21489
21560
  hostClass = true;
21490
21561
  hostRole = 'presentation';
21491
21562
  data;
@@ -21542,6 +21613,7 @@ class ListComponent {
21542
21613
  columnsEndIdx;
21543
21614
  viewportColumnsWidth;
21544
21615
  scrollLeft = 0;
21616
+ observer;
21545
21617
  get lockedLeafColumns() {
21546
21618
  return this.columns.lockedLeafColumns;
21547
21619
  }
@@ -21573,7 +21645,7 @@ class ListComponent {
21573
21645
  rtl = false;
21574
21646
  columnUpdateFrame;
21575
21647
  hasLockedContainer;
21576
- constructor(scrollerFactory, detailsService, changeNotification, suspendService, groupsService, ngZone, renderer, scrollSyncService, resizeService, editService, supportService, navigationService, scrollRequestService, ctx, columnResizingService, changeDetector, pdfService, columnInfo) {
21648
+ constructor(scrollerFactory, detailsService, changeNotification, suspendService, groupsService, ngZone, renderer, scrollSyncService, resizeService, editService, supportService, navigationService, scrollRequestService, ctx, columnResizingService, changeDetector, pdfService, columnInfo, rowspanService) {
21577
21649
  this.changeNotification = changeNotification;
21578
21650
  this.suspendService = suspendService;
21579
21651
  this.groupsService = groupsService;
@@ -21589,6 +21661,7 @@ class ListComponent {
21589
21661
  this.changeDetector = changeDetector;
21590
21662
  this.pdfService = pdfService;
21591
21663
  this.columnInfo = columnInfo;
21664
+ this.rowspanService = rowspanService;
21592
21665
  this.scroller = scrollerFactory(this.dispatcher);
21593
21666
  this.subscriptions = detailsService.changes.subscribe(x => this.detailExpand(x));
21594
21667
  this.subscriptions.add(scrollRequestService.requests.subscribe(req => isPresent(req.adjustIndex) ? this.scrollTo(req.request, req.adjustIndex) : this.scrollToItem(req.request)));
@@ -21660,6 +21733,7 @@ class ListComponent {
21660
21733
  if (this.resizeService) {
21661
21734
  this.resizeService.destroy();
21662
21735
  }
21736
+ this.observer?.disconnect();
21663
21737
  this.cleanupScroller();
21664
21738
  }
21665
21739
  init() {
@@ -21765,7 +21839,7 @@ class ListComponent {
21765
21839
  const shouldScroll = () => this.isVirtual && this.skip > 0 && this.total > 0;
21766
21840
  const sub = this.changeNotification.changes
21767
21841
  .pipe(filter(shouldScroll))
21768
- .subscribe(_ => {
21842
+ .subscribe(() => {
21769
21843
  this.scrollTo({ row: this.skip });
21770
21844
  sub.unsubscribe();
21771
21845
  });
@@ -21776,7 +21850,10 @@ class ListComponent {
21776
21850
  return merge(this.changeNotification.changes, this.groupsService.changes
21777
21851
  .pipe(filter(isLocked), switchMapTo(onStable())), this.editService.changed, this.resizeService.changes, this.columnResizingService.changes
21778
21852
  .pipe(filter(change => change.type === 'end')), this.supportService.changes)
21779
- .pipe(tap(() => this.resetNavigationViewport()), filter(isLocked))
21853
+ .pipe(tap(() => {
21854
+ this.ngZone.run(() => this.rowspanService.reset());
21855
+ this.resetNavigationViewport();
21856
+ }), filter(isLocked))
21780
21857
  .subscribe(() => {
21781
21858
  const scrollTop = this.container.nativeElement.scrollTop;
21782
21859
  const scrollLeft = this.container.nativeElement.scrollLeft;
@@ -22019,7 +22096,7 @@ class ListComponent {
22019
22096
  }
22020
22097
  return element.offsetLeft;
22021
22098
  }
22022
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListComponent, deps: [{ token: SCROLLER_FACTORY_TOKEN }, { token: DetailsService }, { token: ChangeNotificationService }, { token: SuspendService }, { token: GroupsService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ScrollSyncService }, { token: ResizeService }, { token: EditService }, { token: BrowserSupportService }, { token: NavigationService }, { token: ScrollRequestService }, { token: ContextService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: PDFService }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
22099
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ListComponent, deps: [{ token: SCROLLER_FACTORY_TOKEN }, { token: DetailsService }, { token: ChangeNotificationService }, { token: SuspendService }, { token: GroupsService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ScrollSyncService }, { token: ResizeService }, { token: EditService }, { token: BrowserSupportService }, { token: NavigationService }, { token: ScrollRequestService }, { token: ContextService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: PDFService }, { token: ColumnInfoService }, { token: RowspanService }], target: i0.ɵɵFactoryTarget.Component });
22023
22100
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ListComponent, isStandalone: true, selector: "kendo-grid-list", inputs: { data: "data", groups: "groups", total: "total", rowHeight: "rowHeight", stickyRowHeight: "stickyRowHeight", detailRowHeight: "detailRowHeight", take: "take", skip: "skip", columns: "columns", detailTemplate: "detailTemplate", noRecordsTemplate: "noRecordsTemplate", selectable: "selectable", groupable: "groupable", filterable: "filterable", rowClass: "rowClass", rowSticky: "rowSticky", loading: "loading", trackBy: "trackBy", virtualColumns: "virtualColumns", isVirtual: "isVirtual", cellLoadingTemplate: "cellLoadingTemplate", loadingTemplate: "loadingTemplate", sort: "sort", size: "size" }, outputs: { contentScroll: "contentScroll", pageChange: "pageChange", scrollBottom: "scrollBottom" }, host: { properties: { "class.k-grid-container": "this.hostClass", "attr.role": "this.hostRole" } }, providers: [
22024
22101
  {
22025
22102
  provide: SCROLLER_FACTORY_TOKEN,
@@ -22266,7 +22343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
22266
22343
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
22267
22344
  type: Inject,
22268
22345
  args: [SCROLLER_FACTORY_TOKEN]
22269
- }] }, { type: DetailsService }, { type: ChangeNotificationService }, { type: SuspendService }, { type: GroupsService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ScrollSyncService }, { type: ResizeService }, { type: EditService }, { type: BrowserSupportService }, { type: NavigationService }, { type: ScrollRequestService }, { type: ContextService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: PDFService }, { type: ColumnInfoService }]; }, propDecorators: { hostClass: [{
22346
+ }] }, { type: DetailsService }, { type: ChangeNotificationService }, { type: SuspendService }, { type: GroupsService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ScrollSyncService }, { type: ResizeService }, { type: EditService }, { type: BrowserSupportService }, { type: NavigationService }, { type: ScrollRequestService }, { type: ContextService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: PDFService }, { type: ColumnInfoService }, { type: RowspanService }]; }, propDecorators: { hostClass: [{
22270
22347
  type: HostBinding,
22271
22348
  args: ['class.k-grid-container']
22272
22349
  }], hostRole: [{
@@ -25052,7 +25129,7 @@ class GridComponent {
25052
25129
  applyAutoSize() {
25053
25130
  const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
25054
25131
  if (cols.length > 0) {
25055
- this.ngZone.onStable.pipe(take(1)).subscribe(_ => this.autoFitColumns(cols));
25132
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => this.autoFitColumns(cols));
25056
25133
  }
25057
25134
  }
25058
25135
  onColumnRangeChange(range) {
@@ -25196,7 +25273,8 @@ class GridComponent {
25196
25273
  ContextService,
25197
25274
  SizingOptionsService,
25198
25275
  RowReorderService,
25199
- ClipboardService
25276
+ ClipboardService,
25277
+ RowspanService
25200
25278
  ], 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: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoGrid"], usesOnChanges: true, ngImport: i0, template: `
25201
25279
  <ng-container kendoGridLocalizedMessages
25202
25280
  i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
@@ -25903,7 +25981,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
25903
25981
  ContextService,
25904
25982
  SizingOptionsService,
25905
25983
  RowReorderService,
25906
- ClipboardService
25984
+ ClipboardService,
25985
+ RowspanService
25907
25986
  ],
25908
25987
  selector: 'kendo-grid',
25909
25988
  template: `
@@ -27194,7 +27273,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27194
27273
  * @hidden
27195
27274
  */
27196
27275
  class LocalRowEditService extends LocalEditService {
27197
- update(_item) {
27276
+ update() {
27198
27277
  this.dataChanged();
27199
27278
  }
27200
27279
  }