@progress/kendo-angular-grid 19.3.0-develop.23 → 19.3.0-develop.25

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 (63) 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/select-all-command-tool.directive.mjs +93 -0
  37. package/esm2022/row-reordering/row-reorder.service.mjs +2 -2
  38. package/esm2022/row-reordering/utils.mjs +6 -4
  39. package/esm2022/selection/cell-selection.service.mjs +6 -3
  40. package/fesm2022/progress-kendo-angular-grid.mjs +1514 -566
  41. package/filtering/filter-row.component.d.ts +1 -0
  42. package/grid.component.d.ts +22 -1
  43. package/grid.module.d.ts +100 -99
  44. package/grouping/group-header.component.d.ts +1 -0
  45. package/index.d.ts +3 -0
  46. package/localization/messages.d.ts +2 -2
  47. package/navigation/default-focusable-element.d.ts +3 -1
  48. package/navigation/focus-group.d.ts +1 -1
  49. package/navigation/navigation-metadata.d.ts +2 -1
  50. package/navigation/navigation.service.d.ts +6 -0
  51. package/package.json +21 -21
  52. package/rendering/cell.component.d.ts +32 -17
  53. package/rendering/common/col-group.component.d.ts +5 -0
  54. package/rendering/footer/footer.component.d.ts +4 -1
  55. package/rendering/header/header.component.d.ts +1 -0
  56. package/rendering/list.component.d.ts +4 -1
  57. package/rendering/table-body.component.d.ts +2 -1
  58. package/rendering/toolbar/tools/ai-assistant/ai-assistant.component.d.ts +1 -0
  59. package/rendering/toolbar/tools/select-all-command-tool.directive.d.ts +36 -0
  60. package/row-reordering/row-reorder.service.d.ts +1 -1
  61. package/row-reordering/utils.d.ts +1 -1
  62. package/schematics/ngAdd/index.js +4 -4
  63. package/selection/cell-selection.service.d.ts +1 -0
@@ -6,7 +6,7 @@ import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Injectable, SecurityContext, InjectionToken, Optional, Inject, Directive, SkipSelf, Input, isDevMode, QueryList, Component, ContentChildren, ContentChild, forwardRef, Host, Output, HostBinding, Pipe, TemplateRef, ChangeDetectionStrategy, ViewChildren, ViewChild, Self, NgZone, HostListener, ElementRef, ViewContainerRef, ViewEncapsulation, inject, Injector, NgModule } from '@angular/core';
7
7
  import { merge, of, Subject, zip as zip$1, from, Subscription, interval, fromEvent, Observable, BehaviorSubject } from 'rxjs';
8
8
  import * as i1$3 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, Keys, isPresent as isPresent$1, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, closestInScope as closestInScope$1, isFocusable as isFocusable$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, PreventableEvent as PreventableEvent$1, ResizeBatchService } from '@progress/kendo-angular-common';
9
+ import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, closestInScope as closestInScope$1, isFocusable as isFocusable$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, PreventableEvent as PreventableEvent$1, ResizeBatchService } from '@progress/kendo-angular-common';
10
10
  import * as i1 from '@angular/platform-browser';
11
11
  import * as i1$1 from '@progress/kendo-angular-icons';
12
12
  import { IconWrapperComponent, IconsService, KENDO_ICONS } from '@progress/kendo-angular-icons';
@@ -14,7 +14,7 @@ import { plusIcon, cancelIcon, lockIcon, unlockIcon, caretAltDownIcon, caretAltR
14
14
  import { switchMap, take, map, filter, takeUntil, switchMapTo, delay, tap, throttleTime, debounceTime, distinctUntilChanged, skip, auditTime, bufferCount, flatMap } from 'rxjs/operators';
15
15
  import * as i1$2 from '@progress/kendo-angular-l10n';
16
16
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
17
- import * as i52 from '@progress/kendo-angular-pager';
17
+ import * as i53 from '@progress/kendo-angular-pager';
18
18
  import { PagerContextService, PagerNavigationService, PagerTemplateDirective, KENDO_PAGER } from '@progress/kendo-angular-pager';
19
19
  import { orderBy, isCompositeFilterDescriptor, groupBy, process, filterBy } from '@progress/kendo-data-query';
20
20
  import { NgFor, NgIf, NgTemplateOutlet, NgSwitch, NgSwitchCase, NgClass, NgStyle, NgSwitchDefault, KeyValuePipe } from '@angular/common';
@@ -26,16 +26,16 @@ import * as i1$6 from '@progress/kendo-angular-buttons';
26
26
  import { ChipListComponent, ChipComponent, ButtonComponent, Button, KENDO_BUTTON, ButtonDirective } from '@progress/kendo-angular-buttons';
27
27
  import * as i1$5 from '@progress/kendo-angular-dropdowns';
28
28
  import { DropDownListComponent, AutoCompleteComponent } from '@progress/kendo-angular-dropdowns';
29
- import * as i4 from '@angular/forms';
29
+ import * as i2$2 from '@angular/forms';
30
30
  import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';
31
31
  import * as i2$1 from '@progress/kendo-angular-utils';
32
32
  import { DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
33
- import * as i4$1 from '@progress/kendo-angular-inputs';
33
+ import * as i4 from '@progress/kendo-angular-inputs';
34
34
  import { TextBoxComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, RadioButtonComponent, CheckBoxComponent, KENDO_FORMFIELD, KENDO_TEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_CHECKBOX } from '@progress/kendo-angular-inputs';
35
35
  import * as i5 from '@progress/kendo-angular-dateinputs';
36
36
  import { DatePickerComponent, DatePickerCustomMessagesComponent, KENDO_DATEPICKER, CalendarDOMService, CenturyViewService, DecadeViewService, MonthViewService, YearViewService, NavigationService as NavigationService$1 } from '@progress/kendo-angular-dateinputs';
37
- import * as i53 from '@progress/kendo-angular-toolbar';
38
- import { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';
37
+ import * as i54 from '@progress/kendo-angular-toolbar';
38
+ import { ToolBarToolComponent, KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';
39
39
  import { trigger, state, style, transition, animate } from '@angular/animations';
40
40
  import { TabStripComponent, TabStripTabComponent, TabTitleDirective, TabContentDirective } from '@progress/kendo-angular-layout';
41
41
  import { saveAs } from '@progress/kendo-file-saver';
@@ -45,7 +45,7 @@ import { PDFExportMarginComponent, PDFExportTemplateDirective, PDFExportComponen
45
45
  import { validatePackage } from '@progress/kendo-licensing';
46
46
  import { ActionSheetComponent, ActionSheetViewComponent, ActionSheetHeaderTemplateDirective, ActionSheetContentTemplateDirective, ActionSheetFooterTemplateDirective } from '@progress/kendo-angular-navigation';
47
47
  import * as i3 from '@progress/kendo-angular-label';
48
- import { KENDO_LABELS } from '@progress/kendo-angular-label';
48
+ import { KENDO_LABELS, LabelDirective } from '@progress/kendo-angular-label';
49
49
  import * as i1$7 from '@progress/kendo-angular-dialog';
50
50
  import { DialogContentBase, DialogActionsComponent, WindowContainerDirective, DialogService, DialogContainerService, WindowService, WindowContainerService } from '@progress/kendo-angular-dialog';
51
51
  import { AIPromptComponent, AIPromptCustomMessagesComponent, PromptViewComponent, OutputViewComponent, AIPromptOutputTemplateDirective, AIPromptOutputBodyTemplateDirective } from '@progress/kendo-angular-conversational-ui';
@@ -758,6 +758,7 @@ const isNavigable = element => !element.disabled && (isButton(element) || isNavi
758
758
  */
759
759
  class DefaultFocusableElement {
760
760
  renderer;
761
+ ctx;
761
762
  get enabled() {
762
763
  return this.focusable && !this.focusable.disabled;
763
764
  }
@@ -766,8 +767,9 @@ class DefaultFocusableElement {
766
767
  }
767
768
  element;
768
769
  focusable;
769
- constructor(host, renderer) {
770
+ constructor(host, renderer, ctx) {
770
771
  this.renderer = renderer;
772
+ this.ctx = ctx;
771
773
  this.element = host.nativeElement;
772
774
  this.focusable = findFocusable(this.element, false) || this.element;
773
775
  }
@@ -775,7 +777,17 @@ class DefaultFocusableElement {
775
777
  return this.canFocus() && isNavigable(this.element);
776
778
  }
777
779
  toggle(active) {
778
- this.renderer.setAttribute(this.focusable, 'tabIndex', active ? '0' : '-1');
780
+ if (this.ctx.grid?.isStacked) {
781
+ if (active) {
782
+ this.renderer.setAttribute(this.focusable, 'tabindex', '0');
783
+ }
784
+ else {
785
+ this.renderer.removeAttribute(this.focusable, 'tabindex');
786
+ }
787
+ }
788
+ else {
789
+ this.renderer.setAttribute(this.focusable, 'tabindex', active ? '0' : '-1');
790
+ }
779
791
  }
780
792
  focus() {
781
793
  if (this.focusable) {
@@ -944,7 +956,7 @@ class FocusableDirective {
944
956
  }
945
957
  ngAfterViewInit() {
946
958
  if (!this.element && this.ctx.navigable) {
947
- this.element = new DefaultFocusableElement(this.hostElement, this.renderer);
959
+ this.element = new DefaultFocusableElement(this.hostElement, this.renderer, this.ctx);
948
960
  }
949
961
  if (this.group && this.element) {
950
962
  this.toggle(this.group.isActive);
@@ -1057,7 +1069,7 @@ class NavigationCursor {
1057
1069
  set metadata(value) {
1058
1070
  this._metadata = value;
1059
1071
  if (isPresent(value)) {
1060
- const newActiveCol = value.hasDetailTemplate ? 1 : 0;
1072
+ const newActiveCol = value.hasDetailTemplate && !this.metadata.isStacked ? 1 : 0;
1061
1073
  const shouldChange = this.activeRow < value.headerRows && this.activeCol === 0;
1062
1074
  if (shouldChange && newActiveCol !== this.activeCol) {
1063
1075
  this.activeCol = newActiveCol;
@@ -1177,6 +1189,9 @@ class NavigationCursor {
1177
1189
  (this.metadata.hasDetailTemplate && (!row || !row.groupItem) ? 1 : 0);
1178
1190
  }
1179
1191
  offsetCol(offset) {
1192
+ if (this.metadata.isStacked) {
1193
+ return false;
1194
+ }
1180
1195
  const prevRow = this.model.findRow(this.virtualRow);
1181
1196
  const lastIndex = this.lastCellIndex(prevRow);
1182
1197
  const virtualCol = this.virtualCol;
@@ -1256,6 +1271,9 @@ class NavigationCursor {
1256
1271
  if (!cell && (this.metadata.virtualColumns || this.metadata.hasDetailTemplate)) {
1257
1272
  return this.activate(this.virtualRow + offset, this.virtualCol);
1258
1273
  }
1274
+ if (!cell) {
1275
+ return false;
1276
+ }
1259
1277
  this.virtualRow = cell.rowIndex;
1260
1278
  return this.activate(this.virtualRow, cell.colIndex);
1261
1279
  }
@@ -2186,16 +2204,16 @@ const GridConfigurationErrorMessages = {
2186
2204
  /**
2187
2205
  * @hidden
2188
2206
  */
2189
- const isSpanColumn = column => column.isSpanColumn;
2207
+ const isSpanColumn = column => column?.isSpanColumn;
2190
2208
  /**
2191
2209
  * @hidden
2192
2210
  */
2193
- const isCheckboxColumn = column => column.isCheckboxColumn;
2211
+ const isCheckboxColumn = column => column?.isCheckboxColumn;
2194
2212
  /**
2195
2213
  * @hidden
2196
2214
  */
2197
- const isRowReorderColumn = column => column.isRowReorderColumn;
2198
- const isColumnContainer = column => column.isColumnGroup || isSpanColumn(column);
2215
+ const isRowReorderColumn = column => column?.isRowReorderColumn;
2216
+ const isColumnContainer = column => column?.isColumnGroup || isSpanColumn(column);
2199
2217
  let columnId = 0;
2200
2218
  /**
2201
2219
  * The base class for the column components of the Grid.
@@ -2804,7 +2822,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2804
2822
  * @hidden
2805
2823
  */
2806
2824
  function isColumnComponent(column) {
2807
- return isPresent(column.field);
2825
+ return isPresent(column?.field);
2808
2826
  }
2809
2827
  /**
2810
2828
  * Represents a column in the Grid.
@@ -3554,7 +3572,12 @@ class NavigationService {
3554
3572
  // Closing the editor will not always trigger focusout in Firefox.
3555
3573
  // To get around this, we ensure that the cell is closed after editing.
3556
3574
  this.editService.changes.pipe(filter(e => e.action !== 'edit' && this.mode === 2 /* NavigationMode.Content */), filter((e) => e.action === 'cellClose' && !e.prevented), switchMap(onStable))
3557
- .subscribe(() => this.leaveCell()));
3575
+ .subscribe((e) => {
3576
+ const isInStackedCell = closest(e.originalEvent?.target, (el) => hasClasses$1(el, 'k-grid-stack-content'));
3577
+ if (!isInStackedCell) {
3578
+ this.leaveCell();
3579
+ }
3580
+ }));
3558
3581
  this.subs.add(this.pagerContextService.pageChange
3559
3582
  .subscribe(() => this.cursor.reset(0, 0)));
3560
3583
  this.subs.add(this.domEvents.keydown
@@ -3736,7 +3759,7 @@ class NavigationService {
3736
3759
  success = fwd ? this.cursor.moveDown(1) : this.cursor.moveUp(1);
3737
3760
  if (success) {
3738
3761
  const row = this.cursor.row;
3739
- const colIdx = fwd ? 0 : this.cursor.lastCellIndex(row);
3762
+ const colIdx = fwd || this.isStackedMode ? 0 : this.cursor.lastCellIndex(row);
3740
3763
  this.cursor.reset(row.index, colIdx);
3741
3764
  }
3742
3765
  }
@@ -3754,6 +3777,12 @@ class NavigationService {
3754
3777
  if (!cell) {
3755
3778
  return;
3756
3779
  }
3780
+ if (this.tableCellEntered && this.isStackedMode) {
3781
+ this.stackedCellEntered = true;
3782
+ }
3783
+ else {
3784
+ this.tableCellEntered = true;
3785
+ }
3757
3786
  const group = cell.focusGroup;
3758
3787
  const focusable = group && group.canFocus();
3759
3788
  this.mode = focusable ? 2 /* NavigationMode.Content */ : 1 /* NavigationMode.Cursor */;
@@ -3761,6 +3790,9 @@ class NavigationService {
3761
3790
  if (focusable) {
3762
3791
  this.activateRow();
3763
3792
  group.focus();
3793
+ if (this.isStackedMode && this.stackedFocusedCellIndex === -1) {
3794
+ this.stackedFocusedCellIndex = 0;
3795
+ }
3764
3796
  }
3765
3797
  }
3766
3798
  leaveCell() {
@@ -3768,11 +3800,22 @@ class NavigationService {
3768
3800
  if (!cell) {
3769
3801
  return;
3770
3802
  }
3803
+ if (this.tableCellEntered) {
3804
+ if (this.stackedCellEntered) {
3805
+ this.stackedCellEntered = false;
3806
+ }
3807
+ else {
3808
+ this.tableCellEntered = false;
3809
+ }
3810
+ }
3771
3811
  const group = cell.focusGroup;
3772
3812
  const focusable = group && group.canFocus();
3773
3813
  if (!focusable) {
3774
3814
  this.deactivateElements();
3775
3815
  }
3816
+ if (this.isStackedMode && this.stackedFocusedCellIndex > -1) {
3817
+ this.stackedFocusedCellIndex = -1;
3818
+ }
3776
3819
  this.mode = 1 /* NavigationMode.Cursor */;
3777
3820
  this.cursor.announce();
3778
3821
  }
@@ -3787,11 +3830,11 @@ class NavigationService {
3787
3830
  .forEach(cell => cell.focusGroup && cell.focusGroup.activate());
3788
3831
  }
3789
3832
  moveCursorFwd() {
3790
- this.lastCellRowIndex = this.activeCell.rowIndex;
3833
+ this.lastCellRowIndex = this.activeCell?.rowIndex;
3791
3834
  return this.ctx.localization.rtl ? this.cursor.moveLeft() : this.cursor.moveRight();
3792
3835
  }
3793
3836
  moveCursorBwd() {
3794
- this.lastCellRowIndex = this.activeCell.rowIndex;
3837
+ this.lastCellRowIndex = this.activeCell?.rowIndex;
3795
3838
  return this.ctx.localization.rtl ? this.cursor.moveRight() : this.cursor.moveLeft();
3796
3839
  }
3797
3840
  onCursorKeydown(args) {
@@ -3931,6 +3974,15 @@ class NavigationService {
3931
3974
  break;
3932
3975
  case Keys.Enter:
3933
3976
  case Keys.F2: {
3977
+ if (this.stackedCellEntered) {
3978
+ if (args.keyCode === Keys.F2 && row.dataRowIndex > -1) {
3979
+ this.zone.run(() => {
3980
+ this.editService.beginEdit(row.dataRowIndex);
3981
+ });
3982
+ this.enterCell();
3983
+ }
3984
+ break;
3985
+ }
3934
3986
  const groupItem = row.groupItem;
3935
3987
  if (groupItem) {
3936
3988
  this.zone.run(() => this.groupsService.toggleRow(groupItem));
@@ -3939,6 +3991,11 @@ class NavigationService {
3939
3991
  this.zone.run(() => this.detailsService.toggleRow(row.dataRowIndex, row.dataItem));
3940
3992
  }
3941
3993
  else {
3994
+ if (args.keyCode === Keys.F2 && row.dataRowIndex > -1) {
3995
+ this.zone.run(() => {
3996
+ this.editService.beginEdit(row.dataRowIndex);
3997
+ });
3998
+ }
3942
3999
  this.enterCell();
3943
4000
  if (!this.cursor.cell.focusGroup.isNavigable()) {
3944
4001
  preventDefault = true;
@@ -3946,6 +4003,17 @@ class NavigationService {
3946
4003
  }
3947
4004
  break;
3948
4005
  }
4006
+ case Keys.Backspace:
4007
+ case Keys.Delete:
4008
+ if (this.activeRow && this.activeRow.dataRowIndex >= 0 && this.activeRow.dataItem) {
4009
+ if (!row.groupItem && !this.cursor.cell.detailExpandCell) {
4010
+ this.zone.run(() => {
4011
+ this.editService.remove(this.activeRow.dataRowIndex);
4012
+ });
4013
+ preventDefault = true;
4014
+ }
4015
+ }
4016
+ break;
3949
4017
  default:
3950
4018
  if (!args.ctrlKey && !args.altKey && isPrintableCharacter(args.key)) {
3951
4019
  this.enterCell();
@@ -3969,6 +4037,13 @@ class NavigationService {
3969
4037
  }
3970
4038
  const confirm = !args.defaultPrevented && args.keyCode === Keys.Enter && isTextInput(args.target);
3971
4039
  if (args.keyCode === Keys.Escape || args.keyCode === Keys.F2 || confirm) {
4040
+ if (this.tableCellEntered && args.keyCode === Keys.F2 && this.activeRow.dataRowIndex > -1) {
4041
+ this.zone.run(() => {
4042
+ this.editService.beginEdit(this.activeRow.dataRowIndex);
4043
+ });
4044
+ this.enterCell();
4045
+ return;
4046
+ }
3972
4047
  this.leaveCell();
3973
4048
  this.cursor.reset();
3974
4049
  args.stopPropagation();
@@ -4037,6 +4112,12 @@ class NavigationService {
4037
4112
  this.cursor.announce();
4038
4113
  }
4039
4114
  onKeydown(args) {
4115
+ if (this.isStackedMode) {
4116
+ this.handleStackedKeydown(args);
4117
+ if (args.defaultPrevented) {
4118
+ return;
4119
+ }
4120
+ }
4040
4121
  if (this.mode === 1 /* NavigationMode.Cursor */) {
4041
4122
  this.onCursorKeydown(args);
4042
4123
  }
@@ -4125,12 +4206,80 @@ class NavigationService {
4125
4206
  const offset = direction === 'Up' ? Math.abs(this.lastCellRowIndex - this.activeRowIndex) : (this.activeRowIndex + cellRowspan - this.lastCellRowIndex - 1);
4126
4207
  return offset;
4127
4208
  }
4128
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: DomEventsService }, { token: i52.PagerContextService }, { token: ScrollRequestService }, { token: GroupsService }, { token: DetailsService }, { token: FocusRoot }, { token: EditService }, { token: i0.ChangeDetectorRef }, { token: ContextService }, { token: ColumnResizingService }, { token: FocusableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
4209
+ get isStackedMode() {
4210
+ return this.ctx?.grid?.isStacked;
4211
+ }
4212
+ handleStackedKeydown(args) {
4213
+ const target = args.target;
4214
+ const stackedCell = closest(target, (el) => hasClasses$1(el, 'k-grid-stack-cell'));
4215
+ const tableCell = closest(target, (el) => hasClasses$1(el, 'k-table-td'));
4216
+ const isInStackedCell = closest(target, (el) => hasClasses$1(el, 'k-grid-stack-content'));
4217
+ if (!stackedCell || !tableCell) {
4218
+ return;
4219
+ }
4220
+ if (args.keyCode === Keys.Tab) {
4221
+ this.handleStackedTabNavigation(args);
4222
+ }
4223
+ else if (args.keyCode === Keys.Backspace || args.keyCode === Keys.Delete) {
4224
+ if (this.activeRow && this.activeRow.dataRowIndex >= 0 && this.activeRow.dataItem) {
4225
+ const row = this.cursor.row;
4226
+ if (!row.groupItem && !this.cursor.cell.detailExpandCell) {
4227
+ this.zone.run(() => {
4228
+ this.editService.remove(this.activeRow.dataRowIndex);
4229
+ });
4230
+ args.preventDefault();
4231
+ }
4232
+ }
4233
+ }
4234
+ else if (isInStackedCell && (args.keyCode === Keys.Enter || args.keyCode === Keys.Escape)) {
4235
+ this.editService.closeCell(args);
4236
+ this.activeCell.focusGroup.activate();
4237
+ this.activeCell.focusGroup.focusableChildren[this.stackedFocusedCellIndex]?.focus();
4238
+ args.preventDefault();
4239
+ }
4240
+ }
4241
+ stackedFocusedCellIndex = -1;
4242
+ tableCellEntered = false;
4243
+ stackedCellEntered = false;
4244
+ handleStackedTabNavigation(args) {
4245
+ if (!isPresent$1(this.activeCell.focusGroup)) {
4246
+ return;
4247
+ }
4248
+ if (this.stackedFocusedCellIndex === -1) {
4249
+ return;
4250
+ }
4251
+ const stackedCells = this.activeCell.focusGroup.focusableChildren;
4252
+ let nextIndex;
4253
+ if (args.shiftKey) {
4254
+ nextIndex = this.stackedFocusedCellIndex - 1;
4255
+ if (nextIndex < 0) {
4256
+ nextIndex = stackedCells.length - 1;
4257
+ }
4258
+ }
4259
+ else {
4260
+ nextIndex = this.stackedFocusedCellIndex + 1;
4261
+ if (nextIndex >= stackedCells.length) {
4262
+ nextIndex = 0;
4263
+ }
4264
+ }
4265
+ let nextStackedCell = stackedCells[nextIndex];
4266
+ if (nextStackedCell) {
4267
+ if (nextStackedCell.hasFocus() || (isDocumentAvailable() && document.activeElement === nextStackedCell.hostElement.nativeElement)) {
4268
+ // next cell is already focused (as a focusable child of the previous one), skip to the next one
4269
+ nextIndex = args.shiftKey ? this.stackedFocusedCellIndex - 2 : this.stackedFocusedCellIndex + 2;
4270
+ nextStackedCell = stackedCells[nextIndex];
4271
+ }
4272
+ nextStackedCell.focus();
4273
+ this.stackedFocusedCellIndex = nextIndex;
4274
+ args.preventDefault();
4275
+ }
4276
+ }
4277
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, deps: [{ token: i0.NgZone }, { token: DomEventsService }, { token: i53.PagerContextService }, { token: ScrollRequestService }, { token: GroupsService }, { token: DetailsService }, { token: FocusRoot }, { token: EditService }, { token: i0.ChangeDetectorRef }, { token: ContextService }, { token: ColumnResizingService }, { token: FocusableDirective, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
4129
4278
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService });
4130
4279
  }
4131
4280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NavigationService, decorators: [{
4132
4281
  type: Injectable
4133
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: DomEventsService }, { type: i52.PagerContextService }, { type: ScrollRequestService }, { type: GroupsService }, { type: DetailsService }, { type: FocusRoot }, { type: EditService }, { type: i0.ChangeDetectorRef }, { type: ContextService }, { type: ColumnResizingService }, { type: FocusableDirective, decorators: [{
4282
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: DomEventsService }, { type: i53.PagerContextService }, { type: ScrollRequestService }, { type: GroupsService }, { type: DetailsService }, { type: FocusRoot }, { type: EditService }, { type: i0.ChangeDetectorRef }, { type: ContextService }, { type: ColumnResizingService }, { type: FocusableDirective, decorators: [{
4134
4283
  type: Optional
4135
4284
  }] }]; } });
4136
4285
 
@@ -4495,12 +4644,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4495
4644
  * @hidden
4496
4645
  */
4497
4646
  class ColGroupComponent {
4647
+ ctx;
4498
4648
  columns = [];
4499
4649
  groups = [];
4500
4650
  detailTemplate;
4501
4651
  sort = new Array();
4652
+ constructor(ctx) {
4653
+ this.ctx = ctx;
4654
+ }
4655
+ getColumnWidth(column) {
4656
+ return this.isStacked ? '100%' : `${column.width}px`;
4657
+ }
4502
4658
  get columnsToRender() {
4503
- return columnsToRender(this.columns);
4659
+ return this.isStacked ? [new ColumnBase()] : columnsToRender(this.columns);
4660
+ }
4661
+ get isStacked() {
4662
+ return this.ctx.grid?.isStacked;
4504
4663
  }
4505
4664
  trackBy(index) {
4506
4665
  return index;
@@ -4518,13 +4677,13 @@ class ColGroupComponent {
4518
4677
  sortDescriptor(field) {
4519
4678
  return this.sort.find(item => item.field === field) || { field };
4520
4679
  }
4521
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4680
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColGroupComponent, deps: [{ token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
4522
4681
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColGroupComponent, isStandalone: true, selector: "[kendoGridColGroup]", inputs: { columns: "columns", groups: "groups", detailTemplate: "detailTemplate", sort: "sort" }, ngImport: i0, template: `
4523
4682
  <ng-container>
4524
4683
  <col [class.k-group-col]="true" *ngFor="let g of groups" />
4525
- <col [class.k-hierarchy-col]="true" *ngIf="detailTemplate?.templateRef"/>
4684
+ <col [class.k-hierarchy-col]="true" *ngIf="detailTemplate?.templateRef && !isStacked"/>
4526
4685
  <col *ngFor="let column of columnsToRender; trackBy: trackBy;"
4527
- [style.width.px]="column.width"
4686
+ [style.width]="getColumnWidth(column)"
4528
4687
  [class.k-sorted]="isSorted(getColumnComponent(column))"/>
4529
4688
  </ng-container>
4530
4689
  `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -4536,16 +4695,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4536
4695
  template: `
4537
4696
  <ng-container>
4538
4697
  <col [class.k-group-col]="true" *ngFor="let g of groups" />
4539
- <col [class.k-hierarchy-col]="true" *ngIf="detailTemplate?.templateRef"/>
4698
+ <col [class.k-hierarchy-col]="true" *ngIf="detailTemplate?.templateRef && !isStacked"/>
4540
4699
  <col *ngFor="let column of columnsToRender; trackBy: trackBy;"
4541
- [style.width.px]="column.width"
4700
+ [style.width]="getColumnWidth(column)"
4542
4701
  [class.k-sorted]="isSorted(getColumnComponent(column))"/>
4543
4702
  </ng-container>
4544
4703
  `,
4545
4704
  standalone: true,
4546
4705
  imports: [NgFor, NgIf]
4547
4706
  }]
4548
- }], propDecorators: { columns: [{
4707
+ }], ctorParameters: function () { return [{ type: ContextService }]; }, propDecorators: { columns: [{
4549
4708
  type: Input
4550
4709
  }], groups: [{
4551
4710
  type: Input
@@ -4817,6 +4976,7 @@ class ColumnsContainer {
4817
4976
  lockedLeafColumns = new QueryList();
4818
4977
  nonLockedLeafColumns = new QueryList();
4819
4978
  totalLevels = 0;
4979
+ isStacked = false;
4820
4980
  changes = new EventEmitter();
4821
4981
  leafColumnsToRender = [];
4822
4982
  lockedColumnsToRender = [];
@@ -4825,6 +4985,7 @@ class ColumnsContainer {
4825
4985
  hasGroupFooter = false;
4826
4986
  hasFooter = false;
4827
4987
  unlockedWidth = 0;
4988
+ totalColumnsWidth = 0;
4828
4989
  constructor(columns) {
4829
4990
  this.columns = columns;
4830
4991
  }
@@ -4868,6 +5029,7 @@ class ColumnsContainer {
4868
5029
  else {
4869
5030
  column.leafIndex = leafIndex++;
4870
5031
  }
5032
+ this.totalColumnsWidth += column.width || 0;
4871
5033
  }
4872
5034
  containerColumns.push(column);
4873
5035
  allColumns.push(column);
@@ -4907,7 +5069,7 @@ class ColumnInfoService {
4907
5069
  return this.columnsContainer.nonLockedLeafColumns;
4908
5070
  }
4909
5071
  get isLocked() {
4910
- return this.lockedLeafColumns.length > 0;
5072
+ return this.lockedLeafColumns.length > 0 && !this.columnsContainer.isStacked;
4911
5073
  }
4912
5074
  get totalLevels() {
4913
5075
  return this.columnsContainer.totalLevels;
@@ -5597,6 +5759,9 @@ class GroupHeaderComponent {
5597
5759
  this.caretAltDownIcon;
5598
5760
  return icon;
5599
5761
  }
5762
+ get isStacked() {
5763
+ return this.ctx.grid?.isStacked;
5764
+ }
5600
5765
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupHeaderComponent, deps: [{ token: GroupsService }, { token: GroupInfoService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
5601
5766
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GroupHeaderComponent, isStandalone: true, selector: "[kendoGridGroupHeader]", inputs: { rowIndex: "rowIndex", logicalRowIndex: "logicalRowIndex", item: "item", skipGroupDecoration: "skipGroupDecoration", hasDetails: "hasDetails", totalColumnsCount: "totalColumnsCount", hasGroupHeaderColumn: "hasGroupHeaderColumn", groupHeaderColumns: "groupHeaderColumns", columns: "columns", groups: "groups" }, host: { properties: { "class.k-grouping-row": "this.groupItemClass", "class.k-table-group-row": "this.tableGroupRowClass" } }, ngImport: i0, template: `
5602
5767
  <ng-container *ngIf="!skipGroupDecoration">
@@ -5626,7 +5791,7 @@ class GroupHeaderComponent {
5626
5791
  [svgIcon]="arrowSVGIcon"></kendo-icon-wrapper>
5627
5792
  </a>
5628
5793
  <ng-container *ngIf="!groupHeaderTemplate(item)">
5629
- {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
5794
+ {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
5630
5795
  </ng-container>
5631
5796
  <ng-template
5632
5797
  [templateContext]="{
@@ -5642,8 +5807,24 @@ class GroupHeaderComponent {
5642
5807
  </ng-template>
5643
5808
  </ng-container>
5644
5809
  </p>
5810
+ <div class="k-grid-column-template" *ngIf="isStacked">
5811
+ <ng-container *ngFor="let column of groupHeaderColumns; let index = index">
5812
+ <div class="k-column-template-item" *ngIf="column.groupHeaderColumnTemplateRef">
5813
+ <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
5814
+ [ngTemplateOutletContext]="{
5815
+ group: item.data,
5816
+ aggregates: item.data?.aggregates,
5817
+ value: item.data?.value,
5818
+ field: item.data?.field,
5819
+ index: item.index,
5820
+ $implicit: item.data
5821
+ }">
5822
+ </ng-template>
5823
+ </div>
5824
+ </ng-container>
5825
+ </div>
5645
5826
  </td>
5646
- <ng-container *ngIf="hasGroupHeaderColumn">
5827
+ <ng-container *ngIf="hasGroupHeaderColumn && !isStacked">
5647
5828
  <td *ngFor="let column of groupHeaderColumns; let index = index"
5648
5829
  role="gridcell"
5649
5830
  class="k-table-td"
@@ -5701,7 +5882,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
5701
5882
  [svgIcon]="arrowSVGIcon"></kendo-icon-wrapper>
5702
5883
  </a>
5703
5884
  <ng-container *ngIf="!groupHeaderTemplate(item)">
5704
- {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
5885
+ {{groupTitle(item)}}: {{item.data | valueOf:"value": formatForGroup(item)}}
5705
5886
  </ng-container>
5706
5887
  <ng-template
5707
5888
  [templateContext]="{
@@ -5717,8 +5898,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
5717
5898
  </ng-template>
5718
5899
  </ng-container>
5719
5900
  </p>
5901
+ <div class="k-grid-column-template" *ngIf="isStacked">
5902
+ <ng-container *ngFor="let column of groupHeaderColumns; let index = index">
5903
+ <div class="k-column-template-item" *ngIf="column.groupHeaderColumnTemplateRef">
5904
+ <ng-template [ngTemplateOutlet]="column.groupHeaderColumnTemplateRef"
5905
+ [ngTemplateOutletContext]="{
5906
+ group: item.data,
5907
+ aggregates: item.data?.aggregates,
5908
+ value: item.data?.value,
5909
+ field: item.data?.field,
5910
+ index: item.index,
5911
+ $implicit: item.data
5912
+ }">
5913
+ </ng-template>
5914
+ </div>
5915
+ </ng-container>
5916
+ </div>
5720
5917
  </td>
5721
- <ng-container *ngIf="hasGroupHeaderColumn">
5918
+ <ng-container *ngIf="hasGroupHeaderColumn && !isStacked">
5722
5919
  <td *ngFor="let column of groupHeaderColumns; let index = index"
5723
5920
  role="gridcell"
5724
5921
  class="k-table-td"
@@ -8893,7 +9090,7 @@ class StringFilterMenuInputComponent {
8893
9090
  [ngModel]="currentFilter?.value ?? null">
8894
9091
  </kendo-textbox>
8895
9092
  </kendo-grid-filter-menu-input-wrapper>
8896
- `, isInline: true, dependencies: [{ kind: "component", type: FilterMenuInputWrapperComponent, selector: "kendo-grid-filter-menu-input-wrapper", inputs: ["filterService", "isFirstDropDown", "menuTabbingService", "currentFilter"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
9093
+ `, isInline: true, dependencies: [{ kind: "component", type: FilterMenuInputWrapperComponent, selector: "kendo-grid-filter-menu-input-wrapper", inputs: ["filterService", "isFirstDropDown", "menuTabbingService", "currentFilter"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
8897
9094
  }
8898
9095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: StringFilterMenuInputComponent, decorators: [{
8899
9096
  type: Component,
@@ -10655,7 +10852,7 @@ class FilterMenuContainerComponent {
10655
10852
  </div>
10656
10853
  </div>
10657
10854
  </form>
10658
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
10855
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
10659
10856
  }
10660
10857
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuContainerComponent, decorators: [{
10661
10858
  type: Component,
@@ -11378,7 +11575,7 @@ class StringFilterCellComponent extends StringFilterComponent {
11378
11575
  [ngModel]="currentFilter?.value ?? null"
11379
11576
  ></kendo-textbox>
11380
11577
  </kendo-grid-filter-wrapper-cell>
11381
- `, isInline: true, dependencies: [{ kind: "component", type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { kind: "directive", type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
11578
+ `, isInline: true, dependencies: [{ kind: "component", type: FilterCellWrapperComponent, selector: "kendo-grid-filter-wrapper-cell", inputs: ["showOperators"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { kind: "directive", type: FilterInputDirective, selector: "[kendoFilterInput]", inputs: ["filterDelay", "columnLabel", "value"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
11382
11579
  }
11383
11580
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: StringFilterCellComponent, decorators: [{
11384
11581
  type: Component,
@@ -11696,6 +11893,9 @@ class FilterRowComponent {
11696
11893
  const colIndex = this.lockedColumnsCount + columnIndex;
11697
11894
  return this.detailTemplate?.templateRef ? colIndex + 1 : colIndex;
11698
11895
  }
11896
+ get isStacked() {
11897
+ return this.ctx.grid?.isStacked;
11898
+ }
11699
11899
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterRowComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
11700
11900
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterRowComponent, isStandalone: true, selector: "[kendoGridFilterRow]", inputs: { columns: "columns", filter: "filter", groups: "groups", detailTemplate: "detailTemplate", logicalRowIndex: "logicalRowIndex", lockedColumnsCount: "lockedColumnsCount" }, host: { properties: { "class.k-filter-row": "this.filterRowClass" } }, ngImport: i0, template: `
11701
11901
  <td
@@ -11705,7 +11905,7 @@ class FilterRowComponent {
11705
11905
  </td>
11706
11906
  <td
11707
11907
  class="k-table-td k-hierarchy-cell"
11708
- *ngIf="detailTemplate?.templateRef"
11908
+ *ngIf="detailTemplate?.templateRef && !isStacked"
11709
11909
  role="presentation">
11710
11910
  </td>
11711
11911
  <td *ngFor="let column of columns; let columnIndex = index"
@@ -11735,7 +11935,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
11735
11935
  </td>
11736
11936
  <td
11737
11937
  class="k-table-td k-hierarchy-cell"
11738
- *ngIf="detailTemplate?.templateRef"
11938
+ *ngIf="detailTemplate?.templateRef && !isStacked"
11739
11939
  role="presentation">
11740
11940
  </td>
11741
11941
  <td *ngFor="let column of columns; let columnIndex = index"
@@ -12598,13 +12798,13 @@ class ToolbarToolBase {
12598
12798
  this.clickSub.unsubscribe();
12599
12799
  }
12600
12800
  onClick(_e) { }
12601
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolbarToolBase, deps: [{ token: i53.ToolBarButtonComponent }, { token: 'command' }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
12801
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolbarToolBase, deps: [{ token: i54.ToolBarButtonComponent }, { token: 'command' }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
12602
12802
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ToolbarToolBase, ngImport: i0 });
12603
12803
  }
12604
12804
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolbarToolBase, decorators: [{
12605
12805
  type: Directive,
12606
12806
  args: [{}]
12607
- }], ctorParameters: function () { return [{ type: i53.ToolBarButtonComponent }, { type: undefined, decorators: [{
12807
+ }], ctorParameters: function () { return [{ type: i54.ToolBarButtonComponent }, { type: undefined, decorators: [{
12608
12808
  type: Inject,
12609
12809
  args: ['command']
12610
12810
  }] }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
@@ -12783,7 +12983,7 @@ class ColumnChooserToolbarDirective extends ToolbarToolBase {
12783
12983
  get buttonElement() {
12784
12984
  return this.host.getButton();
12785
12985
  }
12786
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, deps: [{ token: i0.Renderer2 }, { token: i2.PopupService }, { token: i53.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i53.RefreshService }, { token: AdaptiveGridService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
12986
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, deps: [{ token: i0.Renderer2 }, { token: i2.PopupService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i54.RefreshService }, { token: AdaptiveGridService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
12787
12987
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserToolbarDirective, isStandalone: true, selector: "[kendoGridColumnChooserTool]", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, usesInheritance: true, ngImport: i0 });
12788
12988
  }
12789
12989
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, decorators: [{
@@ -12792,7 +12992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12792
12992
  selector: '[kendoGridColumnChooserTool]',
12793
12993
  standalone: true
12794
12994
  }]
12795
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i2.PopupService }, { type: i53.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i53.RefreshService }, { type: AdaptiveGridService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { autoSync: [{
12995
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i2.PopupService }, { type: i54.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i54.RefreshService }, { type: AdaptiveGridService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { autoSync: [{
12796
12996
  type: Input
12797
12997
  }], allowHideAll: [{
12798
12998
  type: Input
@@ -15730,11 +15930,14 @@ const createTable = (colGroups, headers, bodies, footers, size) => {
15730
15930
  for (let idx = 1; idx < colGroups.length; idx++) {
15731
15931
  appendNodes(colGroup, colGroups[idx].querySelectorAll('col'));
15732
15932
  }
15733
- const header = createTableElement(headers);
15734
15933
  const body = createTableElement(bodies);
15735
- setFirstCellClass(header, headers);
15934
+ let header;
15935
+ if (headers.length > 0) {
15936
+ header = createTableElement(headers);
15937
+ setFirstCellClass(header, headers);
15938
+ }
15736
15939
  table.appendChild(colGroup);
15737
- table.appendChild(header);
15940
+ header && table.appendChild(header);
15738
15941
  table.appendChild(body);
15739
15942
  if (footers.length) {
15740
15943
  const footer = createTableElement(footers);
@@ -15751,17 +15954,23 @@ const exportElement = (wrapper, size) => {
15751
15954
  let result;
15752
15955
  if (content) {
15753
15956
  const colGroups = [content.querySelector('colgroup')];
15754
- const headers = [query.header().querySelector('thead')];
15755
15957
  const bodies = [content.querySelector('tbody')];
15958
+ const header = query.header();
15756
15959
  const footer = query.footer();
15960
+ const headers = [];
15757
15961
  const footers = [];
15962
+ if (header) {
15963
+ headers.push(header.querySelector('thead'));
15964
+ }
15758
15965
  if (footer) {
15759
15966
  footers.push(footer.querySelector('tfoot'));
15760
15967
  }
15761
15968
  const lockedContent = query.content(true);
15762
15969
  if (lockedContent) {
15970
+ if (headers.length > 0) {
15971
+ headers.unshift(query.header(true).querySelector('thead'));
15972
+ }
15763
15973
  colGroups.unshift(lockedContent.querySelector('colgroup'));
15764
- headers.unshift(query.header(true).querySelector('thead'));
15765
15974
  bodies.unshift(lockedContent.querySelector('tbody'));
15766
15975
  if (footer) {
15767
15976
  footers.unshift(query.footer(true).querySelector('tfoot'));
@@ -15920,7 +16129,9 @@ class PDFComponent extends PDFExportComponent {
15920
16129
  const overlayContent = overlayQuery.content();
15921
16130
  overlayContent.scrollTop = content.scrollTop;
15922
16131
  overlayContent.scrollLeft = content.scrollLeft;
15923
- overlayQuery.header().scrollLeft = query.header().scrollLeft;
16132
+ if (!this.ctx?.grid?.isStacked) {
16133
+ overlayQuery.header().scrollLeft = query.header().scrollLeft;
16134
+ }
15924
16135
  const footer = query.footer();
15925
16136
  if (footer) {
15926
16137
  overlayQuery.footer().scrollLeft = footer.scrollLeft;
@@ -17331,7 +17542,7 @@ class CellSelectionService {
17331
17542
  nonSelectableRows = new Map();
17332
17543
  get enableMarquee() {
17333
17544
  const checkboxOnly = this.settings && typeof this.settings === 'object' && this.settings.checkboxOnly;
17334
- if (!this.settings || checkboxOnly) {
17545
+ if (!this.settings || checkboxOnly || this.settings.isStacked) {
17335
17546
  return false;
17336
17547
  }
17337
17548
  const selectableSettings = this.settings.selectable;
@@ -17367,7 +17578,7 @@ class CellSelectionService {
17367
17578
  this.settings = settings;
17368
17579
  this.currentSelection = [];
17369
17580
  this.nonSelectableRows = new Map();
17370
- if (settings.selectable && settings.selectable.enabled !== false) {
17581
+ if (settings.selectable && settings.selectable.enabled !== false && !settings.isStacked) {
17371
17582
  const iterator = this.getIterator();
17372
17583
  let item = iterator.next();
17373
17584
  while (!item.done) {
@@ -17391,7 +17602,7 @@ class CellSelectionService {
17391
17602
  }
17392
17603
  }
17393
17604
  isCellSelected(item, col) {
17394
- if (this.settings && this.active) {
17605
+ if (this.settings && this.active && !this.settings.isStacked) {
17395
17606
  const selectedCellArgs = this.settings.cellSelected({ dataItem: item.data, index: item.index }, col, col.leafIndex);
17396
17607
  return this.options.enabled && selectedCellArgs.selected && !this.nonSelectableRows.has(item.index);
17397
17608
  }
@@ -17402,6 +17613,9 @@ class CellSelectionService {
17402
17613
  this.dragging = false;
17403
17614
  return;
17404
17615
  }
17616
+ if (this.settings.isStacked) {
17617
+ return;
17618
+ }
17405
17619
  let ev;
17406
17620
  const ctrlKey = event.ctrlKey || event.metaKey;
17407
17621
  if (this.options.mode === "single" && ctrlKey && this.isCellSelected(item, item.column)) {
@@ -17757,7 +17971,7 @@ class SelectAllCheckboxDirective {
17757
17971
  return undefined;
17758
17972
  }
17759
17973
  }
17760
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectAllCheckboxDirective, deps: [{ token: SelectionService }, { token: CellSelectionService }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i4$1.CheckBoxComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
17974
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectAllCheckboxDirective, deps: [{ token: SelectionService }, { token: CellSelectionService }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i4.CheckBoxComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
17761
17975
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectAllCheckboxDirective, isStandalone: true, selector: "[kendoGridSelectAllCheckbox]", inputs: { state: "state" }, outputs: { selectAllChange: "selectAllChange" }, usesOnChanges: true, ngImport: i0 });
17762
17976
  }
17763
17977
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectAllCheckboxDirective, decorators: [{
@@ -17766,7 +17980,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17766
17980
  selector: '[kendoGridSelectAllCheckbox]',
17767
17981
  standalone: true
17768
17982
  }]
17769
- }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i4$1.CheckBoxComponent, decorators: [{
17983
+ }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i4.CheckBoxComponent, decorators: [{
17770
17984
  type: Host
17771
17985
  }, {
17772
17986
  type: Optional
@@ -18124,6 +18338,9 @@ class HeaderComponent {
18124
18338
  get leafColumns() {
18125
18339
  return this._leafColumns;
18126
18340
  }
18341
+ get isStacked() {
18342
+ return this.contextService.grid?.isStacked;
18343
+ }
18127
18344
  isReorderable(column) {
18128
18345
  return this.reorderable && column.reorderable;
18129
18346
  }
@@ -18226,7 +18443,7 @@ class HeaderComponent {
18226
18443
  </th>
18227
18444
  <th class="k-hierarchy-cell k-header k-table-th"
18228
18445
  role="presentation"
18229
- *ngIf="detailTemplate?.templateRef"
18446
+ *ngIf="detailTemplate?.templateRef && !isStacked"
18230
18447
  >
18231
18448
  </th>
18232
18449
  <ng-container *ngFor="let column of columnsForLevel(levelIndex); let columnIndex = index; let last = last;">
@@ -18450,7 +18667,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18450
18667
  </th>
18451
18668
  <th class="k-hierarchy-cell k-header k-table-th"
18452
18669
  role="presentation"
18453
- *ngIf="detailTemplate?.templateRef"
18670
+ *ngIf="detailTemplate?.templateRef && !isStacked"
18454
18671
  >
18455
18672
  </th>
18456
18673
  <ng-container *ngFor="let column of columnsForLevel(levelIndex); let columnIndex = index; let last = last;">
@@ -18718,6 +18935,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18718
18935
  */
18719
18936
  class FooterComponent {
18720
18937
  columnInfoService;
18938
+ ctx;
18721
18939
  columns = [];
18722
18940
  groups = [];
18723
18941
  detailTemplate;
@@ -18731,15 +18949,16 @@ class FooterComponent {
18731
18949
  }
18732
18950
  hostClass = true;
18733
18951
  hostRole = 'rowgroup';
18734
- constructor(columnInfoService) {
18952
+ constructor(columnInfoService, ctx) {
18735
18953
  this.columnInfoService = columnInfoService;
18954
+ this.ctx = ctx;
18736
18955
  }
18737
18956
  get columnsToRender() {
18738
18957
  return columnsToRender(this.columns || []);
18739
18958
  }
18740
18959
  // Number of unlocked columns in the next table, if any
18741
18960
  get unlockedColumnsCount() {
18742
- return this.totalColumnsCount - this.lockedColumnsCount - this.columns.length;
18961
+ return this.totalColumnsCount - (this.isStacked ? 0 : this.lockedColumnsCount) - this.columns.length;
18743
18962
  }
18744
18963
  trackByIndex(index) {
18745
18964
  return index;
@@ -18758,47 +18977,78 @@ class FooterComponent {
18758
18977
  isColumnGroupComponent(column) {
18759
18978
  return isColumnGroupComponent(column);
18760
18979
  }
18761
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FooterComponent, deps: [{ token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
18980
+ get isStacked() {
18981
+ return this.ctx.grid?.isStacked;
18982
+ }
18983
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FooterComponent, deps: [{ token: ColumnInfoService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
18762
18984
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FooterComponent, isStandalone: true, selector: "[kendoGridFooter]", inputs: { columns: "columns", groups: "groups", detailTemplate: "detailTemplate", scrollable: "scrollable", lockedColumnsCount: "lockedColumnsCount", logicalRowIndex: "logicalRowIndex", totalColumns: "totalColumns", totalColumnsCount: "totalColumnsCount" }, host: { properties: { "class.k-grid-footer": "this.footerClass", "class.k-table-tfoot": "this.hostClass", "attr.role": "this.hostRole" } }, ngImport: i0, template: `
18763
18985
  <ng-container>
18764
18986
  <tr
18765
18987
  class="k-footer-template"
18766
18988
  kendoGridLogicalRow
18767
18989
  [logicalRowIndex]="logicalRowIndex"
18768
- [logicalSlaveRow]="lockedColumnsCount > 0"
18990
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStacked"
18769
18991
  [logicalCellsCount]="columns.length"
18770
18992
  [logicalSlaveCellsCount]="unlockedColumnsCount"
18771
18993
  [totalColumns]="totalColumns"
18772
18994
  >
18773
- <td
18774
- class="k-table-td k-group-cell k-table-group-td"
18775
- role="presentation"
18776
- *ngFor="let g of groups">
18777
- </td>
18995
+ <ng-container *ngIf="!isStacked">
18996
+ <td
18997
+ class="k-table-td k-group-cell k-table-group-td"
18998
+ role="presentation"
18999
+ *ngFor="let g of groups">
19000
+ </td>
19001
+ </ng-container>
18778
19002
  <td
18779
19003
  role="presentation"
18780
19004
  class="k-table-td k-hierarchy-cell"
18781
- *ngIf="detailTemplate?.templateRef">
19005
+ *ngIf="detailTemplate?.templateRef && !isStacked">
18782
19006
  </td>
18783
- <ng-container *ngFor="let column of columnsToRender; let columnIndex = index; trackBy: trackByIndex;">
18784
- <td *ngIf="!isColumnGroupComponent(column)"
18785
- kendoGridLogicalCell
19007
+ <ng-container *ngIf="!isStacked">
19008
+ <ng-container *ngFor="let column of columnsToRender; let columnIndex = index; trackBy: trackByIndex;">
19009
+ <td *ngIf="!isColumnGroupComponent(column)"
19010
+ kendoGridLogicalCell
19011
+ class="k-table-td"
19012
+ [logicalRowIndex]="logicalRowIndex"
19013
+ [logicalColIndex]="logicalColumnIndex(column)"
19014
+ role="gridcell"
19015
+ aria-selected="false"
19016
+ [class.k-grid-footer-sticky]="column.sticky"
19017
+ [ngClass]="column.footerClass"
19018
+ [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
19019
+ <ng-template
19020
+ [templateContext]="{
19021
+ templateRef: column.footerTemplateRef,
19022
+ columnIndex: column.leafIndex,
19023
+ column: column,
19024
+ $implicit: column
19025
+ }">
19026
+ </ng-template>
19027
+ </td>
19028
+ </ng-container>
19029
+ </ng-container>
19030
+
19031
+ <ng-container *ngIf="isStacked">
19032
+ <td kendoGridLogicalCell
18786
19033
  class="k-table-td"
18787
- [logicalRowIndex]="logicalRowIndex"
18788
- [logicalColIndex]="logicalColumnIndex(column)"
18789
- role="gridcell"
18790
- aria-selected="false"
18791
- [class.k-grid-footer-sticky]="column.sticky"
18792
- [ngClass]="column.footerClass"
18793
- [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
18794
- <ng-template
18795
- [templateContext]="{
18796
- templateRef: column.footerTemplateRef,
18797
- columnIndex: column.leafIndex,
18798
- column: column,
18799
- $implicit: column
18800
- }">
18801
- </ng-template>
19034
+ [logicalRowIndex]="logicalRowIndex"
19035
+ [logicalColIndex]="detailTemplate ? 1 : 0"
19036
+ role="gridcell"
19037
+ aria-selected="false">
19038
+ <div class="k-grid-column-template">
19039
+ <ng-container *ngFor="let column of columnsToRender; trackBy: trackByIndex;">
19040
+ <div class="k-column-template-item" *ngIf="column.footerTemplateRef">
19041
+ <ng-template
19042
+ [templateContext]="{
19043
+ templateRef: column.footerTemplateRef,
19044
+ columnIndex: column.leafIndex,
19045
+ column: column,
19046
+ $implicit: column
19047
+ }">
19048
+ </ng-template>
19049
+ </div>
19050
+ </ng-container>
19051
+ </div>
18802
19052
  </td>
18803
19053
  </ng-container>
18804
19054
  </tr>
@@ -18815,40 +19065,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18815
19065
  class="k-footer-template"
18816
19066
  kendoGridLogicalRow
18817
19067
  [logicalRowIndex]="logicalRowIndex"
18818
- [logicalSlaveRow]="lockedColumnsCount > 0"
19068
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStacked"
18819
19069
  [logicalCellsCount]="columns.length"
18820
19070
  [logicalSlaveCellsCount]="unlockedColumnsCount"
18821
19071
  [totalColumns]="totalColumns"
18822
19072
  >
18823
- <td
18824
- class="k-table-td k-group-cell k-table-group-td"
18825
- role="presentation"
18826
- *ngFor="let g of groups">
18827
- </td>
19073
+ <ng-container *ngIf="!isStacked">
19074
+ <td
19075
+ class="k-table-td k-group-cell k-table-group-td"
19076
+ role="presentation"
19077
+ *ngFor="let g of groups">
19078
+ </td>
19079
+ </ng-container>
18828
19080
  <td
18829
19081
  role="presentation"
18830
19082
  class="k-table-td k-hierarchy-cell"
18831
- *ngIf="detailTemplate?.templateRef">
19083
+ *ngIf="detailTemplate?.templateRef && !isStacked">
18832
19084
  </td>
18833
- <ng-container *ngFor="let column of columnsToRender; let columnIndex = index; trackBy: trackByIndex;">
18834
- <td *ngIf="!isColumnGroupComponent(column)"
18835
- kendoGridLogicalCell
19085
+ <ng-container *ngIf="!isStacked">
19086
+ <ng-container *ngFor="let column of columnsToRender; let columnIndex = index; trackBy: trackByIndex;">
19087
+ <td *ngIf="!isColumnGroupComponent(column)"
19088
+ kendoGridLogicalCell
19089
+ class="k-table-td"
19090
+ [logicalRowIndex]="logicalRowIndex"
19091
+ [logicalColIndex]="logicalColumnIndex(column)"
19092
+ role="gridcell"
19093
+ aria-selected="false"
19094
+ [class.k-grid-footer-sticky]="column.sticky"
19095
+ [ngClass]="column.footerClass"
19096
+ [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
19097
+ <ng-template
19098
+ [templateContext]="{
19099
+ templateRef: column.footerTemplateRef,
19100
+ columnIndex: column.leafIndex,
19101
+ column: column,
19102
+ $implicit: column
19103
+ }">
19104
+ </ng-template>
19105
+ </td>
19106
+ </ng-container>
19107
+ </ng-container>
19108
+
19109
+ <ng-container *ngIf="isStacked">
19110
+ <td kendoGridLogicalCell
18836
19111
  class="k-table-td"
18837
- [logicalRowIndex]="logicalRowIndex"
18838
- [logicalColIndex]="logicalColumnIndex(column)"
18839
- role="gridcell"
18840
- aria-selected="false"
18841
- [class.k-grid-footer-sticky]="column.sticky"
18842
- [ngClass]="column.footerClass"
18843
- [ngStyle]="column.sticky ? addStickyStyles(column) : column.footerStyle">
18844
- <ng-template
18845
- [templateContext]="{
18846
- templateRef: column.footerTemplateRef,
18847
- columnIndex: column.leafIndex,
18848
- column: column,
18849
- $implicit: column
18850
- }">
18851
- </ng-template>
19112
+ [logicalRowIndex]="logicalRowIndex"
19113
+ [logicalColIndex]="detailTemplate ? 1 : 0"
19114
+ role="gridcell"
19115
+ aria-selected="false">
19116
+ <div class="k-grid-column-template">
19117
+ <ng-container *ngFor="let column of columnsToRender; trackBy: trackByIndex;">
19118
+ <div class="k-column-template-item" *ngIf="column.footerTemplateRef">
19119
+ <ng-template
19120
+ [templateContext]="{
19121
+ templateRef: column.footerTemplateRef,
19122
+ columnIndex: column.leafIndex,
19123
+ column: column,
19124
+ $implicit: column
19125
+ }">
19126
+ </ng-template>
19127
+ </div>
19128
+ </ng-container>
19129
+ </div>
18852
19130
  </td>
18853
19131
  </ng-container>
18854
19132
  </tr>
@@ -18857,7 +19135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18857
19135
  standalone: true,
18858
19136
  imports: [LogicalRowDirective, NgFor, NgIf, LogicalCellDirective, NgClass, NgStyle, TemplateContextDirective]
18859
19137
  }]
18860
- }], ctorParameters: function () { return [{ type: ColumnInfoService }]; }, propDecorators: { columns: [{
19138
+ }], ctorParameters: function () { return [{ type: ColumnInfoService }, { type: ContextService }]; }, propDecorators: { columns: [{
18861
19139
  type: Input
18862
19140
  }], groups: [{
18863
19141
  type: Input
@@ -19146,7 +19424,7 @@ class SelectionCheckboxDirective {
19146
19424
  this.renderer.setProperty(this.el.nativeElement, 'checked', isSelected);
19147
19425
  }
19148
19426
  }
19149
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionCheckboxDirective, deps: [{ token: SelectionService }, { token: CellSelectionService }, { token: CellSelectionAggregateService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i4$1.CheckBoxComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
19427
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionCheckboxDirective, deps: [{ token: SelectionService }, { token: CellSelectionService }, { token: CellSelectionAggregateService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i4.CheckBoxComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
19150
19428
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectionCheckboxDirective, isStandalone: true, selector: "[kendoGridSelectionCheckbox]", inputs: { itemIndex: ["kendoGridSelectionCheckbox", "itemIndex"] }, ngImport: i0 });
19151
19429
  }
19152
19430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionCheckboxDirective, decorators: [{
@@ -19155,7 +19433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19155
19433
  selector: '[kendoGridSelectionCheckbox]',
19156
19434
  standalone: true
19157
19435
  }]
19158
- }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: CellSelectionAggregateService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i4$1.CheckBoxComponent, decorators: [{
19436
+ }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: CellSelectionAggregateService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i4.CheckBoxComponent, decorators: [{
19159
19437
  type: Host
19160
19438
  }, {
19161
19439
  type: Optional
@@ -19255,6 +19533,8 @@ class CellComponent {
19255
19533
  editService;
19256
19534
  idService;
19257
19535
  ctx;
19536
+ detailsService;
19537
+ localization;
19258
19538
  cellContext;
19259
19539
  get commandCellClass() {
19260
19540
  return this.isCommand(this.column);
@@ -19266,11 +19546,14 @@ class CellComponent {
19266
19546
  return isRowReorderColumn(this.column) ? this.ctx.localization.get('dragRowHandleLabel') : undefined;
19267
19547
  }
19268
19548
  column;
19549
+ columns;
19269
19550
  columnIndex;
19270
19551
  isNew = false;
19271
19552
  isLoading = false;
19272
19553
  isVirtual = false;
19273
19554
  loadingTemplate;
19555
+ detailTemplate;
19556
+ item;
19274
19557
  set rowIndex(index) {
19275
19558
  this._rowIndex = index;
19276
19559
  this.updateCellContext();
@@ -19280,12 +19563,42 @@ class CellComponent {
19280
19563
  }
19281
19564
  dataItem;
19282
19565
  reorderIcon = reorderIcon;
19283
- get isEdited() {
19284
- if (!(this.editService.isEditing() || this.isNew) || !this.isColumnEditable) {
19566
+ minusIcon = minusIcon;
19567
+ plusIcon = plusIcon;
19568
+ detailButtonIconName(viewItem) {
19569
+ return viewItem.isExpanded ? 'minus' : 'plus';
19570
+ }
19571
+ detailButtonSvgIcon(viewItem) {
19572
+ return viewItem.isExpanded ? this.minusIcon : this.plusIcon;
19573
+ }
19574
+ detailButtonText(viewItem) {
19575
+ return viewItem.isExpanded ? this.localization.get('detailCollapse') : this.localization.get('detailExpand');
19576
+ }
19577
+ toggleRow(index, dataItem) {
19578
+ this.detailsService.toggleRow(index, dataItem);
19579
+ return false;
19580
+ }
19581
+ get stackedRowClass() {
19582
+ const columnsLength = this.ctx.grid.stackedColumns?.columns.length;
19583
+ if (this.ctx.grid.stackedColumns.areDefault && columnsLength > 1) {
19584
+ return `k-grid-cols-${columnsLength}`;
19585
+ }
19586
+ }
19587
+ get stackedRowStyle() {
19588
+ const columnsWidths = this.ctx.grid.stackedColumns.columns.map(c => c.width).join(' ');
19589
+ if (!this.ctx.grid.stackedColumns.areDefault && columnsWidths) {
19590
+ return {
19591
+ 'grid-template-columns': `${columnsWidths}`
19592
+ };
19593
+ }
19594
+ }
19595
+ isEdited(column) {
19596
+ const currentColumn = column || this.column;
19597
+ if (!(this.editService.isEditing() || this.isNew) || !this.isColumnEditable(column)) {
19285
19598
  return false;
19286
19599
  }
19287
- const editContext = this.editService.columnContext(this.rowIndex, this.column);
19288
- return this.isFieldEditable(editContext, this.column);
19600
+ const editContext = this.editService.columnContext(this.rowIndex, currentColumn);
19601
+ return this.isFieldEditable(editContext, currentColumn);
19289
19602
  }
19290
19603
  get showLoading() {
19291
19604
  return this.isVirtual && this.isLoading;
@@ -19293,13 +19606,22 @@ class CellComponent {
19293
19606
  get formGroup() {
19294
19607
  return this.editService.context(this.rowIndex).group;
19295
19608
  }
19296
- get templateContext() {
19609
+ getTemplateContext(column) {
19610
+ this._templateContext.isNew = this.isNew;
19611
+ this._templateContext.column = column || this.column;
19612
+ this._templateContext.dataItem = this.dataItem;
19613
+ this._templateContext.rowIndex = this.rowIndex;
19614
+ this._templateContext.columnIndex = this.columnIndex;
19615
+ this._templateContext.$implicit = this.dataItem;
19297
19616
  return this._templateContext;
19298
19617
  }
19299
- get editTemplateContext() {
19618
+ get isStackedLayoutMode() {
19619
+ return this.ctx.grid?.isStacked;
19620
+ }
19621
+ getEditTemplateContext(column) {
19300
19622
  this._editTemplateContext.$implicit = this.formGroup;
19301
19623
  this._editTemplateContext.isNew = this.isNew;
19302
- this._editTemplateContext.column = this.column;
19624
+ this._editTemplateContext.column = column || this.column;
19303
19625
  this._editTemplateContext.dataItem = this.dataItem;
19304
19626
  this._editTemplateContext.formGroup = this.formGroup;
19305
19627
  this._editTemplateContext.rowIndex = this.rowIndex;
@@ -19317,11 +19639,13 @@ class CellComponent {
19317
19639
  }
19318
19640
  return undefined;
19319
19641
  }
19320
- get isBoundColumn() {
19321
- return this.column.field && !this.column.templateRef;
19642
+ isBoundColumn(column) {
19643
+ const currentColumn = column || this.column;
19644
+ return currentColumn.field && !currentColumn.templateRef;
19322
19645
  }
19323
- get isCheckboxColumn() {
19324
- return isCheckboxColumn(this.column) && !this.column.templateRef;
19646
+ isCheckboxColumn(column) {
19647
+ const currentColumn = column || this.column;
19648
+ return isCheckboxColumn(currentColumn) && !currentColumn.templateRef;
19325
19649
  }
19326
19650
  get selectionCheckboxId() {
19327
19651
  return this.idService.selectionCheckboxId(this.rowIndex);
@@ -19335,37 +19659,36 @@ class CellComponent {
19335
19659
  get children() {
19336
19660
  return columnsToRender([this.column]);
19337
19661
  }
19338
- get isRowReorderColumn() {
19339
- return isRowReorderColumn(this.column) && !this.column.templateRef;
19662
+ isRowReorderColumn(column) {
19663
+ const currentColumn = column || this.column;
19664
+ return isRowReorderColumn(currentColumn) && !currentColumn.templateRef;
19340
19665
  }
19341
- get isRowSelectable() {
19342
- return this.column.rowSelectable(this._rowIndex);
19666
+ isRowSelectable(column) {
19667
+ const currentColumn = column || this.column;
19668
+ return currentColumn.rowSelectable(this._rowIndex);
19343
19669
  }
19344
19670
  _rowIndex;
19345
- get isColumnEditable() {
19346
- if (!this.column || this.isCommand(this.column)) {
19671
+ isColumnEditable(column) {
19672
+ const currentColumn = column || this.column;
19673
+ if (!currentColumn || this.isCommand(currentColumn)) {
19347
19674
  return false;
19348
19675
  }
19349
- return this.column.editable !== false;
19676
+ return currentColumn.editable !== false;
19350
19677
  }
19351
19678
  _templateContext = {};
19352
19679
  _editTemplateContext = {};
19353
19680
  _rowReorderTemplateContext = {};
19354
- constructor(editService, idService, ctx, cellContext) {
19681
+ constructor(editService, idService, ctx, detailsService, localization, cellContext) {
19355
19682
  this.editService = editService;
19356
19683
  this.idService = idService;
19357
19684
  this.ctx = ctx;
19685
+ this.detailsService = detailsService;
19686
+ this.localization = localization;
19358
19687
  this.cellContext = cellContext;
19359
19688
  }
19360
19689
  ngDoCheck() {
19361
19690
  this.updateCellContext();
19362
19691
  }
19363
- ngOnChanges() {
19364
- this.updateTemplateContext();
19365
- }
19366
- ngAfterContentChecked() {
19367
- this.updateTemplateContext();
19368
- }
19369
19692
  isCommand(column) {
19370
19693
  return column instanceof CommandColumnComponent;
19371
19694
  }
@@ -19383,203 +19706,423 @@ class CellComponent {
19383
19706
  this.cellContext.rowIndex = this._rowIndex;
19384
19707
  }
19385
19708
  }
19386
- updateTemplateContext() {
19387
- if (!this.column.templateRef) {
19388
- return;
19389
- }
19390
- const context = this._templateContext;
19391
- context.isNew = this.isNew;
19392
- context.column = this.column;
19393
- context.dataItem = this.dataItem;
19394
- context.rowIndex = this.rowIndex;
19395
- context.columnIndex = this.columnIndex;
19396
- context.$implicit = this.dataItem;
19397
- }
19398
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellComponent, deps: [{ token: EditService }, { token: IdService }, { token: ContextService }, { token: CELL_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
19399
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CellComponent, isStandalone: true, selector: "[kendoGridCell]", inputs: { column: "column", columnIndex: "columnIndex", isNew: "isNew", isLoading: "isLoading", isVirtual: "isVirtual", loadingTemplate: "loadingTemplate", rowIndex: "rowIndex", dataItem: "dataItem" }, host: { properties: { "class.k-command-cell": "this.commandCellClass", "class.k-drag-cell": "this.dragHandleCellClass", "class.k-touch-action-none": "this.dragHandleCellClass", "attr.aria-label": "this.dragRowHandleLabel" } }, usesOnChanges: true, ngImport: i0, template: `
19400
- <ng-container [ngSwitch]="isEdited">
19401
- <ng-container *ngSwitchCase="false">
19402
- <ng-container *ngIf="!showLoading; else loading">
19403
- <ng-template *ngIf="column.templateRef"
19404
- [ngTemplateOutlet]="column.templateRef"
19405
- [ngTemplateOutletContext]="templateContext">
19406
- </ng-template>
19407
- <ng-container *ngIf="isSpanColumn">
19408
- <ng-container *ngFor="let childColumn of children">
19409
- {{ dataItem | valueOf: childColumn.field: childColumn.format}}
19709
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellComponent, deps: [{ token: EditService }, { token: IdService }, { token: ContextService }, { token: DetailsService }, { token: i1$2.LocalizationService }, { token: CELL_CONTEXT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
19710
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CellComponent, isStandalone: true, selector: "[kendoGridCell]", inputs: { column: "column", columns: "columns", columnIndex: "columnIndex", isNew: "isNew", isLoading: "isLoading", isVirtual: "isVirtual", loadingTemplate: "loadingTemplate", detailTemplate: "detailTemplate", item: "item", rowIndex: "rowIndex", dataItem: "dataItem" }, host: { properties: { "class.k-command-cell": "this.commandCellClass", "class.k-drag-cell": "this.dragHandleCellClass", "class.k-touch-action-none": "this.dragHandleCellClass", "attr.aria-label": "this.dragRowHandleLabel" } }, ngImport: i0, template: `
19711
+ <ng-container *ngIf="isStackedLayoutMode">
19712
+ <div class="k-grid-stack-row"
19713
+ [ngClass]="stackedRowClass"
19714
+ [ngStyle]="stackedRowStyle">
19715
+ <div class="k-grid-stack-cell" *ngFor="let col of columns"
19716
+ [class.k-grid-stack-edit-cell]="isEdited(col)"
19717
+ [class.k-drag-cell]="isRowReorderColumn(col) && !isNew"
19718
+ [class.k-command-cell]="isCommand(col)"
19719
+ kendoGridFocusable>
19720
+ <div class="k-grid-stack-header">
19721
+ <ng-container *ngIf="!col.headerTemplateRef; else headerTemplate">
19722
+ {{col.displayTitle}}
19410
19723
  </ng-container>
19411
- </ng-container>
19412
- <ng-container *ngIf="isBoundColumn">{{ dataItem | valueOf: column.field: column.format}}</ng-container>
19413
- <ng-container *ngIf="isCheckboxColumn && !isNew">
19414
- <ng-container *ngIf="isRowSelectable; else nonSelectableRow">
19415
- <kendo-checkbox
19416
- [kendoGridSelectionCheckbox]="rowIndex"
19417
- [attr.id]="selectionCheckboxId"
19418
- [inputAttributes]="{'aria-label': selectionCheckboxLabel}">
19419
- </kendo-checkbox>
19724
+
19725
+ <ng-template #headerTemplate
19726
+ [templateContext]="{
19727
+ templateRef: col.headerTemplateRef,
19728
+ columnIndex: col.leafIndex,
19729
+ column: col,
19730
+ $implicit: col
19731
+ }">
19732
+ </ng-template>
19733
+ </div>
19734
+ <div class="k-grid-stack-content">
19735
+ <ng-container *ngIf="!isEdited(col)">
19736
+ <ng-container *ngIf="!col.templateRef; else template">
19737
+ <ng-container *ngIf="isBoundColumn(col)">{{ dataItem | valueOf: col.field: col.format}}</ng-container>
19738
+ <ng-container *ngIf="isCheckboxColumn(col) && !isNew">
19739
+ <ng-container *ngIf="isRowSelectable(col); else nonSelectableRow">
19740
+ <kendo-checkbox
19741
+ [kendoGridSelectionCheckbox]="rowIndex"
19742
+ [attr.id]="selectionCheckboxId"
19743
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19744
+ [title]="selectionCheckboxLabel">
19745
+ </kendo-checkbox>
19746
+ </ng-container>
19747
+ <ng-template #nonSelectableRow>
19748
+ <kendo-checkbox *ngIf="col.showDisabledCheckbox"
19749
+ [kendoGridSelectionCheckbox]="rowIndex"
19750
+ [attr.id]="selectionCheckboxId"
19751
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19752
+ [title]="selectionCheckboxLabel"
19753
+ [disabled]="true"
19754
+ ></kendo-checkbox>
19755
+ </ng-template>
19756
+ </ng-container>
19757
+ <ng-container *ngIf="isRowReorderColumn(col) && !isNew">
19758
+ <kendo-icon-wrapper *ngIf="!col.dragHandleTemplate?.first"
19759
+ name="reorder"
19760
+ [svgIcon]="reorderIcon">
19761
+ </kendo-icon-wrapper>
19762
+ <ng-template *ngIf="col.dragHandleTemplate?.first"
19763
+ [ngTemplateOutlet]="col.rowDragHandleTemplateRef"
19764
+ [ngTemplateOutletContext]="rowReorderTemplateContext">
19765
+ </ng-template>
19766
+ </ng-container>
19767
+ </ng-container>
19768
+ <ng-template #template
19769
+ [ngTemplateOutlet]="col.templateRef"
19770
+ [ngTemplateOutletContext]="getTemplateContext(col)">
19771
+ </ng-template>
19772
+ </ng-container>
19773
+ <ng-container *ngIf="isEdited(col)">
19774
+ <ng-container [ngSwitch]="col.editor" *ngIf="!col.editTemplateRef">
19775
+ <kendo-numerictextbox
19776
+ *ngSwitchCase="'numeric'"
19777
+ [format]="format"
19778
+ [formControl]="$any(formGroup.get(col.field))"
19779
+ kendoGridFocusable
19780
+ ></kendo-numerictextbox>
19781
+
19782
+ <kendo-datepicker
19783
+ *ngSwitchCase="'date'"
19784
+ [format]="format"
19785
+ [formControl]="$any(formGroup.get(col.field))"
19786
+ kendoGridFocusable
19787
+ ></kendo-datepicker>
19788
+
19789
+ <kendo-checkbox
19790
+ *ngSwitchCase="'boolean'"
19791
+ [formControl]="$any(formGroup.get(col.field))"
19792
+ kendoGridFocusable
19793
+ ></kendo-checkbox>
19794
+
19795
+ <kendo-textbox
19796
+ *ngSwitchDefault
19797
+ [formControl]="$any(formGroup.get(col.field))"
19798
+ kendoGridFocusable
19799
+ ></kendo-textbox>
19800
+ </ng-container>
19801
+ <ng-template *ngIf="col.editTemplateRef"
19802
+ [ngTemplateOutlet]="col.editTemplateRef"
19803
+ [ngTemplateOutletContext]="getEditTemplateContext(col)">
19804
+ </ng-template>
19420
19805
  </ng-container>
19421
- <ng-template #nonSelectableRow>
19422
- <kendo-checkbox *ngIf="column.showDisabledCheckbox"
19423
- [kendoGridSelectionCheckbox]="rowIndex"
19424
- [attr.id]="selectionCheckboxId"
19425
- [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19426
- [disabled]="true"
19427
- ></kendo-checkbox>
19806
+ </div>
19807
+ </div>
19808
+ <div class="k-grid-stack-cell" *ngIf="detailTemplate?.showIf(item.data, $any(item).index)">
19809
+ <div class="k-grid-stack-content">
19810
+ <button kendoButton
19811
+ fillMode="flat"
19812
+ themeColor="primary"
19813
+ [icon]="detailButtonIconName(item)"
19814
+ [svgIcon]="detailButtonSvgIcon(item)"
19815
+ (click)="toggleRow($any(item).index, item.data)">
19816
+ {{ detailButtonText(item) }}
19817
+ </button>
19818
+ </div>
19819
+ </div>
19820
+ </div>
19821
+ </ng-container>
19822
+
19823
+ <ng-container *ngIf="!isStackedLayoutMode">
19824
+ <ng-container [ngSwitch]="isEdited()">
19825
+ <ng-container *ngSwitchCase="false">
19826
+ <ng-container *ngIf="!showLoading; else loading">
19827
+ <ng-template *ngIf="column.templateRef"
19828
+ [ngTemplateOutlet]="column.templateRef"
19829
+ [ngTemplateOutletContext]="getTemplateContext()">
19428
19830
  </ng-template>
19831
+ <ng-container *ngIf="isSpanColumn">
19832
+ <ng-container *ngFor="let childColumn of children">
19833
+ {{ dataItem | valueOf: childColumn.field: childColumn.format}}
19834
+ </ng-container>
19835
+ </ng-container>
19836
+ <ng-container *ngIf="isBoundColumn()">{{ dataItem | valueOf: column.field: column.format}}</ng-container>
19837
+ <ng-container *ngIf="isCheckboxColumn() && !isNew">
19838
+ <ng-container *ngIf="isRowSelectable(); else nonSelectableRow">
19839
+ <kendo-checkbox
19840
+ [kendoGridSelectionCheckbox]="rowIndex"
19841
+ [attr.id]="selectionCheckboxId"
19842
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19843
+ [title]="selectionCheckboxLabel">
19844
+ </kendo-checkbox>
19845
+ </ng-container>
19846
+ <ng-template #nonSelectableRow>
19847
+ <kendo-checkbox *ngIf="column.showDisabledCheckbox"
19848
+ [kendoGridSelectionCheckbox]="rowIndex"
19849
+ [attr.id]="selectionCheckboxId"
19850
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19851
+ [title]="selectionCheckboxLabel"
19852
+ [disabled]="true"
19853
+ ></kendo-checkbox>
19854
+ </ng-template>
19855
+ </ng-container>
19856
+ <ng-container *ngIf="isRowReorderColumn() && !isNew">
19857
+ <kendo-icon-wrapper *ngIf="!column.dragHandleTemplate?.first"
19858
+ name="reorder"
19859
+ [svgIcon]="reorderIcon">
19860
+ </kendo-icon-wrapper>
19861
+ <ng-template *ngIf="column.dragHandleTemplate?.first"
19862
+ [ngTemplateOutlet]="column.rowDragHandleTemplateRef"
19863
+ [ngTemplateOutletContext]="rowReorderTemplateContext">
19864
+ </ng-template>
19865
+ </ng-container>
19429
19866
  </ng-container>
19430
- <ng-container *ngIf="isRowReorderColumn && !isNew">
19431
- <kendo-icon-wrapper *ngIf="!column.dragHandleTemplate?.first"
19432
- name="reorder"
19433
- [svgIcon]="reorderIcon">
19434
- </kendo-icon-wrapper>
19435
- <ng-template *ngIf="column.dragHandleTemplate?.first"
19436
- [ngTemplateOutlet]="column.rowDragHandleTemplateRef"
19437
- [ngTemplateOutletContext]="rowReorderTemplateContext">
19867
+ <ng-template #loading>
19868
+ <ng-template
19869
+ *ngIf="loadingTemplate"
19870
+ [ngTemplateOutlet]="loadingTemplate"
19871
+ [ngTemplateOutletContext]="{$implicit: column}">
19438
19872
  </ng-template>
19439
- </ng-container>
19873
+ <div *ngIf="!loadingTemplate" class="k-skeleton-text k-skeleton"></div>
19874
+ </ng-template>
19440
19875
  </ng-container>
19441
- <ng-template #loading>
19876
+ <ng-container *ngSwitchCase="true">
19442
19877
  <ng-template
19443
- *ngIf="loadingTemplate"
19444
- [ngTemplateOutlet]="loadingTemplate"
19445
- [ngTemplateOutletContext]="{$implicit: column}">
19878
+ *ngIf="column.editTemplateRef"
19879
+ [ngTemplateOutlet]="column.editTemplateRef"
19880
+ [ngTemplateOutletContext]="getEditTemplateContext()">
19446
19881
  </ng-template>
19447
- <div *ngIf="!loadingTemplate" class="k-skeleton-text k-skeleton"></div>
19448
- </ng-template>
19449
- </ng-container>
19450
- <ng-container *ngSwitchCase="true">
19451
- <ng-template
19452
- *ngIf="column.editTemplateRef"
19453
- [ngTemplateOutlet]="column.editTemplateRef"
19454
- [ngTemplateOutletContext]="editTemplateContext">
19455
- </ng-template>
19456
- <ng-container [ngSwitch]="column.editor" *ngIf="!column.editTemplateRef">
19457
- <kendo-numerictextbox
19458
- *ngSwitchCase="'numeric'"
19459
- [format]="format"
19460
- [formControl]="$any(formGroup.get(column.field))"
19461
- kendoGridFocusable
19462
- ></kendo-numerictextbox>
19463
-
19464
- <kendo-datepicker
19465
- *ngSwitchCase="'date'"
19466
- [format]="format"
19467
- [formControl]="$any(formGroup.get(column.field))"
19468
- kendoGridFocusable
19469
- ></kendo-datepicker>
19470
-
19471
- <kendo-checkbox
19472
- *ngSwitchCase="'boolean'"
19473
- [formControl]="$any(formGroup.get(column.field))"
19474
- kendoGridFocusable
19475
- ></kendo-checkbox>
19476
-
19477
- <kendo-textbox
19478
- *ngSwitchDefault
19479
- [formControl]="$any(formGroup.get(column.field))"
19480
- kendoGridFocusable
19481
- ></kendo-textbox>
19882
+ <ng-container [ngSwitch]="column.editor" *ngIf="!column.editTemplateRef">
19883
+ <kendo-numerictextbox
19884
+ *ngSwitchCase="'numeric'"
19885
+ [format]="format"
19886
+ [formControl]="$any(formGroup.get(column.field))"
19887
+ kendoGridFocusable
19888
+ ></kendo-numerictextbox>
19889
+
19890
+ <kendo-datepicker
19891
+ *ngSwitchCase="'date'"
19892
+ [format]="format"
19893
+ [formControl]="$any(formGroup.get(column.field))"
19894
+ kendoGridFocusable
19895
+ ></kendo-datepicker>
19896
+
19897
+ <kendo-checkbox
19898
+ *ngSwitchCase="'boolean'"
19899
+ [formControl]="$any(formGroup.get(column.field))"
19900
+ kendoGridFocusable
19901
+ ></kendo-checkbox>
19902
+
19903
+ <kendo-textbox
19904
+ *ngSwitchDefault
19905
+ [formControl]="$any(formGroup.get(column.field))"
19906
+ kendoGridFocusable
19907
+ ></kendo-textbox>
19908
+ </ng-container>
19482
19909
  </ng-container>
19483
19910
  </ng-container>
19484
19911
  </ng-container>
19485
- `, isInline: true, dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { kind: "directive", type: SelectionCheckboxDirective, selector: "[kendoGridSelectionCheckbox]", inputs: ["kendoGridSelectionCheckbox"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: FieldAccessorPipe, name: "valueOf" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }] });
19912
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { kind: "directive", type: SelectionCheckboxDirective, selector: "[kendoGridSelectionCheckbox]", inputs: ["kendoGridSelectionCheckbox"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: FieldAccessorPipe, name: "valueOf" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
19486
19913
  }
19487
19914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CellComponent, decorators: [{
19488
19915
  type: Component,
19489
19916
  args: [{
19490
19917
  selector: '[kendoGridCell]',
19491
19918
  template: `
19492
- <ng-container [ngSwitch]="isEdited">
19493
- <ng-container *ngSwitchCase="false">
19494
- <ng-container *ngIf="!showLoading; else loading">
19495
- <ng-template *ngIf="column.templateRef"
19496
- [ngTemplateOutlet]="column.templateRef"
19497
- [ngTemplateOutletContext]="templateContext">
19498
- </ng-template>
19499
- <ng-container *ngIf="isSpanColumn">
19500
- <ng-container *ngFor="let childColumn of children">
19501
- {{ dataItem | valueOf: childColumn.field: childColumn.format}}
19919
+ <ng-container *ngIf="isStackedLayoutMode">
19920
+ <div class="k-grid-stack-row"
19921
+ [ngClass]="stackedRowClass"
19922
+ [ngStyle]="stackedRowStyle">
19923
+ <div class="k-grid-stack-cell" *ngFor="let col of columns"
19924
+ [class.k-grid-stack-edit-cell]="isEdited(col)"
19925
+ [class.k-drag-cell]="isRowReorderColumn(col) && !isNew"
19926
+ [class.k-command-cell]="isCommand(col)"
19927
+ kendoGridFocusable>
19928
+ <div class="k-grid-stack-header">
19929
+ <ng-container *ngIf="!col.headerTemplateRef; else headerTemplate">
19930
+ {{col.displayTitle}}
19502
19931
  </ng-container>
19503
- </ng-container>
19504
- <ng-container *ngIf="isBoundColumn">{{ dataItem | valueOf: column.field: column.format}}</ng-container>
19505
- <ng-container *ngIf="isCheckboxColumn && !isNew">
19506
- <ng-container *ngIf="isRowSelectable; else nonSelectableRow">
19507
- <kendo-checkbox
19508
- [kendoGridSelectionCheckbox]="rowIndex"
19509
- [attr.id]="selectionCheckboxId"
19510
- [inputAttributes]="{'aria-label': selectionCheckboxLabel}">
19511
- </kendo-checkbox>
19932
+
19933
+ <ng-template #headerTemplate
19934
+ [templateContext]="{
19935
+ templateRef: col.headerTemplateRef,
19936
+ columnIndex: col.leafIndex,
19937
+ column: col,
19938
+ $implicit: col
19939
+ }">
19940
+ </ng-template>
19941
+ </div>
19942
+ <div class="k-grid-stack-content">
19943
+ <ng-container *ngIf="!isEdited(col)">
19944
+ <ng-container *ngIf="!col.templateRef; else template">
19945
+ <ng-container *ngIf="isBoundColumn(col)">{{ dataItem | valueOf: col.field: col.format}}</ng-container>
19946
+ <ng-container *ngIf="isCheckboxColumn(col) && !isNew">
19947
+ <ng-container *ngIf="isRowSelectable(col); else nonSelectableRow">
19948
+ <kendo-checkbox
19949
+ [kendoGridSelectionCheckbox]="rowIndex"
19950
+ [attr.id]="selectionCheckboxId"
19951
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19952
+ [title]="selectionCheckboxLabel">
19953
+ </kendo-checkbox>
19954
+ </ng-container>
19955
+ <ng-template #nonSelectableRow>
19956
+ <kendo-checkbox *ngIf="col.showDisabledCheckbox"
19957
+ [kendoGridSelectionCheckbox]="rowIndex"
19958
+ [attr.id]="selectionCheckboxId"
19959
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19960
+ [title]="selectionCheckboxLabel"
19961
+ [disabled]="true"
19962
+ ></kendo-checkbox>
19963
+ </ng-template>
19964
+ </ng-container>
19965
+ <ng-container *ngIf="isRowReorderColumn(col) && !isNew">
19966
+ <kendo-icon-wrapper *ngIf="!col.dragHandleTemplate?.first"
19967
+ name="reorder"
19968
+ [svgIcon]="reorderIcon">
19969
+ </kendo-icon-wrapper>
19970
+ <ng-template *ngIf="col.dragHandleTemplate?.first"
19971
+ [ngTemplateOutlet]="col.rowDragHandleTemplateRef"
19972
+ [ngTemplateOutletContext]="rowReorderTemplateContext">
19973
+ </ng-template>
19974
+ </ng-container>
19975
+ </ng-container>
19976
+ <ng-template #template
19977
+ [ngTemplateOutlet]="col.templateRef"
19978
+ [ngTemplateOutletContext]="getTemplateContext(col)">
19979
+ </ng-template>
19512
19980
  </ng-container>
19513
- <ng-template #nonSelectableRow>
19514
- <kendo-checkbox *ngIf="column.showDisabledCheckbox"
19515
- [kendoGridSelectionCheckbox]="rowIndex"
19516
- [attr.id]="selectionCheckboxId"
19517
- [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
19518
- [disabled]="true"
19519
- ></kendo-checkbox>
19981
+ <ng-container *ngIf="isEdited(col)">
19982
+ <ng-container [ngSwitch]="col.editor" *ngIf="!col.editTemplateRef">
19983
+ <kendo-numerictextbox
19984
+ *ngSwitchCase="'numeric'"
19985
+ [format]="format"
19986
+ [formControl]="$any(formGroup.get(col.field))"
19987
+ kendoGridFocusable
19988
+ ></kendo-numerictextbox>
19989
+
19990
+ <kendo-datepicker
19991
+ *ngSwitchCase="'date'"
19992
+ [format]="format"
19993
+ [formControl]="$any(formGroup.get(col.field))"
19994
+ kendoGridFocusable
19995
+ ></kendo-datepicker>
19996
+
19997
+ <kendo-checkbox
19998
+ *ngSwitchCase="'boolean'"
19999
+ [formControl]="$any(formGroup.get(col.field))"
20000
+ kendoGridFocusable
20001
+ ></kendo-checkbox>
20002
+
20003
+ <kendo-textbox
20004
+ *ngSwitchDefault
20005
+ [formControl]="$any(formGroup.get(col.field))"
20006
+ kendoGridFocusable
20007
+ ></kendo-textbox>
20008
+ </ng-container>
20009
+ <ng-template *ngIf="col.editTemplateRef"
20010
+ [ngTemplateOutlet]="col.editTemplateRef"
20011
+ [ngTemplateOutletContext]="getEditTemplateContext(col)">
20012
+ </ng-template>
20013
+ </ng-container>
20014
+ </div>
20015
+ </div>
20016
+ <div class="k-grid-stack-cell" *ngIf="detailTemplate?.showIf(item.data, $any(item).index)">
20017
+ <div class="k-grid-stack-content">
20018
+ <button kendoButton
20019
+ fillMode="flat"
20020
+ themeColor="primary"
20021
+ [icon]="detailButtonIconName(item)"
20022
+ [svgIcon]="detailButtonSvgIcon(item)"
20023
+ (click)="toggleRow($any(item).index, item.data)">
20024
+ {{ detailButtonText(item) }}
20025
+ </button>
20026
+ </div>
20027
+ </div>
20028
+ </div>
20029
+ </ng-container>
20030
+
20031
+ <ng-container *ngIf="!isStackedLayoutMode">
20032
+ <ng-container [ngSwitch]="isEdited()">
20033
+ <ng-container *ngSwitchCase="false">
20034
+ <ng-container *ngIf="!showLoading; else loading">
20035
+ <ng-template *ngIf="column.templateRef"
20036
+ [ngTemplateOutlet]="column.templateRef"
20037
+ [ngTemplateOutletContext]="getTemplateContext()">
19520
20038
  </ng-template>
20039
+ <ng-container *ngIf="isSpanColumn">
20040
+ <ng-container *ngFor="let childColumn of children">
20041
+ {{ dataItem | valueOf: childColumn.field: childColumn.format}}
20042
+ </ng-container>
20043
+ </ng-container>
20044
+ <ng-container *ngIf="isBoundColumn()">{{ dataItem | valueOf: column.field: column.format}}</ng-container>
20045
+ <ng-container *ngIf="isCheckboxColumn() && !isNew">
20046
+ <ng-container *ngIf="isRowSelectable(); else nonSelectableRow">
20047
+ <kendo-checkbox
20048
+ [kendoGridSelectionCheckbox]="rowIndex"
20049
+ [attr.id]="selectionCheckboxId"
20050
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
20051
+ [title]="selectionCheckboxLabel">
20052
+ </kendo-checkbox>
20053
+ </ng-container>
20054
+ <ng-template #nonSelectableRow>
20055
+ <kendo-checkbox *ngIf="column.showDisabledCheckbox"
20056
+ [kendoGridSelectionCheckbox]="rowIndex"
20057
+ [attr.id]="selectionCheckboxId"
20058
+ [inputAttributes]="{'aria-label': selectionCheckboxLabel}"
20059
+ [title]="selectionCheckboxLabel"
20060
+ [disabled]="true"
20061
+ ></kendo-checkbox>
20062
+ </ng-template>
20063
+ </ng-container>
20064
+ <ng-container *ngIf="isRowReorderColumn() && !isNew">
20065
+ <kendo-icon-wrapper *ngIf="!column.dragHandleTemplate?.first"
20066
+ name="reorder"
20067
+ [svgIcon]="reorderIcon">
20068
+ </kendo-icon-wrapper>
20069
+ <ng-template *ngIf="column.dragHandleTemplate?.first"
20070
+ [ngTemplateOutlet]="column.rowDragHandleTemplateRef"
20071
+ [ngTemplateOutletContext]="rowReorderTemplateContext">
20072
+ </ng-template>
20073
+ </ng-container>
19521
20074
  </ng-container>
19522
- <ng-container *ngIf="isRowReorderColumn && !isNew">
19523
- <kendo-icon-wrapper *ngIf="!column.dragHandleTemplate?.first"
19524
- name="reorder"
19525
- [svgIcon]="reorderIcon">
19526
- </kendo-icon-wrapper>
19527
- <ng-template *ngIf="column.dragHandleTemplate?.first"
19528
- [ngTemplateOutlet]="column.rowDragHandleTemplateRef"
19529
- [ngTemplateOutletContext]="rowReorderTemplateContext">
20075
+ <ng-template #loading>
20076
+ <ng-template
20077
+ *ngIf="loadingTemplate"
20078
+ [ngTemplateOutlet]="loadingTemplate"
20079
+ [ngTemplateOutletContext]="{$implicit: column}">
19530
20080
  </ng-template>
19531
- </ng-container>
20081
+ <div *ngIf="!loadingTemplate" class="k-skeleton-text k-skeleton"></div>
20082
+ </ng-template>
19532
20083
  </ng-container>
19533
- <ng-template #loading>
20084
+ <ng-container *ngSwitchCase="true">
19534
20085
  <ng-template
19535
- *ngIf="loadingTemplate"
19536
- [ngTemplateOutlet]="loadingTemplate"
19537
- [ngTemplateOutletContext]="{$implicit: column}">
20086
+ *ngIf="column.editTemplateRef"
20087
+ [ngTemplateOutlet]="column.editTemplateRef"
20088
+ [ngTemplateOutletContext]="getEditTemplateContext()">
19538
20089
  </ng-template>
19539
- <div *ngIf="!loadingTemplate" class="k-skeleton-text k-skeleton"></div>
19540
- </ng-template>
19541
- </ng-container>
19542
- <ng-container *ngSwitchCase="true">
19543
- <ng-template
19544
- *ngIf="column.editTemplateRef"
19545
- [ngTemplateOutlet]="column.editTemplateRef"
19546
- [ngTemplateOutletContext]="editTemplateContext">
19547
- </ng-template>
19548
- <ng-container [ngSwitch]="column.editor" *ngIf="!column.editTemplateRef">
19549
- <kendo-numerictextbox
19550
- *ngSwitchCase="'numeric'"
19551
- [format]="format"
19552
- [formControl]="$any(formGroup.get(column.field))"
19553
- kendoGridFocusable
19554
- ></kendo-numerictextbox>
19555
-
19556
- <kendo-datepicker
19557
- *ngSwitchCase="'date'"
19558
- [format]="format"
19559
- [formControl]="$any(formGroup.get(column.field))"
19560
- kendoGridFocusable
19561
- ></kendo-datepicker>
19562
-
19563
- <kendo-checkbox
19564
- *ngSwitchCase="'boolean'"
19565
- [formControl]="$any(formGroup.get(column.field))"
19566
- kendoGridFocusable
19567
- ></kendo-checkbox>
19568
-
19569
- <kendo-textbox
19570
- *ngSwitchDefault
19571
- [formControl]="$any(formGroup.get(column.field))"
19572
- kendoGridFocusable
19573
- ></kendo-textbox>
20090
+ <ng-container [ngSwitch]="column.editor" *ngIf="!column.editTemplateRef">
20091
+ <kendo-numerictextbox
20092
+ *ngSwitchCase="'numeric'"
20093
+ [format]="format"
20094
+ [formControl]="$any(formGroup.get(column.field))"
20095
+ kendoGridFocusable
20096
+ ></kendo-numerictextbox>
20097
+
20098
+ <kendo-datepicker
20099
+ *ngSwitchCase="'date'"
20100
+ [format]="format"
20101
+ [formControl]="$any(formGroup.get(column.field))"
20102
+ kendoGridFocusable
20103
+ ></kendo-datepicker>
20104
+
20105
+ <kendo-checkbox
20106
+ *ngSwitchCase="'boolean'"
20107
+ [formControl]="$any(formGroup.get(column.field))"
20108
+ kendoGridFocusable
20109
+ ></kendo-checkbox>
20110
+
20111
+ <kendo-textbox
20112
+ *ngSwitchDefault
20113
+ [formControl]="$any(formGroup.get(column.field))"
20114
+ kendoGridFocusable
20115
+ ></kendo-textbox>
20116
+ </ng-container>
19574
20117
  </ng-container>
19575
20118
  </ng-container>
19576
20119
  </ng-container>
19577
20120
  `,
19578
20121
  standalone: true,
19579
- imports: [NgSwitch, NgSwitchCase, NgIf, NgTemplateOutlet, NgFor, FocusableDirective, SelectionCheckboxDirective,
19580
- IconWrapperComponent, NumericTextBoxComponent, DatePickerComponent, NgSwitchDefault, FieldAccessorPipe, ReactiveFormsModule, CheckBoxComponent, TextBoxComponent]
20122
+ imports: [NgSwitch, NgSwitchCase, NgIf, NgTemplateOutlet, NgFor, FocusableDirective, SelectionCheckboxDirective, TemplateContextDirective,
20123
+ IconWrapperComponent, NumericTextBoxComponent, DatePickerComponent, NgSwitchDefault, FieldAccessorPipe, ReactiveFormsModule, CheckBoxComponent, TextBoxComponent, NgClass, NgStyle, ButtonComponent]
19581
20124
  }]
19582
- }], ctorParameters: function () { return [{ type: EditService }, { type: IdService }, { type: ContextService }, { type: undefined, decorators: [{
20125
+ }], ctorParameters: function () { return [{ type: EditService }, { type: IdService }, { type: ContextService }, { type: DetailsService }, { type: i1$2.LocalizationService }, { type: undefined, decorators: [{
19583
20126
  type: Optional
19584
20127
  }, {
19585
20128
  type: Inject,
@@ -19598,6 +20141,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19598
20141
  args: ['attr.aria-label']
19599
20142
  }], column: [{
19600
20143
  type: Input
20144
+ }], columns: [{
20145
+ type: Input
19601
20146
  }], columnIndex: [{
19602
20147
  type: Input
19603
20148
  }], isNew: [{
@@ -19608,6 +20153,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19608
20153
  type: Input
19609
20154
  }], loadingTemplate: [{
19610
20155
  type: Input
20156
+ }], detailTemplate: [{
20157
+ type: Input
20158
+ }], item: [{
20159
+ type: Input
19611
20160
  }], rowIndex: [{
19612
20161
  type: Input
19613
20162
  }], dataItem: [{
@@ -19705,8 +20254,8 @@ class TableBodyComponent {
19705
20254
  allColumnsCount += column.colspan - 1;
19706
20255
  }
19707
20256
  });
19708
- const contentColumnsCount = this.totalColumnsCount - this.lockedColumnsCount - allColumnsCount;
19709
- const headerFooterColumnsCount = this.totalColumnsCount - this.lockedColumnsCount - allColumns.length;
20257
+ const contentColumnsCount = this.totalColumnsCount - (this.isStackedMode ? 0 : this.lockedColumnsCount) - allColumnsCount;
20258
+ const headerFooterColumnsCount = this.totalColumnsCount - (this.isStackedMode ? 0 : this.lockedColumnsCount) - allColumns.length;
19710
20259
  return item && item.type === 'data' ? contentColumnsCount : headerFooterColumnsCount;
19711
20260
  }
19712
20261
  isAriaSelected(item, column) {
@@ -19777,10 +20326,10 @@ class TableBodyComponent {
19777
20326
  }
19778
20327
  logicalRowIndex(rowIndex) {
19779
20328
  let pos = this.skip + rowIndex;
19780
- if (this.hasDetailTemplate) {
20329
+ if (this.hasDetailTemplate && !this.isStackedMode) {
19781
20330
  pos *= 2;
19782
20331
  }
19783
- const absoluteRowIndex = 1 + pos;
20332
+ const absoluteRowIndex = this.isStackedMode ? pos : 1 + pos;
19784
20333
  const addRowOffset = this.editService.hasNewItem ? 1 : 0;
19785
20334
  const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
19786
20335
  const headerRowCount = this.columnInfoService.totalLevels + filterRowOffset + addRowOffset;
@@ -19843,6 +20392,9 @@ class TableBodyComponent {
19843
20392
  isEditingRow(index) {
19844
20393
  return this.editService.isEditing() && this.editService.hasEdited(index);
19845
20394
  }
20395
+ get isStackedMode() {
20396
+ return this.ctx.grid?.isStacked;
20397
+ }
19846
20398
  get hasGroupHeaderColumn() {
19847
20399
  return this.columnsContainer.hasGroupHeaderColumn;
19848
20400
  }
@@ -19886,7 +20438,8 @@ class TableBodyComponent {
19886
20438
  if (!selectionEnabled) {
19887
20439
  return;
19888
20440
  }
19889
- const isCellFocused = closest(target, matchesNodeName('td'))?.classList.contains('k-focus');
20441
+ const cellComparer = this.isStackedMode ? closest(target, matchesNodeName('td')) : closest(target, (el) => { matchesNodeName('td') && hasClasses(el, 'k-grid-stack-content'); });
20442
+ const isCellFocused = cellComparer?.classList.contains('k-focus');
19890
20443
  const isShiftOrCtrlPressed = eventArg.shiftKey || eventArg.ctrlKey || eventArg.metaKey;
19891
20444
  if (isCellFocused && !isShiftOrCtrlPressed) {
19892
20445
  eventArg.preventDefault();
@@ -19898,7 +20451,7 @@ class TableBodyComponent {
19898
20451
  if (!gridTbody) {
19899
20452
  return;
19900
20453
  }
19901
- const cell = closest(currentTarget, (el) => {
20454
+ let cell = closest(currentTarget, (el) => {
19902
20455
  if (!matchesNodeName('td')(el)) {
19903
20456
  return false;
19904
20457
  }
@@ -19916,11 +20469,30 @@ class TableBodyComponent {
19916
20469
  if (cell && !hasClasses(cell, NON_DATA_CELL_CLASSES) &&
19917
20470
  !hasClasses(row, NON_DATA_ROW_CLASSES) &&
19918
20471
  body === element && !gridElement) {
20472
+ const isCellTarget = hasClasses(currentTarget, 'k-grid-stack-cell');
20473
+ if (this.isStackedMode) {
20474
+ cell = closest(currentTarget, (el) => {
20475
+ if (!closestInScope(target, matchesClasses('k-grid-stack-row'), cell)) {
20476
+ return false;
20477
+ }
20478
+ const parentRow = isCellTarget ? currentTarget : el.parentElement;
20479
+ return (parentRow && hasClasses(parentRow, 'k-grid-stack-cell'));
20480
+ });
20481
+ if (isCellTarget) {
20482
+ cell = findElement(currentTarget, (el) => hasClasses(el, 'k-grid-stack-content'));
20483
+ }
20484
+ if (cell) {
20485
+ row = cell.parentElement.parentElement;
20486
+ }
20487
+ }
19919
20488
  this.editService.preventCellClose();
19920
- const focusable = target !== cell && isFocusableWithTabKey(target, false);
19921
- if (!focusable && !matchesNodeName('label')(target) && !hasClasses(target, IGNORE_TARGET_CLASSSES) &&
19922
- !closestInScope(target, matchesClasses(IGNORE_CONTAINER_CLASSES), cell)) {
20489
+ const focusable = (!isCellTarget && target !== cell) && isFocusableWithTabKey(target, false);
20490
+ const ignoreContainer = isCellTarget ? true : !closestInScope(target, matchesClasses(IGNORE_CONTAINER_CLASSES), cell);
20491
+ if (!focusable && !matchesNodeName('label')(target) && !hasClasses(target, IGNORE_TARGET_CLASSSES) && ignoreContainer) {
19923
20492
  const args = this.cellClickArgs(cell, row, eventArg);
20493
+ if (!args) {
20494
+ return;
20495
+ }
19924
20496
  if (selectionEnabled && !this.isRowSelectable({ index: args.rowIndex, dataItem: args.dataItem })) {
19925
20497
  return;
19926
20498
  }
@@ -19951,15 +20523,19 @@ class TableBodyComponent {
19951
20523
  }));
19952
20524
  }
19953
20525
  cellKeydownHandler(args) {
19954
- if (args.keyCode === Keys.Enter || args.keyCode === Keys.Space) {
20526
+ if (args.keyCode === Keys.Enter || args.keyCode === Keys.Space || (this.navigationService.tableCellEntered && args.keyCode === Keys.F2)) {
19955
20527
  this.clickHandler(args);
19956
20528
  }
19957
20529
  }
19958
20530
  cellClickArgs(cell, row, eventArg) {
19959
- const index = columnCellIndex(cell, row.cells);
20531
+ const cells = this.isStackedMode ? row.querySelectorAll('.k-grid-stack-cell > .k-grid-stack-content') : row.cells;
20532
+ const index = columnCellIndex(cell, cells);
20533
+ if (!isPresent(index)) {
20534
+ return;
20535
+ }
19960
20536
  const column = this.columns.toArray()[index];
19961
- const columnIndex = this.lockedColumnsCount + index;
19962
- let rowIndex = row.getAttribute('data-kendo-grid-item-index');
20537
+ const columnIndex = (this.isStackedMode ? 0 : this.lockedColumnsCount) + index;
20538
+ let rowIndex = (this.isStackedMode ? row.parentElement.parentElement : row).getAttribute('data-kendo-grid-item-index');
19963
20539
  rowIndex = rowIndex ? parseInt(rowIndex, 10) : -1;
19964
20540
  const dataItem = rowIndex === -1 ? this.editService.newDataItem : this.rowsToRender.find(item => +item.index === rowIndex && item.type === 'data')?.data;
19965
20541
  const isEditedColumn = this.editService.isEditedColumn(rowIndex, column);
@@ -20012,7 +20588,7 @@ class TableBodyComponent {
20012
20588
  <tr class="k-grid-add-row k-grid-edit-row k-master-row"
20013
20589
  kendoGridLogicalRow
20014
20590
  [logicalRowIndex]="addRowLogicalIndex()"
20015
- [logicalSlaveRow]="lockedColumnsCount > 0"
20591
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20016
20592
  [logicalCellsCount]="columns.length"
20017
20593
  [logicalSlaveCellsCount]="unlockedColumnsCount()"
20018
20594
  [totalColumns]="totalColumns">
@@ -20020,32 +20596,48 @@ class TableBodyComponent {
20020
20596
  <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups" role="presentation"></td>
20021
20597
  </ng-container>
20022
20598
  <td class="k-hierarchy-cell k-table-td"
20023
- *ngIf="detailTemplate?.templateRef"
20599
+ *ngIf="detailTemplate?.templateRef && !isStackedMode"
20024
20600
  kendoGridLogicalCell
20025
20601
  [logicalRowIndex]="addRowLogicalIndex()"
20026
20602
  [logicalColIndex]="0"
20027
20603
  aria-selected="false"
20028
20604
  >
20029
20605
  </td>
20030
- <td *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;"
20031
- class="k-table-td"
20032
- kendoGridCell
20033
- [rowIndex]="-1"
20034
- [columnIndex]="lockedColumnsCount + columnIndex"
20035
- [isNew]="true"
20036
- [column]="column"
20037
- [dataItem]="newDataItem"
20038
- [class.k-grid-content-sticky]="column.sticky"
20039
- [ngClass]="column.cssClass"
20040
- [style.left]="column.sticky ? '0' : undefined"
20041
- [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20042
- [attr.colspan]="column.colspan"
20043
- [attr.role]="column.tableCellsRole"
20044
- kendoGridLogicalCell
20045
- [logicalRowIndex]="addRowLogicalIndex()"
20046
- [logicalColIndex]="logicalColIndex(column)"
20047
- [colSpan]="column.colspan">
20048
- </td>
20606
+ <ng-container *ngIf="isStackedMode; else columnsTemplate">
20607
+ <td *ngFor="let item of rowsToRender; trackBy: trackByWrapper; let rowIndex = index;"
20608
+ class="k-table-td"
20609
+ kendoGridCell
20610
+ [rowIndex]="-1"
20611
+ [columnIndex]="0"
20612
+ [isNew]="true"
20613
+ [columns]="allColumns"
20614
+ [dataItem]="newDataItem"
20615
+ kendoGridLogicalCell
20616
+ [logicalRowIndex]="addRowLogicalIndex()"
20617
+ [logicalColIndex]="0">
20618
+ </td>
20619
+ </ng-container>
20620
+ <ng-template #columnsTemplate>
20621
+ <td *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;"
20622
+ class="k-table-td"
20623
+ kendoGridCell
20624
+ [rowIndex]="-1"
20625
+ [columnIndex]="lockedColumnsCount + columnIndex"
20626
+ [isNew]="true"
20627
+ [column]="column"
20628
+ [dataItem]="newDataItem"
20629
+ [class.k-grid-content-sticky]="column.sticky"
20630
+ [ngClass]="column.cssClass"
20631
+ [style.left]="column.sticky ? '0' : undefined"
20632
+ [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20633
+ [attr.colspan]="column.colspan"
20634
+ [attr.role]="column.tableCellsRole"
20635
+ kendoGridLogicalCell
20636
+ [logicalRowIndex]="addRowLogicalIndex()"
20637
+ [logicalColIndex]="logicalColIndex(column)"
20638
+ [colSpan]="column.colspan">
20639
+ </td>
20640
+ </ng-template>
20049
20641
  </tr>
20050
20642
  </ng-container>
20051
20643
  <tr *ngIf="!rowsToRender?.length" class="k-grid-norecords" role="row">
@@ -20075,7 +20667,7 @@ class TableBodyComponent {
20075
20667
  [totalColumnsCount]="totalColumnsCount"
20076
20668
  kendoGridLogicalRow
20077
20669
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20078
- [logicalSlaveRow]="lockedColumnsCount > 0"
20670
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20079
20671
  [totalColumns]="totalColumns"
20080
20672
  [logicalCellsCount]="columns.length"
20081
20673
  [logicalSlaveCellsCount]="groupHeaderSlaveCellsCount">
@@ -20085,7 +20677,7 @@ class TableBodyComponent {
20085
20677
  [dataRowIndex]="$any(item).index"
20086
20678
  [dataItem]="item.data"
20087
20679
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20088
- [logicalSlaveRow]="lockedColumnsCount > 0"
20680
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20089
20681
  [totalColumns]="totalColumns"
20090
20682
  [logicalCellsCount]="columns.length"
20091
20683
  [logicalSlaveCellsCount]="unlockedColumnsCount(item)"
@@ -20093,9 +20685,9 @@ class TableBodyComponent {
20093
20685
  [class.k-grid-row-sticky]="rowSticky ? rowSticky({ dataItem: item.data, index: $any(item).index }) : false"
20094
20686
  [ngClass]="rowClass({ dataItem: item.data, index: $any(item).index })"
20095
20687
  [class.k-master-row]="true"
20096
- [class.k-expanded]="item.isExpanded"
20688
+ [class.k-expanded]="item.isExpanded && !isStackedMode"
20097
20689
  [class.k-grid-edit-row]="isEditingRow($any(item).index)"
20098
- [attr.aria-selected]="lockedColumnsCount < 1 ? isSelectable({ dataItem: item.data, index: $any(item).index }) && isRowSelected(item) : undefined"
20690
+ [attr.aria-selected]="(lockedColumnsCount < 1 || isStackedMode) ? isSelectable({ dataItem: item.data, index: $any(item).index }) && isRowSelected(item) : undefined"
20099
20691
  [attr.data-kendo-grid-item-index]="$any(item).index"
20100
20692
  [class.k-selected]="isSelectable({ dataItem: item.data, index: $any(item).index }) && isRowSelected(item)"
20101
20693
  [class.k-highlighted]="item.isHighlighted">
@@ -20103,7 +20695,7 @@ class TableBodyComponent {
20103
20695
  <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups" role="presentation"></td>
20104
20696
  </ng-container>
20105
20697
  <td class="k-hierarchy-cell k-table-td"
20106
- *ngIf="detailTemplate?.templateRef"
20698
+ *ngIf="detailTemplate?.templateRef && !isStackedMode"
20107
20699
  kendoGridLogicalCell
20108
20700
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20109
20701
  [logicalColIndex]="0"
@@ -20122,18 +20714,42 @@ class TableBodyComponent {
20122
20714
  [svgIcon]="detailButtonSvgIcon(item)"></kendo-icon-wrapper>
20123
20715
  </a>
20124
20716
  </td>
20125
- <ng-container *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
20126
- <td *ngIf="!item.cells?.[lockedColumnsCount + columnIndex]?.skip"
20127
- kendoGridCell
20717
+ <ng-container *ngIf="isStackedMode; else columnsTemplate">
20718
+ <td kendoGridCell
20719
+ [rowIndex]="$any(item).index"
20720
+ [detailTemplate]="detailTemplate"
20721
+ [item]="item"
20722
+ [columnIndex]="0"
20723
+ [attr.data-kendo-grid-column-index]="0"
20724
+ [columns]="columns"
20725
+ [dataItem]="item.data"
20726
+ [isLoading]="isLoading"
20727
+ [isVirtual]="isVirtual"
20728
+ [loadingTemplate]="cellLoadingTemplate"
20729
+ kendoGridLogicalCell
20730
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
20731
+ [logicalColIndex]="0"
20732
+ [dataRowIndex]="$any(item).index"
20733
+ [dataItem]="item.data"
20734
+ [colIndex]="0"
20735
+ class="k-table-td"
20736
+ [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag">
20737
+ </td>
20738
+ </ng-container>
20739
+ <ng-template #columnsTemplate>
20740
+ <ng-container *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
20741
+ <td *ngIf="!item.cells?.[lockedColumnsCount + columnIndex]?.skip"
20742
+ kendoGridCell
20128
20743
  [rowIndex]="$any(item).index"
20129
20744
  [columnIndex]="lockedColumnsCount + columnIndex"
20130
20745
  [attr.data-kendo-grid-column-index]="lockedColumnsCount + columnIndex"
20131
20746
  [column]="column"
20747
+ [columns]="allColumns"
20132
20748
  [dataItem]="item.data"
20133
20749
  [isLoading]="isLoading"
20134
20750
  [isVirtual]="isVirtual"
20135
20751
  [loadingTemplate]="cellLoadingTemplate"
20136
- kendoGridLogicalCell
20752
+ kendoGridLogicalCell
20137
20753
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20138
20754
  [logicalColIndex]="logicalColIndex(column)"
20139
20755
  [dataRowIndex]="$any(item).index"
@@ -20146,50 +20762,75 @@ class TableBodyComponent {
20146
20762
  [attr.aria-selected]="lockedColumnsCount < 1 && isSelectable({ dataItem: item.data, index: $any(item).index }) ? isAriaSelected(item, column) : undefined"
20147
20763
  [class.k-grid-content-sticky]="column.sticky"
20148
20764
  [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag"
20149
- [ngClass]="column.cssClass"
20150
- [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
20151
- [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20152
- [attr.colspan]="column.colspan"
20153
- [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
20154
- [class.k-highlighted]="item.cells[lockedColumnsCount + columnIndex]?.isHighlighted">
20155
- </td>
20156
- </ng-container>
20765
+ [ngClass]="column.cssClass"
20766
+ [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
20767
+ [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20768
+ [attr.colspan]="column.colspan"
20769
+ [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
20770
+ [class.k-highlighted]="item.cells[lockedColumnsCount + columnIndex]?.isHighlighted">
20771
+ </td>
20772
+ </ng-container>
20773
+ </ng-template>
20157
20774
  </tr>
20158
20775
  <tr *ngIf="item.showDetailRow"
20159
20776
  class="k-detail-row"
20160
20777
  kendoGridLogicalRow
20161
20778
  [dataRowIndex]="$any(item).index"
20162
20779
  [dataItem]="item.data"
20163
- [logicalRowIndex]="logicalRowIndex(rowIndex) + 1"
20780
+ [logicalRowIndex]="isStackedMode ? logicalRowIndex(rowIndex) : logicalRowIndex(rowIndex) + 1"
20164
20781
  [logicalSlaveRow]="false"
20165
20782
  [logicalCellsCount]="1">
20166
- <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups"></td>
20167
- <td class="k-hierarchy-cell k-table-td"></td>
20168
- <td class="k-detail-cell k-table-td"
20169
- [attr.colspan]="columnsSpan"
20170
- kendoGridLogicalCell
20171
- [logicalRowIndex]="logicalRowIndex(rowIndex) + 1"
20172
- [logicalColIndex]="0"
20173
- [dataRowIndex]="$any(item).index"
20174
- [dataItem]="item.data"
20175
- [colIndex]="0"
20176
- [colSpan]="allColumnsSpan + 1"
20177
- role="gridcell" aria-selected="false">
20178
- <ng-template
20179
- [ngTemplateOutlet]="detailTemplate.templateRef"
20180
- [ngTemplateOutletContext]="{
20181
- dataItem: item.data,
20182
- rowIndex: $any(item).index,
20183
- $implicit: item.data
20184
- }">
20185
- </ng-template>
20186
- </td>
20783
+ <ng-container *ngIf="!isStackedMode">
20784
+ <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups"></td>
20785
+ <td class="k-hierarchy-cell k-table-td"></td>
20786
+ <td class="k-detail-cell k-table-td"
20787
+ [attr.colspan]="columnsSpan"
20788
+ kendoGridLogicalCell
20789
+ [logicalRowIndex]="logicalRowIndex(rowIndex) + 1"
20790
+ [logicalColIndex]="0"
20791
+ [dataRowIndex]="$any(item).index"
20792
+ [dataItem]="item.data"
20793
+ [colIndex]="0"
20794
+ [colSpan]="allColumnsSpan + 1"
20795
+ role="gridcell" aria-selected="false">
20796
+ <ng-template
20797
+ [ngTemplateOutlet]="detailTemplate.templateRef"
20798
+ [ngTemplateOutletContext]="{
20799
+ dataItem: item.data,
20800
+ rowIndex: $any(item).index,
20801
+ $implicit: item.data
20802
+ }">
20803
+ </ng-template>
20804
+ </td>
20805
+ </ng-container>
20806
+ <ng-container *ngIf="isStackedMode">
20807
+ <td class="k-detail-cell k-table-td"
20808
+ [attr.colspan]="columnsSpan"
20809
+ kendoGridLogicalCell
20810
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
20811
+ [logicalColIndex]="0"
20812
+ [dataRowIndex]="$any(item).index"
20813
+ [dataItem]="item.data"
20814
+ [colIndex]="0"
20815
+ [colSpan]="allColumnsSpan + 1"
20816
+ role="gridcell"
20817
+ aria-selected="false">
20818
+ <ng-template
20819
+ [ngTemplateOutlet]="detailTemplate.templateRef"
20820
+ [ngTemplateOutletContext]="{
20821
+ dataItem: item.data,
20822
+ rowIndex: $any(item).index,
20823
+ $implicit: item.data
20824
+ }">
20825
+ </ng-template>
20826
+ </td>
20827
+ </ng-container>
20187
20828
  </tr>
20188
20829
  <tr *ngIf="item.type === 'footer'"
20189
20830
  class="k-group-footer"
20190
20831
  kendoGridLogicalRow
20191
20832
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20192
- [logicalSlaveRow]="lockedColumnsCount > 0"
20833
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20193
20834
  [totalColumns]="totalColumns"
20194
20835
  [logicalCellsCount]="columns.length"
20195
20836
  [logicalSlaveCellsCount]="unlockedColumnsCount(item)">
@@ -20197,33 +20838,61 @@ class TableBodyComponent {
20197
20838
  <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups"></td>
20198
20839
  </ng-container>
20199
20840
  <td class="k-hierarchy-cell k-table-td"
20200
- *ngIf="detailTemplate?.templateRef"
20841
+ *ngIf="detailTemplate?.templateRef && !isStackedMode"
20201
20842
  kendoGridLogicalCell
20202
20843
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20203
20844
  [logicalColIndex]="0"
20204
20845
  aria-selected="false">
20205
20846
  </td>
20206
- <td kendoGridLogicalCell
20847
+
20848
+ <ng-container *ngIf="!isStackedMode">
20849
+ <td kendoGridLogicalCell
20850
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
20851
+ [logicalColIndex]="logicalColIndex(column)"
20852
+ [attr.data-skip]="skipGroupDecoration"
20853
+ class="k-table-td"
20854
+ *ngFor="let column of footerColumns; let columnIndex = index; trackBy: trackByColumns;">
20855
+ <ng-template
20856
+ [templateContext]="{
20857
+ templateRef: $any(column).groupFooterTemplateRef,
20858
+ group: $any(item.data),
20859
+ field: $any(column).field,
20860
+ column: column,
20861
+ aggregates: $any(item.data)?.aggregates,
20862
+ $implicit: $any(item.data)?.aggregates
20863
+ }">
20864
+ </ng-template>
20865
+ </td>
20866
+ </ng-container>
20867
+
20868
+ <ng-container *ngIf="isStackedMode">
20869
+ <td kendoGridLogicalCell
20207
20870
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20208
- [logicalColIndex]="logicalColIndex(column)"
20209
- [attr.data-skip]="skipGroupDecoration"
20210
- class="k-table-td"
20211
- *ngFor="let column of footerColumns; let columnIndex = index; trackBy: trackByColumns;">
20212
- <ng-template
20213
- [templateContext]="{
20214
- templateRef: $any(column).groupFooterTemplateRef,
20215
- group: $any(item.data),
20216
- field: $any(column).field,
20217
- column: column,
20218
- aggregates: $any(item.data)?.aggregates,
20219
- $implicit: $any(item.data)?.aggregates
20220
- }">
20221
- </ng-template>
20222
- </td>
20871
+ [logicalColIndex]="hasDetailTemplate ? 1 : 0"
20872
+ [attr.data-skip]="skipGroupDecoration"
20873
+ class="k-table-td">
20874
+ <div class="k-grid-column-template">
20875
+ <ng-container *ngFor="let col of footerColumns">
20876
+ <div class="k-column-template-item" *ngIf="$any(col).groupFooterTemplateRef">
20877
+ <ng-template
20878
+ [templateContext]="{
20879
+ templateRef: $any(col).groupFooterTemplateRef,
20880
+ group: $any(item.data),
20881
+ field: $any(col).field,
20882
+ column: col,
20883
+ aggregates: $any(item.data)?.aggregates,
20884
+ $implicit: $any(item.data)?.aggregates
20885
+ }">
20886
+ </ng-template>
20887
+ </div>
20888
+ </ng-container>
20889
+ </div>
20890
+ </td>
20891
+ </ng-container>
20223
20892
  </tr>
20224
20893
  </ng-container>
20225
20894
  <kendo-resize-sensor *ngIf="rowSticky" (resize)="resizeHandler()"></kendo-resize-sensor>
20226
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "totalColumns"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "component", type: CellComponent, selector: "[kendoGridCell]", inputs: ["column", "columnIndex", "isNew", "isLoading", "isVirtual", "loadingTemplate", "rowIndex", "dataItem"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: GroupHeaderComponent, selector: "[kendoGridGroupHeader]", inputs: ["rowIndex", "logicalRowIndex", "item", "skipGroupDecoration", "hasDetails", "totalColumnsCount", "hasGroupHeaderColumn", "groupHeaderColumns", "columns", "groups"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }] });
20895
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem", "totalColumns"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { kind: "component", type: CellComponent, selector: "[kendoGridCell]", inputs: ["column", "columns", "columnIndex", "isNew", "isLoading", "isVirtual", "loadingTemplate", "detailTemplate", "item", "rowIndex", "dataItem"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: GroupHeaderComponent, selector: "[kendoGridGroupHeader]", inputs: ["rowIndex", "logicalRowIndex", "item", "skipGroupDecoration", "hasDetails", "totalColumnsCount", "hasGroupHeaderColumn", "groupHeaderColumns", "columns", "groups"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }] });
20227
20896
  }
20228
20897
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableBodyComponent, decorators: [{
20229
20898
  type: Component,
@@ -20234,7 +20903,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20234
20903
  <tr class="k-grid-add-row k-grid-edit-row k-master-row"
20235
20904
  kendoGridLogicalRow
20236
20905
  [logicalRowIndex]="addRowLogicalIndex()"
20237
- [logicalSlaveRow]="lockedColumnsCount > 0"
20906
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20238
20907
  [logicalCellsCount]="columns.length"
20239
20908
  [logicalSlaveCellsCount]="unlockedColumnsCount()"
20240
20909
  [totalColumns]="totalColumns">
@@ -20242,32 +20911,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20242
20911
  <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups" role="presentation"></td>
20243
20912
  </ng-container>
20244
20913
  <td class="k-hierarchy-cell k-table-td"
20245
- *ngIf="detailTemplate?.templateRef"
20914
+ *ngIf="detailTemplate?.templateRef && !isStackedMode"
20246
20915
  kendoGridLogicalCell
20247
20916
  [logicalRowIndex]="addRowLogicalIndex()"
20248
20917
  [logicalColIndex]="0"
20249
20918
  aria-selected="false"
20250
20919
  >
20251
20920
  </td>
20252
- <td *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;"
20253
- class="k-table-td"
20254
- kendoGridCell
20255
- [rowIndex]="-1"
20256
- [columnIndex]="lockedColumnsCount + columnIndex"
20257
- [isNew]="true"
20258
- [column]="column"
20259
- [dataItem]="newDataItem"
20260
- [class.k-grid-content-sticky]="column.sticky"
20261
- [ngClass]="column.cssClass"
20262
- [style.left]="column.sticky ? '0' : undefined"
20263
- [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20264
- [attr.colspan]="column.colspan"
20265
- [attr.role]="column.tableCellsRole"
20266
- kendoGridLogicalCell
20267
- [logicalRowIndex]="addRowLogicalIndex()"
20268
- [logicalColIndex]="logicalColIndex(column)"
20269
- [colSpan]="column.colspan">
20270
- </td>
20921
+ <ng-container *ngIf="isStackedMode; else columnsTemplate">
20922
+ <td *ngFor="let item of rowsToRender; trackBy: trackByWrapper; let rowIndex = index;"
20923
+ class="k-table-td"
20924
+ kendoGridCell
20925
+ [rowIndex]="-1"
20926
+ [columnIndex]="0"
20927
+ [isNew]="true"
20928
+ [columns]="allColumns"
20929
+ [dataItem]="newDataItem"
20930
+ kendoGridLogicalCell
20931
+ [logicalRowIndex]="addRowLogicalIndex()"
20932
+ [logicalColIndex]="0">
20933
+ </td>
20934
+ </ng-container>
20935
+ <ng-template #columnsTemplate>
20936
+ <td *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;"
20937
+ class="k-table-td"
20938
+ kendoGridCell
20939
+ [rowIndex]="-1"
20940
+ [columnIndex]="lockedColumnsCount + columnIndex"
20941
+ [isNew]="true"
20942
+ [column]="column"
20943
+ [dataItem]="newDataItem"
20944
+ [class.k-grid-content-sticky]="column.sticky"
20945
+ [ngClass]="column.cssClass"
20946
+ [style.left]="column.sticky ? '0' : undefined"
20947
+ [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20948
+ [attr.colspan]="column.colspan"
20949
+ [attr.role]="column.tableCellsRole"
20950
+ kendoGridLogicalCell
20951
+ [logicalRowIndex]="addRowLogicalIndex()"
20952
+ [logicalColIndex]="logicalColIndex(column)"
20953
+ [colSpan]="column.colspan">
20954
+ </td>
20955
+ </ng-template>
20271
20956
  </tr>
20272
20957
  </ng-container>
20273
20958
  <tr *ngIf="!rowsToRender?.length" class="k-grid-norecords" role="row">
@@ -20297,7 +20982,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20297
20982
  [totalColumnsCount]="totalColumnsCount"
20298
20983
  kendoGridLogicalRow
20299
20984
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20300
- [logicalSlaveRow]="lockedColumnsCount > 0"
20985
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20301
20986
  [totalColumns]="totalColumns"
20302
20987
  [logicalCellsCount]="columns.length"
20303
20988
  [logicalSlaveCellsCount]="groupHeaderSlaveCellsCount">
@@ -20307,7 +20992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20307
20992
  [dataRowIndex]="$any(item).index"
20308
20993
  [dataItem]="item.data"
20309
20994
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20310
- [logicalSlaveRow]="lockedColumnsCount > 0"
20995
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20311
20996
  [totalColumns]="totalColumns"
20312
20997
  [logicalCellsCount]="columns.length"
20313
20998
  [logicalSlaveCellsCount]="unlockedColumnsCount(item)"
@@ -20315,9 +21000,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20315
21000
  [class.k-grid-row-sticky]="rowSticky ? rowSticky({ dataItem: item.data, index: $any(item).index }) : false"
20316
21001
  [ngClass]="rowClass({ dataItem: item.data, index: $any(item).index })"
20317
21002
  [class.k-master-row]="true"
20318
- [class.k-expanded]="item.isExpanded"
21003
+ [class.k-expanded]="item.isExpanded && !isStackedMode"
20319
21004
  [class.k-grid-edit-row]="isEditingRow($any(item).index)"
20320
- [attr.aria-selected]="lockedColumnsCount < 1 ? isSelectable({ dataItem: item.data, index: $any(item).index }) && isRowSelected(item) : undefined"
21005
+ [attr.aria-selected]="(lockedColumnsCount < 1 || isStackedMode) ? isSelectable({ dataItem: item.data, index: $any(item).index }) && isRowSelected(item) : undefined"
20321
21006
  [attr.data-kendo-grid-item-index]="$any(item).index"
20322
21007
  [class.k-selected]="isSelectable({ dataItem: item.data, index: $any(item).index }) && isRowSelected(item)"
20323
21008
  [class.k-highlighted]="item.isHighlighted">
@@ -20325,7 +21010,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20325
21010
  <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups" role="presentation"></td>
20326
21011
  </ng-container>
20327
21012
  <td class="k-hierarchy-cell k-table-td"
20328
- *ngIf="detailTemplate?.templateRef"
21013
+ *ngIf="detailTemplate?.templateRef && !isStackedMode"
20329
21014
  kendoGridLogicalCell
20330
21015
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20331
21016
  [logicalColIndex]="0"
@@ -20344,18 +21029,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20344
21029
  [svgIcon]="detailButtonSvgIcon(item)"></kendo-icon-wrapper>
20345
21030
  </a>
20346
21031
  </td>
20347
- <ng-container *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
20348
- <td *ngIf="!item.cells?.[lockedColumnsCount + columnIndex]?.skip"
20349
- kendoGridCell
21032
+ <ng-container *ngIf="isStackedMode; else columnsTemplate">
21033
+ <td kendoGridCell
21034
+ [rowIndex]="$any(item).index"
21035
+ [detailTemplate]="detailTemplate"
21036
+ [item]="item"
21037
+ [columnIndex]="0"
21038
+ [attr.data-kendo-grid-column-index]="0"
21039
+ [columns]="columns"
21040
+ [dataItem]="item.data"
21041
+ [isLoading]="isLoading"
21042
+ [isVirtual]="isVirtual"
21043
+ [loadingTemplate]="cellLoadingTemplate"
21044
+ kendoGridLogicalCell
21045
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
21046
+ [logicalColIndex]="0"
21047
+ [dataRowIndex]="$any(item).index"
21048
+ [dataItem]="item.data"
21049
+ [colIndex]="0"
21050
+ class="k-table-td"
21051
+ [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag">
21052
+ </td>
21053
+ </ng-container>
21054
+ <ng-template #columnsTemplate>
21055
+ <ng-container *ngFor="let column of columns; let columnIndex = index; trackBy: trackByColumns;">
21056
+ <td *ngIf="!item.cells?.[lockedColumnsCount + columnIndex]?.skip"
21057
+ kendoGridCell
20350
21058
  [rowIndex]="$any(item).index"
20351
21059
  [columnIndex]="lockedColumnsCount + columnIndex"
20352
21060
  [attr.data-kendo-grid-column-index]="lockedColumnsCount + columnIndex"
20353
21061
  [column]="column"
21062
+ [columns]="allColumns"
20354
21063
  [dataItem]="item.data"
20355
21064
  [isLoading]="isLoading"
20356
21065
  [isVirtual]="isVirtual"
20357
21066
  [loadingTemplate]="cellLoadingTemplate"
20358
- kendoGridLogicalCell
21067
+ kendoGridLogicalCell
20359
21068
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20360
21069
  [logicalColIndex]="logicalColIndex(column)"
20361
21070
  [dataRowIndex]="$any(item).index"
@@ -20368,50 +21077,75 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20368
21077
  [attr.aria-selected]="lockedColumnsCount < 1 && isSelectable({ dataItem: item.data, index: $any(item).index }) ? isAriaSelected(item, column) : undefined"
20369
21078
  [class.k-grid-content-sticky]="column.sticky"
20370
21079
  [class.k-touch-action-none]="isSelectable({ dataItem: item.data, index: $any(item).index }) && $any(selectable).drag"
20371
- [ngClass]="column.cssClass"
20372
- [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
20373
- [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
20374
- [attr.colspan]="column.colspan"
20375
- [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
20376
- [class.k-highlighted]="item.cells[lockedColumnsCount + columnIndex]?.isHighlighted">
20377
- </td>
20378
- </ng-container>
21080
+ [ngClass]="column.cssClass"
21081
+ [class.k-grid-edit-cell]="isEditingCell($any(item).index, column)"
21082
+ [ngStyle]="column.sticky ? addStickyColumnStyles(column) : column.style"
21083
+ [attr.colspan]="column.colspan"
21084
+ [class.k-selected]="isSelectable && cellSelectionService.isCellSelected(item, column)"
21085
+ [class.k-highlighted]="item.cells[lockedColumnsCount + columnIndex]?.isHighlighted">
21086
+ </td>
21087
+ </ng-container>
21088
+ </ng-template>
20379
21089
  </tr>
20380
21090
  <tr *ngIf="item.showDetailRow"
20381
21091
  class="k-detail-row"
20382
21092
  kendoGridLogicalRow
20383
21093
  [dataRowIndex]="$any(item).index"
20384
21094
  [dataItem]="item.data"
20385
- [logicalRowIndex]="logicalRowIndex(rowIndex) + 1"
21095
+ [logicalRowIndex]="isStackedMode ? logicalRowIndex(rowIndex) : logicalRowIndex(rowIndex) + 1"
20386
21096
  [logicalSlaveRow]="false"
20387
21097
  [logicalCellsCount]="1">
20388
- <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups"></td>
20389
- <td class="k-hierarchy-cell k-table-td"></td>
20390
- <td class="k-detail-cell k-table-td"
20391
- [attr.colspan]="columnsSpan"
20392
- kendoGridLogicalCell
20393
- [logicalRowIndex]="logicalRowIndex(rowIndex) + 1"
20394
- [logicalColIndex]="0"
20395
- [dataRowIndex]="$any(item).index"
20396
- [dataItem]="item.data"
20397
- [colIndex]="0"
20398
- [colSpan]="allColumnsSpan + 1"
20399
- role="gridcell" aria-selected="false">
20400
- <ng-template
20401
- [ngTemplateOutlet]="detailTemplate.templateRef"
20402
- [ngTemplateOutletContext]="{
20403
- dataItem: item.data,
20404
- rowIndex: $any(item).index,
20405
- $implicit: item.data
20406
- }">
20407
- </ng-template>
20408
- </td>
21098
+ <ng-container *ngIf="!isStackedMode">
21099
+ <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups"></td>
21100
+ <td class="k-hierarchy-cell k-table-td"></td>
21101
+ <td class="k-detail-cell k-table-td"
21102
+ [attr.colspan]="columnsSpan"
21103
+ kendoGridLogicalCell
21104
+ [logicalRowIndex]="logicalRowIndex(rowIndex) + 1"
21105
+ [logicalColIndex]="0"
21106
+ [dataRowIndex]="$any(item).index"
21107
+ [dataItem]="item.data"
21108
+ [colIndex]="0"
21109
+ [colSpan]="allColumnsSpan + 1"
21110
+ role="gridcell" aria-selected="false">
21111
+ <ng-template
21112
+ [ngTemplateOutlet]="detailTemplate.templateRef"
21113
+ [ngTemplateOutletContext]="{
21114
+ dataItem: item.data,
21115
+ rowIndex: $any(item).index,
21116
+ $implicit: item.data
21117
+ }">
21118
+ </ng-template>
21119
+ </td>
21120
+ </ng-container>
21121
+ <ng-container *ngIf="isStackedMode">
21122
+ <td class="k-detail-cell k-table-td"
21123
+ [attr.colspan]="columnsSpan"
21124
+ kendoGridLogicalCell
21125
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
21126
+ [logicalColIndex]="0"
21127
+ [dataRowIndex]="$any(item).index"
21128
+ [dataItem]="item.data"
21129
+ [colIndex]="0"
21130
+ [colSpan]="allColumnsSpan + 1"
21131
+ role="gridcell"
21132
+ aria-selected="false">
21133
+ <ng-template
21134
+ [ngTemplateOutlet]="detailTemplate.templateRef"
21135
+ [ngTemplateOutletContext]="{
21136
+ dataItem: item.data,
21137
+ rowIndex: $any(item).index,
21138
+ $implicit: item.data
21139
+ }">
21140
+ </ng-template>
21141
+ </td>
21142
+ </ng-container>
20409
21143
  </tr>
20410
21144
  <tr *ngIf="item.type === 'footer'"
20411
21145
  class="k-group-footer"
20412
21146
  kendoGridLogicalRow
20413
21147
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20414
- [logicalSlaveRow]="lockedColumnsCount > 0"
21148
+ [logicalSlaveRow]="lockedColumnsCount > 0 && !isStackedMode"
20415
21149
  [totalColumns]="totalColumns"
20416
21150
  [logicalCellsCount]="columns.length"
20417
21151
  [logicalSlaveCellsCount]="unlockedColumnsCount(item)">
@@ -20419,29 +21153,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
20419
21153
  <td class="k-group-cell k-table-td k-table-group-td" *ngFor="let g of groups"></td>
20420
21154
  </ng-container>
20421
21155
  <td class="k-hierarchy-cell k-table-td"
20422
- *ngIf="detailTemplate?.templateRef"
21156
+ *ngIf="detailTemplate?.templateRef && !isStackedMode"
20423
21157
  kendoGridLogicalCell
20424
21158
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20425
21159
  [logicalColIndex]="0"
20426
21160
  aria-selected="false">
20427
21161
  </td>
20428
- <td kendoGridLogicalCell
21162
+
21163
+ <ng-container *ngIf="!isStackedMode">
21164
+ <td kendoGridLogicalCell
21165
+ [logicalRowIndex]="logicalRowIndex(rowIndex)"
21166
+ [logicalColIndex]="logicalColIndex(column)"
21167
+ [attr.data-skip]="skipGroupDecoration"
21168
+ class="k-table-td"
21169
+ *ngFor="let column of footerColumns; let columnIndex = index; trackBy: trackByColumns;">
21170
+ <ng-template
21171
+ [templateContext]="{
21172
+ templateRef: $any(column).groupFooterTemplateRef,
21173
+ group: $any(item.data),
21174
+ field: $any(column).field,
21175
+ column: column,
21176
+ aggregates: $any(item.data)?.aggregates,
21177
+ $implicit: $any(item.data)?.aggregates
21178
+ }">
21179
+ </ng-template>
21180
+ </td>
21181
+ </ng-container>
21182
+
21183
+ <ng-container *ngIf="isStackedMode">
21184
+ <td kendoGridLogicalCell
20429
21185
  [logicalRowIndex]="logicalRowIndex(rowIndex)"
20430
- [logicalColIndex]="logicalColIndex(column)"
20431
- [attr.data-skip]="skipGroupDecoration"
20432
- class="k-table-td"
20433
- *ngFor="let column of footerColumns; let columnIndex = index; trackBy: trackByColumns;">
20434
- <ng-template
20435
- [templateContext]="{
20436
- templateRef: $any(column).groupFooterTemplateRef,
20437
- group: $any(item.data),
20438
- field: $any(column).field,
20439
- column: column,
20440
- aggregates: $any(item.data)?.aggregates,
20441
- $implicit: $any(item.data)?.aggregates
20442
- }">
20443
- </ng-template>
20444
- </td>
21186
+ [logicalColIndex]="hasDetailTemplate ? 1 : 0"
21187
+ [attr.data-skip]="skipGroupDecoration"
21188
+ class="k-table-td">
21189
+ <div class="k-grid-column-template">
21190
+ <ng-container *ngFor="let col of footerColumns">
21191
+ <div class="k-column-template-item" *ngIf="$any(col).groupFooterTemplateRef">
21192
+ <ng-template
21193
+ [templateContext]="{
21194
+ templateRef: $any(col).groupFooterTemplateRef,
21195
+ group: $any(item.data),
21196
+ field: $any(col).field,
21197
+ column: col,
21198
+ aggregates: $any(item.data)?.aggregates,
21199
+ $implicit: $any(item.data)?.aggregates
21200
+ }">
21201
+ </ng-template>
21202
+ </div>
21203
+ </ng-container>
21204
+ </div>
21205
+ </td>
21206
+ </ng-container>
20445
21207
  </tr>
20446
21208
  </ng-container>
20447
21209
  <kendo-resize-sensor *ngIf="rowSticky" (resize)="resizeHandler()"></kendo-resize-sensor>
@@ -21236,8 +21998,8 @@ const packageMetadata = {
21236
21998
  productName: 'Kendo UI for Angular',
21237
21999
  productCode: 'KENDOUIANGULAR',
21238
22000
  productCodes: ['KENDOUIANGULAR'],
21239
- publishDate: 1754484419,
21240
- version: '19.3.0-develop.23',
22001
+ publishDate: 1754497664,
22002
+ version: '19.3.0-develop.25',
21241
22003
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
21242
22004
  };
21243
22005
 
@@ -22149,11 +22911,12 @@ class NavigationMetadata {
22149
22911
  gridElement;
22150
22912
  virtualColumns;
22151
22913
  columns;
22914
+ isStacked;
22152
22915
  get maxLogicalRowIndex() {
22153
22916
  const dataRows = this.hasDetailTemplate ? this.dataRows * 2 : this.dataRows;
22154
22917
  return this.headerRows + dataRows - 1;
22155
22918
  }
22156
- constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns) {
22919
+ constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns, isStacked) {
22157
22920
  this.dataRows = dataRows;
22158
22921
  this.headerRows = headerRows;
22159
22922
  this.isVirtual = isVirtual;
@@ -22162,6 +22925,7 @@ class NavigationMetadata {
22162
22925
  this.gridElement = gridElement;
22163
22926
  this.virtualColumns = virtualColumns;
22164
22927
  this.columns = columns;
22928
+ this.isStacked = isStacked;
22165
22929
  }
22166
22930
  }
22167
22931
 
@@ -22300,10 +23064,12 @@ const dropIndicatorClasses = ['k-drop-hint', 'k-drop-hint-h'];
22300
23064
  /**
22301
23065
  * @hidden
22302
23066
  */
22303
- const defaultSelectors = {
22304
- handle: '.k-table-td.k-drag-cell',
22305
- dragTarget: '.k-master-row',
22306
- dropTarget: '.k-master-row'
23067
+ const getDefaultSelectors = (isStacked) => {
23068
+ return {
23069
+ handle: isStacked ? '.k-grid-stack-cell.k-drag-cell' : '.k-table-td.k-drag-cell',
23070
+ dragTarget: '.k-master-row',
23071
+ dropTarget: '.k-master-row'
23072
+ };
22307
23073
  };
22308
23074
  const getDocument = element => element?.ownerDocument.documentElement;
22309
23075
  const getWindow = element => element?.ownerDocument.defaultView;
@@ -22314,7 +23080,7 @@ const getWindow = element => element?.ownerDocument.defaultView;
22314
23080
  class RowReorderService {
22315
23081
  renderer;
22316
23082
  hintElement = null;
22317
- defaultSelectors = defaultSelectors;
23083
+ defaultSelectors = getDefaultSelectors;
22318
23084
  hintText = '';
22319
23085
  skip;
22320
23086
  dropIndicator;
@@ -23613,7 +24379,6 @@ class ListComponent {
23613
24379
  columnsEndIdx;
23614
24380
  viewportColumnsWidth;
23615
24381
  scrollLeft = 0;
23616
- recalculateRowspan = true;
23617
24382
  observer;
23618
24383
  get lockedLeafColumns() {
23619
24384
  return this.columns.lockedLeafColumns;
@@ -23622,7 +24387,7 @@ class ListComponent {
23622
24387
  return this.columns.nonLockedLeafColumns;
23623
24388
  }
23624
24389
  get nonLockedColumnsToRender() {
23625
- if (this.virtualColumns && !this.pdfService.exporting) {
24390
+ if (this.virtualColumns && !this.pdfService.exporting && !this.isStacked) {
23626
24391
  return this.viewportColumns;
23627
24392
  }
23628
24393
  return this.nonLockedLeafColumns;
@@ -23635,13 +24400,13 @@ class ListComponent {
23635
24400
  return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);
23636
24401
  }
23637
24402
  get nonLockedWidth() {
23638
- if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {
24403
+ if (((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) && !this.isStacked) {
23639
24404
  return sumColumnWidths(expandColumns(this.nonLockedColumnsToRender.toArray()));
23640
24405
  }
23641
24406
  return undefined;
23642
24407
  }
23643
24408
  get isLocked() {
23644
- return this.lockedLeafColumns.length > 0;
24409
+ return this.lockedLeafColumns.length > 0 && !this.isStacked;
23645
24410
  }
23646
24411
  rtl = false;
23647
24412
  columnUpdateFrame;
@@ -23818,6 +24583,12 @@ class ListComponent {
23818
24583
  this.updateColumnViewport(startIdx, endIdx);
23819
24584
  }
23820
24585
  }
24586
+ /**
24587
+ * @hidden
24588
+ */
24589
+ get isStacked() {
24590
+ return this.ctx.grid?.isStacked;
24591
+ }
23821
24592
  detailExpand({ index, expand }) {
23822
24593
  if (expand) {
23823
24594
  this.rowHeightService.expandDetail(index);
@@ -24129,7 +24900,7 @@ class ListComponent {
24129
24900
  }
24130
24901
  ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "lockedContainer", first: true, predicate: ["lockedContainer"], descendants: true }, { propertyName: "lockedTable", first: true, predicate: ["lockedTable"], descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }, { propertyName: "resizeSensors", predicate: ResizeSensorComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
24131
24902
  <div #lockedContainer class="k-grid-content-locked" role="presentation"
24132
- *ngIf="isLocked" [style.width.px]="lockedWidth" tabindex="-1"
24903
+ *ngIf="isLocked && !isStacked" [style.width.px]="lockedWidth" tabindex="-1"
24133
24904
  [kendoEventsOutsideAngular]="{
24134
24905
  keydown: lockedKeydown,
24135
24906
  scroll: lockedScroll,
@@ -24232,7 +25003,7 @@ class ListComponent {
24232
25003
  <div *ngIf="isVirtual" class="k-height-container" role="presentation">
24233
25004
  <div [style.height.px]="totalHeight"></div>
24234
25005
  </div>
24235
- <div *ngIf="virtualColumns" class="k-width-container" role="presentation">
25006
+ <div *ngIf="virtualColumns && !isStacked" class="k-width-container" role="presentation">
24236
25007
  <div [style.width.px]="totalWidth"></div>
24237
25008
  </div>
24238
25009
  </div>
@@ -24250,7 +25021,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
24250
25021
  selector: 'kendo-grid-list',
24251
25022
  template: `
24252
25023
  <div #lockedContainer class="k-grid-content-locked" role="presentation"
24253
- *ngIf="isLocked" [style.width.px]="lockedWidth" tabindex="-1"
25024
+ *ngIf="isLocked && !isStacked" [style.width.px]="lockedWidth" tabindex="-1"
24254
25025
  [kendoEventsOutsideAngular]="{
24255
25026
  keydown: lockedKeydown,
24256
25027
  scroll: lockedScroll,
@@ -24353,7 +25124,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
24353
25124
  <div *ngIf="isVirtual" class="k-height-container" role="presentation">
24354
25125
  <div [style.height.px]="totalHeight"></div>
24355
25126
  </div>
24356
- <div *ngIf="virtualColumns" class="k-width-container" role="presentation">
25127
+ <div *ngIf="virtualColumns && !isStacked" class="k-width-container" role="presentation">
24357
25128
  <div [style.width.px]="totalWidth"></div>
24358
25129
  </div>
24359
25130
  </div>
@@ -25001,11 +25772,11 @@ class GridMessages extends ComponentMessages {
25001
25772
  */
25002
25773
  columnsReset;
25003
25774
  /**
25004
- * Sets the title for the expand icon of detail rows.
25775
+ * Sets the title for the expand icon of detail rows. Applies also to the expand button text in stacked mode.
25005
25776
  */
25006
25777
  detailExpand;
25007
25778
  /**
25008
- * Sets the title for the collapse icon of detail rows.
25779
+ * Sets the title for the collapse icon of detail rows. Applies also to the collapse button text in stacked mode.
25009
25780
  */
25010
25781
  detailCollapse;
25011
25782
  /**
@@ -25942,7 +26713,7 @@ class FormFormFieldComponent {
25942
26713
  <kendo-formerror *ngFor="let err of control?.formControl?.errors | keyvalue">{{control.errors ? control.errors[err.key] : messageFor('formValidationError', err.key, control.name)}}</kendo-formerror>
25943
26714
  </ng-container>
25944
26715
  </kendo-formfield>
25945
- `, isInline: true, dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i3.FloatingLabelComponent, selector: "kendo-floatinglabel", inputs: ["labelCssStyle", "labelCssClass", "id", "text", "optional"], outputs: ["positionChange"], exportAs: ["kendoFloatingLabel"] }, { kind: "component", type: i4$1.FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors", "colSpan"] }, { kind: "component", type: i4$1.HintComponent, selector: "kendo-formhint", inputs: ["align"] }, { kind: "component", type: i4$1.ErrorComponent, selector: "kendo-formerror", inputs: ["align"] }, { kind: "component", type: i4$1.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i4$1.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: i4$1.CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "component", type: i5.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }] });
26716
+ `, isInline: true, dependencies: [{ kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.LabelComponent, selector: "kendo-label", inputs: ["text", "for", "optional", "labelCssStyle", "labelCssClass"], exportAs: ["kendoLabel"] }, { kind: "component", type: i3.FloatingLabelComponent, selector: "kendo-floatinglabel", inputs: ["labelCssStyle", "labelCssClass", "id", "text", "optional"], outputs: ["positionChange"], exportAs: ["kendoFloatingLabel"] }, { kind: "component", type: i4.FormFieldComponent, selector: "kendo-formfield", inputs: ["showHints", "orientation", "showErrors", "colSpan"] }, { kind: "component", type: i4.HintComponent, selector: "kendo-formhint", inputs: ["align"] }, { kind: "component", type: i4.ErrorComponent, selector: "kendo-formerror", inputs: ["align"] }, { kind: "component", type: i4.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i4.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "component", type: i4.CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "component", type: i5.DatePickerComponent, selector: "kendo-datepicker", inputs: ["focusableId", "cellTemplate", "clearButton", "inputAttributes", "monthCellTemplate", "yearCellTemplate", "decadeCellTemplate", "centuryCellTemplate", "weekNumberTemplate", "headerTitleTemplate", "headerTemplate", "footerTemplate", "footer", "navigationItemTemplate", "weekDaysFormat", "showOtherMonthDays", "activeView", "bottomView", "topView", "calendarType", "animateCalendarNavigation", "disabled", "readonly", "readOnlyInput", "popupSettings", "navigation", "min", "max", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "autoFill", "focusedDate", "value", "format", "twoDigitYearMax", "formatPlaceholder", "placeholder", "tabindex", "tabIndex", "disabledDates", "adaptiveTitle", "adaptiveSubtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }] });
25946
26717
  }
25947
26718
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFormFieldComponent, decorators: [{
25948
26719
  type: Component,
@@ -26099,7 +26870,7 @@ class FormComponent {
26099
26870
  </button>
26100
26871
  </div>
26101
26872
  </div>
26102
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormFormFieldComponent, selector: "kendo-form-formfield", inputs: ["control", "floatingLabel", "showError"] }, { kind: "component", type: i1$6.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
26873
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormFormFieldComponent, selector: "kendo-form-formfield", inputs: ["control", "floatingLabel", "showError"] }, { kind: "component", type: i1$6.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
26103
26874
  }
26104
26875
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, decorators: [{
26105
26876
  type: Component,
@@ -27970,9 +28741,7 @@ class AiAssistantComponent {
27970
28741
  prompt: this.lastMessage,
27971
28742
  output: responseContentStart.concat(responseContentBody).join(''),
27972
28743
  };
27973
- if (this.promptOutputs[0].id === this.loadingOutput.id) {
27974
- this.promptOutputs.splice(0, 1);
27975
- }
28744
+ this.deleteDummyLoadingOutput();
27976
28745
  this.promptOutputs.unshift(output);
27977
28746
  this.aiToolDirective.responseSuccess.emit(response);
27978
28747
  }
@@ -27982,9 +28751,15 @@ class AiAssistantComponent {
27982
28751
  prompt: this.lastMessage,
27983
28752
  output: error.message
27984
28753
  };
28754
+ this.deleteDummyLoadingOutput();
27985
28755
  this.promptOutputs.unshift(output);
27986
28756
  this.aiToolDirective.responseError.emit(error);
27987
28757
  }
28758
+ deleteDummyLoadingOutput() {
28759
+ if (this.promptOutputs[0].id === this.loadingOutput.id) {
28760
+ this.promptOutputs.splice(0, 1);
28761
+ }
28762
+ }
27988
28763
  unsubscribeCurrentRequest() {
27989
28764
  if (this.currentRequestSubscription) {
27990
28765
  this.currentRequestSubscription.unsubscribe();
@@ -28342,7 +29117,7 @@ class AIAssistantToolbarDirective extends ToolbarToolBase {
28342
29117
  get buttonElement() {
28343
29118
  return this.host.getButton();
28344
29119
  }
28345
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AIAssistantToolbarDirective, deps: [{ token: i1$7.WindowService }, { token: i53.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i53.RefreshService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
29120
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AIAssistantToolbarDirective, deps: [{ token: i1$7.WindowService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i54.RefreshService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
28346
29121
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AIAssistantToolbarDirective, isStandalone: true, selector: "[kendoGridAIAssistantTool]", inputs: { requestUrl: "requestUrl", requestOptions: "requestOptions", aiWindowSettings: "aiWindowSettings", aiPromptSettings: "aiPromptSettings" }, outputs: { promptRequest: "promptRequest", cancelRequest: "cancelRequest", responseSuccess: "responseSuccess", responseError: "responseError", close: "close", open: "open" }, usesInheritance: true, ngImport: i0 });
28347
29122
  }
28348
29123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AIAssistantToolbarDirective, decorators: [{
@@ -28351,7 +29126,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28351
29126
  selector: '[kendoGridAIAssistantTool]',
28352
29127
  standalone: true
28353
29128
  }]
28354
- }], ctorParameters: function () { return [{ type: i1$7.WindowService }, { type: i53.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i53.RefreshService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { requestUrl: [{
29129
+ }], ctorParameters: function () { return [{ type: i1$7.WindowService }, { type: i54.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i54.RefreshService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { requestUrl: [{
28355
29130
  type: Input
28356
29131
  }], requestOptions: [{
28357
29132
  type: Input
@@ -28385,7 +29160,7 @@ const handleExpandCollapseGroupsService = (service, expandEmitter, collapseEmitt
28385
29160
  .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
28386
29161
  const handleExpandCollapseDetailsService = (service, expandEmitter, collapseEmitter, map) => (service.changes.pipe(filter(({ dataItem }) => isPresent(dataItem)))
28387
29162
  .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
28388
- const isInEditedCell = (element, gridElement) => closest(element, matchesClasses('k-grid-edit-cell')) &&
29163
+ const isInEditedCell = (element, gridElement, isStacked = false) => (closest(element, matchesClasses('k-grid-edit-cell')) || (isStacked && closest(element, matchesClasses('k-grid-stack-edit-cell')))) &&
28389
29164
  closest(element, matchesNodeName('kendo-grid')) === gridElement;
28390
29165
  const NOTIFY_DELAY = 500;
28391
29166
  /**
@@ -28632,7 +29407,7 @@ class GridComponent {
28632
29407
  * @hidden
28633
29408
  */
28634
29409
  get isLocked() {
28635
- return this.lockedLeafColumns.length > 0;
29410
+ return (this.lockedLeafColumns.length > 0 && !this.isStacked);
28636
29411
  }
28637
29412
  /**
28638
29413
  * @hidden
@@ -28658,7 +29433,9 @@ class GridComponent {
28658
29433
  * @hidden
28659
29434
  */
28660
29435
  get showGroupPanel() {
28661
- return this.groupable && this.groupable.enabled !== false;
29436
+ const isGroupable = this.groupable && this.groupable.enabled !== false;
29437
+ const isGrouped = this.group?.length > 0;
29438
+ return this.isStacked ? isGroupable && isGrouped : isGroupable;
28662
29439
  }
28663
29440
  /**
28664
29441
  * @hidden
@@ -28936,6 +29713,12 @@ class GridComponent {
28936
29713
  get isGroupExpanded() {
28937
29714
  return this.groupsService.userCallback;
28938
29715
  }
29716
+ /**
29717
+ * Sets the Grid data layout display mode.
29718
+ *
29719
+ * @default 'columns'
29720
+ */
29721
+ dataLayoutMode = 'columns';
28939
29722
  /**
28940
29723
  * Fires when the Grid data is filtered through the UI and the filter descriptor changes.
28941
29724
  */
@@ -29063,8 +29846,11 @@ class GridComponent {
29063
29846
  get sizeMediumClass() {
29064
29847
  return this.size === 'medium' || !this.size;
29065
29848
  }
29849
+ get stackedClass() {
29850
+ return this.dataLayoutMode === 'stacked';
29851
+ }
29066
29852
  get lockedClasses() {
29067
- return this.lockedLeafColumns.length > 0;
29853
+ return this.lockedLeafColumns.length > 0 && !this.isStacked;
29068
29854
  }
29069
29855
  get virtualClasses() {
29070
29856
  return this.isVirtual;
@@ -29288,6 +30074,12 @@ class GridComponent {
29288
30074
  get isScrollable() {
29289
30075
  return this.scrollable !== 'none';
29290
30076
  }
30077
+ /**
30078
+ * @hidden
30079
+ */
30080
+ get isStacked() {
30081
+ return typeof this.dataLayoutMode === 'string' ? this.dataLayoutMode !== 'columns' : this.dataLayoutMode.mode !== 'columns';
30082
+ }
29291
30083
  get visibleColumns() {
29292
30084
  return this.columnsContainer.allColumns;
29293
30085
  }
@@ -29325,11 +30117,14 @@ class GridComponent {
29325
30117
  return this.nonLockedLeafColumns;
29326
30118
  }
29327
30119
  get lockedWidth() {
30120
+ if (this.isStacked) {
30121
+ return 0;
30122
+ }
29328
30123
  const groupCellsWidth = this.group.length * GROUP_CELL_WIDTH;
29329
30124
  return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);
29330
30125
  }
29331
30126
  get nonLockedWidth() {
29332
- if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {
30127
+ if (((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) && !this.isStacked) {
29333
30128
  return !this.virtualColumns ? this.columnsContainer.unlockedWidth :
29334
30129
  this.leafViewportColumns.reduce((acc, column) => acc + (column.width || 0), 0);
29335
30130
  }
@@ -29355,7 +30150,7 @@ class GridComponent {
29355
30150
  * @hidden
29356
30151
  */
29357
30152
  getDefaultSelectors(type) {
29358
- return this.rowReorderService.defaultSelectors[type];
30153
+ return this.rowReorderService.defaultSelectors(this.isStacked)[type];
29359
30154
  }
29360
30155
  /**
29361
30156
  * @hidden
@@ -29466,6 +30261,7 @@ class GridComponent {
29466
30261
  this.columnReorderSubscription = this.columnReorderService
29467
30262
  .changes.subscribe(this.reorder.bind(this));
29468
30263
  this.columnRangeChangeSubscription = this.columnInfoService.columnRangeChange.subscribe(this.onColumnRangeChange.bind(this));
30264
+ this.columnsContainer.isStacked = this.isStacked;
29469
30265
  }
29470
30266
  /**
29471
30267
  * Expands the master row at the specified data row index ([see example]({% slug hierarchy_grid %})).
@@ -29586,6 +30382,15 @@ class GridComponent {
29586
30382
  }
29587
30383
  }
29588
30384
  }
30385
+ if (isChanged$1('dataLayoutMode', changes)) {
30386
+ if (this.isStacked) {
30387
+ this.generateStackedColumns();
30388
+ }
30389
+ else {
30390
+ this.stackedColumns = { columns: [], areDefault: false };
30391
+ }
30392
+ this.columnsContainer.isStacked = this.isStacked;
30393
+ }
29589
30394
  }
29590
30395
  ngAfterContentInit() {
29591
30396
  this.shouldGenerateColumns = !this.columns.length;
@@ -29612,6 +30417,7 @@ class GridComponent {
29612
30417
  if (this.navigable.length) {
29613
30418
  this.navigationService.init(this.navigationMetadata(), this.navigable);
29614
30419
  }
30420
+ this.isStacked && this.generateStackedColumns();
29615
30421
  }
29616
30422
  ngOnDestroy() {
29617
30423
  if (this.selectionSubscription) {
@@ -29782,7 +30588,7 @@ class GridComponent {
29782
30588
  editCell(rowIndex, column, group) {
29783
30589
  const instance = this.columnInstance(column);
29784
30590
  this.editService.editCell(rowIndex, instance, group);
29785
- this.focusEditElement('.k-grid-edit-cell');
30591
+ this.focusEditElement(this.isStacked ? '.k-grid-stack-edit-cell' : '.k-grid-edit-cell');
29786
30592
  }
29787
30593
  /**
29788
30594
  * Closes the current cell in edit mode and fires the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event.
@@ -30163,7 +30969,8 @@ class GridComponent {
30163
30969
  isRowSelectable: this.isRowSelectable,
30164
30970
  selectable: this.selectable,
30165
30971
  view: this.view,
30166
- columns: cellSelectionMode ? this.columnList.toArray() : undefined
30972
+ columns: cellSelectionMode ? this.columnList.toArray() : undefined,
30973
+ isStacked: this.isStacked
30167
30974
  });
30168
30975
  if (!this.selectionDirective && !this.selectableSettings.enabled) {
30169
30976
  this.defaultSelection.reset();
@@ -30217,7 +31024,7 @@ class GridComponent {
30217
31024
  if (this.lockedLeafColumns.length && !this.nonLockedLeafColumns.length) {
30218
31025
  console.warn(GridConfigurationErrorMessages.nonLockedColumnPresent);
30219
31026
  }
30220
- if ((locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
31027
+ if (!this.isStacked && (locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
30221
31028
  console.warn(ColumnConfigurationErrorMessages.requiredWidth(locked ? 'Locked' : 'Virtual'));
30222
31029
  }
30223
31030
  if (locked && !this.isScrollable) {
@@ -30241,7 +31048,7 @@ class GridComponent {
30241
31048
  if (!this.detailRowHeight && this.isVirtual && this.detailTemplate) {
30242
31049
  console.warn(GridConfigurationErrorMessages.rowHeightVirtual);
30243
31050
  }
30244
- if (stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
31051
+ if (!this.isStacked && stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
30245
31052
  console.warn(ColumnConfigurationErrorMessages.requiredWidth('Sticky'));
30246
31053
  }
30247
31054
  if (this.rowSticky && this.scrollable === 'virtual') {
@@ -30265,6 +31072,47 @@ class GridComponent {
30265
31072
  }));
30266
31073
  }
30267
31074
  }
31075
+ /**
31076
+ * @hidden
31077
+ */
31078
+ stackedColumns = { columns: [], areDefault: false };
31079
+ generateStackedColumns() {
31080
+ if (!this.isStacked || !isPresent(this.dataLayoutMode)) {
31081
+ return;
31082
+ }
31083
+ this.stackedColumns.columns = [];
31084
+ if (typeof this.dataLayoutMode === 'object') {
31085
+ if (this.dataLayoutMode.mode === 'stacked' && this.dataLayoutMode.stackedLayoutSettings?.cols) {
31086
+ const columns = this.dataLayoutMode.stackedLayoutSettings.cols;
31087
+ if (typeof columns === 'number') {
31088
+ for (let i = 0; i < columns; i++) {
31089
+ const currCol = { width: `${this.wrapper.nativeElement.clientWidth / columns}px` };
31090
+ this.stackedColumns.columns.push(currCol);
31091
+ }
31092
+ this.stackedColumns.areDefault = true;
31093
+ }
31094
+ else if (Array.isArray(columns)) {
31095
+ this.stackedColumns.columns = columns.map((colSize) => {
31096
+ const stackedColumn = {};
31097
+ if (typeof colSize === 'number') {
31098
+ stackedColumn.width = `${colSize}px`;
31099
+ }
31100
+ else if (typeof colSize === 'object' && colSize?.width) {
31101
+ stackedColumn.width = typeof colSize.width === 'number' ? `${colSize.width}px` : colSize.width;
31102
+ }
31103
+ else if (typeof colSize === 'string') {
31104
+ stackedColumn.width = colSize;
31105
+ }
31106
+ return stackedColumn;
31107
+ });
31108
+ this.stackedColumns.areDefault = false;
31109
+ }
31110
+ }
31111
+ }
31112
+ else {
31113
+ this.stackedColumns = { columns: [{ width: this.wrapper.nativeElement.clientWidth }], areDefault: true };
31114
+ }
31115
+ }
30268
31116
  attachStateChangesEmitter() {
30269
31117
  this.stateChangeSubscription =
30270
31118
  merge(this.pageChange.pipe(map(x => ({
@@ -30347,14 +31195,14 @@ class GridComponent {
30347
31195
  !closest(args.target, matchesClasses('k-animation-container k-grid-ignore-click')) &&
30348
31196
  !(activeElement &&
30349
31197
  (closest(activeElement, matchesClasses('k-animation-container')) ||
30350
- isInEditedCell(activeElement, this.wrapper.nativeElement)))) {
31198
+ isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked)))) {
30351
31199
  this.editService.closeCell(args);
30352
31200
  }
30353
31201
  });
30354
31202
  const windowBlurSubscription = this.renderer.listen('window', 'blur', (args) => {
30355
31203
  const activeElement = document.activeElement;
30356
31204
  if (activeElement && !(matchesNodeName('input')(activeElement) && activeElement.type === 'file' &&
30357
- isInEditedCell(activeElement, this.wrapper.nativeElement))) {
31205
+ isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked))) {
30358
31206
  this.editService.closeCell(args);
30359
31207
  }
30360
31208
  this.domEvents.windowBlur.emit(args);
@@ -30473,8 +31321,8 @@ class GridComponent {
30473
31321
  const dataRows = isVirtual ? this.view.total : pageSize;
30474
31322
  const addRowOffset = this.editService.hasNewItem ? 1 : 0;
30475
31323
  const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
30476
- const headerRows = this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
30477
- return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer);
31324
+ const headerRows = this.isStacked ? 0 : this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
31325
+ return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.isStacked);
30478
31326
  }
30479
31327
  applyAutoSize() {
30480
31328
  const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
@@ -30579,7 +31427,7 @@ class GridComponent {
30579
31427
  this.dropTargetContainer?.notify();
30580
31428
  }
30581
31429
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, deps: [{ token: BrowserSupportService }, { token: SelectionService }, { token: CellSelectionService }, { token: i0.ElementRef }, { token: GroupInfoService }, { token: GroupsService }, { token: ChangeNotificationService }, { token: DetailsService }, { token: EditService }, { token: FilterService }, { token: PDFService }, { token: ResponsiveService }, { token: i0.Renderer2 }, { token: ExcelService }, { token: i0.NgZone }, { token: ScrollSyncService }, { token: DomEventsService }, { token: ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: ColumnReorderService }, { token: ColumnInfoService }, { token: NavigationService }, { token: SortService }, { token: ScrollRequestService }, { token: i1$2.LocalizationService }, { token: ContextService }, { token: SizingOptionsService }, { token: AdaptiveGridService }, { token: RowReorderService }, { token: DataMappingService }], target: i0.ɵɵFactoryTarget.Component });
30582
- 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: [
31430
+ 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: [
30583
31431
  BrowserSupportService,
30584
31432
  LocalizationService,
30585
31433
  ColumnInfoService,
@@ -30863,10 +31711,10 @@ class GridComponent {
30863
31711
  i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
30864
31712
  columnsReset="Reset"
30865
31713
 
30866
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows."
31714
+ i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
30867
31715
  detailExpand="Expand Details"
30868
31716
 
30869
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows."
31717
+ i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
30870
31718
  detailCollapse="Collapse Details"
30871
31719
 
30872
31720
  i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
@@ -31088,7 +31936,7 @@ class GridComponent {
31088
31936
  [attr.aria-rowcount]="ariaRowCount"
31089
31937
  [attr.aria-colcount]="ariaColCount">
31090
31938
  <ng-container *ngIf="isScrollable">
31091
- <div *ngIf="!hideHeader"
31939
+ <div *ngIf="!hideHeader && !isStacked"
31092
31940
  class="k-grid-header"
31093
31941
  [class.k-grid-draggable-header]="groupable || reorderable"
31094
31942
  role="presentation"
@@ -31212,7 +32060,7 @@ class GridComponent {
31212
32060
  class="k-grid-footer"
31213
32061
  [style.padding]="headerPadding">
31214
32062
  <div
31215
- *ngIf="lockedLeafColumns.length"
32063
+ *ngIf="lockedLeafColumns.length && !isStacked"
31216
32064
  class="k-grid-footer-locked"
31217
32065
  [style.width.px]="lockedWidth">
31218
32066
  <table
@@ -31223,7 +32071,7 @@ class GridComponent {
31223
32071
  [style.width.px]="lockedWidth"
31224
32072
  kendoGridTable
31225
32073
  [size]="size">
31226
- <colgroup kendoGridColGroup
32074
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
31227
32075
  [columns]="$any(lockedLeafColumns)"
31228
32076
  [groups]="group"
31229
32077
  [detailTemplate]="detailTemplate">
@@ -31241,7 +32089,7 @@ class GridComponent {
31241
32089
  </div>
31242
32090
  <div #footer
31243
32091
  class="k-grid-footer-wrap" data-scrollable
31244
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
32092
+ [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
31245
32093
  [lockedWidth]="lockedWidth + scrollbarWidth + 3">
31246
32094
  <table
31247
32095
  role="presentation"
@@ -31250,7 +32098,7 @@ class GridComponent {
31250
32098
  kendoGridTable
31251
32099
  kendoGridResizableTable
31252
32100
  [size]="size">
31253
- <colgroup kendoGridColGroup
32101
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
31254
32102
  [columns]="$any(headerLeafColumns)"
31255
32103
  [groups]="isLocked ? [] : group"
31256
32104
  [detailTemplate]="detailTemplate">
@@ -31260,7 +32108,7 @@ class GridComponent {
31260
32108
  [scrollable]="true"
31261
32109
  [groups]="isLocked ? [] : group"
31262
32110
  [columns]="$any(headerColumns)"
31263
- [lockedColumnsCount]="lockedLeafColumns.length"
32111
+ [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
31264
32112
  [detailTemplate]="detailTemplate"
31265
32113
  [totalColumns]="columnsContainer"
31266
32114
  [totalColumnsCount]="leafColumns.length">
@@ -31284,7 +32132,7 @@ class GridComponent {
31284
32132
  [detailTemplate]="detailTemplate">
31285
32133
  </colgroup>
31286
32134
  <thead kendoGridHeader
31287
- *ngIf="!hideHeader"
32135
+ *ngIf="!hideHeader && !isStacked"
31288
32136
  class="k-grid-header"
31289
32137
  [class.k-grid-draggable-header]="groupable || reorderable"
31290
32138
  role="rowgroup"
@@ -31425,7 +32273,7 @@ class GridComponent {
31425
32273
  <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
31426
32274
 
31427
32275
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
31428
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolbarComponent, 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: i52.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i52.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i52.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i52.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i52.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i52.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i52.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i52.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i52.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 });
32276
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ToolbarComponent, 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: i53.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i53.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i53.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i53.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i53.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i53.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i53.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i53.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i53.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 });
31429
32277
  }
31430
32278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
31431
32279
  type: Component,
@@ -31718,10 +32566,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
31718
32566
  i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
31719
32567
  columnsReset="Reset"
31720
32568
 
31721
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows."
32569
+ i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
31722
32570
  detailExpand="Expand Details"
31723
32571
 
31724
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows."
32572
+ i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
31725
32573
  detailCollapse="Collapse Details"
31726
32574
 
31727
32575
  i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
@@ -31943,7 +32791,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
31943
32791
  [attr.aria-rowcount]="ariaRowCount"
31944
32792
  [attr.aria-colcount]="ariaColCount">
31945
32793
  <ng-container *ngIf="isScrollable">
31946
- <div *ngIf="!hideHeader"
32794
+ <div *ngIf="!hideHeader && !isStacked"
31947
32795
  class="k-grid-header"
31948
32796
  [class.k-grid-draggable-header]="groupable || reorderable"
31949
32797
  role="presentation"
@@ -32067,7 +32915,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32067
32915
  class="k-grid-footer"
32068
32916
  [style.padding]="headerPadding">
32069
32917
  <div
32070
- *ngIf="lockedLeafColumns.length"
32918
+ *ngIf="lockedLeafColumns.length && !isStacked"
32071
32919
  class="k-grid-footer-locked"
32072
32920
  [style.width.px]="lockedWidth">
32073
32921
  <table
@@ -32078,7 +32926,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32078
32926
  [style.width.px]="lockedWidth"
32079
32927
  kendoGridTable
32080
32928
  [size]="size">
32081
- <colgroup kendoGridColGroup
32929
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
32082
32930
  [columns]="$any(lockedLeafColumns)"
32083
32931
  [groups]="group"
32084
32932
  [detailTemplate]="detailTemplate">
@@ -32096,7 +32944,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32096
32944
  </div>
32097
32945
  <div #footer
32098
32946
  class="k-grid-footer-wrap" data-scrollable
32099
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
32947
+ [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
32100
32948
  [lockedWidth]="lockedWidth + scrollbarWidth + 3">
32101
32949
  <table
32102
32950
  role="presentation"
@@ -32105,7 +32953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32105
32953
  kendoGridTable
32106
32954
  kendoGridResizableTable
32107
32955
  [size]="size">
32108
- <colgroup kendoGridColGroup
32956
+ <colgroup kendoGridColGroup *ngIf="!isStacked"
32109
32957
  [columns]="$any(headerLeafColumns)"
32110
32958
  [groups]="isLocked ? [] : group"
32111
32959
  [detailTemplate]="detailTemplate">
@@ -32115,7 +32963,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32115
32963
  [scrollable]="true"
32116
32964
  [groups]="isLocked ? [] : group"
32117
32965
  [columns]="$any(headerColumns)"
32118
- [lockedColumnsCount]="lockedLeafColumns.length"
32966
+ [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
32119
32967
  [detailTemplate]="detailTemplate"
32120
32968
  [totalColumns]="columnsContainer"
32121
32969
  [totalColumnsCount]="leafColumns.length">
@@ -32139,7 +32987,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32139
32987
  [detailTemplate]="detailTemplate">
32140
32988
  </colgroup>
32141
32989
  <thead kendoGridHeader
32142
- *ngIf="!hideHeader"
32990
+ *ngIf="!hideHeader && !isStacked"
32143
32991
  class="k-grid-header"
32144
32992
  [class.k-grid-draggable-header]="groupable || reorderable"
32145
32993
  role="rowgroup"
@@ -32363,6 +33211,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32363
33211
  type: Input
32364
33212
  }], isGroupExpanded: [{
32365
33213
  type: Input
33214
+ }], dataLayoutMode: [{
33215
+ type: Input
32366
33216
  }], filterChange: [{
32367
33217
  type: Output
32368
33218
  }], pageChange: [{
@@ -32434,6 +33284,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
32434
33284
  }], sizeMediumClass: [{
32435
33285
  type: HostBinding,
32436
33286
  args: ['class.k-grid-md']
33287
+ }], stackedClass: [{
33288
+ type: HostBinding,
33289
+ args: ['class.k-grid-stack']
32437
33290
  }], lockedClasses: [{
32438
33291
  type: HostBinding,
32439
33292
  args: ['class.k-grid-lockedcolumns']
@@ -32925,12 +33778,14 @@ class EditingDirectiveBase {
32925
33778
  subscriptions = new Subscription();
32926
33779
  defaultEditService;
32927
33780
  userEditService;
33781
+ navigationService;
32928
33782
  constructor(grid, localDataChangesService) {
32929
33783
  this.grid = grid;
32930
33784
  this.localDataChangesService = localDataChangesService;
32931
33785
  this.defaultEditService = this.createDefaultService();
32932
33786
  this.dialogService = inject(DialogService);
32933
33787
  this.localization = inject(LocalizationService);
33788
+ this.navigationService = inject(NavigationService);
32934
33789
  }
32935
33790
  /**
32936
33791
  * @hidden
@@ -32979,13 +33834,20 @@ class EditingDirectiveBase {
32979
33834
  const confirmationCallback = typeof this.removeConfirmation === 'boolean' ? this.defaultRemoveConfirmation : this.removeConfirmation;
32980
33835
  const result = confirmationCallback(dataItem);
32981
33836
  if (result instanceof Promise) {
32982
- result.then(removeItem);
33837
+ result.then((res) => {
33838
+ removeItem(res);
33839
+ this.returnFocusToGrid();
33840
+ });
32983
33841
  }
32984
33842
  else if (result instanceof Observable) {
32985
- result.pipe(take(1)).subscribe(removeItem);
33843
+ result.pipe(take(1)).subscribe((res) => {
33844
+ removeItem(res);
33845
+ this.returnFocusToGrid();
33846
+ });
32986
33847
  }
32987
33848
  else {
32988
33849
  removeItem(result);
33850
+ this.returnFocusToGrid();
32989
33851
  }
32990
33852
  }
32991
33853
  else {
@@ -32998,6 +33860,11 @@ class EditingDirectiveBase {
32998
33860
  closeEditor(rowIndex) {
32999
33861
  this.grid.closeRow(rowIndex);
33000
33862
  }
33863
+ returnFocusToGrid() {
33864
+ if (!this.navigationService.focusCell()) {
33865
+ this.navigationService.focusPrevCell() || this.navigationService.focusNextCell();
33866
+ }
33867
+ }
33001
33868
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditingDirectiveBase, deps: [{ token: GridComponent }, { token: LocalDataChangesService }], target: i0.ɵɵFactoryTarget.Directive });
33002
33869
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: EditingDirectiveBase, selector: "[kendoGridEditingDirectiveBase]", inputs: { editService: "editService", removeConfirmation: "removeConfirmation" }, ngImport: i0 });
33003
33870
  }
@@ -33245,7 +34112,8 @@ class InCellEditingDirective extends EditingDirectiveBase {
33245
34112
  }
33246
34113
  cellClickHandler(args) {
33247
34114
  if (!args.isEdited && args.type !== 'contextmenu') {
33248
- this.grid.editCell(args.rowIndex, args.columnIndex, this.createFormGroup(args));
34115
+ const colIndex = this.grid.isStacked ? args.column.leafIndex : args.columnIndex;
34116
+ this.grid.editCell(args.rowIndex, colIndex, this.createFormGroup(args));
33249
34117
  this.cdr.markForCheck();
33250
34118
  }
33251
34119
  }
@@ -34350,7 +35218,7 @@ class PDFCommandToolbarDirective extends ToolbarToolBase {
34350
35218
  e.preventDefault();
34351
35219
  this.pdfService.exportClick.emit();
34352
35220
  }
34353
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PDFCommandToolbarDirective, deps: [{ token: PDFService }, { token: i53.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PDFCommandToolbarDirective, deps: [{ token: PDFService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
34354
35222
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: PDFCommandToolbarDirective, isStandalone: true, selector: "[kendoGridPDFTool]", usesInheritance: true, ngImport: i0 });
34355
35223
  }
34356
35224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PDFCommandToolbarDirective, decorators: [{
@@ -34359,7 +35227,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34359
35227
  selector: '[kendoGridPDFTool]',
34360
35228
  standalone: true
34361
35229
  }]
34362
- }], ctorParameters: function () { return [{ type: PDFService }, { type: i53.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35230
+ }], ctorParameters: function () { return [{ type: PDFService }, { type: i54.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
34363
35231
 
34364
35232
  /**
34365
35233
  * Represents the **Export to Excel** toolbar tool of the Grid.
@@ -34395,7 +35263,7 @@ class ExcelCommandToolbarDirective extends ToolbarToolBase {
34395
35263
  e.preventDefault();
34396
35264
  this.excelService.exportClick.emit();
34397
35265
  }
34398
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelCommandToolbarDirective, deps: [{ token: ExcelService }, { token: i53.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35266
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelCommandToolbarDirective, deps: [{ token: ExcelService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
34399
35267
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ExcelCommandToolbarDirective, isStandalone: true, selector: "[kendoGridExcelTool]", usesInheritance: true, ngImport: i0 });
34400
35268
  }
34401
35269
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelCommandToolbarDirective, decorators: [{
@@ -34404,7 +35272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34404
35272
  selector: '[kendoGridExcelTool]',
34405
35273
  standalone: true
34406
35274
  }]
34407
- }], ctorParameters: function () { return [{ type: ExcelService }, { type: i53.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35275
+ }], ctorParameters: function () { return [{ type: ExcelService }, { type: i54.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
34408
35276
 
34409
35277
  /**
34410
35278
  * @hidden
@@ -34472,13 +35340,13 @@ class ToolbarEditingToolBase extends ToolbarToolBase {
34472
35340
  get isSelectionPresent() {
34473
35341
  return isPresent$1(this.lastSelectionIndex) && this.lastSelectionIndex > -1;
34474
35342
  }
34475
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolbarEditingToolBase, deps: [{ token: i53.ToolBarButtonComponent }, { token: 'command' }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: EditService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Directive });
35343
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolbarEditingToolBase, deps: [{ token: i54.ToolBarButtonComponent }, { token: 'command' }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: EditService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Directive });
34476
35344
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ToolbarEditingToolBase, usesInheritance: true, ngImport: i0 });
34477
35345
  }
34478
35346
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ToolbarEditingToolBase, decorators: [{
34479
35347
  type: Directive,
34480
35348
  args: [{}]
34481
- }], ctorParameters: function () { return [{ type: i53.ToolBarButtonComponent }, { type: undefined, decorators: [{
35349
+ }], ctorParameters: function () { return [{ type: i54.ToolBarButtonComponent }, { type: undefined, decorators: [{
34482
35350
  type: Inject,
34483
35351
  args: ['command']
34484
35352
  }] }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: EditService }, { type: SelectionService }]; } });
@@ -34518,7 +35386,7 @@ class AddCommandToolbarDirective extends ToolbarEditingToolBase {
34518
35386
  e.preventDefault();
34519
35387
  this.editService.beginAdd();
34520
35388
  }
34521
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddCommandToolbarDirective, deps: [{ token: EditService }, { token: i53.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35389
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddCommandToolbarDirective, deps: [{ token: EditService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
34522
35390
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: AddCommandToolbarDirective, isStandalone: true, selector: "[kendoGridAddTool]", usesInheritance: true, ngImport: i0 });
34523
35391
  }
34524
35392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddCommandToolbarDirective, decorators: [{
@@ -34527,7 +35395,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34527
35395
  selector: '[kendoGridAddTool]',
34528
35396
  standalone: true
34529
35397
  }]
34530
- }], ctorParameters: function () { return [{ type: EditService }, { type: i53.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35398
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i54.ToolBarButtonComponent }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
34531
35399
 
34532
35400
  /**
34533
35401
  * @hidden
@@ -35078,7 +35946,7 @@ class UndoCommandToolbarDirective {
35078
35946
  e.preventDefault();
35079
35947
  this.undoRedoService.onUndo.next();
35080
35948
  }
35081
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoCommandToolbarDirective, deps: [{ token: UndoRedoService }, { token: i53.ToolBarButtonComponent }], target: i0.ɵɵFactoryTarget.Directive });
35949
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoCommandToolbarDirective, deps: [{ token: UndoRedoService }, { token: i54.ToolBarButtonComponent }], target: i0.ɵɵFactoryTarget.Directive });
35082
35950
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: UndoCommandToolbarDirective, isStandalone: true, selector: "[kendoGridUndoTool]", ngImport: i0 });
35083
35951
  }
35084
35952
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UndoCommandToolbarDirective, decorators: [{
@@ -35087,7 +35955,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35087
35955
  selector: '[kendoGridUndoTool]',
35088
35956
  standalone: true,
35089
35957
  }]
35090
- }], ctorParameters: function () { return [{ type: UndoRedoService }, { type: i53.ToolBarButtonComponent }]; } });
35958
+ }], ctorParameters: function () { return [{ type: UndoRedoService }, { type: i54.ToolBarButtonComponent }]; } });
35091
35959
 
35092
35960
  /**
35093
35961
  * Represents the command that triggers the redo action in the Grid.
@@ -35141,7 +36009,7 @@ class RedoCommandToolbarDirective {
35141
36009
  e.preventDefault();
35142
36010
  this.undoRedoService.onRedo.next();
35143
36011
  }
35144
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RedoCommandToolbarDirective, deps: [{ token: UndoRedoService }, { token: i53.ToolBarButtonComponent }], target: i0.ɵɵFactoryTarget.Directive });
36012
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RedoCommandToolbarDirective, deps: [{ token: UndoRedoService }, { token: i54.ToolBarButtonComponent }], target: i0.ɵɵFactoryTarget.Directive });
35145
36013
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RedoCommandToolbarDirective, isStandalone: true, selector: "[kendoGridRedoTool]", ngImport: i0 });
35146
36014
  }
35147
36015
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RedoCommandToolbarDirective, decorators: [{
@@ -35150,7 +36018,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35150
36018
  selector: '[kendoGridRedoTool]',
35151
36019
  standalone: true,
35152
36020
  }]
35153
- }], ctorParameters: function () { return [{ type: UndoRedoService }, { type: i53.ToolBarButtonComponent }]; } });
36021
+ }], ctorParameters: function () { return [{ type: UndoRedoService }, { type: i54.ToolBarButtonComponent }]; } });
35154
36022
 
35155
36023
  let incrementingId$2 = 0;
35156
36024
  /**
@@ -35341,7 +36209,7 @@ class SortCommandToolbarDirective {
35341
36209
  get buttonElement() {
35342
36210
  return this.host.getButton();
35343
36211
  }
35344
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortCommandToolbarDirective, deps: [{ token: i53.ToolBarButtonComponent }, { token: i2.PopupService }, { token: ContextService }, { token: SortService }, { token: ColumnInfoService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Directive });
36212
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortCommandToolbarDirective, deps: [{ token: i54.ToolBarButtonComponent }, { token: i2.PopupService }, { token: ContextService }, { token: SortService }, { token: ColumnInfoService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Directive });
35345
36213
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SortCommandToolbarDirective, isStandalone: true, selector: "[kendoGridSortTool]", ngImport: i0 });
35346
36214
  }
35347
36215
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SortCommandToolbarDirective, decorators: [{
@@ -35350,7 +36218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35350
36218
  selector: '[kendoGridSortTool]',
35351
36219
  standalone: true
35352
36220
  }]
35353
- }], ctorParameters: function () { return [{ type: i53.ToolBarButtonComponent }, { type: i2.PopupService }, { type: ContextService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: AdaptiveGridService }]; } });
36221
+ }], ctorParameters: function () { return [{ type: i54.ToolBarButtonComponent }, { type: i2.PopupService }, { type: ContextService }, { type: SortService }, { type: ColumnInfoService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: AdaptiveGridService }]; } });
35354
36222
 
35355
36223
  /**
35356
36224
  * @hidden
@@ -35673,7 +36541,7 @@ class FilterCommandToolbarDirective {
35673
36541
  get buttonElement() {
35674
36542
  return this.host.getButton();
35675
36543
  }
35676
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterCommandToolbarDirective, deps: [{ token: i53.ToolBarButtonComponent }, { token: i2.PopupService }, { token: ContextService }, { token: FilterService }, { token: ColumnInfoService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Directive });
36544
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterCommandToolbarDirective, deps: [{ token: i54.ToolBarButtonComponent }, { token: i2.PopupService }, { token: ContextService }, { token: FilterService }, { token: ColumnInfoService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Directive });
35677
36545
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FilterCommandToolbarDirective, isStandalone: true, selector: "[kendoGridFilterTool]", ngImport: i0 });
35678
36546
  }
35679
36547
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterCommandToolbarDirective, decorators: [{
@@ -35682,7 +36550,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35682
36550
  selector: '[kendoGridFilterTool]',
35683
36551
  standalone: true
35684
36552
  }]
35685
- }], ctorParameters: function () { return [{ type: i53.ToolBarButtonComponent }, { type: i2.PopupService }, { type: ContextService }, { type: FilterService }, { type: ColumnInfoService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: AdaptiveGridService }]; } });
36553
+ }], ctorParameters: function () { return [{ type: i54.ToolBarButtonComponent }, { type: i2.PopupService }, { type: ContextService }, { type: FilterService }, { type: ColumnInfoService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: AdaptiveGridService }]; } });
35686
36554
 
35687
36555
  /**
35688
36556
  * Represents the `edit` command in the Grid. Apply this directive to any `kendo-toolbar-button`
@@ -35718,7 +36586,7 @@ class EditCommandToolbarDirective extends ToolbarEditingToolBase {
35718
36586
  }
35719
36587
  this.editService.beginEdit(this.lastSelectionIndex);
35720
36588
  }
35721
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditCommandToolbarDirective, deps: [{ token: EditService }, { token: i53.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
36589
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditCommandToolbarDirective, deps: [{ token: EditService }, { token: i54.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35722
36590
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: EditCommandToolbarDirective, isStandalone: true, selector: "[kendoGridEditTool]", usesInheritance: true, ngImport: i0 });
35723
36591
  }
35724
36592
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditCommandToolbarDirective, decorators: [{
@@ -35727,7 +36595,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35727
36595
  selector: '[kendoGridEditTool]',
35728
36596
  standalone: true
35729
36597
  }]
35730
- }], ctorParameters: function () { return [{ type: EditService }, { type: i53.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
36598
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i54.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35731
36599
 
35732
36600
  /**
35733
36601
  * Represents the `save` command in the Grid. Apply this directive to any `kendo-toolbar-button`
@@ -35768,7 +36636,7 @@ class SaveCommandToolbarDirective extends ToolbarEditingToolBase {
35768
36636
  this.editService.editedIndices.forEach(i => this.editService.save(i.index));
35769
36637
  }
35770
36638
  }
35771
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SaveCommandToolbarDirective, deps: [{ token: EditService }, { token: i53.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
36639
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SaveCommandToolbarDirective, deps: [{ token: EditService }, { token: i54.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35772
36640
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SaveCommandToolbarDirective, isStandalone: true, selector: "[kendoGridSaveTool]", usesInheritance: true, ngImport: i0 });
35773
36641
  }
35774
36642
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SaveCommandToolbarDirective, decorators: [{
@@ -35777,7 +36645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35777
36645
  selector: '[kendoGridSaveTool]',
35778
36646
  standalone: true
35779
36647
  }]
35780
- }], ctorParameters: function () { return [{ type: EditService }, { type: i53.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
36648
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i54.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35781
36649
 
35782
36650
  /**
35783
36651
  * Represents the `remove` command in the Grid. Apply this directive to any `kendo-toolbar-button`
@@ -35814,7 +36682,7 @@ class RemoveCommandToolbarDirective extends ToolbarEditingToolBase {
35814
36682
  this.editService.remove(this.lastSelectionIndex);
35815
36683
  }
35816
36684
  }
35817
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RemoveCommandToolbarDirective, deps: [{ token: EditService }, { token: i53.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
36685
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RemoveCommandToolbarDirective, deps: [{ token: EditService }, { token: i54.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35818
36686
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: RemoveCommandToolbarDirective, isStandalone: true, selector: "[kendoGridRemoveTool]", usesInheritance: true, ngImport: i0 });
35819
36687
  }
35820
36688
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RemoveCommandToolbarDirective, decorators: [{
@@ -35823,7 +36691,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35823
36691
  selector: '[kendoGridRemoveTool]',
35824
36692
  standalone: true
35825
36693
  }]
35826
- }], ctorParameters: function () { return [{ type: EditService }, { type: i53.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
36694
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i54.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35827
36695
 
35828
36696
  /**
35829
36697
  * Represents the `cancel` command in the Grid.
@@ -35863,7 +36731,7 @@ class CancelCommandToolbarDirective extends ToolbarEditingToolBase {
35863
36731
  this.editService.editedIndices.forEach(i => this.editService.endEdit(i.index));
35864
36732
  }
35865
36733
  }
35866
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CancelCommandToolbarDirective, deps: [{ token: EditService }, { token: i53.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
36734
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CancelCommandToolbarDirective, deps: [{ token: EditService }, { token: i54.ToolBarButtonComponent }, { token: SelectionService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
35867
36735
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: CancelCommandToolbarDirective, isStandalone: true, selector: "[kendoGridCancelTool]", usesInheritance: true, ngImport: i0 });
35868
36736
  }
35869
36737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CancelCommandToolbarDirective, decorators: [{
@@ -35872,7 +36740,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35872
36740
  selector: '[kendoGridCancelTool]',
35873
36741
  standalone: true
35874
36742
  }]
35875
- }], ctorParameters: function () { return [{ type: EditService }, { type: i53.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
36743
+ }], ctorParameters: function () { return [{ type: EditService }, { type: i54.ToolBarButtonComponent }, { type: SelectionService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }]; } });
35876
36744
 
35877
36745
  let incrementingId = 0;
35878
36746
  /**
@@ -36053,7 +36921,7 @@ class GroupCommandToolbarDirective {
36053
36921
  isGroupingApplied(group) {
36054
36922
  return isPresent$1(group) && group.length > 0;
36055
36923
  }
36056
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupCommandToolbarDirective, deps: [{ token: i53.ToolBarButtonComponent }, { token: i2.PopupService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Directive });
36924
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupCommandToolbarDirective, deps: [{ token: i54.ToolBarButtonComponent }, { token: i2.PopupService }, { token: ContextService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Directive });
36057
36925
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GroupCommandToolbarDirective, isStandalone: true, selector: "[kendoGridGroupTool]", ngImport: i0 });
36058
36926
  }
36059
36927
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GroupCommandToolbarDirective, decorators: [{
@@ -36062,7 +36930,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
36062
36930
  selector: '[kendoGridGroupTool]',
36063
36931
  standalone: true
36064
36932
  }]
36065
- }], ctorParameters: function () { return [{ type: i53.ToolBarButtonComponent }, { type: i2.PopupService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: AdaptiveGridService }]; } });
36933
+ }], ctorParameters: function () { return [{ type: i54.ToolBarButtonComponent }, { type: i2.PopupService }, { type: ContextService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: AdaptiveGridService }]; } });
36066
36934
 
36067
36935
  /**
36068
36936
  * Stores the row and cell highlight state of the Grid.
@@ -36187,6 +37055,85 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
36187
37055
  type: Input
36188
37056
  }] } });
36189
37057
 
37058
+ /**
37059
+ * Represents the toolbar tool for showing a select-all `kendoGridSelectAllCheckbox` checkbox.
37060
+ * Use this component inside a ToolbarComponent in the Grid.
37061
+ *
37062
+ * @example
37063
+ * ```html
37064
+ * <kendo-grid>
37065
+ * <kendo-toolbar>
37066
+ * <kendo-grid-select-all-tool text="Select All"></kendo-grid-select-all-tool>
37067
+ * </kendo-toolbar>
37068
+ * </kendo-grid>
37069
+ * ```
37070
+ */
37071
+ class SelectAllToolbarToolComponent extends ToolBarToolComponent {
37072
+ idService;
37073
+ ctx;
37074
+ constructor(idService, ctx) {
37075
+ super();
37076
+ this.idService = idService;
37077
+ this.ctx = ctx;
37078
+ }
37079
+ /**
37080
+ * @hidden
37081
+ */
37082
+ selectAllCheckboxId() {
37083
+ return this.idService.selectAllCheckboxId();
37084
+ }
37085
+ /**
37086
+ * @hidden
37087
+ */
37088
+ get selectAllCheckboxLabel() {
37089
+ return this.ctx.localization.get('selectAllCheckboxLabel');
37090
+ }
37091
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectAllToolbarToolComponent, deps: [{ token: IdService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
37092
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SelectAllToolbarToolComponent, isStandalone: true, selector: "kendo-grid-select-all-tool", providers: [
37093
+ {
37094
+ provide: ToolBarToolComponent,
37095
+ useExisting: forwardRef(() => SelectAllToolbarToolComponent)
37096
+ }
37097
+ ], usesInheritance: true, ngImport: i0, template: `
37098
+ <ng-template #toolbarTemplate #sectionTemplate #popupTemplate>
37099
+ <kendo-checkbox #checkbox
37100
+ [attr.id]="selectAllCheckboxId()"
37101
+ size="large"
37102
+ [inputAttributes]="{'aria-label': selectAllCheckboxLabel}"
37103
+ kendoGridSelectAllCheckbox
37104
+ kendoGridFocusable
37105
+ ></kendo-checkbox>
37106
+ <label class="k-checkbox-label" [for]="checkbox.focusableId">{{selectAllCheckboxLabel}}</label>
37107
+ </ng-template>
37108
+ `, isInline: true, dependencies: [{ kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { kind: "directive", type: SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { kind: "directive", type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { kind: "directive", type: LabelDirective, selector: "label[for]", inputs: ["for", "labelClass"] }] });
37109
+ }
37110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectAllToolbarToolComponent, decorators: [{
37111
+ type: Component,
37112
+ args: [{
37113
+ providers: [
37114
+ {
37115
+ provide: ToolBarToolComponent,
37116
+ useExisting: forwardRef(() => SelectAllToolbarToolComponent)
37117
+ }
37118
+ ],
37119
+ selector: 'kendo-grid-select-all-tool',
37120
+ template: `
37121
+ <ng-template #toolbarTemplate #sectionTemplate #popupTemplate>
37122
+ <kendo-checkbox #checkbox
37123
+ [attr.id]="selectAllCheckboxId()"
37124
+ size="large"
37125
+ [inputAttributes]="{'aria-label': selectAllCheckboxLabel}"
37126
+ kendoGridSelectAllCheckbox
37127
+ kendoGridFocusable
37128
+ ></kendo-checkbox>
37129
+ <label class="k-checkbox-label" [for]="checkbox.focusableId">{{selectAllCheckboxLabel}}</label>
37130
+ </ng-template>
37131
+ `,
37132
+ standalone: true,
37133
+ imports: [CheckBoxComponent, SelectAllCheckboxDirective, FocusableDirective, LabelDirective]
37134
+ }]
37135
+ }], ctorParameters: function () { return [{ type: IdService }, { type: ContextService }]; } });
37136
+
36190
37137
  // DRAGGABLE COLUMN
36191
37138
  /**
36192
37139
  * @hidden
@@ -36417,7 +37364,8 @@ const KENDO_GRID_BODY_EXPORTS = [
36417
37364
  SortCommandToolbarDirective,
36418
37365
  FilterCommandToolbarDirective,
36419
37366
  AIAssistantToolbarDirective,
36420
- GroupCommandToolbarDirective
37367
+ GroupCommandToolbarDirective,
37368
+ SelectAllToolbarToolComponent
36421
37369
  ];
36422
37370
  /**
36423
37371
  * @hidden
@@ -36559,9 +37507,9 @@ const KENDO_GRID = [
36559
37507
  */
36560
37508
  class GridModule {
36561
37509
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
36562
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridModule, imports: [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i52.CustomMessagesComponent, i52.PagerFocusableDirective, i52.PagerInfoComponent, i52.PagerInputComponent, i52.PagerNextButtonsComponent, i52.PagerNumericButtonsComponent, i52.PagerPageSizesComponent, i52.PagerPrevButtonsComponent, i52.PagerTemplateDirective, i52.PagerComponent, i52.PagerSpacerComponent, i53.ToolBarComponent, i53.ToolbarCustomMessagesComponent, i53.ToolBarButtonComponent, i53.ToolBarButtonGroupComponent, i53.ToolBarDropDownButtonComponent, i53.ToolBarSeparatorComponent, i53.ToolBarSpacerComponent, i53.ToolBarSplitButtonComponent, i53.ToolBarToolComponent, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnMenuChooserItemCheckedDirective, ColumnListComponent, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, HighlightDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GroupBindingDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, FormComponent, DialogFormComponent, FormFormFieldComponent, UndoRedoDirective, i53.ToolBarComponent, i53.ToolbarCustomMessagesComponent, i53.ToolBarButtonComponent, i53.ToolBarButtonGroupComponent, i53.ToolBarDropDownButtonComponent, i53.ToolBarSeparatorComponent, i53.ToolBarSpacerComponent, i53.ToolBarSplitButtonComponent, i53.ToolBarToolComponent, TableDirective,
37510
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridModule, imports: [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnMenuChooserItemCheckedDirective, ColumnListComponent, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, HighlightDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GroupBindingDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, FormComponent, DialogFormComponent, FormFormFieldComponent, UndoRedoDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, TableDirective,
36563
37511
  UndoCommandToolbarDirective,
36564
- RedoCommandToolbarDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, HighlightDirective, CustomMessagesComponent, GroupBindingDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridToolbarFocusableDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridClipboardDirective, UndoRedoDirective, UndoCommandToolbarDirective, RedoCommandToolbarDirective, i53.ToolBarComponent, i53.ToolbarCustomMessagesComponent, i53.ToolBarButtonComponent, i53.ToolBarButtonGroupComponent, i53.ToolBarDropDownButtonComponent, i53.ToolBarSeparatorComponent, i53.ToolBarSpacerComponent, i53.ToolBarSplitButtonComponent, i53.ToolBarToolComponent, i52.CustomMessagesComponent, i52.PagerFocusableDirective, i52.PagerInfoComponent, i52.PagerInputComponent, i52.PagerNextButtonsComponent, i52.PagerNumericButtonsComponent, i52.PagerPageSizesComponent, i52.PagerPrevButtonsComponent, i52.PagerTemplateDirective, i52.PagerComponent, i52.PagerSpacerComponent] });
37512
+ RedoCommandToolbarDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, HighlightDirective, CustomMessagesComponent, GroupBindingDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridToolbarFocusableDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridClipboardDirective, UndoRedoDirective, UndoCommandToolbarDirective, RedoCommandToolbarDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent] });
36565
37513
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, providers: [
36566
37514
  PopupService,
36567
37515
  ResizeBatchService,
@@ -36576,7 +37524,7 @@ class GridModule {
36576
37524
  MonthViewService,
36577
37525
  YearViewService,
36578
37526
  NavigationService$1
36579
- ], imports: [GroupHeaderComponent, GroupPanelComponent, TableBodyComponent, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, HeaderComponent, i52.CustomMessagesComponent, i52.PagerInfoComponent, i52.PagerInputComponent, i52.PagerNextButtonsComponent, i52.PagerNumericButtonsComponent, i52.PagerPageSizesComponent, i52.PagerPrevButtonsComponent, i52.PagerComponent, i52.PagerSpacerComponent, i53.ToolBarComponent, i53.ToolbarCustomMessagesComponent, i53.ToolBarButtonComponent, i53.ToolBarButtonGroupComponent, i53.ToolBarDropDownButtonComponent, i53.ToolBarSeparatorComponent, i53.ToolBarSpacerComponent, i53.ToolBarSplitButtonComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellWrapperComponent, DateFilterCellComponent, FilterCellOperatorsComponent, FilterCellOperatorsComponent, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, ColumnListComponent, ColumnChooserComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, FormComponent, DialogFormComponent, FormFormFieldComponent, i53.ToolBarComponent, i53.ToolbarCustomMessagesComponent, i53.ToolBarButtonComponent, i53.ToolBarButtonGroupComponent, i53.ToolBarDropDownButtonComponent, i53.ToolBarSeparatorComponent, i53.ToolBarSpacerComponent, i53.ToolBarSplitButtonComponent] });
37527
+ ], imports: [GroupHeaderComponent, GroupPanelComponent, TableBodyComponent, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, SelectAllToolbarToolComponent, HeaderComponent, i53.CustomMessagesComponent, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerComponent, i53.PagerSpacerComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellWrapperComponent, DateFilterCellComponent, FilterCellOperatorsComponent, FilterCellOperatorsComponent, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, ColumnListComponent, ColumnChooserComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, FormComponent, DialogFormComponent, FormFormFieldComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent] });
36580
37528
  }
36581
37529
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, decorators: [{
36582
37530
  type: NgModule,
@@ -36688,5 +37636,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
36688
37636
  * Generated bundle index. Do not edit.
36689
37637
  */
36690
37638
 
36691
- export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupBindingDirective, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, convertDateStringsInFilter, count, defaultTrackBy, hasFilterMenu, hasFilterRow, isDateField, isFilterable, slice };
37639
+ export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupBindingDirective, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, convertDateStringsInFilter, count, defaultTrackBy, hasFilterMenu, hasFilterRow, isDateField, isFilterable, slice };
36692
37640