@progress/kendo-angular-grid 19.3.0-develop.22 → 19.3.0-develop.24

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 (65) hide show
  1. package/columns/columns-container.d.ts +2 -0
  2. package/common/data-layout-mode.d.ts +19 -0
  3. package/common/stacked-layout-settings.d.ts +24 -0
  4. package/directives.d.ts +4 -3
  5. package/editing-directives/editing-directive-base.d.ts +3 -0
  6. package/esm2022/columns/column-base.mjs +4 -4
  7. package/esm2022/columns/column.component.mjs +1 -1
  8. package/esm2022/columns/columns-container.mjs +3 -0
  9. package/esm2022/common/column-info.service.mjs +1 -1
  10. package/esm2022/common/data-layout-mode.mjs +5 -0
  11. package/esm2022/common/stacked-layout-settings.mjs +5 -0
  12. package/esm2022/directives.mjs +3 -1
  13. package/esm2022/editing-directives/editing-directive-base.mjs +17 -2
  14. package/esm2022/editing-directives/in-cell-editing.directive.mjs +2 -1
  15. package/esm2022/filtering/filter-row.component.mjs +5 -2
  16. package/esm2022/grid.component.mjs +111 -33
  17. package/esm2022/grid.module.mjs +101 -100
  18. package/esm2022/grouping/group-header.component.mjs +39 -4
  19. package/esm2022/index.mjs +1 -0
  20. package/esm2022/localization/messages.mjs +2 -2
  21. package/esm2022/navigation/default-focusable-element.mjs +14 -2
  22. package/esm2022/navigation/focusable.directive.mjs +1 -1
  23. package/esm2022/navigation/navigation-cursor.mjs +7 -1
  24. package/esm2022/navigation/navigation-metadata.mjs +3 -1
  25. package/esm2022/navigation/navigation.service.mjs +136 -5
  26. package/esm2022/package-metadata.mjs +2 -2
  27. package/esm2022/pdf/export-element.mjs +14 -5
  28. package/esm2022/pdf/pdf.component.mjs +3 -1
  29. package/esm2022/rendering/cell.component.mjs +466 -188
  30. package/esm2022/rendering/common/col-group.component.mjs +20 -7
  31. package/esm2022/rendering/footer/footer.component.mjs +117 -54
  32. package/esm2022/rendering/header/header.component.mjs +5 -2
  33. package/esm2022/rendering/list.component.mjs +13 -8
  34. package/esm2022/rendering/table-body.component.mjs +384 -171
  35. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-assistant.component.mjs +7 -3
  36. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-tool.directive.mjs +1 -1
  37. package/esm2022/rendering/toolbar/tools/select-all-command-tool.directive.mjs +93 -0
  38. package/esm2022/row-reordering/row-reorder.service.mjs +2 -2
  39. package/esm2022/row-reordering/utils.mjs +6 -4
  40. package/esm2022/selection/cell-selection.service.mjs +6 -3
  41. package/fesm2022/progress-kendo-angular-grid.mjs +1515 -567
  42. package/filtering/filter-row.component.d.ts +1 -0
  43. package/grid.component.d.ts +22 -1
  44. package/grid.module.d.ts +100 -99
  45. package/grouping/group-header.component.d.ts +1 -0
  46. package/index.d.ts +3 -0
  47. package/localization/messages.d.ts +2 -2
  48. package/navigation/default-focusable-element.d.ts +3 -1
  49. package/navigation/focus-group.d.ts +1 -1
  50. package/navigation/navigation-metadata.d.ts +2 -1
  51. package/navigation/navigation.service.d.ts +6 -0
  52. package/package.json +21 -21
  53. package/rendering/cell.component.d.ts +32 -17
  54. package/rendering/common/col-group.component.d.ts +5 -0
  55. package/rendering/footer/footer.component.d.ts +4 -1
  56. package/rendering/header/header.component.d.ts +1 -0
  57. package/rendering/list.component.d.ts +4 -1
  58. package/rendering/table-body.component.d.ts +2 -1
  59. package/rendering/toolbar/tools/ai-assistant/ai-assistant.component.d.ts +1 -0
  60. package/rendering/toolbar/tools/ai-assistant/ai-tool.directive.d.ts +1 -1
  61. package/rendering/toolbar/tools/select-all-command-tool.directive.d.ts +36 -0
  62. package/row-reordering/row-reorder.service.d.ts +1 -1
  63. package/row-reordering/utils.d.ts +1 -1
  64. package/schematics/ngAdd/index.js +4 -4
  65. package/selection/cell-selection.service.d.ts +1 -0
@@ -143,7 +143,7 @@ const handleExpandCollapseGroupsService = (service, expandEmitter, collapseEmitt
143
143
  .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
144
144
  const handleExpandCollapseDetailsService = (service, expandEmitter, collapseEmitter, map) => (service.changes.pipe(filter(({ dataItem }) => isPresent(dataItem)))
145
145
  .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
146
- const isInEditedCell = (element, gridElement) => closest(element, matchesClasses('k-grid-edit-cell')) &&
146
+ const isInEditedCell = (element, gridElement, isStacked = false) => (closest(element, matchesClasses('k-grid-edit-cell')) || (isStacked && closest(element, matchesClasses('k-grid-stack-edit-cell')))) &&
147
147
  closest(element, matchesNodeName('kendo-grid')) === gridElement;
148
148
  const NOTIFY_DELAY = 500;
149
149
  /**
@@ -390,7 +390,7 @@ export class GridComponent {
390
390
  * @hidden
391
391
  */
392
392
  get isLocked() {
393
- return this.lockedLeafColumns.length > 0;
393
+ return (this.lockedLeafColumns.length > 0 && !this.isStacked);
394
394
  }
395
395
  /**
396
396
  * @hidden
@@ -416,7 +416,9 @@ export class GridComponent {
416
416
  * @hidden
417
417
  */
418
418
  get showGroupPanel() {
419
- return this.groupable && this.groupable.enabled !== false;
419
+ const isGroupable = this.groupable && this.groupable.enabled !== false;
420
+ const isGrouped = this.group?.length > 0;
421
+ return this.isStacked ? isGroupable && isGrouped : isGroupable;
420
422
  }
421
423
  /**
422
424
  * @hidden
@@ -694,6 +696,12 @@ export class GridComponent {
694
696
  get isGroupExpanded() {
695
697
  return this.groupsService.userCallback;
696
698
  }
699
+ /**
700
+ * Sets the Grid data layout display mode.
701
+ *
702
+ * @default 'columns'
703
+ */
704
+ dataLayoutMode = 'columns';
697
705
  /**
698
706
  * Fires when the Grid data is filtered through the UI and the filter descriptor changes.
699
707
  */
@@ -821,8 +829,11 @@ export class GridComponent {
821
829
  get sizeMediumClass() {
822
830
  return this.size === 'medium' || !this.size;
823
831
  }
832
+ get stackedClass() {
833
+ return this.dataLayoutMode === 'stacked';
834
+ }
824
835
  get lockedClasses() {
825
- return this.lockedLeafColumns.length > 0;
836
+ return this.lockedLeafColumns.length > 0 && !this.isStacked;
826
837
  }
827
838
  get virtualClasses() {
828
839
  return this.isVirtual;
@@ -1046,6 +1057,12 @@ export class GridComponent {
1046
1057
  get isScrollable() {
1047
1058
  return this.scrollable !== 'none';
1048
1059
  }
1060
+ /**
1061
+ * @hidden
1062
+ */
1063
+ get isStacked() {
1064
+ return typeof this.dataLayoutMode === 'string' ? this.dataLayoutMode !== 'columns' : this.dataLayoutMode.mode !== 'columns';
1065
+ }
1049
1066
  get visibleColumns() {
1050
1067
  return this.columnsContainer.allColumns;
1051
1068
  }
@@ -1083,11 +1100,14 @@ export class GridComponent {
1083
1100
  return this.nonLockedLeafColumns;
1084
1101
  }
1085
1102
  get lockedWidth() {
1103
+ if (this.isStacked) {
1104
+ return 0;
1105
+ }
1086
1106
  const groupCellsWidth = this.group.length * GROUP_CELL_WIDTH;
1087
1107
  return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);
1088
1108
  }
1089
1109
  get nonLockedWidth() {
1090
- if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {
1110
+ if (((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) && !this.isStacked) {
1091
1111
  return !this.virtualColumns ? this.columnsContainer.unlockedWidth :
1092
1112
  this.leafViewportColumns.reduce((acc, column) => acc + (column.width || 0), 0);
1093
1113
  }
@@ -1113,7 +1133,7 @@ export class GridComponent {
1113
1133
  * @hidden
1114
1134
  */
1115
1135
  getDefaultSelectors(type) {
1116
- return this.rowReorderService.defaultSelectors[type];
1136
+ return this.rowReorderService.defaultSelectors(this.isStacked)[type];
1117
1137
  }
1118
1138
  /**
1119
1139
  * @hidden
@@ -1224,6 +1244,7 @@ export class GridComponent {
1224
1244
  this.columnReorderSubscription = this.columnReorderService
1225
1245
  .changes.subscribe(this.reorder.bind(this));
1226
1246
  this.columnRangeChangeSubscription = this.columnInfoService.columnRangeChange.subscribe(this.onColumnRangeChange.bind(this));
1247
+ this.columnsContainer.isStacked = this.isStacked;
1227
1248
  }
1228
1249
  /**
1229
1250
  * Expands the master row at the specified data row index ([see example]({% slug hierarchy_grid %})).
@@ -1344,6 +1365,15 @@ export class GridComponent {
1344
1365
  }
1345
1366
  }
1346
1367
  }
1368
+ if (isChanged('dataLayoutMode', changes)) {
1369
+ if (this.isStacked) {
1370
+ this.generateStackedColumns();
1371
+ }
1372
+ else {
1373
+ this.stackedColumns = { columns: [], areDefault: false };
1374
+ }
1375
+ this.columnsContainer.isStacked = this.isStacked;
1376
+ }
1347
1377
  }
1348
1378
  ngAfterContentInit() {
1349
1379
  this.shouldGenerateColumns = !this.columns.length;
@@ -1370,6 +1400,7 @@ export class GridComponent {
1370
1400
  if (this.navigable.length) {
1371
1401
  this.navigationService.init(this.navigationMetadata(), this.navigable);
1372
1402
  }
1403
+ this.isStacked && this.generateStackedColumns();
1373
1404
  }
1374
1405
  ngOnDestroy() {
1375
1406
  if (this.selectionSubscription) {
@@ -1540,7 +1571,7 @@ export class GridComponent {
1540
1571
  editCell(rowIndex, column, group) {
1541
1572
  const instance = this.columnInstance(column);
1542
1573
  this.editService.editCell(rowIndex, instance, group);
1543
- this.focusEditElement('.k-grid-edit-cell');
1574
+ this.focusEditElement(this.isStacked ? '.k-grid-stack-edit-cell' : '.k-grid-edit-cell');
1544
1575
  }
1545
1576
  /**
1546
1577
  * Closes the current cell in edit mode and fires the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event.
@@ -1921,7 +1952,8 @@ export class GridComponent {
1921
1952
  isRowSelectable: this.isRowSelectable,
1922
1953
  selectable: this.selectable,
1923
1954
  view: this.view,
1924
- columns: cellSelectionMode ? this.columnList.toArray() : undefined
1955
+ columns: cellSelectionMode ? this.columnList.toArray() : undefined,
1956
+ isStacked: this.isStacked
1925
1957
  });
1926
1958
  if (!this.selectionDirective && !this.selectableSettings.enabled) {
1927
1959
  this.defaultSelection.reset();
@@ -1975,7 +2007,7 @@ export class GridComponent {
1975
2007
  if (this.lockedLeafColumns.length && !this.nonLockedLeafColumns.length) {
1976
2008
  console.warn(GridConfigurationErrorMessages.nonLockedColumnPresent);
1977
2009
  }
1978
- if ((locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2010
+ if (!this.isStacked && (locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
1979
2011
  console.warn(ColumnConfigurationErrorMessages.requiredWidth(locked ? 'Locked' : 'Virtual'));
1980
2012
  }
1981
2013
  if (locked && !this.isScrollable) {
@@ -1999,7 +2031,7 @@ export class GridComponent {
1999
2031
  if (!this.detailRowHeight && this.isVirtual && this.detailTemplate) {
2000
2032
  console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
2001
2033
  }
2002
- if (stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2034
+ if (!this.isStacked && stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2003
2035
  console.warn(ColumnConfigurationErrorMessages.requiredWidth('Sticky'));
2004
2036
  }
2005
2037
  if (this.rowSticky && this.scrollable === 'virtual') {
@@ -2023,6 +2055,47 @@ export class GridComponent {
2023
2055
  }));
2024
2056
  }
2025
2057
  }
2058
+ /**
2059
+ * @hidden
2060
+ */
2061
+ stackedColumns = { columns: [], areDefault: false };
2062
+ generateStackedColumns() {
2063
+ if (!this.isStacked || !isPresent(this.dataLayoutMode)) {
2064
+ return;
2065
+ }
2066
+ this.stackedColumns.columns = [];
2067
+ if (typeof this.dataLayoutMode === 'object') {
2068
+ if (this.dataLayoutMode.mode === 'stacked' && this.dataLayoutMode.stackedLayoutSettings?.cols) {
2069
+ const columns = this.dataLayoutMode.stackedLayoutSettings.cols;
2070
+ if (typeof columns === 'number') {
2071
+ for (let i = 0; i < columns; i++) {
2072
+ const currCol = { width: `${this.wrapper.nativeElement.clientWidth / columns}px` };
2073
+ this.stackedColumns.columns.push(currCol);
2074
+ }
2075
+ this.stackedColumns.areDefault = true;
2076
+ }
2077
+ else if (Array.isArray(columns)) {
2078
+ this.stackedColumns.columns = columns.map((colSize) => {
2079
+ const stackedColumn = {};
2080
+ if (typeof colSize === 'number') {
2081
+ stackedColumn.width = `${colSize}px`;
2082
+ }
2083
+ else if (typeof colSize === 'object' && colSize?.width) {
2084
+ stackedColumn.width = typeof colSize.width === 'number' ? `${colSize.width}px` : colSize.width;
2085
+ }
2086
+ else if (typeof colSize === 'string') {
2087
+ stackedColumn.width = colSize;
2088
+ }
2089
+ return stackedColumn;
2090
+ });
2091
+ this.stackedColumns.areDefault = false;
2092
+ }
2093
+ }
2094
+ }
2095
+ else {
2096
+ this.stackedColumns = { columns: [{ width: this.wrapper.nativeElement.clientWidth }], areDefault: true };
2097
+ }
2098
+ }
2026
2099
  attachStateChangesEmitter() {
2027
2100
  this.stateChangeSubscription =
2028
2101
  merge(this.pageChange.pipe(map(x => ({
@@ -2105,14 +2178,14 @@ export class GridComponent {
2105
2178
  !closest(args.target, matchesClasses('k-animation-container k-grid-ignore-click')) &&
2106
2179
  !(activeElement &&
2107
2180
  (closest(activeElement, matchesClasses('k-animation-container')) ||
2108
- isInEditedCell(activeElement, this.wrapper.nativeElement)))) {
2181
+ isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked)))) {
2109
2182
  this.editService.closeCell(args);
2110
2183
  }
2111
2184
  });
2112
2185
  const windowBlurSubscription = this.renderer.listen('window', 'blur', (args) => {
2113
2186
  const activeElement = document.activeElement;
2114
2187
  if (activeElement && !(matchesNodeName('input')(activeElement) && activeElement.type === 'file' &&
2115
- isInEditedCell(activeElement, this.wrapper.nativeElement))) {
2188
+ isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked))) {
2116
2189
  this.editService.closeCell(args);
2117
2190
  }
2118
2191
  this.domEvents.windowBlur.emit(args);
@@ -2231,8 +2304,8 @@ export class GridComponent {
2231
2304
  const dataRows = isVirtual ? this.view.total : pageSize;
2232
2305
  const addRowOffset = this.editService.hasNewItem ? 1 : 0;
2233
2306
  const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
2234
- const headerRows = this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
2235
- return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer);
2307
+ const headerRows = this.isStacked ? 0 : this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
2308
+ return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.isStacked);
2236
2309
  }
2237
2310
  applyAutoSize() {
2238
2311
  const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
@@ -2337,7 +2410,7 @@ export class GridComponent {
2337
2410
  this.dropTargetContainer?.notify();
2338
2411
  }
2339
2412
  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 });
2340
- 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: [
2413
+ 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", dataLayoutMode: "dataLayoutMode" }, 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-stack": "this.stackedClass", "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: [
2341
2414
  BrowserSupportService,
2342
2415
  LocalizationService,
2343
2416
  ColumnInfoService,
@@ -2621,10 +2694,10 @@ export class GridComponent {
2621
2694
  i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
2622
2695
  columnsReset="Reset"
2623
2696
 
2624
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows."
2697
+ i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
2625
2698
  detailExpand="Expand Details"
2626
2699
 
2627
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows."
2700
+ i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
2628
2701
  detailCollapse="Collapse Details"
2629
2702
 
2630
2703
  i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
@@ -2846,7 +2919,7 @@ export class GridComponent {
2846
2919
  [attr.aria-rowcount]="ariaRowCount"
2847
2920
  [attr.aria-colcount]="ariaColCount">
2848
2921
  <ng-container *ngIf="isScrollable">
2849
- <div *ngIf="!hideHeader"
2922
+ <div *ngIf="!hideHeader && !isStacked"
2850
2923
  class="k-grid-header"
2851
2924
  [class.k-grid-draggable-header]="groupable || reorderable"
2852
2925
  role="presentation"
@@ -2970,7 +3043,7 @@ export class GridComponent {
2970
3043
  class="k-grid-footer"
2971
3044
  [style.padding]="headerPadding">
2972
3045
  <div
2973
- *ngIf="lockedLeafColumns.length"
3046
+ *ngIf="lockedLeafColumns.length && !isStacked"
2974
3047
  class="k-grid-footer-locked"
2975
3048
  [style.width.px]="lockedWidth">
2976
3049
  <table
@@ -2981,7 +3054,7 @@ export class GridComponent {
2981
3054
  [style.width.px]="lockedWidth"
2982
3055
  kendoGridTable
2983
3056
  [size]="size">
2984
- <colgroup kendoGridColGroup
3057
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
2985
3058
  [columns]="$any(lockedLeafColumns)"
2986
3059
  [groups]="group"
2987
3060
  [detailTemplate]="detailTemplate">
@@ -2999,7 +3072,7 @@ export class GridComponent {
2999
3072
  </div>
3000
3073
  <div #footer
3001
3074
  class="k-grid-footer-wrap" data-scrollable
3002
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
3075
+ [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
3003
3076
  [lockedWidth]="lockedWidth + scrollbarWidth + 3">
3004
3077
  <table
3005
3078
  role="presentation"
@@ -3008,7 +3081,7 @@ export class GridComponent {
3008
3081
  kendoGridTable
3009
3082
  kendoGridResizableTable
3010
3083
  [size]="size">
3011
- <colgroup kendoGridColGroup
3084
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
3012
3085
  [columns]="$any(headerLeafColumns)"
3013
3086
  [groups]="isLocked ? [] : group"
3014
3087
  [detailTemplate]="detailTemplate">
@@ -3018,7 +3091,7 @@ export class GridComponent {
3018
3091
  [scrollable]="true"
3019
3092
  [groups]="isLocked ? [] : group"
3020
3093
  [columns]="$any(headerColumns)"
3021
- [lockedColumnsCount]="lockedLeafColumns.length"
3094
+ [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
3022
3095
  [detailTemplate]="detailTemplate"
3023
3096
  [totalColumns]="columnsContainer"
3024
3097
  [totalColumnsCount]="leafColumns.length">
@@ -3042,7 +3115,7 @@ export class GridComponent {
3042
3115
  [detailTemplate]="detailTemplate">
3043
3116
  </colgroup>
3044
3117
  <thead kendoGridHeader
3045
- *ngIf="!hideHeader"
3118
+ *ngIf="!hideHeader && !isStacked"
3046
3119
  class="k-grid-header"
3047
3120
  [class.k-grid-draggable-header]="groupable || reorderable"
3048
3121
  role="rowgroup"
@@ -3476,10 +3549,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3476
3549
  i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
3477
3550
  columnsReset="Reset"
3478
3551
 
3479
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows."
3552
+ i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
3480
3553
  detailExpand="Expand Details"
3481
3554
 
3482
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows."
3555
+ i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
3483
3556
  detailCollapse="Collapse Details"
3484
3557
 
3485
3558
  i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
@@ -3701,7 +3774,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3701
3774
  [attr.aria-rowcount]="ariaRowCount"
3702
3775
  [attr.aria-colcount]="ariaColCount">
3703
3776
  <ng-container *ngIf="isScrollable">
3704
- <div *ngIf="!hideHeader"
3777
+ <div *ngIf="!hideHeader && !isStacked"
3705
3778
  class="k-grid-header"
3706
3779
  [class.k-grid-draggable-header]="groupable || reorderable"
3707
3780
  role="presentation"
@@ -3825,7 +3898,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3825
3898
  class="k-grid-footer"
3826
3899
  [style.padding]="headerPadding">
3827
3900
  <div
3828
- *ngIf="lockedLeafColumns.length"
3901
+ *ngIf="lockedLeafColumns.length && !isStacked"
3829
3902
  class="k-grid-footer-locked"
3830
3903
  [style.width.px]="lockedWidth">
3831
3904
  <table
@@ -3836,7 +3909,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3836
3909
  [style.width.px]="lockedWidth"
3837
3910
  kendoGridTable
3838
3911
  [size]="size">
3839
- <colgroup kendoGridColGroup
3912
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
3840
3913
  [columns]="$any(lockedLeafColumns)"
3841
3914
  [groups]="group"
3842
3915
  [detailTemplate]="detailTemplate">
@@ -3854,7 +3927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3854
3927
  </div>
3855
3928
  <div #footer
3856
3929
  class="k-grid-footer-wrap" data-scrollable
3857
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
3930
+ [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
3858
3931
  [lockedWidth]="lockedWidth + scrollbarWidth + 3">
3859
3932
  <table
3860
3933
  role="presentation"
@@ -3863,7 +3936,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3863
3936
  kendoGridTable
3864
3937
  kendoGridResizableTable
3865
3938
  [size]="size">
3866
- <colgroup kendoGridColGroup
3939
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
3867
3940
  [columns]="$any(headerLeafColumns)"
3868
3941
  [groups]="isLocked ? [] : group"
3869
3942
  [detailTemplate]="detailTemplate">
@@ -3873,7 +3946,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3873
3946
  [scrollable]="true"
3874
3947
  [groups]="isLocked ? [] : group"
3875
3948
  [columns]="$any(headerColumns)"
3876
- [lockedColumnsCount]="lockedLeafColumns.length"
3949
+ [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
3877
3950
  [detailTemplate]="detailTemplate"
3878
3951
  [totalColumns]="columnsContainer"
3879
3952
  [totalColumnsCount]="leafColumns.length">
@@ -3897,7 +3970,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3897
3970
  [detailTemplate]="detailTemplate">
3898
3971
  </colgroup>
3899
3972
  <thead kendoGridHeader
3900
- *ngIf="!hideHeader"
3973
+ *ngIf="!hideHeader && !isStacked"
3901
3974
  class="k-grid-header"
3902
3975
  [class.k-grid-draggable-header]="groupable || reorderable"
3903
3976
  role="rowgroup"
@@ -4121,6 +4194,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4121
4194
  type: Input
4122
4195
  }], isGroupExpanded: [{
4123
4196
  type: Input
4197
+ }], dataLayoutMode: [{
4198
+ type: Input
4124
4199
  }], filterChange: [{
4125
4200
  type: Output
4126
4201
  }], pageChange: [{
@@ -4192,6 +4267,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4192
4267
  }], sizeMediumClass: [{
4193
4268
  type: HostBinding,
4194
4269
  args: ['class.k-grid-md']
4270
+ }], stackedClass: [{
4271
+ type: HostBinding,
4272
+ args: ['class.k-grid-stack']
4195
4273
  }], lockedClasses: [{
4196
4274
  type: HostBinding,
4197
4275
  args: ['class.k-grid-lockedcolumns']