@progress/kendo-angular-grid 19.3.0-develop.4 → 19.3.0-develop.40

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 (120) hide show
  1. package/columns/columns-container.d.ts +2 -0
  2. package/common/data-layout-mode.d.ts +21 -0
  3. package/common/grid-col-size.d.ts +13 -0
  4. package/common/provider.service.d.ts +2 -0
  5. package/common/toolbar-tool-base.directive.d.ts +1 -0
  6. package/data/data-mapping.service.d.ts +3 -1
  7. package/directives.d.ts +7 -4
  8. package/editing/toolbar-editing-tool-base.directive.d.ts +3 -2
  9. package/editing-directives/editing-directive-base.d.ts +3 -0
  10. package/editing-directives/in-cell-editing.directive.d.ts +1 -1
  11. package/editing-directives/reactive-editing.directive.d.ts +1 -1
  12. package/editing-directives/template-editing.directive.d.ts +1 -1
  13. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +1 -2
  14. package/esm2022/column-menu/column-chooser.component.mjs +1 -1
  15. package/esm2022/column-menu/column-list.component.mjs +8 -7
  16. package/esm2022/column-menu/column-menu-item.directive.mjs +1 -1
  17. package/esm2022/column-menu/column-menu.component.mjs +1 -1
  18. package/esm2022/columns/column-base.mjs +4 -4
  19. package/esm2022/columns/column.component.mjs +1 -1
  20. package/esm2022/columns/columns-container.mjs +3 -0
  21. package/esm2022/common/column-info.service.mjs +1 -1
  22. package/esm2022/common/data-layout-mode.mjs +5 -0
  23. package/esm2022/common/grid-col-size.mjs +5 -0
  24. package/esm2022/common/provider.service.mjs +1 -0
  25. package/esm2022/common/toolbar-tool-base.directive.mjs +6 -2
  26. package/esm2022/data/data-mapping.service.mjs +14 -3
  27. package/esm2022/directives.mjs +8 -1
  28. package/esm2022/editing/form/form-formfield.component.mjs +2 -2
  29. package/esm2022/editing/toolbar-editing-tool-base.directive.mjs +5 -0
  30. package/esm2022/editing-directives/editing-directive-base.mjs +17 -2
  31. package/esm2022/editing-directives/in-cell-editing.directive.mjs +5 -3
  32. package/esm2022/editing-directives/reactive-editing.directive.mjs +1 -1
  33. package/esm2022/editing-directives/template-editing.directive.mjs +1 -1
  34. package/esm2022/filtering/cell/boolean-filter-cell.component.mjs +1 -1
  35. package/esm2022/filtering/cell/date-filter-cell.component.mjs +1 -1
  36. package/esm2022/filtering/cell/filter-cell-operators.component.mjs +3 -4
  37. package/esm2022/filtering/cell/numeric-filter-cell.component.mjs +1 -1
  38. package/esm2022/filtering/cell/string-filter-cell.component.mjs +1 -1
  39. package/esm2022/filtering/filter-row.component.mjs +6 -3
  40. package/esm2022/filtering/menu/boolean-filter-menu.component.mjs +1 -2
  41. package/esm2022/filtering/menu/date-filter-menu-input.component.mjs +1 -1
  42. package/esm2022/filtering/menu/date-filter-menu.component.mjs +1 -1
  43. package/esm2022/filtering/menu/filter-menu-dropdownlist.directive.mjs +1 -1
  44. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +1 -1
  45. package/esm2022/filtering/menu/filter-menu.component.mjs +1 -1
  46. package/esm2022/filtering/menu/numeric-filter-menu-input.component.mjs +1 -1
  47. package/esm2022/filtering/menu/numeric-filter-menu.component.mjs +1 -1
  48. package/esm2022/filtering/menu/string-filter-menu-input.component.mjs +1 -1
  49. package/esm2022/filtering/menu/string-filter-menu.component.mjs +1 -1
  50. package/esm2022/grid.component.mjs +191 -39
  51. package/esm2022/grid.module.mjs +103 -100
  52. package/esm2022/grouping/group-header.component.mjs +39 -4
  53. package/esm2022/grouping/group-panel.component.mjs +13 -8
  54. package/esm2022/highlight/highlight-item.mjs +5 -0
  55. package/esm2022/highlight/highlight.directive.mjs +132 -0
  56. package/esm2022/index.mjs +4 -0
  57. package/esm2022/localization/messages.mjs +57 -3
  58. package/esm2022/navigation/navigation-cursor.mjs +7 -1
  59. package/esm2022/navigation/navigation-metadata.mjs +3 -1
  60. package/esm2022/navigation/navigation.service.mjs +162 -16
  61. package/esm2022/navigation/toolbar-tool-name.mjs +2 -1
  62. package/esm2022/package-metadata.mjs +2 -2
  63. package/esm2022/pdf/export-element.mjs +14 -5
  64. package/esm2022/pdf/pdf.component.mjs +3 -1
  65. package/esm2022/rendering/cell.component.mjs +466 -188
  66. package/esm2022/rendering/common/col-group.component.mjs +21 -7
  67. package/esm2022/rendering/details-expand.directive.mjs +5 -2
  68. package/esm2022/rendering/footer/footer.component.mjs +117 -54
  69. package/esm2022/rendering/header/header.component.mjs +13 -9
  70. package/esm2022/rendering/list.component.mjs +19 -12
  71. package/esm2022/rendering/loading-template.directive.mjs +1 -0
  72. package/esm2022/rendering/table-body.component.mjs +394 -174
  73. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-assistant.component.mjs +300 -0
  74. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-tool.directive.mjs +257 -0
  75. package/esm2022/rendering/toolbar/tools/ai-assistant/utils.mjs +74 -0
  76. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +0 -3
  77. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +11 -9
  78. package/esm2022/rendering/toolbar/tools/select-all-command-tool.directive.mjs +93 -0
  79. package/esm2022/row-reordering/row-reorder.service.mjs +2 -2
  80. package/esm2022/row-reordering/utils.mjs +6 -4
  81. package/esm2022/selection/cell-selection.service.mjs +6 -3
  82. package/esm2022/selection/pair-set.mjs +87 -10
  83. package/esm2022/selection/selection-checkbox.directive.mjs +1 -1
  84. package/esm2022/selection/selection.directive.mjs +1 -1
  85. package/esm2022/utils.mjs +0 -4
  86. package/fesm2022/progress-kendo-angular-grid.mjs +2551 -642
  87. package/filtering/filter-row.component.d.ts +1 -0
  88. package/grid.component.d.ts +29 -1
  89. package/grid.module.d.ts +102 -99
  90. package/grouping/group-header.component.d.ts +1 -0
  91. package/grouping/group-panel.component.d.ts +1 -1
  92. package/highlight/highlight-item.d.ts +17 -0
  93. package/highlight/highlight.directive.d.ts +56 -0
  94. package/index.d.ts +8 -1
  95. package/localization/messages.d.ts +39 -3
  96. package/navigation/focus-group.d.ts +1 -1
  97. package/navigation/navigation-metadata.d.ts +2 -1
  98. package/navigation/navigation.service.d.ts +6 -0
  99. package/navigation/toolbar-tool-name.d.ts +1 -0
  100. package/package.json +22 -21
  101. package/rendering/cell.component.d.ts +30 -15
  102. package/rendering/common/col-group.component.d.ts +5 -0
  103. package/rendering/details-expand.directive.d.ts +5 -2
  104. package/rendering/footer/footer.component.d.ts +4 -1
  105. package/rendering/header/header.component.d.ts +1 -0
  106. package/rendering/list.component.d.ts +4 -1
  107. package/rendering/loading-template.directive.d.ts +1 -0
  108. package/rendering/table-body.component.d.ts +3 -1
  109. package/rendering/toolbar/tools/ai-assistant/ai-assistant.component.d.ts +50 -0
  110. package/rendering/toolbar/tools/ai-assistant/ai-tool.directive.d.ts +108 -0
  111. package/rendering/toolbar/tools/ai-assistant/utils.d.ts +124 -0
  112. package/rendering/toolbar/tools/column-chooser-tool.directive.d.ts +0 -1
  113. package/rendering/toolbar/tools/select-all-command-tool.directive.d.ts +36 -0
  114. package/row-reordering/row-reorder.service.d.ts +1 -1
  115. package/row-reordering/utils.d.ts +1 -1
  116. package/schematics/ngAdd/index.js +4 -4
  117. package/selection/cell-selection.service.d.ts +1 -0
  118. package/selection/pair-set.d.ts +36 -8
  119. package/selection/selection.directive.d.ts +1 -1
  120. package/utils.d.ts +0 -4
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, QueryList, ViewChild, isDevMode, NgZone, ViewChildren, ChangeDetectorRef, ViewEncapsulation, ViewContainerRef } from '@angular/core';
5
+ import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, QueryList, ViewChild, isDevMode, NgZone, ViewChildren, ChangeDetectorRef, ViewEncapsulation, ViewContainerRef, ContentChild } from '@angular/core';
6
6
  import { ZoneAwareEventEmitter } from './common/event-emitter';
7
7
  import { FormControl, FormGroup } from '@angular/forms';
8
8
  import { merge } from 'rxjs';
@@ -71,7 +71,7 @@ import { CellLoadingTemplateDirective } from './rendering/cell-loading.template.
71
71
  import { ContextService } from './common/provider.service';
72
72
  import { LoadingTemplateDirective } from './rendering/loading-template.directive';
73
73
  import { SizingOptionsService } from './layout/sizing-options.service';
74
- import { DraggableDirective, WatermarkOverlayComponent, guid, shouldShowValidationUI } from '@progress/kendo-angular-common';
74
+ import { DraggableDirective, WatermarkOverlayComponent, guid, shouldShowValidationUI, getLicenseMessage } from '@progress/kendo-angular-common';
75
75
  import { DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
76
76
  import { RowReorderService } from './row-reordering/row-reorder.service';
77
77
  import { StatusBarTemplateDirective } from './aggregates/status-bar-template.directive';
@@ -101,6 +101,7 @@ import { AdaptiveRendererComponent } from './adaptiveness/adaptive-renderer.comp
101
101
  import { ColumnMenuService } from './column-menu/column-menu.service';
102
102
  import { MenuTabbingService } from './filtering/menu/menu-tabbing.service';
103
103
  import { DataMappingService } from './data/data-mapping.service';
104
+ import { AIAssistantToolbarDirective } from './rendering/toolbar/tools/ai-assistant/ai-tool.directive';
104
105
  import * as i0 from "@angular/core";
105
106
  import * as i1 from "./layout/browser-support.service";
106
107
  import * as i2 from "./selection/selection.service";
@@ -141,7 +142,7 @@ const handleExpandCollapseGroupsService = (service, expandEmitter, collapseEmitt
141
142
  .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
142
143
  const handleExpandCollapseDetailsService = (service, expandEmitter, collapseEmitter, map) => (service.changes.pipe(filter(({ dataItem }) => isPresent(dataItem)))
143
144
  .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
144
- const isInEditedCell = (element, gridElement) => closest(element, matchesClasses('k-grid-edit-cell')) &&
145
+ const isInEditedCell = (element, gridElement, isStacked = false) => (closest(element, matchesClasses('k-grid-edit-cell')) || (isStacked && closest(element, matchesClasses('k-grid-stack-edit-cell')))) &&
145
146
  closest(element, matchesNodeName('kendo-grid')) === gridElement;
146
147
  const NOTIFY_DELAY = 500;
147
148
  /**
@@ -388,7 +389,7 @@ export class GridComponent {
388
389
  * @hidden
389
390
  */
390
391
  get isLocked() {
391
- return this.lockedLeafColumns.length > 0;
392
+ return (this.lockedLeafColumns.length > 0 && !this.isStacked);
392
393
  }
393
394
  /**
394
395
  * @hidden
@@ -414,7 +415,9 @@ export class GridComponent {
414
415
  * @hidden
415
416
  */
416
417
  get showGroupPanel() {
417
- return this.groupable && this.groupable.enabled !== false;
418
+ const isGroupable = this.groupable && this.groupable.enabled !== false;
419
+ const isGrouped = this.group?.length > 0;
420
+ return this.isStacked ? isGroupable && isGrouped : isGroupable;
418
421
  }
419
422
  /**
420
423
  * @hidden
@@ -692,6 +695,12 @@ export class GridComponent {
692
695
  get isGroupExpanded() {
693
696
  return this.groupsService.userCallback;
694
697
  }
698
+ /**
699
+ * Sets the Grid data layout display mode.
700
+ *
701
+ * @default 'columns'
702
+ */
703
+ dataLayoutMode = 'columns';
695
704
  /**
696
705
  * Fires when the Grid data is filtered through the UI and the filter descriptor changes.
697
706
  */
@@ -819,8 +828,11 @@ export class GridComponent {
819
828
  get sizeMediumClass() {
820
829
  return this.size === 'medium' || !this.size;
821
830
  }
831
+ get stackedClass() {
832
+ return this.dataLayoutMode === 'stacked';
833
+ }
822
834
  get lockedClasses() {
823
- return this.lockedLeafColumns.length > 0;
835
+ return this.lockedLeafColumns.length > 0 && !this.isStacked;
824
836
  }
825
837
  get virtualClasses() {
826
838
  return this.isVirtual;
@@ -914,6 +926,7 @@ export class GridComponent {
914
926
  this._customToolbarTemplate = customToolbarTemplate;
915
927
  }
916
928
  columnMenuTemplates;
929
+ aiAssistantToolbarTool;
917
930
  lockedHeader;
918
931
  header;
919
932
  footer = new QueryList();
@@ -921,6 +934,7 @@ export class GridComponent {
921
934
  dragTargetContainer;
922
935
  dropTargetContainer;
923
936
  dialogContainer;
937
+ windowContainer;
924
938
  adaptiveRenderer;
925
939
  listComponent;
926
940
  get scrollbarWidth() {
@@ -973,6 +987,10 @@ export class GridComponent {
973
987
  selectionDirective = false;
974
988
  ariaRootId = `k-${guid()}`;
975
989
  showLicenseWatermark = false;
990
+ /**
991
+ * @hidden
992
+ */
993
+ licenseMessage;
976
994
  columnsContainer = new ColumnsContainer(() => this.columnList.filterHierarchy(column => {
977
995
  if (!isUniversal()) {
978
996
  column.matchesMedia = this.matchesMedia(column);
@@ -1038,6 +1056,12 @@ export class GridComponent {
1038
1056
  get isScrollable() {
1039
1057
  return this.scrollable !== 'none';
1040
1058
  }
1059
+ /**
1060
+ * @hidden
1061
+ */
1062
+ get isStacked() {
1063
+ return typeof this.dataLayoutMode === 'string' ? this.dataLayoutMode !== 'columns' : this.dataLayoutMode.mode !== 'columns';
1064
+ }
1041
1065
  get visibleColumns() {
1042
1066
  return this.columnsContainer.allColumns;
1043
1067
  }
@@ -1075,11 +1099,14 @@ export class GridComponent {
1075
1099
  return this.nonLockedLeafColumns;
1076
1100
  }
1077
1101
  get lockedWidth() {
1102
+ if (this.isStacked) {
1103
+ return 0;
1104
+ }
1078
1105
  const groupCellsWidth = this.group.length * GROUP_CELL_WIDTH;
1079
1106
  return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);
1080
1107
  }
1081
1108
  get nonLockedWidth() {
1082
- if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {
1109
+ if (((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) && !this.isStacked) {
1083
1110
  return !this.virtualColumns ? this.columnsContainer.unlockedWidth :
1084
1111
  this.leafViewportColumns.reduce((acc, column) => acc + (column.width || 0), 0);
1085
1112
  }
@@ -1105,7 +1132,7 @@ export class GridComponent {
1105
1132
  * @hidden
1106
1133
  */
1107
1134
  getDefaultSelectors(type) {
1108
- return this.rowReorderService.defaultSelectors[type];
1135
+ return this.rowReorderService.defaultSelectors(this.isStacked)[type];
1109
1136
  }
1110
1137
  /**
1111
1138
  * @hidden
@@ -1176,8 +1203,10 @@ export class GridComponent {
1176
1203
  this.rowReorderService = rowReorderService;
1177
1204
  this.dataMappingService = dataMappingService;
1178
1205
  const isValid = validatePackage(packageMetadata);
1206
+ this.licenseMessage = getLicenseMessage(packageMetadata);
1179
1207
  this.showLicenseWatermark = shouldShowValidationUI(isValid);
1180
1208
  this.ctx.grid = this;
1209
+ this.ctx.navigable = typeof this.navigable === 'boolean' ? this.navigable : this.navigable.includes('table');
1181
1210
  this.groupChange = new ZoneAwareEventEmitter(this.ngZone);
1182
1211
  this.cellClick = new ZoneAwareEventEmitter(this.ngZone);
1183
1212
  this.columnResize = new ZoneAwareEventEmitter(this.ngZone);
@@ -1215,6 +1244,7 @@ export class GridComponent {
1215
1244
  this.columnReorderSubscription = this.columnReorderService
1216
1245
  .changes.subscribe(this.reorder.bind(this));
1217
1246
  this.columnRangeChangeSubscription = this.columnInfoService.columnRangeChange.subscribe(this.onColumnRangeChange.bind(this));
1247
+ this.columnsContainer.isStacked = this.isStacked;
1218
1248
  }
1219
1249
  /**
1220
1250
  * Expands the master row at the specified data row index ([see example]({% slug hierarchy_grid %})).
@@ -1335,6 +1365,15 @@ export class GridComponent {
1335
1365
  }
1336
1366
  }
1337
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
+ }
1338
1377
  }
1339
1378
  ngAfterContentInit() {
1340
1379
  this.shouldGenerateColumns = !this.columns.length;
@@ -1361,6 +1400,7 @@ export class GridComponent {
1361
1400
  if (this.navigable.length) {
1362
1401
  this.navigationService.init(this.navigationMetadata(), this.navigable);
1363
1402
  }
1403
+ this.isStacked && this.generateStackedColumns();
1364
1404
  }
1365
1405
  ngOnDestroy() {
1366
1406
  if (this.selectionSubscription) {
@@ -1506,6 +1546,7 @@ export class GridComponent {
1506
1546
  */
1507
1547
  closeRow(index) {
1508
1548
  this.editService.close(index);
1549
+ this.isStacked && (this.navigationService.stackedCellEntered = false);
1509
1550
  }
1510
1551
  /**
1511
1552
  * Creates a new row editor ([see example]({% slug inline_editing_grid %}#toc-adding-records-1)).
@@ -1531,7 +1572,7 @@ export class GridComponent {
1531
1572
  editCell(rowIndex, column, group) {
1532
1573
  const instance = this.columnInstance(column);
1533
1574
  this.editService.editCell(rowIndex, instance, group);
1534
- this.focusEditElement('.k-grid-edit-cell');
1575
+ this.focusEditElement(this.isStacked ? '.k-grid-stack-edit-cell' : '.k-grid-edit-cell');
1535
1576
  }
1536
1577
  /**
1537
1578
  * Closes the current cell in edit mode and fires the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event.
@@ -1912,7 +1953,8 @@ export class GridComponent {
1912
1953
  isRowSelectable: this.isRowSelectable,
1913
1954
  selectable: this.selectable,
1914
1955
  view: this.view,
1915
- columns: cellSelectionMode ? this.columnList.toArray() : undefined
1956
+ columns: cellSelectionMode ? this.columnList.toArray() : undefined,
1957
+ isStacked: this.isStacked
1916
1958
  });
1917
1959
  if (!this.selectionDirective && !this.selectableSettings.enabled) {
1918
1960
  this.defaultSelection.reset();
@@ -1966,7 +2008,7 @@ export class GridComponent {
1966
2008
  if (this.lockedLeafColumns.length && !this.nonLockedLeafColumns.length) {
1967
2009
  console.warn(GridConfigurationErrorMessages.nonLockedColumnPresent);
1968
2010
  }
1969
- if ((locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2011
+ if (!this.isStacked && (locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
1970
2012
  console.warn(ColumnConfigurationErrorMessages.requiredWidth(locked ? 'Locked' : 'Virtual'));
1971
2013
  }
1972
2014
  if (locked && !this.isScrollable) {
@@ -1990,7 +2032,7 @@ export class GridComponent {
1990
2032
  if (!this.detailRowHeight && this.isVirtual && this.detailTemplate) {
1991
2033
  console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
1992
2034
  }
1993
- if (stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2035
+ if (!this.isStacked && stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
1994
2036
  console.warn(ColumnConfigurationErrorMessages.requiredWidth('Sticky'));
1995
2037
  }
1996
2038
  if (this.rowSticky && this.scrollable === 'virtual') {
@@ -2014,6 +2056,47 @@ export class GridComponent {
2014
2056
  }));
2015
2057
  }
2016
2058
  }
2059
+ /**
2060
+ * @hidden
2061
+ */
2062
+ stackedColumns = { columns: [], areDefault: false };
2063
+ generateStackedColumns() {
2064
+ if (!this.isStacked || !isPresent(this.dataLayoutMode)) {
2065
+ return;
2066
+ }
2067
+ this.stackedColumns.columns = [];
2068
+ if (typeof this.dataLayoutMode === 'object') {
2069
+ if (this.dataLayoutMode.mode === 'stacked' && this.dataLayoutMode.stackedCols) {
2070
+ const columns = this.dataLayoutMode.stackedCols;
2071
+ if (typeof columns === 'number') {
2072
+ for (let i = 0; i < columns; i++) {
2073
+ const currCol = { width: `${this.wrapper.nativeElement.clientWidth / columns}px` };
2074
+ this.stackedColumns.columns.push(currCol);
2075
+ }
2076
+ this.stackedColumns.areDefault = true;
2077
+ }
2078
+ else if (Array.isArray(columns)) {
2079
+ this.stackedColumns.columns = columns.map((colSize) => {
2080
+ const stackedColumn = {};
2081
+ if (typeof colSize === 'number') {
2082
+ stackedColumn.width = `${colSize}px`;
2083
+ }
2084
+ else if (typeof colSize === 'object' && colSize?.width) {
2085
+ stackedColumn.width = typeof colSize.width === 'number' ? `${colSize.width}px` : colSize.width;
2086
+ }
2087
+ else if (typeof colSize === 'string') {
2088
+ stackedColumn.width = colSize;
2089
+ }
2090
+ return stackedColumn;
2091
+ });
2092
+ this.stackedColumns.areDefault = false;
2093
+ }
2094
+ }
2095
+ }
2096
+ else {
2097
+ this.stackedColumns = { columns: [{ width: this.wrapper.nativeElement.clientWidth }], areDefault: true };
2098
+ }
2099
+ }
2017
2100
  attachStateChangesEmitter() {
2018
2101
  this.stateChangeSubscription =
2019
2102
  merge(this.pageChange.pipe(map(x => ({
@@ -2096,14 +2179,14 @@ export class GridComponent {
2096
2179
  !closest(args.target, matchesClasses('k-animation-container k-grid-ignore-click')) &&
2097
2180
  !(activeElement &&
2098
2181
  (closest(activeElement, matchesClasses('k-animation-container')) ||
2099
- isInEditedCell(activeElement, this.wrapper.nativeElement)))) {
2182
+ isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked)))) {
2100
2183
  this.editService.closeCell(args);
2101
2184
  }
2102
2185
  });
2103
2186
  const windowBlurSubscription = this.renderer.listen('window', 'blur', (args) => {
2104
2187
  const activeElement = document.activeElement;
2105
2188
  if (activeElement && !(matchesNodeName('input')(activeElement) && activeElement.type === 'file' &&
2106
- isInEditedCell(activeElement, this.wrapper.nativeElement))) {
2189
+ isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked))) {
2107
2190
  this.editService.closeCell(args);
2108
2191
  }
2109
2192
  this.domEvents.windowBlur.emit(args);
@@ -2222,8 +2305,8 @@ export class GridComponent {
2222
2305
  const dataRows = isVirtual ? this.view.total : pageSize;
2223
2306
  const addRowOffset = this.editService.hasNewItem ? 1 : 0;
2224
2307
  const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
2225
- const headerRows = this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
2226
- return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer);
2308
+ const headerRows = this.isStacked ? 0 : this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
2309
+ return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.isStacked);
2227
2310
  }
2228
2311
  applyAutoSize() {
2229
2312
  const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
@@ -2328,7 +2411,7 @@ export class GridComponent {
2328
2411
  this.dropTargetContainer?.notify();
2329
2412
  }
2330
2413
  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 });
2331
- 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: [
2414
+ 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: [
2332
2415
  BrowserSupportService,
2333
2416
  LocalizationService,
2334
2417
  ColumnInfoService,
@@ -2379,7 +2462,7 @@ export class GridComponent {
2379
2462
  ColumnMenuService,
2380
2463
  MenuTabbingService,
2381
2464
  DataMappingService
2382
- ], 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: `
2465
+ ], queries: [{ propertyName: "aiAssistantToolbarTool", first: true, predicate: AIAssistantToolbarDirective, descendants: true }, { 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: "windowContainer", first: true, predicate: ["windowContainer"], 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: `
2383
2466
  <ng-container kendoGridLocalizedMessages
2384
2467
  i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
2385
2468
  groupPanelEmpty="Drag a column header and drop it here to group by that column"
@@ -2612,10 +2695,10 @@ export class GridComponent {
2612
2695
  i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
2613
2696
  columnsReset="Reset"
2614
2697
 
2615
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows."
2698
+ i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
2616
2699
  detailExpand="Expand Details"
2617
2700
 
2618
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows."
2701
+ i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
2619
2702
  detailCollapse="Collapse Details"
2620
2703
 
2621
2704
  i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
@@ -2725,6 +2808,33 @@ export class GridComponent {
2725
2808
 
2726
2809
  i18n-externalEditingCancelText="kendo.grid.externalEditingCancelText|The text of the external editing form Cancel button"
2727
2810
  externalEditingCancelText="Cancel"
2811
+
2812
+ i18n-aiAssistantToolbarToolText="kendo.grid.aiAssistantToolbarToolText|The text of the AI Assistant toolbar tool"
2813
+ aiAssistantToolbarToolText="AI Assistant"
2814
+
2815
+ i18n-aiAssistantWindowTitle="kendo.grid.aiAssistantWindowTitle|The text of the AI Assistant Window title"
2816
+ aiAssistantWindowTitle="AI Assistant"
2817
+
2818
+ i18n-aiAssistantApplyButtonText="kendo.grid.aiAssistantApplyButtonText|The text of the AI Assistant Apply button"
2819
+ aiAssistantApplyButtonText="Apply"
2820
+
2821
+ i18n-aiAssistantWindowCloseTitle="kendo.grid.aiAssistantWindowCloseTitle|The title of the AI Assistant Window close button"
2822
+ aiAssistantWindowCloseTitle="Close"
2823
+
2824
+ i18n-aiAssistantWindowMaximizeTitle="kendo.grid.aiAssistantWindowMaximizeTitle|The title of the AI Assistant Window maximize button"
2825
+ aiAssistantWindowMaximizeTitle="Maximize"
2826
+
2827
+ i18n-aiAssistantWindowMinimizeTitle="kendo.grid.aiAssistantWindowMinimizeTitle|The title of the AI Assistant Window minimize button"
2828
+ aiAssistantWindowMinimizeTitle="Minimize"
2829
+
2830
+ i18n-aiAssistantWindowRestoreTitle="kendo.grid.aiAssistantWindowRestoreTitle|The title of the AI Assistant Window restore button"
2831
+ aiAssistantWindowRestoreTitle="Restore"
2832
+
2833
+ i18n-aiAssistantOutputCardTitle="kendo.grid.aiAssistantOutputCardTitle|The title of the AI Assistant Prompt Output Card"
2834
+ aiAssistantOutputCardTitle="Generated with AI"
2835
+
2836
+ i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
2837
+ aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
2728
2838
  >
2729
2839
  </ng-container>
2730
2840
  <kendo-grid-toolbar
@@ -2810,7 +2920,7 @@ export class GridComponent {
2810
2920
  [attr.aria-rowcount]="ariaRowCount"
2811
2921
  [attr.aria-colcount]="ariaColCount">
2812
2922
  <ng-container *ngIf="isScrollable">
2813
- <div *ngIf="!hideHeader"
2923
+ <div *ngIf="!hideHeader && !isStacked"
2814
2924
  class="k-grid-header"
2815
2925
  [class.k-grid-draggable-header]="groupable || reorderable"
2816
2926
  role="presentation"
@@ -2934,7 +3044,7 @@ export class GridComponent {
2934
3044
  class="k-grid-footer"
2935
3045
  [style.padding]="headerPadding">
2936
3046
  <div
2937
- *ngIf="lockedLeafColumns.length"
3047
+ *ngIf="lockedLeafColumns.length && !isStacked"
2938
3048
  class="k-grid-footer-locked"
2939
3049
  [style.width.px]="lockedWidth">
2940
3050
  <table
@@ -2945,7 +3055,7 @@ export class GridComponent {
2945
3055
  [style.width.px]="lockedWidth"
2946
3056
  kendoGridTable
2947
3057
  [size]="size">
2948
- <colgroup kendoGridColGroup
3058
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
2949
3059
  [columns]="$any(lockedLeafColumns)"
2950
3060
  [groups]="group"
2951
3061
  [detailTemplate]="detailTemplate">
@@ -2963,7 +3073,7 @@ export class GridComponent {
2963
3073
  </div>
2964
3074
  <div #footer
2965
3075
  class="k-grid-footer-wrap" data-scrollable
2966
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
3076
+ [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
2967
3077
  [lockedWidth]="lockedWidth + scrollbarWidth + 3">
2968
3078
  <table
2969
3079
  role="presentation"
@@ -2972,7 +3082,7 @@ export class GridComponent {
2972
3082
  kendoGridTable
2973
3083
  kendoGridResizableTable
2974
3084
  [size]="size">
2975
- <colgroup kendoGridColGroup
3085
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
2976
3086
  [columns]="$any(headerLeafColumns)"
2977
3087
  [groups]="isLocked ? [] : group"
2978
3088
  [detailTemplate]="detailTemplate">
@@ -2982,7 +3092,7 @@ export class GridComponent {
2982
3092
  [scrollable]="true"
2983
3093
  [groups]="isLocked ? [] : group"
2984
3094
  [columns]="$any(headerColumns)"
2985
- [lockedColumnsCount]="lockedLeafColumns.length"
3095
+ [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
2986
3096
  [detailTemplate]="detailTemplate"
2987
3097
  [totalColumns]="columnsContainer"
2988
3098
  [totalColumnsCount]="leafColumns.length">
@@ -3006,7 +3116,7 @@ export class GridComponent {
3006
3116
  [detailTemplate]="detailTemplate">
3007
3117
  </colgroup>
3008
3118
  <thead kendoGridHeader
3009
- *ngIf="!hideHeader"
3119
+ *ngIf="!hideHeader && !isStacked"
3010
3120
  class="k-grid-header"
3011
3121
  [class.k-grid-draggable-header]="groupable || reorderable"
3012
3122
  role="rowgroup"
@@ -3144,8 +3254,10 @@ export class GridComponent {
3144
3254
 
3145
3255
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
3146
3256
 
3147
- <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3148
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GridToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }, { kind: "component", type: i27.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i27.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i27.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i27.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i27.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i27.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i27.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i27.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i27.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }], encapsulation: i0.ViewEncapsulation.None });
3257
+ <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
3258
+
3259
+ <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
3260
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GridToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i27.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i27.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i27.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i27.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i27.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i27.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i27.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i27.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i27.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }], encapsulation: i0.ViewEncapsulation.None });
3149
3261
  }
3150
3262
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
3151
3263
  type: Component,
@@ -3438,10 +3550,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3438
3550
  i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
3439
3551
  columnsReset="Reset"
3440
3552
 
3441
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows."
3553
+ i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
3442
3554
  detailExpand="Expand Details"
3443
3555
 
3444
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows."
3556
+ i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
3445
3557
  detailCollapse="Collapse Details"
3446
3558
 
3447
3559
  i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
@@ -3551,6 +3663,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3551
3663
 
3552
3664
  i18n-externalEditingCancelText="kendo.grid.externalEditingCancelText|The text of the external editing form Cancel button"
3553
3665
  externalEditingCancelText="Cancel"
3666
+
3667
+ i18n-aiAssistantToolbarToolText="kendo.grid.aiAssistantToolbarToolText|The text of the AI Assistant toolbar tool"
3668
+ aiAssistantToolbarToolText="AI Assistant"
3669
+
3670
+ i18n-aiAssistantWindowTitle="kendo.grid.aiAssistantWindowTitle|The text of the AI Assistant Window title"
3671
+ aiAssistantWindowTitle="AI Assistant"
3672
+
3673
+ i18n-aiAssistantApplyButtonText="kendo.grid.aiAssistantApplyButtonText|The text of the AI Assistant Apply button"
3674
+ aiAssistantApplyButtonText="Apply"
3675
+
3676
+ i18n-aiAssistantWindowCloseTitle="kendo.grid.aiAssistantWindowCloseTitle|The title of the AI Assistant Window close button"
3677
+ aiAssistantWindowCloseTitle="Close"
3678
+
3679
+ i18n-aiAssistantWindowMaximizeTitle="kendo.grid.aiAssistantWindowMaximizeTitle|The title of the AI Assistant Window maximize button"
3680
+ aiAssistantWindowMaximizeTitle="Maximize"
3681
+
3682
+ i18n-aiAssistantWindowMinimizeTitle="kendo.grid.aiAssistantWindowMinimizeTitle|The title of the AI Assistant Window minimize button"
3683
+ aiAssistantWindowMinimizeTitle="Minimize"
3684
+
3685
+ i18n-aiAssistantWindowRestoreTitle="kendo.grid.aiAssistantWindowRestoreTitle|The title of the AI Assistant Window restore button"
3686
+ aiAssistantWindowRestoreTitle="Restore"
3687
+
3688
+ i18n-aiAssistantOutputCardTitle="kendo.grid.aiAssistantOutputCardTitle|The title of the AI Assistant Prompt Output Card"
3689
+ aiAssistantOutputCardTitle="Generated with AI"
3690
+
3691
+ i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
3692
+ aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
3554
3693
  >
3555
3694
  </ng-container>
3556
3695
  <kendo-grid-toolbar
@@ -3636,7 +3775,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3636
3775
  [attr.aria-rowcount]="ariaRowCount"
3637
3776
  [attr.aria-colcount]="ariaColCount">
3638
3777
  <ng-container *ngIf="isScrollable">
3639
- <div *ngIf="!hideHeader"
3778
+ <div *ngIf="!hideHeader && !isStacked"
3640
3779
  class="k-grid-header"
3641
3780
  [class.k-grid-draggable-header]="groupable || reorderable"
3642
3781
  role="presentation"
@@ -3760,7 +3899,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3760
3899
  class="k-grid-footer"
3761
3900
  [style.padding]="headerPadding">
3762
3901
  <div
3763
- *ngIf="lockedLeafColumns.length"
3902
+ *ngIf="lockedLeafColumns.length && !isStacked"
3764
3903
  class="k-grid-footer-locked"
3765
3904
  [style.width.px]="lockedWidth">
3766
3905
  <table
@@ -3771,7 +3910,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3771
3910
  [style.width.px]="lockedWidth"
3772
3911
  kendoGridTable
3773
3912
  [size]="size">
3774
- <colgroup kendoGridColGroup
3913
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
3775
3914
  [columns]="$any(lockedLeafColumns)"
3776
3915
  [groups]="group"
3777
3916
  [detailTemplate]="detailTemplate">
@@ -3789,7 +3928,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3789
3928
  </div>
3790
3929
  <div #footer
3791
3930
  class="k-grid-footer-wrap" data-scrollable
3792
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
3931
+ [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
3793
3932
  [lockedWidth]="lockedWidth + scrollbarWidth + 3">
3794
3933
  <table
3795
3934
  role="presentation"
@@ -3798,7 +3937,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3798
3937
  kendoGridTable
3799
3938
  kendoGridResizableTable
3800
3939
  [size]="size">
3801
- <colgroup kendoGridColGroup
3940
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
3802
3941
  [columns]="$any(headerLeafColumns)"
3803
3942
  [groups]="isLocked ? [] : group"
3804
3943
  [detailTemplate]="detailTemplate">
@@ -3808,7 +3947,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3808
3947
  [scrollable]="true"
3809
3948
  [groups]="isLocked ? [] : group"
3810
3949
  [columns]="$any(headerColumns)"
3811
- [lockedColumnsCount]="lockedLeafColumns.length"
3950
+ [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
3812
3951
  [detailTemplate]="detailTemplate"
3813
3952
  [totalColumns]="columnsContainer"
3814
3953
  [totalColumnsCount]="leafColumns.length">
@@ -3832,7 +3971,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3832
3971
  [detailTemplate]="detailTemplate">
3833
3972
  </colgroup>
3834
3973
  <thead kendoGridHeader
3835
- *ngIf="!hideHeader"
3974
+ *ngIf="!hideHeader && !isStacked"
3836
3975
  class="k-grid-header"
3837
3976
  [class.k-grid-draggable-header]="groupable || reorderable"
3838
3977
  role="rowgroup"
@@ -3970,7 +4109,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3970
4109
 
3971
4110
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
3972
4111
 
3973
- <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
4112
+ <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
4113
+
4114
+ <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
3974
4115
  `,
3975
4116
  standalone: true,
3976
4117
  imports: [
@@ -4053,6 +4194,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4053
4194
  type: Input
4054
4195
  }], isGroupExpanded: [{
4055
4196
  type: Input
4197
+ }], dataLayoutMode: [{
4198
+ type: Input
4056
4199
  }], filterChange: [{
4057
4200
  type: Output
4058
4201
  }], pageChange: [{
@@ -4124,6 +4267,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4124
4267
  }], sizeMediumClass: [{
4125
4268
  type: HostBinding,
4126
4269
  args: ['class.k-grid-md']
4270
+ }], stackedClass: [{
4271
+ type: HostBinding,
4272
+ args: ['class.k-grid-stack']
4127
4273
  }], lockedClasses: [{
4128
4274
  type: HostBinding,
4129
4275
  args: ['class.k-grid-lockedcolumns']
@@ -4172,6 +4318,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4172
4318
  }], columnMenuTemplates: [{
4173
4319
  type: ContentChildren,
4174
4320
  args: [ColumnMenuTemplateDirective]
4321
+ }], aiAssistantToolbarTool: [{
4322
+ type: ContentChild,
4323
+ args: [AIAssistantToolbarDirective]
4175
4324
  }], lockedHeader: [{
4176
4325
  type: ViewChild,
4177
4326
  args: ['lockedHeader']
@@ -4193,6 +4342,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4193
4342
  }], dialogContainer: [{
4194
4343
  type: ViewChild,
4195
4344
  args: ['dialogContainer', { read: ViewContainerRef }]
4345
+ }], windowContainer: [{
4346
+ type: ViewChild,
4347
+ args: ['windowContainer', { read: ViewContainerRef }]
4196
4348
  }], adaptiveRenderer: [{
4197
4349
  type: ViewChild,
4198
4350
  args: [AdaptiveRendererComponent]