@progress/kendo-angular-grid 19.2.0-develop.13 → 19.2.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.
@@ -532,9 +532,6 @@ const isMultipleRangesEnabled = (selectableSettings) => {
532
532
  */
533
533
  const calcRowHeight = (tableBody) => {
534
534
  let result = 0;
535
- if (!isDocumentAvailable()) {
536
- return result;
537
- }
538
535
  if (tableBody) {
539
536
  const row = tableBody.insertRow(0);
540
537
  const cell = row.insertCell(0);
@@ -868,7 +865,7 @@ class ContextService {
868
865
  topToolbarNavigation;
869
866
  bottomToolbarNavigation;
870
867
  navigable;
871
- dataBindingDirective;
868
+ groupBindingDirective;
872
869
  constructor(renderer, localization) {
873
870
  this.renderer = renderer;
874
871
  this.localization = localization;
@@ -14139,7 +14136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
14139
14136
  }] } });
14140
14137
 
14141
14138
  /**
14142
- * Represents a directive that manages keyboard navigation for a column menu item ([see example](slug:columnmenu_grid#customizing-the-content)).
14139
+ * Represents a directive that manages keyboard navigation for a column menu item. [See example](slug:columnmenu_grid#customizing-the-content).
14143
14140
  *
14144
14141
  * @example
14145
14142
  * ```html
@@ -16675,6 +16672,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
16675
16672
  */
16676
16673
  class CellSelectionAggregateService {
16677
16674
  ctx;
16675
+ dataChanges;
16678
16676
  columnInfoService;
16679
16677
  selectedItems = [];
16680
16678
  groupedAggregates = { dates: [], numbers: [], booleans: [] };
@@ -16690,8 +16688,9 @@ class CellSelectionAggregateService {
16690
16688
  latest: null
16691
16689
  };
16692
16690
  sub = new Subscription();
16693
- constructor(ctx, columnInfoService) {
16691
+ constructor(ctx, dataChanges, columnInfoService) {
16694
16692
  this.ctx = ctx;
16693
+ this.dataChanges = dataChanges;
16695
16694
  this.columnInfoService = columnInfoService;
16696
16695
  }
16697
16696
  ngOnDestroy() {
@@ -16852,12 +16851,12 @@ class CellSelectionAggregateService {
16852
16851
  this.aggregates['isFalse'] = this.aggregates['isTrue'] = null;
16853
16852
  this.aggregates['earliest'] = this.aggregates['latest'] = null;
16854
16853
  }
16855
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellSelectionAggregateService, deps: [{ token: ContextService }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
16854
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellSelectionAggregateService, deps: [{ token: ContextService }, { token: LocalDataChangesService }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Injectable });
16856
16855
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellSelectionAggregateService });
16857
16856
  }
16858
16857
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellSelectionAggregateService, decorators: [{
16859
16858
  type: Injectable
16860
- }], ctorParameters: function () { return [{ type: ContextService }, { type: ColumnInfoService }]; } });
16859
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: LocalDataChangesService }, { type: ColumnInfoService }]; } });
16861
16860
 
16862
16861
  /**
16863
16862
  * @hidden
@@ -16986,8 +16985,6 @@ class SelectionService {
16986
16985
  if (ev.shiftKey) {
16987
16986
  ev.rangeStartRow = { dataItem: this.lastSelectionData, index: this.lastSelectionStartIndex };
16988
16987
  ev.rangeEndRow = { dataItem: item.data, index: item.index };
16989
- this.lastSelectionData = item.data;
16990
- this.lastSelectionStartIndex = item.index;
16991
16988
  }
16992
16989
  this.syncCurrentSelection(ev);
16993
16990
  this.changes.emit(ev);
@@ -17076,14 +17073,13 @@ class SelectionService {
17076
17073
  item = iterator.next();
17077
17074
  }
17078
17075
  }
17079
- addAllTo(item, ctrlKey, preserveSelection = false, shiftKey = false) {
17076
+ addAllTo(item, ctrlKey, preserveSelection = false) {
17080
17077
  const selectedRows = [];
17081
17078
  const deselectedRows = [];
17082
17079
  const start = Math.min(this.lastSelectionStartIndex, item.index);
17083
17080
  const end = Math.max(this.lastSelectionStartIndex, item.index);
17084
17081
  const iterator = this.getIterator();
17085
17082
  let next = iterator.next();
17086
- let selectedItem;
17087
17083
  while (!next.done) {
17088
17084
  if (next.value && next.value.type === "data") {
17089
17085
  const idx = next.value.index;
@@ -17094,9 +17090,6 @@ class SelectionService {
17094
17090
  if ((idx >= start && idx <= end) && !this.isSelected(idx) && !this.nonSelectableRows.has(idx)) {
17095
17091
  selectedRows.push(rowArgs);
17096
17092
  }
17097
- if (idx === item.index && !this.nonSelectableRows.has(idx)) {
17098
- selectedItem = rowArgs;
17099
- }
17100
17093
  }
17101
17094
  next = iterator.next();
17102
17095
  }
@@ -17104,23 +17097,10 @@ class SelectionService {
17104
17097
  const nonSelectableRows = this.currentSelection.filter(i => this.nonSelectableRows.has(i.index));
17105
17098
  deselectedRows.push(...nonSelectableRows);
17106
17099
  }
17107
- const selectionEvent = {
17108
- deselectedRows,
17109
- selectedRows
17100
+ return {
17101
+ deselectedRows: deselectedRows,
17102
+ selectedRows: selectedRows
17110
17103
  };
17111
- if (shiftKey && selectedItem) {
17112
- selectionEvent.rangeStartRow = {
17113
- dataItem: this.lastSelectionData,
17114
- index: this.lastSelectionStartIndex
17115
- };
17116
- selectionEvent.rangeEndRow = {
17117
- dataItem: selectedItem.dataItem,
17118
- index: selectedItem.index
17119
- };
17120
- this.lastSelectionData = selectedItem.dataItem;
17121
- this.lastSelectionStartIndex = selectedItem.index;
17122
- }
17123
- return selectionEvent;
17124
17104
  }
17125
17105
  updateAll(selectAllChecked) {
17126
17106
  this.selectAllChecked = selectAllChecked;
@@ -19109,7 +19089,7 @@ class SelectionCheckboxDirective {
19109
19089
  const ctrlKey = event.ctrlKey || event.metaKey;
19110
19090
  if (event.shiftKey && this.selectionService.options.mode === 'multiple') {
19111
19091
  const item = { index: this.itemIndex };
19112
- ev = this.selectionService.addAllTo(item, ctrlKey, false, event.shiftKey);
19092
+ ev = this.selectionService.addAllTo(item, ctrlKey);
19113
19093
  }
19114
19094
  else {
19115
19095
  ev = this.selectionService.toggleByIndex(this.itemIndex);
@@ -21214,8 +21194,8 @@ const packageMetadata = {
21214
21194
  productName: 'Kendo UI for Angular',
21215
21195
  productCode: 'KENDOUIANGULAR',
21216
21196
  productCodes: ['KENDOUIANGULAR'],
21217
- publishDate: 1751386199,
21218
- version: '19.2.0-develop.13',
21197
+ publishDate: 1750841713,
21198
+ version: '19.2.0-develop.2',
21219
21199
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
21220
21200
  };
21221
21201
 
@@ -23596,8 +23576,7 @@ class ListComponent {
23596
23576
  if (this.virtualColumns && (!this.viewportColumns || this.viewportWidthChange())) {
23597
23577
  this.updateViewportColumns();
23598
23578
  }
23599
- const shouldCalculatePageSize = isDocumentAvailable() && this.isVirtual && this.ctx.grid && !this.ctx.grid.pageSize;
23600
- if (shouldCalculatePageSize) {
23579
+ if (this.isVirtual && this.ctx.grid && !this.ctx.grid.pageSize) {
23601
23580
  const calculatedPageSize = this.calcVirtualPageSize();
23602
23581
  if (calculatedPageSize > 0) {
23603
23582
  this.ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {
@@ -23679,36 +23658,6 @@ class ListComponent {
23679
23658
  args.preventDefault();
23680
23659
  }
23681
23660
  }
23682
- updateViewportColumns(range) {
23683
- const columns = this.columns.nonLockedLeafColumns.toArray();
23684
- // eslint-disable-next-line prefer-const
23685
- let { startIdx, endIdx, offset } = range || this.calculateViewportColumns();
23686
- const start = Math.max(0, startIdx - bufferSize);
23687
- const end = Math.min(endIdx + bufferSize, columns.length - 1);
23688
- if (start < startIdx) {
23689
- for (let idx = startIdx - 1; idx >= start; idx--) {
23690
- offset -= columns[idx].width;
23691
- }
23692
- }
23693
- let currentColumns = columns.slice(start, end + 1);
23694
- this.viewportColumnsWidth = currentColumns.reduce((total, column) => total + column.width, 0);
23695
- const stickyBeforeStart = columns.slice(0, start).filter(c => c.sticky && !currentColumns.some(col => col === c));
23696
- const stickyAfterEnd = columns.slice(end, columns.length).filter(c => c.sticky && !currentColumns.some(col => col === c));
23697
- currentColumns = [...stickyBeforeStart, ...currentColumns, ...stickyAfterEnd];
23698
- if (start > 0) {
23699
- const offsetColumn = new ColumnBase();
23700
- offsetColumn.width = offset;
23701
- currentColumns.unshift(offsetColumn);
23702
- }
23703
- this.viewportColumns = new QueryList();
23704
- this.viewportColumns.reset(currentColumns);
23705
- this.columnsStartIdx = start;
23706
- this.columnsEndIdx = end;
23707
- this.columnInfo.columnRangeChange.emit({ start, end, offset });
23708
- if (!range) {
23709
- this.updateColumnViewport(startIdx, endIdx);
23710
- }
23711
- }
23712
23661
  detailExpand({ index, expand }) {
23713
23662
  if (expand) {
23714
23663
  this.rowHeightService.expandDetail(index);
@@ -23934,6 +23883,36 @@ class ListComponent {
23934
23883
  })
23935
23884
  .forEach(setHeight(this.renderer));
23936
23885
  }
23886
+ updateViewportColumns(range) {
23887
+ const columns = this.columns.nonLockedLeafColumns.toArray();
23888
+ // eslint-disable-next-line prefer-const
23889
+ let { startIdx, endIdx, offset } = range || this.calculateViewportColumns();
23890
+ const start = Math.max(0, startIdx - bufferSize);
23891
+ const end = Math.min(endIdx + bufferSize, columns.length - 1);
23892
+ if (start < startIdx) {
23893
+ for (let idx = startIdx - 1; idx >= start; idx--) {
23894
+ offset -= columns[idx].width;
23895
+ }
23896
+ }
23897
+ let currentColumns = columns.slice(start, end + 1);
23898
+ this.viewportColumnsWidth = currentColumns.reduce((total, column) => total + column.width, 0);
23899
+ const stickyBeforeStart = columns.slice(0, start).filter(c => c.sticky && !currentColumns.some(col => col === c));
23900
+ const stickyAfterEnd = columns.slice(end, columns.length).filter(c => c.sticky && !currentColumns.some(col => col === c));
23901
+ currentColumns = [...stickyBeforeStart, ...currentColumns, ...stickyAfterEnd];
23902
+ if (start > 0) {
23903
+ const offsetColumn = new ColumnBase();
23904
+ offsetColumn.width = offset;
23905
+ currentColumns.unshift(offsetColumn);
23906
+ }
23907
+ this.viewportColumns = new QueryList();
23908
+ this.viewportColumns.reset(currentColumns);
23909
+ this.columnsStartIdx = start;
23910
+ this.columnsEndIdx = end;
23911
+ this.columnInfo.columnRangeChange.emit({ start, end, offset });
23912
+ if (!range) {
23913
+ this.updateColumnViewport(startIdx, endIdx);
23914
+ }
23915
+ }
23937
23916
  handleColumnScroll() {
23938
23917
  const container = this.container.nativeElement;
23939
23918
  const scrollLeft = container.scrollLeft;
@@ -28437,8 +28416,10 @@ class GridComponent {
28437
28416
  dragTargetContainer;
28438
28417
  dropTargetContainer;
28439
28418
  dialogContainer;
28419
+ /**
28420
+ * @hidden
28421
+ */
28440
28422
  adaptiveRenderer;
28441
- listComponent;
28442
28423
  get scrollbarWidth() {
28443
28424
  return this.supportService.scrollbarWidth;
28444
28425
  }
@@ -29123,12 +29104,12 @@ class GridComponent {
29123
29104
  this.sort = state.sort;
29124
29105
  this.group = state.group;
29125
29106
  this.filter = state.filter;
29107
+ this.group = state.group;
29126
29108
  this.skip = state.skip;
29127
29109
  this.pageSize = state.take;
29128
- if (state.currentData) {
29129
- this.data = state.currentData;
29130
- }
29131
- this.changeDetectorRef.markForCheck();
29110
+ this.data = state.currentData;
29111
+ this.changeNotification.notify();
29112
+ this.changeDetectorRef.detectChanges();
29132
29113
  }
29133
29114
  traverseColumns(columns, callback) {
29134
29115
  columns.forEach((column) => {
@@ -29339,9 +29320,6 @@ class GridComponent {
29339
29320
  source.locked = target.locked;
29340
29321
  }
29341
29322
  this.columnsContainer.refresh();
29342
- if (this.virtualColumns) {
29343
- this.listComponent.updateViewportColumns();
29344
- }
29345
29323
  this.changeDetectorRef.markForCheck();
29346
29324
  });
29347
29325
  }
@@ -29764,8 +29742,7 @@ class GridComponent {
29764
29742
  column = toAdd.shift();
29765
29743
  viewportColumns.push(column);
29766
29744
  if (column.isColumnGroup) {
29767
- const children = columnsArray.filter(c => c.parent && c.parent.id === column.id);
29768
- toAdd.unshift(...children);
29745
+ toAdd.unshift(...column.childrenArray);
29769
29746
  }
29770
29747
  }
29771
29748
  const lastFromGroup = viewportColumns[viewportColumns.length - 1];
@@ -29821,8 +29798,8 @@ class GridComponent {
29821
29798
  }
29822
29799
  if (this.groupsService.isExpanded({ groupIndex: index }) !== expand) {
29823
29800
  this.groupsService.toggleRow({ index }, false);
29824
- if (this.ctx.dataBindingDirective && isPresent(this.ctx.dataBindingDirective.groupExpand)) {
29825
- this.ctx.dataBindingDirective[`group${expand ? 'Expand' : 'Collapse'}`]({ groupIndex: index });
29801
+ if (this.ctx.groupBindingDirective) {
29802
+ this.ctx.groupBindingDirective[`group${expand ? 'Expand' : 'Collapse'}`]({ groupIndex: index });
29826
29803
  }
29827
29804
  }
29828
29805
  }
@@ -29895,7 +29872,7 @@ class GridComponent {
29895
29872
  ColumnMenuService,
29896
29873
  MenuTabbingService,
29897
29874
  DataMappingService
29898
- ], 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: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoGrid"], usesOnChanges: true, ngImport: i0, template: `
29875
+ ], 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: `
29899
29876
  <ng-container kendoGridLocalizedMessages
29900
29877
  i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
29901
29878
  groupPanelEmpty="Drag a column header and drop it here to group by that column"
@@ -31712,9 +31689,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
31712
31689
  }], adaptiveRenderer: [{
31713
31690
  type: ViewChild,
31714
31691
  args: [AdaptiveRendererComponent]
31715
- }], listComponent: [{
31716
- type: ViewChild,
31717
- args: [ListComponent]
31718
31692
  }] } });
31719
31693
 
31720
31694
  /**
@@ -31843,7 +31817,7 @@ class DataBindingDirective {
31843
31817
  stateChangeSubscription;
31844
31818
  dataChangedSubscription;
31845
31819
  rowReorderSubscription;
31846
- constructor(grid, changeDetector, localDataChangesService, rowReorderService, ctx) {
31820
+ constructor(grid, changeDetector, localDataChangesService, rowReorderService) {
31847
31821
  this.grid = grid;
31848
31822
  this.changeDetector = changeDetector;
31849
31823
  this.localDataChangesService = localDataChangesService;
@@ -31851,7 +31825,6 @@ class DataBindingDirective {
31851
31825
  if (localDataChangesService) {
31852
31826
  this.dataChangedSubscription = this.localDataChangesService.changes.subscribe(this.rebind.bind(this));
31853
31827
  }
31854
- ctx && (ctx.dataBindingDirective = this);
31855
31828
  }
31856
31829
  /**
31857
31830
  * @hidden
@@ -31946,7 +31919,7 @@ class DataBindingDirective {
31946
31919
  this.grid.updateNavigationMetadata();
31947
31920
  this.dataChanged = false;
31948
31921
  }
31949
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataBindingDirective, deps: [{ token: GridComponent }, { token: i0.ChangeDetectorRef }, { token: LocalDataChangesService }, { token: RowReorderService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Directive });
31922
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataBindingDirective, deps: [{ token: GridComponent }, { token: i0.ChangeDetectorRef }, { token: LocalDataChangesService }, { token: RowReorderService }], target: i0.ɵɵFactoryTarget.Directive });
31950
31923
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DataBindingDirective, isStandalone: true, selector: "[kendoGridBinding]", inputs: { skip: "skip", sort: "sort", filter: "filter", pageSize: "pageSize", group: "group", data: ["kendoGridBinding", "data"] }, exportAs: ["kendoGridBinding"], usesOnChanges: true, ngImport: i0 });
31951
31924
  }
31952
31925
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataBindingDirective, decorators: [{
@@ -31956,7 +31929,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
31956
31929
  exportAs: 'kendoGridBinding',
31957
31930
  standalone: true
31958
31931
  }]
31959
- }], ctorParameters: function () { return [{ type: GridComponent }, { type: i0.ChangeDetectorRef }, { type: LocalDataChangesService }, { type: RowReorderService }, { type: ContextService }]; }, propDecorators: { skip: [{
31932
+ }], ctorParameters: function () { return [{ type: GridComponent }, { type: i0.ChangeDetectorRef }, { type: LocalDataChangesService }, { type: RowReorderService }]; }, propDecorators: { skip: [{
31960
31933
  type: Input
31961
31934
  }], sort: [{
31962
31935
  type: Input
@@ -33053,9 +33026,9 @@ class GroupBindingDirective extends DataBindingDirective {
33053
33026
  groups;
33054
33027
  gridSubs = new Subscription();
33055
33028
  constructor(changeDetector, localDataChangesService, ctxService, groupsService) {
33056
- super(ctxService.grid, changeDetector, localDataChangesService, null, ctxService);
33029
+ super(ctxService.grid, changeDetector, localDataChangesService);
33057
33030
  this.groupsService = groupsService;
33058
- ctxService.dataBindingDirective = this;
33031
+ ctxService.groupBindingDirective = this;
33059
33032
  }
33060
33033
  ngOnInit() {
33061
33034
  super.ngOnInit();
@@ -33849,12 +33822,6 @@ class UndoRedoStack {
33849
33822
  this.currentNode = this.currentNode.previous;
33850
33823
  return this.currentNode.state;
33851
33824
  }
33852
- peekNext() {
33853
- return this.currentNode.next?.state || null;
33854
- }
33855
- peekPrev() {
33856
- return this.currentNode.previous?.state || null;
33857
- }
33858
33825
  /**
33859
33826
  * Performs a redo operation, moving to the next state
33860
33827
  * @returns The next state or null if can't redo
@@ -33977,6 +33944,7 @@ class UndoRedoService {
33977
33944
  onUndo = new Subject();
33978
33945
  onRedo = new Subject();
33979
33946
  stackEndReached = new Subject();
33947
+ setState = new Subject();
33980
33948
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoRedoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
33981
33949
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoRedoService });
33982
33950
  }
@@ -34000,17 +33968,11 @@ class UndoRedoDirective {
34000
33968
  editService;
34001
33969
  undoRedoService;
34002
33970
  changeNotification;
34003
- ctx;
34004
- localDataChangesService;
34005
33971
  /**
34006
33972
  * Sets the maximum number of actions to keep in the undo-redo stack.
34007
33973
  * @default 10
34008
33974
  */
34009
33975
  maxStoredStates = 10;
34010
- /**
34011
- * Defines the property name of the data item unique key that will be used to identify the items when performing undo-redo actions.
34012
- */
34013
- itemIdKey;
34014
33976
  /**
34015
33977
  * Fires when you perform the undo action. Provides the Grid state to apply.
34016
33978
  */
@@ -34028,17 +33990,24 @@ class UndoRedoDirective {
34028
33990
  stack;
34029
33991
  subs = new Subscription();
34030
33992
  addToState = true;
34031
- constructor(host, editService, undoRedoService, changeNotification, ctx, localDataChangesService) {
33993
+ constructor(host, editService, undoRedoService, changeNotification) {
34032
33994
  this.host = host;
34033
33995
  this.editService = editService;
34034
33996
  this.undoRedoService = undoRedoService;
34035
33997
  this.changeNotification = changeNotification;
34036
- this.ctx = ctx;
34037
- this.localDataChangesService = localDataChangesService;
34038
33998
  this.host.undoRedoService = this.undoRedoService;
34039
33999
  }
34040
34000
  ngOnInit() {
34041
34001
  this.stack = new UndoRedoStack(this.maxStoredStates);
34002
+ this.stack.add({
34003
+ originalEvent: {
34004
+ skip: this.host.skip,
34005
+ take: this.host.pageSize,
34006
+ sort: this.host.sort,
34007
+ filter: this.host.filter,
34008
+ group: this.host.group
34009
+ }, gridState: structuredClone(this.host.currentState)
34010
+ });
34042
34011
  this.subs = this.host.gridStateChange.subscribe((state) => {
34043
34012
  if (this.addToState) {
34044
34013
  this.stack.add({
@@ -34049,7 +34018,7 @@ class UndoRedoDirective {
34049
34018
  filter: state.filter,
34050
34019
  group: state.group
34051
34020
  },
34052
- gridState: state
34021
+ gridState: structuredClone(state)
34053
34022
  });
34054
34023
  }
34055
34024
  let stackEndPointReached;
@@ -34062,83 +34031,36 @@ class UndoRedoDirective {
34062
34031
  this.undoRedoService.stackEndReached.next(stackEndPointReached);
34063
34032
  });
34064
34033
  this.subs.add(this.editService.changes
34065
- .pipe(filter((event) => event.action === 'save' || event.action === 'remove'))
34034
+ .pipe(filter(event => event.action === 'save' || event.action === 'remove'), tap(event => this.undoRedoService.originalEvent = event))
34066
34035
  .subscribe(event => {
34067
34036
  this.stack.add({
34068
- originalEvent: { ...event, dataItem: structuredClone(event.dataItem) },
34069
- gridState: this.host.currentState
34037
+ originalEvent: event,
34038
+ gridState: structuredClone(this.host.currentState)
34070
34039
  });
34071
34040
  this.addToState = false;
34072
34041
  this.host.gridStateChange.emit(this.stack.current.gridState);
34073
34042
  this.addToState = true;
34074
34043
  this.updateUndoRedoDisabled();
34075
34044
  }));
34076
- this.subs.add(this.changeNotification.changes.subscribe(() => {
34077
- if (!this.ctx.dataBindingDirective) {
34078
- this.stack.current.gridState = this.host.currentState;
34079
- }
34080
- }));
34045
+ this.subs.add(this.changeNotification.changes.subscribe(() => this.stack.current.gridState = this.host.currentState));
34081
34046
  ['Undo', 'Redo'].forEach((action) => {
34082
34047
  this.subs.add(this.undoRedoService[`on${action}`].subscribe(() => {
34083
34048
  if (!this.stack[`can${action}`]) {
34084
34049
  return;
34085
34050
  }
34086
- let eventData;
34087
- if (action === 'Undo') {
34088
- const isSaveOrRemove = this.stack.current.originalEvent.action === 'save' || this.stack.current.originalEvent.action === 'remove';
34089
- eventData = isSaveOrRemove ? this.stack.current : this.stack.peekPrev();
34090
- }
34091
- else {
34092
- eventData = this.stack.peekNext();
34093
- }
34094
- const event = new UndoRedoEvent(eventData);
34051
+ this.stack[`${action.toLowerCase()}`]();
34095
34052
  if (hasObservers(this[`on${action}`])) {
34053
+ const event = new UndoRedoEvent(this.stack.current);
34096
34054
  this[`on${action}`].emit(event);
34097
34055
  if (event.isDefaultPrevented()) {
34098
34056
  return;
34099
34057
  }
34100
34058
  }
34101
- this.stack[`${action.toLowerCase()}`]();
34102
34059
  this.updateUndoRedoDisabled();
34103
- const originalAction = event.originalEvent.action;
34104
- const isLocalData = isPresent$1(this.ctx?.dataBindingDirective);
34105
- if (!isLocalData) {
34106
- return;
34107
- }
34108
- const isSaveOrRemove = originalAction === 'save' || originalAction === 'remove';
34109
- if (isSaveOrRemove) {
34110
- if (originalAction === 'save') {
34111
- const stateItem = this.getGridDataItems(this.stack.current.gridState.currentData).find(item => item[this.itemIdKey] === event.originalEvent.dataItem[this.itemIdKey]);
34112
- this.localDataChangesService?.data.splice(event.originalEvent.rowIndex, 1, stateItem);
34113
- }
34114
- else if (action === 'Undo') {
34115
- this.localDataChangesService?.data.splice(event.originalEvent.rowIndex, 0, event.originalEvent.dataItem);
34116
- }
34117
- else {
34118
- this.localDataChangesService?.data.splice(event.originalEvent.rowIndex, 1);
34119
- }
34120
- this.localDataChangesService?.changes.emit();
34121
- }
34122
- else {
34123
- this.host.loadState({ ...this.stack.current.gridState, currentData: null });
34124
- if (this.isDataStateChangeEvent(event.originalEvent)) {
34125
- const { skip, take, sort, filter, group } = event.gridState;
34126
- this.host.dataStateChange.emit({ skip, take, sort, filter, group });
34127
- }
34128
- }
34060
+ this.host.loadState(this.stack.current.gridState);
34129
34061
  }));
34130
34062
  });
34131
- }
34132
- ngAfterViewInit() {
34133
- this.stack.add({
34134
- originalEvent: {
34135
- skip: this.host.skip,
34136
- take: this.host.pageSize,
34137
- sort: this.host.sort,
34138
- filter: this.host.filter,
34139
- group: this.host.group
34140
- }, gridState: this.host.currentState
34141
- });
34063
+ this.subs.add(this.undoRedoService.setState.subscribe((state) => this.stack.add({ originalEvent: 'dataChange', gridState: state })));
34142
34064
  }
34143
34065
  ngOnDestroy() {
34144
34066
  this.stack.clear();
@@ -34180,15 +34102,8 @@ class UndoRedoDirective {
34180
34102
  }
34181
34103
  this.undoRedoService.stackEndReached.next(false);
34182
34104
  }
34183
- getGridDataItems(data) {
34184
- return Array.isArray(data) ? data.flatMap(recursiveFlatMap) :
34185
- data.data.flatMap(recursiveFlatMap);
34186
- }
34187
- isDataStateChangeEvent(event) {
34188
- return event && ['skip', 'take', 'sort', 'filter', 'group'].some(prop => prop in event);
34189
- }
34190
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoRedoDirective, deps: [{ token: GridComponent }, { token: EditService }, { token: UndoRedoService }, { token: ChangeNotificationService }, { token: ContextService }, { token: LocalDataChangesService }], target: i0.ɵɵFactoryTarget.Directive });
34191
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: UndoRedoDirective, isStandalone: true, selector: "[kendoGridUndoRedo]", inputs: { maxStoredStates: "maxStoredStates", itemIdKey: "itemIdKey" }, outputs: { onUndo: "undo", onRedo: "redo" }, providers: [UndoRedoService], exportAs: ["kendoGridUndoRedo"], ngImport: i0 });
34105
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoRedoDirective, deps: [{ token: GridComponent }, { token: EditService }, { token: UndoRedoService }, { token: ChangeNotificationService }], target: i0.ɵɵFactoryTarget.Directive });
34106
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: UndoRedoDirective, isStandalone: true, selector: "[kendoGridUndoRedo]", inputs: { maxStoredStates: "maxStoredStates" }, outputs: { onUndo: "undo", onRedo: "redo" }, providers: [UndoRedoService], exportAs: ["kendoGridUndoRedo"], ngImport: i0 });
34192
34107
  }
34193
34108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoRedoDirective, decorators: [{
34194
34109
  type: Directive,
@@ -34198,9 +34113,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34198
34113
  exportAs: 'kendoGridUndoRedo',
34199
34114
  providers: [UndoRedoService]
34200
34115
  }]
34201
- }], ctorParameters: function () { return [{ type: GridComponent }, { type: EditService }, { type: UndoRedoService }, { type: ChangeNotificationService }, { type: ContextService }, { type: LocalDataChangesService }]; }, propDecorators: { maxStoredStates: [{
34202
- type: Input
34203
- }], itemIdKey: [{
34116
+ }], ctorParameters: function () { return [{ type: GridComponent }, { type: EditService }, { type: UndoRedoService }, { type: ChangeNotificationService }]; }, propDecorators: { maxStoredStates: [{
34204
34117
  type: Input
34205
34118
  }], onUndo: [{
34206
34119
  type: Output,
@@ -79,7 +79,6 @@ import { RowReorderEvent } from './row-reordering/types';
79
79
  import { DragTargetContainerDirective, DragTargetDataFn, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
80
80
  import { RowReorderService } from './row-reordering/row-reorder.service';
81
81
  import { StatusBarTemplateDirective } from './aggregates/status-bar-template.directive';
82
- import { ListComponent } from './rendering/list.component';
83
82
  import { PagerTemplateDirective } from '@progress/kendo-angular-pager';
84
83
  import { GridResizableSettings } from './common/resizable-settings';
85
84
  import { GridState } from './state-management/grid-state.models';
@@ -610,8 +609,10 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
610
609
  dragTargetContainer: DragTargetContainerDirective;
611
610
  dropTargetContainer: DropTargetContainerDirective;
612
611
  dialogContainer: ViewContainerRef;
612
+ /**
613
+ * @hidden
614
+ */
613
615
  adaptiveRenderer: AdaptiveRendererComponent;
614
- listComponent: ListComponent;
615
616
  get scrollbarWidth(): number;
616
617
  get showPagerInput(): boolean;
617
618
  set showPagerInput(value: boolean);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-grid",
3
- "version": "19.2.0-develop.13",
3
+ "version": "19.2.0-develop.2",
4
4
  "description": "Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -26,7 +26,7 @@
26
26
  "package": {
27
27
  "productName": "Kendo UI for Angular",
28
28
  "productCode": "KENDOUIANGULAR",
29
- "publishDate": 1751386199,
29
+ "publishDate": 1750841713,
30
30
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
31
31
  }
32
32
  },
@@ -39,28 +39,28 @@
39
39
  "@progress/kendo-data-query": "^1.0.0",
40
40
  "@progress/kendo-drawing": "^1.21.0",
41
41
  "@progress/kendo-licensing": "^1.5.0",
42
- "@progress/kendo-angular-buttons": "19.2.0-develop.13",
43
- "@progress/kendo-angular-common": "19.2.0-develop.13",
44
- "@progress/kendo-angular-dateinputs": "19.2.0-develop.13",
45
- "@progress/kendo-angular-layout": "19.2.0-develop.13",
46
- "@progress/kendo-angular-navigation": "19.2.0-develop.13",
47
- "@progress/kendo-angular-dropdowns": "19.2.0-develop.13",
48
- "@progress/kendo-angular-excel-export": "19.2.0-develop.13",
49
- "@progress/kendo-angular-icons": "19.2.0-develop.13",
50
- "@progress/kendo-angular-inputs": "19.2.0-develop.13",
51
- "@progress/kendo-angular-intl": "19.2.0-develop.13",
52
- "@progress/kendo-angular-l10n": "19.2.0-develop.13",
53
- "@progress/kendo-angular-label": "19.2.0-develop.13",
54
- "@progress/kendo-angular-pager": "19.2.0-develop.13",
55
- "@progress/kendo-angular-pdf-export": "19.2.0-develop.13",
56
- "@progress/kendo-angular-popup": "19.2.0-develop.13",
57
- "@progress/kendo-angular-toolbar": "19.2.0-develop.13",
58
- "@progress/kendo-angular-utils": "19.2.0-develop.13",
42
+ "@progress/kendo-angular-buttons": "19.2.0-develop.2",
43
+ "@progress/kendo-angular-common": "19.2.0-develop.2",
44
+ "@progress/kendo-angular-dateinputs": "19.2.0-develop.2",
45
+ "@progress/kendo-angular-layout": "19.2.0-develop.2",
46
+ "@progress/kendo-angular-navigation": "19.2.0-develop.2",
47
+ "@progress/kendo-angular-dropdowns": "19.2.0-develop.2",
48
+ "@progress/kendo-angular-excel-export": "19.2.0-develop.2",
49
+ "@progress/kendo-angular-icons": "19.2.0-develop.2",
50
+ "@progress/kendo-angular-inputs": "19.2.0-develop.2",
51
+ "@progress/kendo-angular-intl": "19.2.0-develop.2",
52
+ "@progress/kendo-angular-l10n": "19.2.0-develop.2",
53
+ "@progress/kendo-angular-label": "19.2.0-develop.2",
54
+ "@progress/kendo-angular-pager": "19.2.0-develop.2",
55
+ "@progress/kendo-angular-pdf-export": "19.2.0-develop.2",
56
+ "@progress/kendo-angular-popup": "19.2.0-develop.2",
57
+ "@progress/kendo-angular-toolbar": "19.2.0-develop.2",
58
+ "@progress/kendo-angular-utils": "19.2.0-develop.2",
59
59
  "rxjs": "^6.5.3 || ^7.0.0"
60
60
  },
61
61
  "dependencies": {
62
62
  "tslib": "^2.3.1",
63
- "@progress/kendo-angular-schematics": "19.2.0-develop.13",
63
+ "@progress/kendo-angular-schematics": "19.2.0-develop.2",
64
64
  "@progress/kendo-common": "^1.0.1",
65
65
  "@progress/kendo-file-saver": "^1.0.0"
66
66
  },
@@ -138,7 +138,6 @@ export declare class ListComponent implements OnInit, OnDestroy, AfterViewInit,
138
138
  lockedScroll(): void;
139
139
  lockedMousewheel(args: any): void;
140
140
  lockedKeydown(args: any): void;
141
- updateViewportColumns(range?: any): void;
142
141
  private detailExpand;
143
142
  private attachContainerScroll;
144
143
  private createScroller;
@@ -154,6 +153,7 @@ export declare class ListComponent implements OnInit, OnDestroy, AfterViewInit,
154
153
  private cleanupScroller;
155
154
  private initResizeService;
156
155
  private syncContainerHeight;
156
+ private updateViewportColumns;
157
157
  private handleColumnScroll;
158
158
  private updateColumnViewport;
159
159
  private calculateViewportColumns;