@progress/kendo-angular-grid 18.4.1-develop.2 → 18.5.0-develop.10

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 (61) hide show
  1. package/column-menu/column-chooser.component.d.ts +0 -4
  2. package/column-menu/column-menu-item.component.d.ts +3 -4
  3. package/columns/column-base.d.ts +3 -2
  4. package/columns/column.component.d.ts +5 -5
  5. package/common/dom-events.service.d.ts +1 -0
  6. package/common/field-datatype.d.ts +9 -0
  7. package/directives.d.ts +5 -3
  8. package/editing/form/dialog-form.component.d.ts +27 -0
  9. package/editing/form/form-formfield.component.d.ts +24 -0
  10. package/editing/form/form.component.d.ts +28 -0
  11. package/editing/form/index.d.ts +8 -0
  12. package/editing/form/models.d.ts +196 -0
  13. package/editing-directives/editing-directive-base.d.ts +10 -3
  14. package/editing-directives/external-editing.directive.d.ts +46 -0
  15. package/esm2022/column-menu/column-chooser.component.mjs +2 -13
  16. package/esm2022/column-menu/column-list.component.mjs +53 -33
  17. package/esm2022/column-menu/column-menu-item.component.mjs +3 -4
  18. package/esm2022/columns/column-base.mjs +4 -0
  19. package/esm2022/columns/column.component.mjs +0 -4
  20. package/esm2022/common/dom-events.service.mjs +1 -0
  21. package/esm2022/common/field-datatype.mjs +5 -0
  22. package/esm2022/directives.mjs +8 -1
  23. package/esm2022/editing/edit.service.mjs +1 -1
  24. package/esm2022/editing/form/dialog-form.component.mjs +102 -0
  25. package/esm2022/editing/form/form-formfield.component.mjs +161 -0
  26. package/esm2022/editing/form/form.component.mjs +153 -0
  27. package/esm2022/editing/form/index.mjs +8 -0
  28. package/esm2022/editing/form/models.mjs +5 -0
  29. package/esm2022/editing-directives/editing-directive-base.mjs +33 -5
  30. package/esm2022/editing-directives/external-editing.directive.mjs +130 -0
  31. package/esm2022/filtering/cell/filter-cell-host.directive.mjs +5 -5
  32. package/esm2022/filtering/filter-host.directive.mjs +5 -7
  33. package/esm2022/filtering/menu/filter-menu-host.directive.mjs +5 -5
  34. package/esm2022/grid.component.mjs +78 -14
  35. package/esm2022/grid.module.mjs +15 -11
  36. package/esm2022/index.mjs +1 -0
  37. package/esm2022/localization/messages.mjs +62 -1
  38. package/esm2022/navigation/navigation.service.mjs +46 -16
  39. package/esm2022/package-metadata.mjs +2 -2
  40. package/esm2022/rendering/footer/footer.component.mjs +12 -5
  41. package/esm2022/rendering/table-body.component.mjs +1 -1
  42. package/esm2022/selection/cell-selection.service.mjs +12 -4
  43. package/esm2022/selection/marquee.directive.mjs +7 -2
  44. package/esm2022/selection/selection.service.mjs +10 -6
  45. package/esm2022/utils.mjs +10 -1
  46. package/fesm2022/progress-kendo-angular-grid.mjs +858 -141
  47. package/filtering/cell/filter-cell-host.directive.d.ts +2 -2
  48. package/filtering/filter-host.directive.d.ts +2 -3
  49. package/filtering/menu/filter-menu-host.directive.d.ts +2 -2
  50. package/grid.component.d.ts +0 -6
  51. package/grid.module.d.ts +15 -11
  52. package/index.d.ts +3 -0
  53. package/localization/messages.d.ts +46 -1
  54. package/navigation/navigation.service.d.ts +2 -0
  55. package/package.json +19 -19
  56. package/rendering/footer/footer.component.d.ts +3 -1
  57. package/schematics/ngAdd/index.js +4 -4
  58. package/selection/cell-selection.service.d.ts +1 -1
  59. package/selection/selection.service.d.ts +2 -2
  60. package/selection/types.d.ts +5 -0
  61. package/utils.d.ts +5 -0
@@ -3,44 +3,49 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
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, ViewEncapsulation, NgModule } from '@angular/core';
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, ViewEncapsulation, inject, 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
9
  import { isDocumentAvailable, Keys, isPresent as isPresent$1, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, isChanged as isChanged$1, KendoInput, guid, hasObservers, ResizeSensorComponent, closest as closest$1, isFocusable as isFocusable$1, shouldShowValidationUI, WatermarkOverlayComponent, 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';
13
- import { plusIcon, cancelIcon, lockIcon, unlockIcon, caretAltDownIcon, caretAltRightIcon, caretAltLeftIcon, arrowLeftIcon, arrowRightIcon, sortDescSmallIcon, sortAscSmallIcon, filterClearIcon, filterIcon, columnsIcon, chevronUpIcon, chevronDownIcon, displayInlineFlexIcon, maxWidthIcon, stickIcon, unstickIcon, setColumnPositionIcon, slidersIcon, moreVerticalIcon, reorderIcon, minusIcon, insertMiddleIcon, filePdfIcon, fileExcelIcon } from '@progress/kendo-svg-icons';
13
+ import { plusIcon, cancelIcon, lockIcon, unlockIcon, caretAltDownIcon, caretAltRightIcon, caretAltLeftIcon, arrowLeftIcon, arrowRightIcon, sortDescSmallIcon, sortAscSmallIcon, filterClearIcon, filterIcon, columnsIcon, chevronUpIcon, chevronDownIcon, displayInlineFlexIcon, maxWidthIcon, stickIcon, unstickIcon, setColumnPositionIcon, slidersIcon, moreVerticalIcon, reorderIcon, minusIcon, insertMiddleIcon, checkIcon, xIcon, saveIcon, filePdfIcon, fileExcelIcon } from '@progress/kendo-svg-icons';
14
14
  import { switchMap, take, map, filter, takeUntil, switchMapTo, delay, tap, throttleTime, debounceTime, distinctUntilChanged, skip, auditTime, bufferCount } 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
17
  import * as i44 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
- import { NgFor, NgIf, NgTemplateOutlet, NgSwitch, NgSwitchCase, NgClass, NgStyle, NgSwitchDefault } from '@angular/common';
20
+ import { NgFor, NgIf, NgTemplateOutlet, NgSwitch, NgSwitchCase, NgClass, NgStyle, NgSwitchDefault, KeyValuePipe } from '@angular/common';
21
21
  import { getter } from '@progress/kendo-common';
22
22
  import * as i1$4 from '@progress/kendo-angular-intl';
23
23
  import * as i5 from '@progress/kendo-angular-popup';
24
24
  import { PopupService } from '@progress/kendo-angular-popup';
25
- import { ChipListComponent, ChipComponent, ButtonComponent, Button } from '@progress/kendo-angular-buttons';
25
+ import * as i2 from '@progress/kendo-angular-buttons';
26
+ import { ChipListComponent, ChipComponent, ButtonComponent, Button, KENDO_BUTTON } from '@progress/kendo-angular-buttons';
26
27
  import * as i1$5 from '@progress/kendo-angular-dropdowns';
27
28
  import { DropDownListComponent, AutoCompleteComponent } from '@progress/kendo-angular-dropdowns';
28
29
  import * as i4 from '@angular/forms';
29
30
  import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';
30
- import * as i3 from '@progress/kendo-angular-inputs';
31
- import { TextBoxComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, RadioButtonComponent, CheckBoxComponent } from '@progress/kendo-angular-inputs';
32
- import { DatePickerComponent, DatePickerCustomMessagesComponent, CalendarDOMService, CenturyViewService, DecadeViewService, MonthViewService, YearViewService, NavigationService as NavigationService$1 } from '@progress/kendo-angular-dateinputs';
31
+ import * as i4$1 from '@progress/kendo-angular-inputs';
32
+ import { TextBoxComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, RadioButtonComponent, CheckBoxComponent, KENDO_FORMFIELD, KENDO_TEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_CHECKBOX } from '@progress/kendo-angular-inputs';
33
+ import * as i5$1 from '@progress/kendo-angular-dateinputs';
34
+ import { DatePickerComponent, DatePickerCustomMessagesComponent, KENDO_DATEPICKER, CalendarDOMService, CenturyViewService, DecadeViewService, MonthViewService, YearViewService, NavigationService as NavigationService$1 } from '@progress/kendo-angular-dateinputs';
33
35
  import { trigger, state, style, transition, animate } from '@angular/animations';
34
36
  import { TabStripComponent, TabStripTabComponent, TabTitleDirective, TabContentDirective } from '@progress/kendo-angular-layout';
35
37
  import { saveAs } from '@progress/kendo-file-saver';
36
- import * as i5$1 from '@progress/kendo-angular-excel-export';
38
+ import * as i5$2 from '@progress/kendo-angular-excel-export';
37
39
  import { workbookOptions, toDataURL, ColumnBase as ColumnBase$1, ColumnComponent as ColumnComponent$1, ColumnGroupComponent as ColumnGroupComponent$1, FooterTemplateDirective as FooterTemplateDirective$1, GroupFooterTemplateDirective as GroupFooterTemplateDirective$1, GroupHeaderColumnTemplateDirective as GroupHeaderColumnTemplateDirective$1, GroupHeaderTemplateDirective as GroupHeaderTemplateDirective$1 } from '@progress/kendo-angular-excel-export';
38
40
  import { PDFExportMarginComponent, PDFExportTemplateDirective, PDFExportComponent } from '@progress/kendo-angular-pdf-export';
39
41
  import { validatePackage } from '@progress/kendo-licensing';
40
42
  import { DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
43
+ import * as i1$6 from '@progress/kendo-angular-dialog';
44
+ import { DialogContainerDirective, DialogService, DialogContentBase, DialogActionsComponent, DialogContainerService, WindowService, WindowContainerService } from '@progress/kendo-angular-dialog';
45
+ import * as i3 from '@progress/kendo-angular-label';
46
+ import { KENDO_LABELS } from '@progress/kendo-angular-label';
41
47
  import * as i45 from '@progress/kendo-angular-toolbar';
42
48
  import { KENDO_TOOLBAR } from '@progress/kendo-angular-toolbar';
43
- import { DialogContainerService, DialogService, WindowService, WindowContainerService } from '@progress/kendo-angular-dialog';
44
49
 
45
50
  /* eslint-disable no-bitwise */
46
51
  /**
@@ -444,7 +449,7 @@ const nodesToArray = (nodes) => [].slice.call(nodes);
444
449
  /**
445
450
  * @hidden
446
451
  */
447
- const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
452
+ const replaceMessagePlaceholder = (message, name, value) => (message ?? '').replace(new RegExp(`{\\s*${name}\\s*}`, 'g'), value);
448
453
  /**
449
454
  * @hidden
450
455
  */
@@ -506,6 +511,15 @@ const findRowSpan = (data, index, field) => {
506
511
  }
507
512
  return rowspan;
508
513
  };
514
+ /**
515
+ * @hidden
516
+ * Determines whether selection of multiple ranges is enabled in the selectable settings.
517
+ */
518
+ const isMultipleRangesEnabled = (selectableSettings) => {
519
+ return selectableSettings &&
520
+ typeof selectableSettings === 'object' &&
521
+ selectableSettings.selectable.multipleRanges;
522
+ };
509
523
 
510
524
  /**
511
525
  * @hidden
@@ -1416,6 +1430,7 @@ class DomEventsService {
1416
1430
  cellMouseup = new EventEmitter();
1417
1431
  click = new EventEmitter();
1418
1432
  keydown = new EventEmitter();
1433
+ shiftKeyup = new EventEmitter();
1419
1434
  focus = new EventEmitter();
1420
1435
  focusIn = new EventEmitter();
1421
1436
  focusOut = new EventEmitter();
@@ -1629,7 +1644,7 @@ class EditService {
1629
1644
  this.changes.emit({ action: 'edit', rowIndex });
1630
1645
  }
1631
1646
  beginAdd() {
1632
- this.changes.emit({ action: 'add' });
1647
+ this.changes.emit({ action: 'add', isNew: true });
1633
1648
  }
1634
1649
  endEdit(rowIndex) {
1635
1650
  const { group: formGroup } = this.context(rowIndex);
@@ -2467,6 +2482,10 @@ class ColumnBase {
2467
2482
  throw new Error(ColumnConfigurationErrorMessages.columnNested);
2468
2483
  }
2469
2484
  }
2485
+ ngAfterViewInit() {
2486
+ this.initialMaxResizableWidth = this.maxResizableWidth;
2487
+ this.initialMinResizableWidth = this.minResizableWidth;
2488
+ }
2470
2489
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnBase, deps: [{ token: ColumnBase }, { token: IdService }], target: i0.ɵɵFactoryTarget.Component });
2471
2490
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnBase, selector: "kendo-grid-column-base", inputs: { resizable: "resizable", reorderable: "reorderable", minResizableWidth: "minResizableWidth", maxResizableWidth: "maxResizableWidth", title: "title", width: "width", autoSize: "autoSize", locked: "locked", sticky: "sticky", hidden: "hidden", media: "media", lockable: "lockable", stickable: "stickable", columnMenu: "columnMenu", includeInChooser: "includeInChooser", tableCellsRole: "tableCellsRole", style: "style", headerStyle: "headerStyle", filterStyle: "filterStyle", footerStyle: "footerStyle", cssClass: ["class", "cssClass"], headerClass: "headerClass", filterClass: "filterClass", footerClass: "footerClass", cellRowspan: "cellRowspan" }, queries: [{ propertyName: "footerTemplate", first: true, predicate: FooterTemplateDirective, descendants: true }, { propertyName: "headerTemplates", predicate: HeaderTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], ngImport: i0, template: ``, isInline: true });
2472
2491
  }
@@ -2840,10 +2859,6 @@ class ColumnComponent extends ColumnBase {
2840
2859
  get displayTitle() {
2841
2860
  return this.title === undefined ? this.field : this.title;
2842
2861
  }
2843
- ngAfterViewInit() {
2844
- this.initialMaxResizableWidth = this.maxResizableWidth;
2845
- this.initialMinResizableWidth = this.minResizableWidth;
2846
- }
2847
2862
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnComponent, deps: [{ token: ColumnBase, host: true, optional: true, skipSelf: true }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
2848
2863
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnComponent, isStandalone: true, selector: "kendo-grid-column", inputs: { field: "field", format: "format", sortable: "sortable", groupable: "groupable", editor: "editor", filter: "filter", filterable: "filterable", editable: "editable" }, providers: [
2849
2864
  {
@@ -3452,6 +3467,8 @@ class NavigationService {
3452
3467
  tableIsNavigable = false;
3453
3468
  toolbarIsNavigable = false;
3454
3469
  lastCellRowIndex;
3470
+ isShiftPressed = false;
3471
+ currentSelection = [];
3455
3472
  get activeDataRow() {
3456
3473
  return Math.max(0, this.activeRowIndex - this.meta.headerRows);
3457
3474
  }
@@ -3496,6 +3513,10 @@ class NavigationService {
3496
3513
  .subscribe(() => this.cursor.reset(0, 0)));
3497
3514
  this.subs.add(this.domEvents.keydown
3498
3515
  .subscribe(args => this.onKeydown(args)));
3516
+ this.subs.add(this.domEvents.shiftKeyup
3517
+ .subscribe(() => {
3518
+ this.isShiftPressed = false;
3519
+ }));
3499
3520
  this.subs.add(this.domEvents.keydown.pipe(filter(args => args.keyCode === Keys.Tab && this.mode === 2 /* NavigationMode.Content */), switchMapTo(this.domEvents.focusOut.pipe(takeUntil(
3500
3521
  // Timeout if focusOut doesn't fire very soon
3501
3522
  interval(0).pipe(take(1))))))
@@ -3733,12 +3754,23 @@ class NavigationService {
3733
3754
  let step = modifier ? 5 : 1;
3734
3755
  const rowspan = +args.target?.getAttribute('rowspan');
3735
3756
  let rowspanOffset = 0;
3757
+ let startNewSelection = false;
3758
+ const allowMultipleRanges = (this.ctx.grid.selectionService.active && this.ctx.grid.selectableSettings?.multipleRanges) ||
3759
+ (this.ctx.grid.cellSelectionService.active && this.ctx.grid.cellSelectionService?.options?.multipleRanges);
3760
+ if (!allowMultipleRanges) {
3761
+ this.currentSelection = [];
3762
+ }
3736
3763
  if (!this.onCellKeydown(args)) {
3737
3764
  return;
3738
3765
  }
3739
3766
  const row = this.cursor.row;
3740
3767
  const dir = args.keyCode === Keys.ArrowDown ? 'Down' : 'Up';
3741
3768
  const right = args.keyCode === Keys.ArrowRight;
3769
+ const isArrowKey = args.code === 'ArrowDown' || args.code === 'ArrowUp' || args.code === 'ArrowLeft' || args.code === 'ArrowRight';
3770
+ if (!this.isShiftPressed && args.shiftKey && isArrowKey) {
3771
+ startNewSelection = true;
3772
+ this.isShiftPressed = true;
3773
+ }
3742
3774
  switch (args.keyCode) {
3743
3775
  case Keys.ArrowDown:
3744
3776
  case Keys.ArrowUp:
@@ -3751,9 +3783,10 @@ class NavigationService {
3751
3783
  return;
3752
3784
  }
3753
3785
  preventDefault = this.cursor[`move${dir}`](step);
3786
+ const preserveCurrentSelection = startNewSelection && allowMultipleRanges;
3754
3787
  if (this.activeRow?.dataItem) {
3755
3788
  const sign = dir === 'Down' ? 1 : -1;
3756
- this.handleVerticalArrowSelection(sign * step);
3789
+ this.handleVerticalArrowSelection(sign * step, preserveCurrentSelection);
3757
3790
  }
3758
3791
  }
3759
3792
  else {
@@ -3772,7 +3805,8 @@ class NavigationService {
3772
3805
  return;
3773
3806
  }
3774
3807
  preventDefault = this[`moveCursor${right ? 'Fwd' : 'Bwd'}`]();
3775
- this.handleHorizontalArrowSelection(args);
3808
+ const preserveCurrentSelection = startNewSelection && allowMultipleRanges;
3809
+ this.handleHorizontalArrowSelection(args, preserveCurrentSelection);
3776
3810
  }
3777
3811
  else {
3778
3812
  preventDefault = this[`moveCursor${right ? 'Fwd' : 'Bwd'}`]();
@@ -3975,7 +4009,7 @@ class NavigationService {
3975
4009
  this.leaveCell();
3976
4010
  this.cursor.reset();
3977
4011
  }
3978
- handleVerticalArrowSelection(args) {
4012
+ handleVerticalArrowSelection(args, preserveSelection) {
3979
4013
  const cellSelectionEnabled = this.ctx.grid.cellSelectionService.active;
3980
4014
  const rowSelectionEnabled = this.ctx.grid.selectionService.active && !this.ctx.grid.selectableSettings.checkboxOnly;
3981
4015
  if (cellSelectionEnabled || rowSelectionEnabled) {
@@ -3985,14 +4019,15 @@ class NavigationService {
3985
4019
  const dataItem = selectionService.settings.view.at(rowIdx);
3986
4020
  const item = { index: this.activeRow.dataRowIndex, data: dataItem, column: this.ctx.grid.columnsContainer.leafColumnsToRender[colIdx] };
3987
4021
  if (selectionService.options.mode === 'multiple') {
3988
- cellSelectionEnabled ? this.handleMultipleArrowCellSelection(item) : this.handleMultipleArrowRowSelection(item);
4022
+ const startRowIndex = this.activeRow.dataRowIndex - args;
4023
+ cellSelectionEnabled ? this.handleMultipleArrowCellSelection(item, preserveSelection, startRowIndex, colIdx) : this.handleMultipleArrowRowSelection(item, preserveSelection, startRowIndex);
3989
4024
  }
3990
4025
  else {
3991
4026
  selectionService.handleClick(item, args);
3992
4027
  }
3993
4028
  }
3994
4029
  }
3995
- handleHorizontalArrowSelection(args) {
4030
+ handleHorizontalArrowSelection(args, preserveSelection) {
3996
4031
  const cellSelectionEnabled = this.ctx.grid.cellSelectionService.active;
3997
4032
  if (cellSelectionEnabled) {
3998
4033
  const selectionService = this.ctx.grid[cellSelectionEnabled ? 'cellSelectionService' : 'selectionService'];
@@ -4004,27 +4039,37 @@ class NavigationService {
4004
4039
  return;
4005
4040
  }
4006
4041
  if (selectionService.options.mode === 'multiple') {
4007
- this.handleMultipleArrowCellSelection(item);
4042
+ const startColumnIndex = args.key === 'ArrowRight' ? colIdx - 1 : colIdx + 1;
4043
+ this.handleMultipleArrowCellSelection(item, preserveSelection, row.dataRowIndex, startColumnIndex);
4008
4044
  }
4009
4045
  else {
4010
4046
  selectionService.handleClick(item, args);
4011
4047
  }
4012
4048
  }
4013
4049
  }
4014
- handleMultipleArrowCellSelection(item) {
4050
+ handleMultipleArrowCellSelection(item, preserveSelection, startRow, startColumn) {
4015
4051
  const cellSelectionService = this.ctx.grid.cellSelectionService;
4016
- const startRowIndex = Math.min(cellSelectionService.lastSelectionItemRowIndex, item.index);
4017
- const startColIndex = Math.min(cellSelectionService.lastSelectionItemColIndex, item.column.leafIndex);
4018
- const endRowIndex = Math.max(cellSelectionService.lastSelectionItemRowIndex, item.index);
4019
- const endColIndex = Math.max(cellSelectionService.lastSelectionItemColIndex, item.column.leafIndex);
4020
- const ev = cellSelectionService.selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex);
4052
+ const startRowIndex = preserveSelection ? startRow : Math.min(cellSelectionService.lastSelectionItemRowIndex, item.index);
4053
+ const startColIndex = preserveSelection ? startColumn : Math.min(cellSelectionService.lastSelectionItemColIndex, item.column.leafIndex);
4054
+ const endRowIndex = preserveSelection ? item.index : Math.max(cellSelectionService.lastSelectionItemRowIndex, item.index);
4055
+ const endColIndex = preserveSelection ? item.column.leafIndex : Math.max(cellSelectionService.lastSelectionItemColIndex, item.column.leafIndex);
4056
+ if (preserveSelection) {
4057
+ cellSelectionService.lastSelectionItemRowIndex = startRow;
4058
+ cellSelectionService.lastSelectionItemColIndex = startColumn;
4059
+ this.currentSelection = cellSelectionService.currentSelection;
4060
+ }
4061
+ const ev = cellSelectionService.selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex, preserveSelection, this.currentSelection);
4021
4062
  cellSelectionService.changes.emit(ev);
4022
4063
  }
4023
- handleMultipleArrowRowSelection(item) {
4064
+ handleMultipleArrowRowSelection(item, preserveSelection, startRow) {
4024
4065
  const rowSelectionService = this.ctx.grid.selectionService;
4025
- const startRowIndex = Math.min(rowSelectionService.lastSelectionStartIndex, item.index);
4026
- const endRowIndex = Math.max(rowSelectionService.lastSelectionStartIndex, item.index);
4027
- const ev = rowSelectionService.selectRange(startRowIndex, endRowIndex);
4066
+ const startRowIndex = preserveSelection ? startRow : Math.min(rowSelectionService.lastSelectionStartIndex, item.index);
4067
+ const endRowIndex = preserveSelection ? item.index : Math.max(rowSelectionService.lastSelectionStartIndex, item.index);
4068
+ if (preserveSelection) {
4069
+ rowSelectionService.lastSelectionStartIndex = startRow;
4070
+ this.currentSelection = rowSelectionService.currentSelection;
4071
+ }
4072
+ const ev = rowSelectionService.selectRange(startRowIndex, endRowIndex, preserveSelection, this.currentSelection);
4028
4073
  rowSelectionService.changes.emit(ev);
4029
4074
  }
4030
4075
  calculateRowspanOffset(direction, cellRowspan) {
@@ -7603,16 +7648,14 @@ const diffFilters = (a, b) => {
7603
7648
  */
7604
7649
  class FilterHostDirective {
7605
7650
  host;
7606
- resolver;
7607
7651
  column;
7608
7652
  filter;
7609
7653
  component;
7610
- constructor(host, resolver) {
7654
+ constructor(host) {
7611
7655
  this.host = host;
7612
- this.resolver = resolver;
7613
7656
  }
7614
7657
  ngOnInit() {
7615
- this.component = this.host.createComponent(this.resolver.resolveComponentFactory(this.componentType()));
7658
+ this.component = this.host.createComponent(this.componentType());
7616
7659
  this.initComponent({
7617
7660
  column: this.column,
7618
7661
  filter: this.filter
@@ -7637,7 +7680,7 @@ class FilterHostDirective {
7637
7680
  instance.column = column;
7638
7681
  instance.filter = filter;
7639
7682
  }
7640
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterHostDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
7683
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterHostDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
7641
7684
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FilterHostDirective, selector: "[kendoGridFilterHostBase]", inputs: { column: "column", filter: "filter" }, usesOnChanges: true, ngImport: i0 });
7642
7685
  }
7643
7686
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterHostDirective, decorators: [{
@@ -7645,7 +7688,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
7645
7688
  args: [{
7646
7689
  selector: '[kendoGridFilterHostBase]'
7647
7690
  }]
7648
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { column: [{
7691
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { column: [{
7649
7692
  type: Input
7650
7693
  }], filter: [{
7651
7694
  type: Input
@@ -9520,8 +9563,8 @@ const filterMenuComponentFactory = (type) => ({
9520
9563
  class FilterMenuHostDirective extends FilterHostDirective {
9521
9564
  filterService;
9522
9565
  menuTabbingService;
9523
- constructor(host, resolver) {
9524
- super(host, resolver);
9566
+ constructor(host) {
9567
+ super(host);
9525
9568
  }
9526
9569
  componentType() {
9527
9570
  if (isPresent(this.column) && !isNullOrEmptyString(this.column.filter)) {
@@ -9534,7 +9577,7 @@ class FilterMenuHostDirective extends FilterHostDirective {
9534
9577
  this.component.instance.filterService = this.filterService;
9535
9578
  this.component.instance.menuTabbingService = this.menuTabbingService;
9536
9579
  }
9537
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuHostDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
9580
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuHostDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
9538
9581
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuHostDirective, isStandalone: true, selector: "[kendoFilterMenuHost]", inputs: { filterService: "filterService", menuTabbingService: "menuTabbingService" }, usesInheritance: true, ngImport: i0 });
9539
9582
  }
9540
9583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuHostDirective, decorators: [{
@@ -9543,7 +9586,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
9543
9586
  selector: '[kendoFilterMenuHost]',
9544
9587
  standalone: true
9545
9588
  }]
9546
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }]; }, propDecorators: { filterService: [{
9589
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; }, propDecorators: { filterService: [{
9547
9590
  type: Input
9548
9591
  }], menuTabbingService: [{
9549
9592
  type: Input
@@ -10641,8 +10684,8 @@ const filterComponentFactory = (type) => ({
10641
10684
  * @hidden
10642
10685
  */
10643
10686
  class FilterCellHostDirective extends FilterHostDirective {
10644
- constructor(host, resolver) {
10645
- super(host, resolver);
10687
+ constructor(host) {
10688
+ super(host);
10646
10689
  }
10647
10690
  componentType() {
10648
10691
  if (!isNullOrEmptyString(this.column.filter)) {
@@ -10650,7 +10693,7 @@ class FilterCellHostDirective extends FilterHostDirective {
10650
10693
  }
10651
10694
  return StringFilterCellComponent;
10652
10695
  }
10653
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterCellHostDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive });
10696
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterCellHostDirective, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
10654
10697
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: FilterCellHostDirective, isStandalone: true, selector: "[kendoFilterCellHost]", usesInheritance: true, ngImport: i0 });
10655
10698
  }
10656
10699
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterCellHostDirective, decorators: [{
@@ -10659,7 +10702,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10659
10702
  selector: '[kendoFilterCellHost]',
10660
10703
  standalone: true
10661
10704
  }]
10662
- }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.ComponentFactoryResolver }]; } });
10705
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
10663
10706
 
10664
10707
  /**
10665
10708
  * @hidden
@@ -11102,6 +11145,17 @@ class ColumnListComponent {
11102
11145
  if (e.keyCode !== Keys.Tab) {
11103
11146
  e.preventDefault();
11104
11147
  }
11148
+ if (e.key === 'Tab' && !e.shiftKey && this.autoSync) {
11149
+ e.preventDefault();
11150
+ }
11151
+ if (e.key === 'Tab' && e.shiftKey) {
11152
+ this.ngZone.run(() => {
11153
+ if (e.target.matches('.k-column-list-item')) {
11154
+ e.preventDefault();
11155
+ this.resetButton?.nativeElement.focus();
11156
+ }
11157
+ });
11158
+ }
11105
11159
  if (e.keyCode === Keys.ArrowDown) {
11106
11160
  this.listNavigationService.next();
11107
11161
  }
@@ -11116,19 +11170,23 @@ class ColumnListComponent {
11116
11170
  if (this.allowHideAll && !this.hasLocked) {
11117
11171
  return;
11118
11172
  }
11119
- const checkedItems = [];
11173
+ // Cache visible columns to avoid repeated checks
11174
+ const visibleColumns = [];
11175
+ const columnMap = new Map();
11120
11176
  this.checkboxes.forEach((checkbox, index) => {
11177
+ // Reset all disabled states first
11178
+ this.setDisabledState(checkbox, false);
11121
11179
  if (checkbox.checkedState) {
11122
- checkedItems.push({ checkbox, index });
11180
+ visibleColumns.push({ checkbox, index });
11181
+ columnMap.set(index, this.columns[index]);
11123
11182
  }
11124
- this.setDisabledState(checkbox, false);
11125
11183
  });
11126
- if (!this.allowHideAll && checkedItems.length === 1 && !this.hasFiltered) {
11127
- this.setDisabledState(checkedItems[0].checkbox, true);
11184
+ // Only apply disabled states where needed
11185
+ if (!this.allowHideAll && visibleColumns.length === 1 && !this.hasFiltered) {
11186
+ this.setDisabledState(visibleColumns[0].checkbox, true);
11128
11187
  }
11129
11188
  else if (this.hasLocked && !this.hasUnlockedFiltered) {
11130
- const columns = this.columns;
11131
- const checkedUnlocked = checkedItems.filter(item => !columns[item.index].locked);
11189
+ const checkedUnlocked = visibleColumns.filter(item => !columnMap.get(item.index).locked);
11132
11190
  if (checkedUnlocked.length === 1) {
11133
11191
  this.setDisabledState(checkedUnlocked[0].checkbox, true);
11134
11192
  }
@@ -11149,34 +11207,32 @@ class ColumnListComponent {
11149
11207
  }
11150
11208
  }
11151
11209
  setDisabledState(checkbox, disabled) {
11152
- this.ngZone.run(() => checkbox.disabled = disabled);
11153
- const checkboxElement = checkbox.hostElement.nativeElement;
11154
- const parentElement = checkboxElement.parentElement;
11155
- const classCommand = disabled ? 'addClass' : 'removeClass';
11156
- const attributeCommand = disabled ? 'setAttribute' : 'removeAttribute';
11157
- this.renderer[classCommand](parentElement, 'k-disabled');
11158
- this.renderer[attributeCommand](parentElement, 'aria-disabled', disabled ? 'true' : undefined);
11210
+ if (checkbox.disabled !== disabled) {
11211
+ this.ngZone.runOutsideAngular(() => {
11212
+ checkbox.disabled = disabled;
11213
+ const checkboxElement = checkbox.hostElement.nativeElement;
11214
+ const parentElement = checkboxElement.parentElement;
11215
+ if (disabled) {
11216
+ this.renderer.addClass(parentElement, 'k-disabled');
11217
+ this.renderer.setAttribute(parentElement, 'aria-disabled', 'true');
11218
+ }
11219
+ else {
11220
+ this.renderer.removeClass(parentElement, 'k-disabled');
11221
+ this.renderer.removeAttribute(parentElement, 'aria-disabled');
11222
+ }
11223
+ });
11224
+ }
11159
11225
  }
11160
11226
  handleCheckBoxClick = (e) => {
11161
11227
  const closestItem = e.target.closest('.k-column-list-item');
11162
11228
  if (closestItem) {
11163
11229
  const checkboxElement = closestItem.querySelector('.k-checkbox-wrap');
11164
- const checkbox = this.checkboxes.find(checkBox => checkBox.hostElement.nativeElement === checkboxElement);
11165
11230
  const index = parseInt(checkboxElement.firstElementChild.getAttribute('data-index'), 10);
11166
- if (index !== this.listNavigationService.activeIndex) {
11167
- this.listNavigationService.toggle(this.listNavigationService.activeIndex, false);
11168
- this.listNavigationService.activeIndex = index;
11169
- this.listNavigationService.toggle(index, true);
11170
- }
11171
- if (checkboxElement.contains(e.target)) {
11172
- const checkboxInputElement = checkboxElement.firstElementChild;
11173
- checkboxInputElement.blur();
11174
- checkboxInputElement.classList.remove('k-focus');
11175
- }
11176
- else {
11177
- this.listNavigationService.toggleCheckedState();
11231
+ const checkbox = this.checkboxes.toArray()[index];
11232
+ if (e.target === checkbox.input.nativeElement) {
11233
+ closestItem.focus();
11234
+ e.target.classList.remove('k-focus');
11178
11235
  }
11179
- closestItem.focus();
11180
11236
  if (this.autoSync) {
11181
11237
  if (!this.columns[index]) {
11182
11238
  return;
@@ -11184,14 +11240,21 @@ class ColumnListComponent {
11184
11240
  const column = this.columns[index];
11185
11241
  const hidden = !checkbox.checkedState;
11186
11242
  if (Boolean(column.hidden) !== hidden) {
11187
- this.ngZone.run(() => {
11243
+ this.ngZone.runOutsideAngular(() => {
11188
11244
  column.hidden = hidden;
11189
- this.columnChange.emit([column]);
11245
+ this.ngZone.run(() => {
11246
+ this.columnChange.emit([column]);
11247
+ });
11190
11248
  });
11191
11249
  }
11192
11250
  }
11193
11251
  else {
11194
- this.updateDisabled();
11252
+ this.ngZone.run(() => this.updateDisabled());
11253
+ }
11254
+ if (index !== this.listNavigationService.activeIndex) {
11255
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, false);
11256
+ this.listNavigationService.activeIndex = index;
11257
+ this.listNavigationService.toggle(index, true);
11195
11258
  }
11196
11259
  }
11197
11260
  };
@@ -11209,9 +11272,9 @@ class ColumnListComponent {
11209
11272
  role="option">
11210
11273
  <kendo-checkbox
11211
11274
  [inputAttributes]="{'data-index': index.toString()}"
11275
+ [tabindex]="-1"
11212
11276
  [checkedState]="!column.hidden"
11213
11277
  [disabled]="isDisabled(column)"
11214
- [tabindex]="-1"
11215
11278
  ></kendo-checkbox>
11216
11279
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
11217
11280
  </label>
@@ -11253,9 +11316,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
11253
11316
  role="option">
11254
11317
  <kendo-checkbox
11255
11318
  [inputAttributes]="{'data-index': index.toString()}"
11319
+ [tabindex]="-1"
11256
11320
  [checkedState]="!column.hidden"
11257
11321
  [disabled]="isDisabled(column)"
11258
- [tabindex]="-1"
11259
11322
  ></kendo-checkbox>
11260
11323
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
11261
11324
  </label>
@@ -11440,15 +11503,6 @@ class ColumnChooserComponent {
11440
11503
  this.changeDetector.markForCheck();
11441
11504
  this.columnInfoService.changeVisibility(changed);
11442
11505
  }
11443
- /**
11444
- * @hidden
11445
- */
11446
- onShiftTab(e) {
11447
- if (e.target.matches('.k-column-list-item')) {
11448
- e.preventDefault();
11449
- this.columnList.resetButton.nativeElement.focus();
11450
- }
11451
- }
11452
11506
  close(focusAnchor = false) {
11453
11507
  if (this.popupRef) {
11454
11508
  this.popupRef.close();
@@ -11490,8 +11544,7 @@ class ColumnChooserComponent {
11490
11544
  [autoSync]="autoSync"
11491
11545
  [allowHideAll]="allowHideAll"
11492
11546
  (apply)="onApply($event)"
11493
- (columnChange)="onChange($event)"
11494
- (keydown.shift.tab)="onShiftTab($event)">
11547
+ (columnChange)="onChange($event)">
11495
11548
  </kendo-grid-columnlist>
11496
11549
  </ng-template>
11497
11550
  `, isInline: true, dependencies: [{ 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"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
@@ -11524,8 +11577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
11524
11577
  [autoSync]="autoSync"
11525
11578
  [allowHideAll]="allowHideAll"
11526
11579
  (apply)="onApply($event)"
11527
- (columnChange)="onChange($event)"
11528
- (keydown.shift.tab)="onShiftTab($event)">
11580
+ (columnChange)="onChange($event)">
11529
11581
  </kendo-grid-columnlist>
11530
11582
  </ng-template>
11531
11583
  `,
@@ -11697,13 +11749,12 @@ class ColumnMenuItemComponent {
11697
11749
  */
11698
11750
  collapse = new EventEmitter();
11699
11751
  /**
11700
- * Specifies the name of the [font icon](slug:icons#icons-list)
11701
- * that will be rendered for the item.
11752
+ * Specifies the name of the [font icon](slug:icon_list)
11753
+ * that will be rendered within the item.
11702
11754
  */
11703
11755
  icon;
11704
11756
  /**
11705
- * Specifies the name of the [SVG icon]({% slug svgicon_list %})
11706
- * that will be rendered for the item.
11757
+ * Defines the [SVG icon](slug:svgicon_list) to be rendered within the item.
11707
11758
  */
11708
11759
  svgIcon;
11709
11760
  /**
@@ -15458,7 +15509,8 @@ class SelectionService {
15458
15509
  ev = this.toggle(item);
15459
15510
  }
15460
15511
  else if (event.shiftKey) {
15461
- ev = this.addAllTo(item, ctrlKey);
15512
+ const preserveCurrentSelection = isMultipleRangesEnabled(this.settings);
15513
+ ev = this.addAllTo(item, ctrlKey, preserveCurrentSelection);
15462
15514
  }
15463
15515
  }
15464
15516
  if (!isPresent(ev)) {
@@ -15565,7 +15617,7 @@ class SelectionService {
15565
15617
  item = iterator.next();
15566
15618
  }
15567
15619
  }
15568
- addAllTo(item, ctrlKey) {
15620
+ addAllTo(item, ctrlKey, preserveSelection = false) {
15569
15621
  const selectedRows = [];
15570
15622
  const deselectedRows = [];
15571
15623
  const start = Math.min(this.lastSelectionStartIndex, item.index);
@@ -15576,7 +15628,7 @@ class SelectionService {
15576
15628
  if (next.value && next.value.type === "data") {
15577
15629
  const idx = next.value.index;
15578
15630
  const rowArgs = { dataItem: next.value.data, index: idx };
15579
- if ((idx < start || idx > end) && this.isSelected(idx) && !ctrlKey) {
15631
+ if ((idx < start || idx > end) && this.isSelected(idx) && !ctrlKey && !preserveSelection) {
15580
15632
  deselectedRows.push(rowArgs);
15581
15633
  }
15582
15634
  if ((idx >= start && idx <= end) && !this.isSelected(idx) && !this.nonSelectableRows.has(idx)) {
@@ -15633,7 +15685,7 @@ class SelectionService {
15633
15685
  }
15634
15686
  this.changes.emit(ev);
15635
15687
  }
15636
- selectRange(startIndex, endIndex) {
15688
+ selectRange(startIndex, endIndex, preserveSelection, existingSelections = []) {
15637
15689
  const selectedRows = [];
15638
15690
  const deselectedRows = [];
15639
15691
  const start = Math.min(startIndex, endIndex);
@@ -15645,7 +15697,10 @@ class SelectionService {
15645
15697
  const idx = next.value.index;
15646
15698
  const rowArgs = { dataItem: next.value.data, index: idx };
15647
15699
  if ((idx < start || idx > end) && this.isSelected(idx)) {
15648
- deselectedRows.push(rowArgs);
15700
+ const deselectRow = !(preserveSelection || existingSelections.find((value) => value && value.dataItem === rowArgs.dataItem && value.index === rowArgs.index));
15701
+ if (deselectRow) {
15702
+ deselectedRows.push(rowArgs);
15703
+ }
15649
15704
  }
15650
15705
  if ((idx >= start && idx <= end) && !this.isSelected(idx) && !this.nonSelectableRows.has(idx)) {
15651
15706
  selectedRows.push(rowArgs);
@@ -15870,7 +15925,12 @@ class CellSelectionService {
15870
15925
  const startColIndex = Math.min(this.lastSelectionItemColIndex, item.column.leafIndex);
15871
15926
  const endRowIndex = Math.max(this.lastSelectionItemRowIndex, item.index);
15872
15927
  const endColIndex = Math.max(this.lastSelectionItemColIndex, item.column.leafIndex);
15873
- ev = this.selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex);
15928
+ const preserveCurrentSelection = isMultipleRangesEnabled(this.settings);
15929
+ ev = this.selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex, preserveCurrentSelection);
15930
+ if (preserveCurrentSelection) {
15931
+ this.lastSelectionItemRowIndex = item.index;
15932
+ this.lastSelectionItemColIndex = item.column.leafIndex;
15933
+ }
15874
15934
  }
15875
15935
  }
15876
15936
  if (!isPresent(ev)) {
@@ -15961,7 +16021,7 @@ class CellSelectionService {
15961
16021
  }
15962
16022
  }
15963
16023
  }
15964
- selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex) {
16024
+ selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex, preserveSelection = false, existingSelections = []) {
15965
16025
  const selectedCells = [];
15966
16026
  const deselectedCells = [];
15967
16027
  const selectionStartRow = Math.min(startRowIndex, endRowIndex);
@@ -15985,7 +16045,10 @@ class CellSelectionService {
15985
16045
  const isInColRange = selectionStartCol <= col.leafIndex && col.leafIndex <= selectionEndCol;
15986
16046
  const isInSelectionRect = isInRowRange && isInColRange;
15987
16047
  if (!isInSelectionRect && selected) {
15988
- deselectedCells.push(item);
16048
+ const deselectCell = !(preserveSelection || existingSelections.find((value) => value && value.itemKey === item.itemKey && value.columnKey === item.columnKey));
16049
+ if (deselectCell) {
16050
+ deselectedCells.push(item);
16051
+ }
15989
16052
  }
15990
16053
  if (isInSelectionRect && !selected && !this.nonSelectableRows.has(idx)) {
15991
16054
  selectedCells.push(item);
@@ -16203,7 +16266,7 @@ class SelectAllCheckboxDirective {
16203
16266
  return undefined;
16204
16267
  }
16205
16268
  }
16206
- 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: i3.CheckBoxComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
16269
+ 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 });
16207
16270
  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 });
16208
16271
  }
16209
16272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectAllCheckboxDirective, decorators: [{
@@ -16212,7 +16275,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
16212
16275
  selector: '[kendoGridSelectAllCheckbox]',
16213
16276
  standalone: true
16214
16277
  }]
16215
- }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i3.CheckBoxComponent, decorators: [{
16278
+ }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i4$1.CheckBoxComponent, decorators: [{
16216
16279
  type: Host
16217
16280
  }, {
16218
16281
  type: Optional
@@ -17171,6 +17234,7 @@ class FooterComponent {
17171
17234
  lockedColumnsCount = 0;
17172
17235
  logicalRowIndex = 0;
17173
17236
  totalColumns;
17237
+ totalColumnsCount = 0;
17174
17238
  get footerClass() {
17175
17239
  return !this.scrollable;
17176
17240
  }
@@ -17182,6 +17246,10 @@ class FooterComponent {
17182
17246
  get columnsToRender() {
17183
17247
  return columnsToRender(this.columns || []);
17184
17248
  }
17249
+ // Number of unlocked columns in the next table, if any
17250
+ get unlockedColumnsCount() {
17251
+ return this.totalColumnsCount - this.lockedColumnsCount - this.columns.length;
17252
+ }
17185
17253
  trackByIndex(index) {
17186
17254
  return index;
17187
17255
  }
@@ -17200,15 +17268,15 @@ class FooterComponent {
17200
17268
  return isColumnGroupComponent(column);
17201
17269
  }
17202
17270
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FooterComponent, deps: [{ token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
17203
- 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" }, host: { properties: { "class.k-grid-footer": "this.footerClass", "class.k-table-tfoot": "this.hostClass", "attr.role": "this.hostRole" } }, ngImport: i0, template: `
17271
+ 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: `
17204
17272
  <ng-container>
17205
17273
  <tr
17206
- [class.k-footer-template]="true"
17274
+ class="k-footer-template"
17207
17275
  kendoGridLogicalRow
17208
17276
  [logicalRowIndex]="logicalRowIndex"
17209
17277
  [logicalSlaveRow]="lockedColumnsCount > 0"
17210
17278
  [logicalCellsCount]="columns.length"
17211
- [logicalSlaveCellsCount]="columns.length - lockedColumnsCount"
17279
+ [logicalSlaveCellsCount]="unlockedColumnsCount"
17212
17280
  [totalColumns]="totalColumns"
17213
17281
  >
17214
17282
  <td
@@ -17253,12 +17321,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17253
17321
  template: `
17254
17322
  <ng-container>
17255
17323
  <tr
17256
- [class.k-footer-template]="true"
17324
+ class="k-footer-template"
17257
17325
  kendoGridLogicalRow
17258
17326
  [logicalRowIndex]="logicalRowIndex"
17259
17327
  [logicalSlaveRow]="lockedColumnsCount > 0"
17260
17328
  [logicalCellsCount]="columns.length"
17261
- [logicalSlaveCellsCount]="columns.length - lockedColumnsCount"
17329
+ [logicalSlaveCellsCount]="unlockedColumnsCount"
17262
17330
  [totalColumns]="totalColumns"
17263
17331
  >
17264
17332
  <td
@@ -17312,6 +17380,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17312
17380
  type: Input
17313
17381
  }], totalColumns: [{
17314
17382
  type: Input
17383
+ }], totalColumnsCount: [{
17384
+ type: Input
17315
17385
  }], footerClass: [{
17316
17386
  type: HostBinding,
17317
17387
  args: ['class.k-grid-footer']
@@ -17583,7 +17653,7 @@ class SelectionCheckboxDirective {
17583
17653
  this.renderer.setProperty(this.el.nativeElement, 'checked', isSelected);
17584
17654
  }
17585
17655
  }
17586
- 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: i3.CheckBoxComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
17656
+ 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 });
17587
17657
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SelectionCheckboxDirective, isStandalone: true, selector: "[kendoGridSelectionCheckbox]", inputs: { itemIndex: ["kendoGridSelectionCheckbox", "itemIndex"] }, ngImport: i0 });
17588
17658
  }
17589
17659
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SelectionCheckboxDirective, decorators: [{
@@ -17592,7 +17662,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17592
17662
  selector: '[kendoGridSelectionCheckbox]',
17593
17663
  standalone: true
17594
17664
  }]
17595
- }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: CellSelectionAggregateService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i3.CheckBoxComponent, decorators: [{
17665
+ }], ctorParameters: function () { return [{ type: SelectionService }, { type: CellSelectionService }, { type: CellSelectionAggregateService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i4$1.CheckBoxComponent, decorators: [{
17596
17666
  type: Host
17597
17667
  }, {
17598
17668
  type: Optional
@@ -18177,7 +18247,7 @@ class TableBodyComponent {
18177
18247
  }
18178
18248
  });
18179
18249
  const contentColumnsCount = this.totalColumnsCount - this.lockedColumnsCount - allColumnsCount;
18180
- const headerFooterColumnsCount = this.totalColumnsCount - this.lockedColumnsCount - (this.allColumns || this.columns).length;
18250
+ const headerFooterColumnsCount = this.totalColumnsCount - this.lockedColumnsCount - allColumns.length;
18181
18251
  return item && this.isDataItem(item) ? contentColumnsCount : headerFooterColumnsCount;
18182
18252
  }
18183
18253
  shouldSkipCell(rowIndex, colIndex) {
@@ -19761,8 +19831,8 @@ const packageMetadata = {
19761
19831
  productName: 'Kendo UI for Angular',
19762
19832
  productCode: 'KENDOUIANGULAR',
19763
19833
  productCodes: ['KENDOUIANGULAR'],
19764
- publishDate: 1743598444,
19765
- version: '18.4.1-develop.2',
19834
+ publishDate: 1744092477,
19835
+ version: '18.5.0-develop.10',
19766
19836
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
19767
19837
  };
19768
19838
 
@@ -21373,13 +21443,17 @@ class GridMarqueeDirective {
21373
21443
  }
21374
21444
  endSelection(args) {
21375
21445
  if (args.type === 'mouseup' || args.type === 'touchend') {
21446
+ const modifier = args.originalEvent.ctrlKey || args.originalEvent.metaKey;
21447
+ const preserveCurrentSelection = modifier &&
21448
+ (isMultipleRangesEnabled(this.selection.settings) ||
21449
+ isMultipleRangesEnabled(this.cellSelection.settings));
21376
21450
  if (this.cellSelection.active) {
21377
21451
  this.cellSelection.dragging = true;
21378
- this.cellSelection.changes.emit(this.cellSelection.selectRange(this.pressTarget.rowIndex, this.pressTarget.column.leafIndex, args.rowIndex, args.column.leafIndex));
21452
+ this.cellSelection.changes.emit(this.cellSelection.selectRange(this.pressTarget.rowIndex, this.pressTarget.column.leafIndex, args.rowIndex, args.column.leafIndex, preserveCurrentSelection));
21379
21453
  }
21380
21454
  else if (this.selection.active) {
21381
21455
  this.selection.dragging = true;
21382
- this.selection.changes.emit(this.selection.selectRange(this.pressTarget.rowIndex, args.rowIndex));
21456
+ this.selection.changes.emit(this.selection.selectRange(this.pressTarget.rowIndex, args.rowIndex, preserveCurrentSelection));
21383
21457
  }
21384
21458
  }
21385
21459
  this.clean();
@@ -23252,8 +23326,53 @@ class GridMessages extends ComponentMessages {
23252
23326
  * The text for the Group pane Chip Menu Move as next item.
23253
23327
  */
23254
23328
  groupChipMenuNext;
23329
+ /**
23330
+ * The default text of a form validation error when using the built-in external editing.
23331
+ * <br/><br/>
23332
+ * The text consists of a three-part message&mdash;the name of the data item property the respective Grid column is bound to,
23333
+ * the name of the error, coming from the respective `FormControl` object, and a localizable string.
23334
+ * <br/><br/>
23335
+ * For a field named `ProductName`, and an error named `required`, the default error text will be `ProductName has required validation error`.
23336
+ * <br/><br/>
23337
+ * To customize the default text of the form validation error, use the `{errorName}` and `{fieldName}` placeholders and a custom localizable string.
23338
+ * For example, `{errorName} detected for {fieldName} field`.
23339
+ * <br/><br/>
23340
+ * The `{errorName}` and `{fieldName}` placeholders will be replaced internally with the field and error names for the respective invalid form control,
23341
+ * and the resulting error message will be rendered as `required error detected for ProductName field`.
23342
+ * [See example](slug:globalization_grid#toc-custom-messages).
23343
+ *
23344
+ */
23345
+ formValidationErrorText;
23346
+ /**
23347
+ * The title of the remove item confirmation Dialog.
23348
+ */
23349
+ removeConfirmationDialogTitle;
23350
+ /**
23351
+ * The content of the remove item confirmation Dialog.
23352
+ */
23353
+ removeConfirmationDialogContent;
23354
+ /**
23355
+ * The text of the confirm action button in the remove confirmation Dialog.
23356
+ */
23357
+ removeConfirmationDialogConfirmText;
23358
+ /**
23359
+ * The text of the reject action button in the remove confirmation Dialog.
23360
+ */
23361
+ removeConfirmationDialogRejectText;
23362
+ /**
23363
+ * The title of the external editing Dialog.
23364
+ */
23365
+ externalEditingTitle;
23366
+ /**
23367
+ * The text of the external editing Dialog <b>Save</b> button.
23368
+ */
23369
+ externalEditingSaveText;
23370
+ /**
23371
+ * The text of the external editing Dialog <b>Cancel</b> button.
23372
+ */
23373
+ externalEditingCancelText;
23255
23374
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
23256
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerInputLabel: "pagerInputLabel", pagerSelectPage: "pagerSelectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterCellOperatorLabel: "filterCellOperatorLabel", booleanFilterCellLabel: "booleanFilterCellLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext" }, usesInheritance: true, ngImport: i0 });
23375
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", pagerInputLabel: "pagerInputLabel", pagerSelectPage: "pagerSelectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterCellOperatorLabel: "filterCellOperatorLabel", booleanFilterCellLabel: "booleanFilterCellLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext", formValidationErrorText: "formValidationErrorText", removeConfirmationDialogTitle: "removeConfirmationDialogTitle", removeConfirmationDialogContent: "removeConfirmationDialogContent", removeConfirmationDialogConfirmText: "removeConfirmationDialogConfirmText", removeConfirmationDialogRejectText: "removeConfirmationDialogRejectText", externalEditingTitle: "externalEditingTitle", externalEditingSaveText: "externalEditingSaveText", externalEditingCancelText: "externalEditingCancelText" }, usesInheritance: true, ngImport: i0 });
23257
23376
  }
23258
23377
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, decorators: [{
23259
23378
  type: Directive,
@@ -23429,6 +23548,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
23429
23548
  type: Input
23430
23549
  }], groupChipMenuNext: [{
23431
23550
  type: Input
23551
+ }], formValidationErrorText: [{
23552
+ type: Input
23553
+ }], removeConfirmationDialogTitle: [{
23554
+ type: Input
23555
+ }], removeConfirmationDialogContent: [{
23556
+ type: Input
23557
+ }], removeConfirmationDialogConfirmText: [{
23558
+ type: Input
23559
+ }], removeConfirmationDialogRejectText: [{
23560
+ type: Input
23561
+ }], externalEditingTitle: [{
23562
+ type: Input
23563
+ }], externalEditingSaveText: [{
23564
+ type: Input
23565
+ }], externalEditingCancelText: [{
23566
+ type: Input
23432
23567
  }] } });
23433
23568
 
23434
23569
  /**
@@ -24201,9 +24336,6 @@ class GridComponent {
24201
24336
  columnList;
24202
24337
  selectionDirective = false;
24203
24338
  ariaRootId = `k-${guid()}`;
24204
- /**
24205
- * @hidden
24206
- */
24207
24339
  showLicenseWatermark = false;
24208
24340
  columnsContainer = new ColumnsContainer(() => this.columnList.filterHierarchy(column => {
24209
24341
  if (!isUniversal()) {
@@ -25002,9 +25134,6 @@ class GridComponent {
25002
25134
  updateNavigationMetadata() {
25003
25135
  this.navigationService.metadata = this.navigationMetadata();
25004
25136
  }
25005
- /**
25006
- * @hidden
25007
- */
25008
25137
  reorder({ target, source, before, changeContainer }) {
25009
25138
  this.ngZone.run(() => {
25010
25139
  const columnsForLevel = sortColumns(this.allColumnsForLevel(source.level));
@@ -25330,6 +25459,11 @@ class GridComponent {
25330
25459
  const keydownSubscription = this.renderer.listen(wrapper, 'keydown', (args) => {
25331
25460
  this.domEvents.keydown.emit(args);
25332
25461
  });
25462
+ const shiftKeyupSubscription = this.renderer.listen(wrapper, 'keyup', (args) => {
25463
+ if (args.key === 'Shift') {
25464
+ this.domEvents.shiftKeyup.emit(args);
25465
+ }
25466
+ });
25333
25467
  // focusIn and focusOut are relative to the element with ARIA role "grid"
25334
25468
  let focused = false;
25335
25469
  const focusInSubscription = this.renderer.listen(ariaRoot, 'focusin', (args) => {
@@ -25344,6 +25478,7 @@ class GridComponent {
25344
25478
  const outside = !closest(next, (node) => node === ariaRoot);
25345
25479
  if (outside) {
25346
25480
  this.domEvents.focusOut.emit(args);
25481
+ this.domEvents.shiftKeyup.emit(args);
25347
25482
  focused = false;
25348
25483
  }
25349
25484
  });
@@ -25354,6 +25489,7 @@ class GridComponent {
25354
25489
  windowBlurSubscription();
25355
25490
  clickSubscription();
25356
25491
  keydownSubscription();
25492
+ shiftKeyupSubscription();
25357
25493
  focusInSubscription();
25358
25494
  focusOutSubscription();
25359
25495
  };
@@ -25836,6 +25972,30 @@ class GridComponent {
25836
25972
 
25837
25973
  i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
25838
25974
  groupChipMenuNext="Move as next"
25975
+
25976
+ i18n-formValidationErrorText="kendo.grid.formValidationErrorText|The default text of a form validation error when using external editing."
25977
+ formValidationErrorText="{{ 'The {fieldName} field has {errorName} validation error' }}"
25978
+
25979
+ i18n-removeConfirmationDialogTitle="kendo.grid.removeConfirmationDialogTitle|The title of the built-in remove item confirmation Dialog"
25980
+ removeConfirmationDialogTitle="Please confirm"
25981
+
25982
+ i18n-removeConfirmationDialogContent="kendo.grid.removeConfirmationDialogContent|The content of the built-in remove item confirmation Dialog"
25983
+ removeConfirmationDialogContent="Are you sure you want to delete this item?"
25984
+
25985
+ i18n-removeConfirmationDialogConfirmText="kendo.grid.removeConfirmationDialogConfirmText|The text of the built-in remove item confirmation Dialog confirm action button"
25986
+ removeConfirmationDialogConfirmText="Yes"
25987
+
25988
+ i18n-removeConfirmationDialogRejectText="kendo.grid.removeConfirmationDialogRejectText|The text of the built-in remove item confirmation Dialog reject action button"
25989
+ removeConfirmationDialogRejectText="No"
25990
+
25991
+ i18n-externalEditingTitle="kendo.grid.externalEditingTitle|The title of the built-in external editing form container"
25992
+ externalEditingTitle="Edit"
25993
+
25994
+ i18n-externalEditingSaveText="kendo.grid.externalEditingSaveText|The text of the external editing form Save button"
25995
+ externalEditingSaveText="Save"
25996
+
25997
+ i18n-externalEditingCancelText="kendo.grid.externalEditingCancelText|The text of the external editing form Cancel button"
25998
+ externalEditingCancelText="Cancel"
25839
25999
  >
25840
26000
  </ng-container>
25841
26001
  <kendo-grid-toolbar
@@ -26064,7 +26224,8 @@ class GridComponent {
26064
26224
  [columns]="$any(lockedLeafColumns)"
26065
26225
  [detailTemplate]="detailTemplate"
26066
26226
  [logicalRowIndex]="ariaRowCount"
26067
- [totalColumns]="columnsContainer">
26227
+ [totalColumns]="columnsContainer"
26228
+ [totalColumnsCount]="leafColumns.length">
26068
26229
  </tfoot>
26069
26230
  </table>
26070
26231
  </div>
@@ -26091,7 +26252,8 @@ class GridComponent {
26091
26252
  [columns]="$any(headerColumns)"
26092
26253
  [lockedColumnsCount]="lockedLeafColumns.length"
26093
26254
  [detailTemplate]="detailTemplate"
26094
- [totalColumns]="columnsContainer">
26255
+ [totalColumns]="columnsContainer"
26256
+ [totalColumnsCount]="leafColumns.length">
26095
26257
  </tfoot>
26096
26258
  </table>
26097
26259
  </div>
@@ -26112,6 +26274,8 @@ class GridComponent {
26112
26274
  </colgroup>
26113
26275
  <thead kendoGridHeader
26114
26276
  *ngIf="!hideHeader"
26277
+ class="k-grid-header"
26278
+ [class.k-grid-draggable-header]="groupable || reorderable"
26115
26279
  role="rowgroup"
26116
26280
  [resizable]="resizable"
26117
26281
  [scrollable]="false"
@@ -26154,7 +26318,8 @@ class GridComponent {
26154
26318
  [groups]="group"
26155
26319
  [columns]="$any(leafColumns)"
26156
26320
  [detailTemplate]="detailTemplate"
26157
- [totalColumns]="columnsContainer">
26321
+ [totalColumns]="columnsContainer"
26322
+ [totalColumnsCount]="leafColumns.length">
26158
26323
  </tfoot>
26159
26324
  </table>
26160
26325
  </ng-container>
@@ -26237,8 +26402,10 @@ class GridComponent {
26237
26402
  <kendo-pager-info *ngIf="normalizedPageableSettings.info">
26238
26403
  </kendo-pager-info>
26239
26404
  </ng-template>
26405
+ <div kendoDialogContainer></div>
26406
+
26240
26407
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
26241
- `, 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", "stickyRowHeight", "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"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }, { kind: "component", type: i44.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i44.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i44.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["size"] }, { kind: "component", type: i44.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i44.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i44.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["pageSizes", "size"] }, { kind: "component", type: i44.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i44.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i44.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive"], outputs: ["pageChange", "pageSizeChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None });
26408
+ `, 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", "stickyRowHeight", "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", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }, { kind: "component", type: i44.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i44.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i44.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["size"] }, { kind: "component", type: i44.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i44.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i44.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["pageSizes", "size"] }, { kind: "component", type: i44.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i44.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i44.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive"], outputs: ["pageChange", "pageSizeChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: DialogContainerDirective, selector: "[kendoDialogContainer]" }], encapsulation: i0.ViewEncapsulation.None });
26242
26409
  }
26243
26410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
26244
26411
  type: Component,
@@ -26547,6 +26714,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26547
26714
 
26548
26715
  i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
26549
26716
  groupChipMenuNext="Move as next"
26717
+
26718
+ i18n-formValidationErrorText="kendo.grid.formValidationErrorText|The default text of a form validation error when using external editing."
26719
+ formValidationErrorText="{{ 'The {fieldName} field has {errorName} validation error' }}"
26720
+
26721
+ i18n-removeConfirmationDialogTitle="kendo.grid.removeConfirmationDialogTitle|The title of the built-in remove item confirmation Dialog"
26722
+ removeConfirmationDialogTitle="Please confirm"
26723
+
26724
+ i18n-removeConfirmationDialogContent="kendo.grid.removeConfirmationDialogContent|The content of the built-in remove item confirmation Dialog"
26725
+ removeConfirmationDialogContent="Are you sure you want to delete this item?"
26726
+
26727
+ i18n-removeConfirmationDialogConfirmText="kendo.grid.removeConfirmationDialogConfirmText|The text of the built-in remove item confirmation Dialog confirm action button"
26728
+ removeConfirmationDialogConfirmText="Yes"
26729
+
26730
+ i18n-removeConfirmationDialogRejectText="kendo.grid.removeConfirmationDialogRejectText|The text of the built-in remove item confirmation Dialog reject action button"
26731
+ removeConfirmationDialogRejectText="No"
26732
+
26733
+ i18n-externalEditingTitle="kendo.grid.externalEditingTitle|The title of the built-in external editing form container"
26734
+ externalEditingTitle="Edit"
26735
+
26736
+ i18n-externalEditingSaveText="kendo.grid.externalEditingSaveText|The text of the external editing form Save button"
26737
+ externalEditingSaveText="Save"
26738
+
26739
+ i18n-externalEditingCancelText="kendo.grid.externalEditingCancelText|The text of the external editing form Cancel button"
26740
+ externalEditingCancelText="Cancel"
26550
26741
  >
26551
26742
  </ng-container>
26552
26743
  <kendo-grid-toolbar
@@ -26775,7 +26966,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26775
26966
  [columns]="$any(lockedLeafColumns)"
26776
26967
  [detailTemplate]="detailTemplate"
26777
26968
  [logicalRowIndex]="ariaRowCount"
26778
- [totalColumns]="columnsContainer">
26969
+ [totalColumns]="columnsContainer"
26970
+ [totalColumnsCount]="leafColumns.length">
26779
26971
  </tfoot>
26780
26972
  </table>
26781
26973
  </div>
@@ -26802,7 +26994,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26802
26994
  [columns]="$any(headerColumns)"
26803
26995
  [lockedColumnsCount]="lockedLeafColumns.length"
26804
26996
  [detailTemplate]="detailTemplate"
26805
- [totalColumns]="columnsContainer">
26997
+ [totalColumns]="columnsContainer"
26998
+ [totalColumnsCount]="leafColumns.length">
26806
26999
  </tfoot>
26807
27000
  </table>
26808
27001
  </div>
@@ -26823,6 +27016,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26823
27016
  </colgroup>
26824
27017
  <thead kendoGridHeader
26825
27018
  *ngIf="!hideHeader"
27019
+ class="k-grid-header"
27020
+ [class.k-grid-draggable-header]="groupable || reorderable"
26826
27021
  role="rowgroup"
26827
27022
  [resizable]="resizable"
26828
27023
  [scrollable]="false"
@@ -26865,7 +27060,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26865
27060
  [groups]="group"
26866
27061
  [columns]="$any(leafColumns)"
26867
27062
  [detailTemplate]="detailTemplate"
26868
- [totalColumns]="columnsContainer">
27063
+ [totalColumns]="columnsContainer"
27064
+ [totalColumnsCount]="leafColumns.length">
26869
27065
  </tfoot>
26870
27066
  </table>
26871
27067
  </ng-container>
@@ -26948,6 +27144,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26948
27144
  <kendo-pager-info *ngIf="normalizedPageableSettings.info">
26949
27145
  </kendo-pager-info>
26950
27146
  </ng-template>
27147
+ <div kendoDialogContainer></div>
27148
+
26951
27149
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
26952
27150
  `,
26953
27151
  standalone: true,
@@ -26956,7 +27154,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26956
27154
  TableDirective, GridTableDirective, ColGroupComponent, HeaderComponent, ResizableContainerDirective,
26957
27155
  ListComponent, DragTargetContainerDirective, DropTargetContainerDirective, DraggableDirective,
26958
27156
  GridMarqueeDirective, FooterComponent, TableBodyComponent, LoadingComponent, StatusBarComponent,
26959
- IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet
27157
+ IconWrapperComponent, WatermarkOverlayComponent, ...KENDO_PAGER, NgTemplateOutlet, DialogContainerDirective
26960
27158
  ]
26961
27159
  }]
26962
27160
  }], ctorParameters: function () { return [{ type: BrowserSupportService }, { type: SelectionService }, { type: CellSelectionService }, { type: i0.ElementRef }, { type: GroupInfoService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: DetailsService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: i0.Renderer2 }, { type: ExcelService }, { type: i0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: i1$2.LocalizationService }, { type: ContextService }, { type: SizingOptionsService }, { type: RowReorderService }]; }, propDecorators: { data: [{
@@ -27505,10 +27703,32 @@ class EditingDirectiveBase {
27505
27703
  get editService() {
27506
27704
  return this.userEditService || this.defaultEditService;
27507
27705
  }
27706
+ removeConfirmationSubject = new Subject();
27707
+ dialogService;
27708
+ localization;
27709
+ defaultRemoveConfirmation = (_item) => {
27710
+ const dialog = this.dialogService.open({
27711
+ title: this.localization.get('removeConfirmationDialogTitle'),
27712
+ content: this.localization.get('removeConfirmationDialogContent'),
27713
+ actions: [{
27714
+ text: this.localization.get('removeConfirmationDialogConfirmText'),
27715
+ themeColor: 'primary',
27716
+ svgIcon: checkIcon,
27717
+ icon: 'check'
27718
+ }, {
27719
+ text: this.localization.get('removeConfirmationDialogRejectText'),
27720
+ svgIcon: xIcon,
27721
+ icon: 'x'
27722
+ }],
27723
+ });
27724
+ dialog.result.pipe(take(1)).subscribe((e) => this.removeConfirmationSubject.next(e.text === this.localization.get('removeConfirmationDialogConfirmText')));
27725
+ return this.removeConfirmationSubject;
27726
+ };
27508
27727
  /**
27509
27728
  * A function that is called to confirm if the `dataItem` will be removed.
27729
+ * Setting to `true` will result in displaying a default confirmation dialog.
27510
27730
  */
27511
- removeConfirmation;
27731
+ removeConfirmation = false;
27512
27732
  subscriptions = new Subscription();
27513
27733
  defaultEditService;
27514
27734
  userEditService;
@@ -27516,6 +27736,8 @@ class EditingDirectiveBase {
27516
27736
  this.grid = grid;
27517
27737
  this.localDataChangesService = localDataChangesService;
27518
27738
  this.defaultEditService = this.createDefaultService();
27739
+ this.dialogService = inject(DialogService);
27740
+ this.localization = inject(LocalizationService);
27519
27741
  }
27520
27742
  /**
27521
27743
  * @hidden
@@ -27536,7 +27758,7 @@ class EditingDirectiveBase {
27536
27758
  createDefaultService() {
27537
27759
  return new LocalEditService(this.grid, this.localDataChangesService);
27538
27760
  }
27539
- addHandler() {
27761
+ addHandler(_args) {
27540
27762
  this.grid.addRow(this.createModel({ isNew: true }));
27541
27763
  }
27542
27764
  saveHandler(args) {
@@ -27561,7 +27783,8 @@ class EditingDirectiveBase {
27561
27783
  }
27562
27784
  };
27563
27785
  if (this.removeConfirmation) {
27564
- const result = this.removeConfirmation(dataItem);
27786
+ const confirmationCallback = typeof this.removeConfirmation === 'boolean' ? this.defaultRemoveConfirmation : this.removeConfirmation;
27787
+ const result = confirmationCallback(dataItem);
27565
27788
  if (result instanceof Promise) {
27566
27789
  result.then(removeItem);
27567
27790
  }
@@ -27842,6 +28065,495 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27842
28065
  args: ['kendoGridInCellEditing']
27843
28066
  }] } });
27844
28067
 
28068
+ /**
28069
+ * @hidden
28070
+ */
28071
+ class FormFormFieldComponent {
28072
+ localization;
28073
+ cdr;
28074
+ control;
28075
+ floatingLabel;
28076
+ showError;
28077
+ input;
28078
+ constructor(localization, cdr) {
28079
+ this.localization = localization;
28080
+ this.cdr = cdr;
28081
+ }
28082
+ // required to avoid ExpressionChangedAfterItHasBeenCheckedError caused by
28083
+ // binding to the label's 'for' attribute dynamically
28084
+ ngAfterContentInit() {
28085
+ this.cdr.detectChanges();
28086
+ }
28087
+ messageFor(key, errorName, field) {
28088
+ return replaceMessagePlaceholder(replaceMessagePlaceholder(this.localization.get(key), 'fieldName', field), 'errorName', errorName);
28089
+ }
28090
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFormFieldComponent, deps: [{ token: i1$2.LocalizationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
28091
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFormFieldComponent, isStandalone: true, selector: "kendo-form-formfield", inputs: { control: "control", floatingLabel: "floatingLabel", showError: "showError" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: `
28092
+ <kendo-formfield
28093
+ [orientation]="control.orientation">
28094
+ <kendo-floatinglabel
28095
+ *ngIf="control.label && floatingLabel && $any(control.dataType) !== 'boolean'"
28096
+ labelCssClass="k-form-label"
28097
+ [text]="control.label">
28098
+ <kendo-textbox
28099
+ *ngIf="$any(control.dataType) === 'text'"
28100
+ [formControl]="control.formControl"></kendo-textbox>
28101
+ <kendo-numerictextbox
28102
+ *ngIf="$any(control.dataType) === 'numeric'"
28103
+ [formControl]="control.formControl"></kendo-numerictextbox>
28104
+ <kendo-datepicker
28105
+ *ngIf="$any(control.dataType) === 'date'"
28106
+ [formControl]="control.formControl"></kendo-datepicker>
28107
+ </kendo-floatinglabel>
28108
+ <kendo-label [style.align-items]="'start'"
28109
+ *ngIf="control.label && !floatingLabel && $any(control.dataType) !== 'boolean'"
28110
+ labelCssClass="k-form-label"
28111
+ [text]="control.label"
28112
+ [for]="input">
28113
+ </kendo-label>
28114
+ <kendo-textbox #input
28115
+ *ngIf="!floatingLabel && (control.dataType) === 'text'"
28116
+ [formControl]="control.formControl"></kendo-textbox>
28117
+ <kendo-numerictextbox #input
28118
+ *ngIf="!floatingLabel && $any(control.dataType) === 'numeric'"
28119
+ [formControl]="control.formControl"></kendo-numerictextbox>
28120
+ <kendo-datepicker #input
28121
+ *ngIf="!floatingLabel && $any(control.dataType) === 'date'"
28122
+ [formControl]="control.formControl"></kendo-datepicker>
28123
+ <div
28124
+ *ngIf="control.label && $any(control.dataType) === 'boolean'"
28125
+ class="k-form-field-checkbox-wrap">
28126
+ <kendo-checkbox #cb [formControl]="control.formControl"></kendo-checkbox>
28127
+ <kendo-label
28128
+ *ngIf="control.label"
28129
+ class="k-checkbox-label"
28130
+ [for]="cb"
28131
+ [text]="control.label">
28132
+ </kendo-label>
28133
+ </div>
28134
+
28135
+ <kendo-formhint *ngIf="control?.hint">{{control.hint}}</kendo-formhint>
28136
+ <ng-container *ngIf="showError && control.formControl?.invalid && control.formControl.touched">
28137
+ <kendo-formerror *ngFor="let err of control?.formControl?.errors | keyvalue">{{control.errors ? control.errors[err.key] : messageFor('formValidationError', err.key, control.name)}}</kendo-formerror>
28138
+ </ng-container>
28139
+ </kendo-formfield>
28140
+ `, 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"] }, { 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$1.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", "title", "subtitle", "rangeValidation", "disabledDatesValidation", "weekNumber", "size", "rounded", "fillMode", "adaptiveMode"], outputs: ["valueChange", "focus", "blur", "open", "close", "escape"], exportAs: ["kendo-datepicker"] }] });
28141
+ }
28142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFormFieldComponent, decorators: [{
28143
+ type: Component,
28144
+ args: [{
28145
+ selector: 'kendo-form-formfield',
28146
+ standalone: true,
28147
+ imports: [KeyValuePipe, NgFor, NgIf, ReactiveFormsModule,
28148
+ KENDO_LABELS, KENDO_FORMFIELD, KENDO_TEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_BUTTON, KENDO_CHECKBOX, KENDO_DATEPICKER],
28149
+ template: `
28150
+ <kendo-formfield
28151
+ [orientation]="control.orientation">
28152
+ <kendo-floatinglabel
28153
+ *ngIf="control.label && floatingLabel && $any(control.dataType) !== 'boolean'"
28154
+ labelCssClass="k-form-label"
28155
+ [text]="control.label">
28156
+ <kendo-textbox
28157
+ *ngIf="$any(control.dataType) === 'text'"
28158
+ [formControl]="control.formControl"></kendo-textbox>
28159
+ <kendo-numerictextbox
28160
+ *ngIf="$any(control.dataType) === 'numeric'"
28161
+ [formControl]="control.formControl"></kendo-numerictextbox>
28162
+ <kendo-datepicker
28163
+ *ngIf="$any(control.dataType) === 'date'"
28164
+ [formControl]="control.formControl"></kendo-datepicker>
28165
+ </kendo-floatinglabel>
28166
+ <kendo-label [style.align-items]="'start'"
28167
+ *ngIf="control.label && !floatingLabel && $any(control.dataType) !== 'boolean'"
28168
+ labelCssClass="k-form-label"
28169
+ [text]="control.label"
28170
+ [for]="input">
28171
+ </kendo-label>
28172
+ <kendo-textbox #input
28173
+ *ngIf="!floatingLabel && (control.dataType) === 'text'"
28174
+ [formControl]="control.formControl"></kendo-textbox>
28175
+ <kendo-numerictextbox #input
28176
+ *ngIf="!floatingLabel && $any(control.dataType) === 'numeric'"
28177
+ [formControl]="control.formControl"></kendo-numerictextbox>
28178
+ <kendo-datepicker #input
28179
+ *ngIf="!floatingLabel && $any(control.dataType) === 'date'"
28180
+ [formControl]="control.formControl"></kendo-datepicker>
28181
+ <div
28182
+ *ngIf="control.label && $any(control.dataType) === 'boolean'"
28183
+ class="k-form-field-checkbox-wrap">
28184
+ <kendo-checkbox #cb [formControl]="control.formControl"></kendo-checkbox>
28185
+ <kendo-label
28186
+ *ngIf="control.label"
28187
+ class="k-checkbox-label"
28188
+ [for]="cb"
28189
+ [text]="control.label">
28190
+ </kendo-label>
28191
+ </div>
28192
+
28193
+ <kendo-formhint *ngIf="control?.hint">{{control.hint}}</kendo-formhint>
28194
+ <ng-container *ngIf="showError && control.formControl?.invalid && control.formControl.touched">
28195
+ <kendo-formerror *ngFor="let err of control?.formControl?.errors | keyvalue">{{control.errors ? control.errors[err.key] : messageFor('formValidationError', err.key, control.name)}}</kendo-formerror>
28196
+ </ng-container>
28197
+ </kendo-formfield>
28198
+ `
28199
+ }]
28200
+ }], ctorParameters: function () { return [{ type: i1$2.LocalizationService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { control: [{
28201
+ type: Input
28202
+ }], floatingLabel: [{
28203
+ type: Input
28204
+ }], showError: [{
28205
+ type: Input
28206
+ }], input: [{
28207
+ type: ViewChild,
28208
+ args: ['input']
28209
+ }] } });
28210
+
28211
+ let idx = 0;
28212
+ /**
28213
+ * @hidden
28214
+ */
28215
+ class FormComponent {
28216
+ controls = [];
28217
+ set formSettings(value) {
28218
+ this._formSettings = { ...this._formSettings, ...value };
28219
+ }
28220
+ get formSettings() {
28221
+ return this._formSettings;
28222
+ }
28223
+ formGroup;
28224
+ set actionButtons(value) {
28225
+ if (typeof value === 'boolean') {
28226
+ this.normalizeActionButtonSettings(value);
28227
+ }
28228
+ else {
28229
+ this._actionButtons = value;
28230
+ }
28231
+ }
28232
+ get actionButtons() {
28233
+ return this._actionButtons;
28234
+ }
28235
+ formSubmit = new EventEmitter();
28236
+ get componentIndex() {
28237
+ return idx++;
28238
+ }
28239
+ _formSettings = {
28240
+ orientation: 'vertical',
28241
+ showErrors: true,
28242
+ floatingLabels: false
28243
+ };
28244
+ defaultActionButtons = [{
28245
+ actionType: 'submit',
28246
+ text: 'Submit',
28247
+ svgIcon: saveIcon,
28248
+ icon: 'save',
28249
+ themeColor: 'primary'
28250
+ }, {
28251
+ actionType: 'reset',
28252
+ svgIcon: cancelIcon,
28253
+ text: 'Reset',
28254
+ icon: 'cancel'
28255
+ }];
28256
+ _actionButtons = this.defaultActionButtons;
28257
+ ngOnInit() {
28258
+ idx++;
28259
+ }
28260
+ normalizeActionButtonSettings(value) {
28261
+ this._actionButtons = value ? this.defaultActionButtons : [];
28262
+ }
28263
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28264
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormComponent, isStandalone: true, selector: "kendo-grid-external-form", inputs: { controls: "controls", formSettings: "formSettings", formGroup: "formGroup", actionButtons: "actionButtons" }, outputs: { formSubmit: "formSubmit" }, ngImport: i0, template: `
28265
+ <div role="form"
28266
+ class="k-form k-form-md"
28267
+ [class.k-form-horizontal]="formSettings.orientation === 'horizontal'"
28268
+ [formGroup]="formGroup"
28269
+ (ngSubmit)="formSubmit.next({originalEvent: $event, formGroup})"
28270
+ (reset)="$event.preventDefault()">
28271
+ <ng-container *ngFor="let control of controls; let idx = index;">
28272
+ <ng-container *ngIf="!control.template; else template">
28273
+ <kendo-form-formfield
28274
+ [control]="control"
28275
+ [showError]="formSettings.showErrors"
28276
+ [floatingLabel]="formSettings.floatingLabels"></kendo-form-formfield>
28277
+ </ng-container>
28278
+ <ng-template #template>
28279
+ <ng-container
28280
+ [ngTemplateOutlet]="control.template"
28281
+ [ngTemplateOutletContext]="control.templateContext"></ng-container>
28282
+ </ng-template>
28283
+ </ng-container>
28284
+ <div class="k-form-buttons" *ngIf="$any(actionButtons).length">
28285
+ <button kendoButton *ngFor="let button of $any(actionButtons)"
28286
+ [class.k-form-submit]="button.actionType === 'submit'"
28287
+ [size]="button.size"
28288
+ [themeColor]="button.themeColor || button.actionType === 'submit' ? 'primary' : undefined"
28289
+ [rounded]="button.rounded"
28290
+ [attr.type]="button.actionType"
28291
+ [svgIcon]="button.svgIcon"
28292
+ [icon]="button.icon">
28293
+ {{button.text}}
28294
+ </button>
28295
+ </div>
28296
+ </div>
28297
+ `, 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: i2.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"] }] });
28298
+ }
28299
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, decorators: [{
28300
+ type: Component,
28301
+ args: [{
28302
+ selector: 'kendo-grid-external-form',
28303
+ standalone: true,
28304
+ template: `
28305
+ <div role="form"
28306
+ class="k-form k-form-md"
28307
+ [class.k-form-horizontal]="formSettings.orientation === 'horizontal'"
28308
+ [formGroup]="formGroup"
28309
+ (ngSubmit)="formSubmit.next({originalEvent: $event, formGroup})"
28310
+ (reset)="$event.preventDefault()">
28311
+ <ng-container *ngFor="let control of controls; let idx = index;">
28312
+ <ng-container *ngIf="!control.template; else template">
28313
+ <kendo-form-formfield
28314
+ [control]="control"
28315
+ [showError]="formSettings.showErrors"
28316
+ [floatingLabel]="formSettings.floatingLabels"></kendo-form-formfield>
28317
+ </ng-container>
28318
+ <ng-template #template>
28319
+ <ng-container
28320
+ [ngTemplateOutlet]="control.template"
28321
+ [ngTemplateOutletContext]="control.templateContext"></ng-container>
28322
+ </ng-template>
28323
+ </ng-container>
28324
+ <div class="k-form-buttons" *ngIf="$any(actionButtons).length">
28325
+ <button kendoButton *ngFor="let button of $any(actionButtons)"
28326
+ [class.k-form-submit]="button.actionType === 'submit'"
28327
+ [size]="button.size"
28328
+ [themeColor]="button.themeColor || button.actionType === 'submit' ? 'primary' : undefined"
28329
+ [rounded]="button.rounded"
28330
+ [attr.type]="button.actionType"
28331
+ [svgIcon]="button.svgIcon"
28332
+ [icon]="button.icon">
28333
+ {{button.text}}
28334
+ </button>
28335
+ </div>
28336
+ </div>
28337
+ `,
28338
+ imports: [NgFor, NgIf, NgTemplateOutlet, ReactiveFormsModule, FormFormFieldComponent, KENDO_BUTTON],
28339
+ }]
28340
+ }], propDecorators: { controls: [{
28341
+ type: Input
28342
+ }], formSettings: [{
28343
+ type: Input
28344
+ }], formGroup: [{
28345
+ type: Input
28346
+ }], actionButtons: [{
28347
+ type: Input
28348
+ }], formSubmit: [{
28349
+ type: Output
28350
+ }] } });
28351
+
28352
+ /**
28353
+ * @hidden
28354
+ */
28355
+ class DialogFormComponent extends DialogContentBase {
28356
+ localization;
28357
+ controls;
28358
+ formGroup;
28359
+ formSettings;
28360
+ saveIcon = saveIcon;
28361
+ cancelIcon = cancelIcon;
28362
+ constructor(dialogRef, localization) {
28363
+ super(dialogRef);
28364
+ this.localization = localization;
28365
+ }
28366
+ save() {
28367
+ this.dialog.close({ text: this.localization.get('externalEditingSaveText') });
28368
+ }
28369
+ cancel() {
28370
+ this.dialog.close({ text: this.localization.get('externalEditingCancelText') });
28371
+ }
28372
+ messageFor(key) {
28373
+ return this.localization.get(key);
28374
+ }
28375
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogFormComponent, deps: [{ token: i1$6.DialogRef }, { token: i1$2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
28376
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DialogFormComponent, isStandalone: true, selector: "kendo-grid-dialog-form", inputs: { controls: "controls", formGroup: "formGroup", formSettings: "formSettings" }, usesInheritance: true, ngImport: i0, template: `
28377
+ <kendo-grid-external-form
28378
+ [controls]="controls"
28379
+ [formGroup]="formGroup"
28380
+ [formSettings]="formSettings"
28381
+ [actionButtons]="false"></kendo-grid-external-form>
28382
+ <kendo-dialog-actions [layout]="this.dialog?.dialog?.instance?.actionsLayout">
28383
+ <button
28384
+ kendoButton
28385
+ themeColor="primary"
28386
+ [svgIcon]="saveIcon"
28387
+ [disabled]="!formGroup.valid"
28388
+ (click)="save()"
28389
+ >
28390
+ {{messageFor('externalEditingSaveText')}}
28391
+ </button>
28392
+ <button
28393
+ kendoButton
28394
+ [svgIcon]="cancelIcon"
28395
+ (click)="cancel()">
28396
+ {{messageFor('externalEditingCancelText')}}
28397
+ </button>
28398
+ </kendo-dialog-actions>
28399
+ `, isInline: true, dependencies: [{ kind: "component", type: FormComponent, selector: "kendo-grid-external-form", inputs: ["controls", "formSettings", "formGroup", "actionButtons"], outputs: ["formSubmit"] }, { kind: "component", type: DialogActionsComponent, selector: "kendo-dialog-actions", inputs: ["actions", "layout"], outputs: ["action"] }, { kind: "component", type: i2.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"] }] });
28400
+ }
28401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DialogFormComponent, decorators: [{
28402
+ type: Component,
28403
+ args: [{
28404
+ selector: 'kendo-grid-dialog-form',
28405
+ standalone: true,
28406
+ imports: [FormComponent, DialogActionsComponent, KENDO_BUTTON],
28407
+ template: `
28408
+ <kendo-grid-external-form
28409
+ [controls]="controls"
28410
+ [formGroup]="formGroup"
28411
+ [formSettings]="formSettings"
28412
+ [actionButtons]="false"></kendo-grid-external-form>
28413
+ <kendo-dialog-actions [layout]="this.dialog?.dialog?.instance?.actionsLayout">
28414
+ <button
28415
+ kendoButton
28416
+ themeColor="primary"
28417
+ [svgIcon]="saveIcon"
28418
+ [disabled]="!formGroup.valid"
28419
+ (click)="save()"
28420
+ >
28421
+ {{messageFor('externalEditingSaveText')}}
28422
+ </button>
28423
+ <button
28424
+ kendoButton
28425
+ [svgIcon]="cancelIcon"
28426
+ (click)="cancel()">
28427
+ {{messageFor('externalEditingCancelText')}}
28428
+ </button>
28429
+ </kendo-dialog-actions>
28430
+ `
28431
+ }]
28432
+ }], ctorParameters: function () { return [{ type: i1$6.DialogRef }, { type: i1$2.LocalizationService }]; }, propDecorators: { controls: [{
28433
+ type: Input
28434
+ }], formGroup: [{
28435
+ type: Input
28436
+ }], formSettings: [{
28437
+ type: Input
28438
+ }] } });
28439
+
28440
+ /**
28441
+ * A directive which encapsulates the editing operations of the Grid when using the
28442
+ * External Form ([see example](slug:editing_directives_grid#external-editing)).
28443
+ */
28444
+ class ExternalEditingDirective extends EditingDirectiveBase {
28445
+ grid;
28446
+ localDataChangesService;
28447
+ /**
28448
+ * The function that creates the `FormGroup` for the edited model.
28449
+ */
28450
+ createFormGroup;
28451
+ /**
28452
+ * Allows you to customize form orientation, hints, labels and error messages.
28453
+ */
28454
+ formSettings;
28455
+ /**
28456
+ * Allows you to customize the Dialog that contains the edit form.
28457
+ */
28458
+ dialogSettings;
28459
+ constructor(grid, localDataChangesService) {
28460
+ super(grid, localDataChangesService);
28461
+ this.grid = grid;
28462
+ this.localDataChangesService = localDataChangesService;
28463
+ }
28464
+ ngOnInit() {
28465
+ super.ngOnInit();
28466
+ this.subscriptions
28467
+ .add(this.grid.edit.subscribe(this.editHandler.bind(this)));
28468
+ }
28469
+ /**
28470
+ * @hidden
28471
+ * Opens a Dialog that contains the edit form.
28472
+ */
28473
+ openEditFormDialog(editEventArgs, formGroup, formSettings) {
28474
+ const settings = { content: DialogFormComponent, title: this.localization.get('externalEditingTitle'), ...this.dialogSettings };
28475
+ const dialog = this.dialogService.open(settings);
28476
+ const formControls = this.normalizeFormSettings(formGroup, editEventArgs);
28477
+ dialog.content.setInput('controls', formControls);
28478
+ formSettings && dialog.content.setInput('formSettings', formSettings);
28479
+ dialog.content.setInput('formGroup', formGroup);
28480
+ dialog.result.subscribe((r) => {
28481
+ const resultType = r['text'];
28482
+ if (resultType === this.localization.get('externalEditingSaveText')) {
28483
+ this.saveHandler({ ...editEventArgs, formGroup });
28484
+ }
28485
+ dialog.close();
28486
+ });
28487
+ }
28488
+ createModel(args) {
28489
+ return this.createFormGroup(args);
28490
+ }
28491
+ editHandler(args) {
28492
+ const formGroup = this.createModel(args);
28493
+ this.openEditFormDialog(args, formGroup, this.formSettings);
28494
+ }
28495
+ saveModel({ dataItem, formGroup, isNew }) {
28496
+ if (!formGroup.dirty && !isNew) {
28497
+ return;
28498
+ }
28499
+ if (formGroup.valid) {
28500
+ const item = dataItem || [];
28501
+ this.editService.assignValues(item, formGroup.value);
28502
+ return item;
28503
+ }
28504
+ markAllAsTouched(formGroup);
28505
+ }
28506
+ addHandler(args) {
28507
+ const formGroup = this.createModel(args);
28508
+ this.openEditFormDialog(args, formGroup, this.formSettings);
28509
+ }
28510
+ normalizeFormSettings(args, editEventArgs) {
28511
+ const editableColumnFields = this.grid.columns.toArray().filter(c => c.field && c.editable && isPresent$1(args.get(c.field))).map(c => c.field);
28512
+ const settings = editableColumnFields.map(k => {
28513
+ const column = this.grid.columns.toArray().find(c => c.field === k);
28514
+ const title = column.title || k;
28515
+ const template = column.editTemplateRef;
28516
+ const templateContext = template ? {
28517
+ $implicit: args,
28518
+ isNew: editEventArgs.isNew,
28519
+ column,
28520
+ dataItem: editEventArgs.dataItem,
28521
+ formGroup: args,
28522
+ rowIndex: editEventArgs.rowIndex
28523
+ } : null;
28524
+ const customSettings = this.formSettings?.fields?.[k];
28525
+ return {
28526
+ name: k,
28527
+ label: customSettings?.label || title,
28528
+ hint: customSettings?.hint,
28529
+ errors: customSettings?.errors,
28530
+ formControl: args.get(k),
28531
+ dataType: column.editor,
28532
+ orientation: this.formSettings?.orientation || 'vertical',
28533
+ template: template,
28534
+ templateContext: templateContext
28535
+ };
28536
+ });
28537
+ return settings.filter(item => isPresent$1(item));
28538
+ }
28539
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExternalEditingDirective, deps: [{ token: GridComponent }, { token: LocalDataChangesService }], target: i0.ɵɵFactoryTarget.Directive });
28540
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ExternalEditingDirective, isStandalone: true, selector: "[kendoGridExternalEditing]", inputs: { createFormGroup: ["kendoGridExternalEditing", "createFormGroup"], formSettings: "formSettings", dialogSettings: "dialogSettings" }, usesInheritance: true, ngImport: i0 });
28541
+ }
28542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExternalEditingDirective, decorators: [{
28543
+ type: Directive,
28544
+ args: [{
28545
+ selector: '[kendoGridExternalEditing]',
28546
+ standalone: true
28547
+ }]
28548
+ }], ctorParameters: function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, propDecorators: { createFormGroup: [{
28549
+ type: Input,
28550
+ args: ['kendoGridExternalEditing']
28551
+ }], formSettings: [{
28552
+ type: Input
28553
+ }], dialogSettings: [{
28554
+ type: Input
28555
+ }] } });
28556
+
27845
28557
  /**
27846
28558
  * A directive which controls the expanded state of the master detail rows. ([see example](slug:master_detail_expanded_state_grid#toc-built-in-directive))
27847
28559
  */
@@ -29085,6 +29797,7 @@ const KENDO_GRID_DECLARATIONS = [
29085
29797
  TemplateEditingDirective,
29086
29798
  ReactiveEditingDirective,
29087
29799
  InCellEditingDirective,
29800
+ ExternalEditingDirective,
29088
29801
  ExpandDetailsDirective,
29089
29802
  ExpandGroupDirective,
29090
29803
  GroupBindingDirective,
@@ -29093,7 +29806,10 @@ const KENDO_GRID_DECLARATIONS = [
29093
29806
  GridToolbarFocusableDirective,
29094
29807
  StatusBarComponent,
29095
29808
  StatusBarTemplateDirective,
29096
- GridClipboardDirective
29809
+ GridClipboardDirective,
29810
+ FormComponent,
29811
+ DialogFormComponent,
29812
+ FormFormFieldComponent
29097
29813
  ];
29098
29814
  /**
29099
29815
  * @hidden
@@ -29113,6 +29829,7 @@ const KENDO_GRID_EXPORTS = [
29113
29829
  TemplateEditingDirective,
29114
29830
  ReactiveEditingDirective,
29115
29831
  InCellEditingDirective,
29832
+ ExternalEditingDirective,
29116
29833
  ExpandDetailsDirective,
29117
29834
  ExpandGroupDirective,
29118
29835
  GridToolbarFocusableDirective,
@@ -29187,7 +29904,7 @@ const KENDO_GRID = [
29187
29904
  */
29188
29905
  class GridModule {
29189
29906
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
29190
- 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, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i44.CustomMessagesComponent, i44.PagerFocusableDirective, i44.PagerInfoComponent, i44.PagerInputComponent, i44.PagerNextButtonsComponent, i44.PagerNumericButtonsComponent, i44.PagerPageSizesComponent, i44.PagerPrevButtonsComponent, i44.PagerTemplateDirective, i44.PagerComponent, i44.PagerSpacerComponent, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent, i45.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, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GroupBindingDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent, i45.ToolBarToolComponent, TableDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, CustomMessagesComponent, GroupBindingDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, 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, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, 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, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridClipboardDirective, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent, i45.ToolBarToolComponent, i44.CustomMessagesComponent, i44.PagerFocusableDirective, i44.PagerInfoComponent, i44.PagerInputComponent, i44.PagerNextButtonsComponent, i44.PagerNumericButtonsComponent, i44.PagerPageSizesComponent, i44.PagerPrevButtonsComponent, i44.PagerTemplateDirective, i44.PagerComponent, i44.PagerSpacerComponent] });
29907
+ 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, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i44.CustomMessagesComponent, i44.PagerFocusableDirective, i44.PagerInfoComponent, i44.PagerInputComponent, i44.PagerNextButtonsComponent, i44.PagerNumericButtonsComponent, i44.PagerPageSizesComponent, i44.PagerPrevButtonsComponent, i44.PagerTemplateDirective, i44.PagerComponent, i44.PagerSpacerComponent, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent, i45.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, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GroupBindingDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, FormComponent, DialogFormComponent, FormFormFieldComponent, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent, i45.ToolBarToolComponent, TableDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, 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, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, 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, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridClipboardDirective, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent, i45.ToolBarToolComponent, i44.CustomMessagesComponent, i44.PagerFocusableDirective, i44.PagerInfoComponent, i44.PagerInputComponent, i44.PagerNextButtonsComponent, i44.PagerNumericButtonsComponent, i44.PagerPageSizesComponent, i44.PagerPrevButtonsComponent, i44.PagerTemplateDirective, i44.PagerComponent, i44.PagerSpacerComponent] });
29191
29908
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, providers: [
29192
29909
  PopupService,
29193
29910
  ResizeBatchService,
@@ -29202,7 +29919,7 @@ class GridModule {
29202
29919
  MonthViewService,
29203
29920
  YearViewService,
29204
29921
  NavigationService$1
29205
- ], imports: [GroupHeaderComponent, GroupPanelComponent, TableBodyComponent, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, HeaderComponent, i44.CustomMessagesComponent, i44.PagerInfoComponent, i44.PagerInputComponent, i44.PagerNextButtonsComponent, i44.PagerNumericButtonsComponent, i44.PagerPageSizesComponent, i44.PagerPrevButtonsComponent, i44.PagerComponent, i44.PagerSpacerComponent, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.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, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent] });
29922
+ ], imports: [GroupHeaderComponent, GroupPanelComponent, TableBodyComponent, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, HeaderComponent, i44.CustomMessagesComponent, i44.PagerInfoComponent, i44.PagerInputComponent, i44.PagerNextButtonsComponent, i44.PagerNumericButtonsComponent, i44.PagerPageSizesComponent, i44.PagerPrevButtonsComponent, i44.PagerComponent, i44.PagerSpacerComponent, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.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, i45.ToolBarComponent, i45.ToolbarCustomMessagesComponent, i45.ToolBarButtonComponent, i45.ToolBarButtonGroupComponent, i45.ToolBarDropDownButtonComponent, i45.ToolBarSeparatorComponent, i45.ToolBarSpacerComponent, i45.ToolBarSplitButtonComponent] });
29206
29923
  }
29207
29924
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, decorators: [{
29208
29925
  type: NgModule,
@@ -29302,8 +30019,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
29302
30019
  */
29303
30020
  class ExcelModule {
29304
30021
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
29305
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ExcelModule, imports: [i1$1.IconComponent, i1$1.SVGIconComponent, ExcelComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, i5$1.ColumnComponent, i5$1.ColumnGroupComponent, i5$1.FooterTemplateDirective, i5$1.GroupFooterTemplateDirective, i5$1.GroupHeaderColumnTemplateDirective, i5$1.GroupHeaderTemplateDirective], exports: [ExcelComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, i5$1.ColumnComponent, i5$1.ColumnGroupComponent, i5$1.FooterTemplateDirective, i5$1.GroupFooterTemplateDirective, i5$1.GroupHeaderColumnTemplateDirective, i5$1.GroupHeaderTemplateDirective] });
29306
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelModule, providers: [IconsService], imports: [KENDO_ICONS, ExcelCommandDirective, i5$1.ColumnComponent, i5$1.ColumnGroupComponent] });
30022
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: ExcelModule, imports: [i1$1.IconComponent, i1$1.SVGIconComponent, ExcelComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, i5$2.ColumnComponent, i5$2.ColumnGroupComponent, i5$2.FooterTemplateDirective, i5$2.GroupFooterTemplateDirective, i5$2.GroupHeaderColumnTemplateDirective, i5$2.GroupHeaderTemplateDirective], exports: [ExcelComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, i5$2.ColumnComponent, i5$2.ColumnGroupComponent, i5$2.FooterTemplateDirective, i5$2.GroupFooterTemplateDirective, i5$2.GroupHeaderColumnTemplateDirective, i5$2.GroupHeaderTemplateDirective] });
30023
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelModule, providers: [IconsService], imports: [KENDO_ICONS, ExcelCommandDirective, i5$2.ColumnComponent, i5$2.ColumnGroupComponent] });
29307
30024
  }
29308
30025
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ExcelModule, decorators: [{
29309
30026
  type: NgModule,
@@ -29318,5 +30035,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
29318
30035
  * Generated bundle index. Do not edit.
29319
30036
  */
29320
30037
 
29321
- export { AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, 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_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupBindingDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, 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, RemoveCommandDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, count, defaultTrackBy, hasFilterMenu, hasFilterRow, isFilterable, slice };
30038
+ export { AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, 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_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupBindingDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, 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, RemoveCommandDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, count, defaultTrackBy, hasFilterMenu, hasFilterRow, isFilterable, slice };
29322
30039