@progress/kendo-angular-grid 20.0.4-develop.2 → 20.1.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 (65) hide show
  1. package/adaptiveness/adaptive-renderer.component.d.ts +2 -3
  2. package/column-menu/column-chooser-content.component.d.ts +60 -0
  3. package/column-menu/column-chooser.component.d.ts +15 -4
  4. package/column-menu/column-list-kb-nav.service.d.ts +2 -2
  5. package/column-menu/column-list.component.d.ts +28 -21
  6. package/column-menu/column-menu-chooser.component.d.ts +2 -7
  7. package/column-menu/column-menu.component.d.ts +0 -4
  8. package/columns/column-base.d.ts +8 -0
  9. package/columns/command-column.component.d.ts +1 -1
  10. package/columns/span-column.component.d.ts +1 -1
  11. package/directives.d.ts +1 -2
  12. package/editing/cancel-command.directive.d.ts +1 -1
  13. package/editing/edit-row-options.interface.d.ts +1 -1
  14. package/editing/edit-template.directive.d.ts +1 -1
  15. package/editing/remove-command.directive.d.ts +1 -1
  16. package/editing/save-command.directive.d.ts +1 -1
  17. package/editing-directives/edit-service.interface.d.ts +2 -2
  18. package/editing-directives/external-editing.directive.d.ts +1 -1
  19. package/editing-directives/in-cell-editing.directive.d.ts +1 -1
  20. package/editing-directives/reactive-editing.directive.d.ts +1 -1
  21. package/editing-directives/template-editing.directive.d.ts +1 -1
  22. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +26 -46
  23. package/esm2022/column-menu/column-chooser-content.component.mjs +306 -0
  24. package/esm2022/column-menu/column-chooser.component.mjs +39 -31
  25. package/esm2022/column-menu/column-list-kb-nav.service.mjs +4 -4
  26. package/esm2022/column-menu/column-list.component.mjs +221 -176
  27. package/esm2022/column-menu/column-menu-chooser.component.mjs +17 -36
  28. package/esm2022/column-menu/column-menu-container.component.mjs +10 -1
  29. package/esm2022/column-menu/column-menu.component.mjs +19 -29
  30. package/esm2022/columns/column-base.mjs +8 -0
  31. package/esm2022/columns/command-column.component.mjs +1 -1
  32. package/esm2022/columns/span-column.component.mjs +1 -1
  33. package/esm2022/common/column-info.service.mjs +3 -0
  34. package/esm2022/directives.mjs +0 -2
  35. package/esm2022/editing/cancel-command.directive.mjs +1 -1
  36. package/esm2022/editing/edit-template.directive.mjs +1 -1
  37. package/esm2022/editing/remove-command.directive.mjs +1 -1
  38. package/esm2022/editing/save-command.directive.mjs +1 -1
  39. package/esm2022/editing-directives/external-editing.directive.mjs +1 -1
  40. package/esm2022/editing-directives/in-cell-editing.directive.mjs +1 -1
  41. package/esm2022/editing-directives/reactive-editing.directive.mjs +1 -1
  42. package/esm2022/editing-directives/template-editing.directive.mjs +1 -1
  43. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +2 -2
  44. package/esm2022/filtering/menu/filter-menu.component.mjs +7 -1
  45. package/esm2022/grid.component.mjs +6 -0
  46. package/esm2022/grid.module.mjs +47 -48
  47. package/esm2022/localization/messages.mjs +12 -1
  48. package/esm2022/navigation/logical-cell.directive.mjs +8 -2
  49. package/esm2022/navigation/navigation.service.mjs +1 -0
  50. package/esm2022/package-metadata.mjs +2 -2
  51. package/esm2022/rendering/list.component.mjs +23 -1
  52. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +39 -13
  53. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +1 -1
  54. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +2 -2
  55. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +1 -1
  56. package/fesm2022/progress-kendo-angular-grid.mjs +739 -391
  57. package/grid.module.d.ts +46 -47
  58. package/localization/messages.d.ts +10 -1
  59. package/navigation/navigation.service.d.ts +1 -0
  60. package/package.json +21 -21
  61. package/rendering/list.component.d.ts +1 -0
  62. package/rendering/toolbar/tools/column-chooser-tool.directive.d.ts +13 -1
  63. package/schematics/ngAdd/index.js +4 -4
  64. package/column-menu/column-chooser-item-checked.directive.d.ts +0 -21
  65. package/esm2022/column-menu/column-chooser-item-checked.directive.mjs +0 -45
@@ -6,17 +6,17 @@ import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Injectable, SecurityContext, InjectionToken, Optional, Inject, Directive, SkipSelf, Input, isDevMode, QueryList, Component, ContentChildren, ContentChild, forwardRef, Host, Output, HostBinding, Pipe, TemplateRef, ChangeDetectionStrategy, ViewChildren, ViewChild, Self, NgZone, HostListener, ElementRef, ViewContainerRef, ViewEncapsulation, inject, Injector, NgModule } from '@angular/core';
7
7
  import { merge, of, Subject, zip as zip$1, from, Subscription, interval, fromEvent, Observable, BehaviorSubject } from 'rxjs';
8
8
  import * as i1$3 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, normalizeNumpadKeys, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, closest as closest$1, hasObservers, ResizeSensorComponent, isFirefox, firefoxMaxHeight, closestInScope as closestInScope$1, isFocusable as isFocusable$1, PreventableEvent as PreventableEvent$1, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, ResizeBatchService } from '@progress/kendo-angular-common';
9
+ import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, normalizeNumpadKeys, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, PrefixTemplateDirective, closest as closest$1, hasObservers, ResizeSensorComponent, isFirefox, firefoxMaxHeight, closestInScope as closestInScope$1, isFocusable as isFocusable$1, PreventableEvent as PreventableEvent$1, getLicenseMessage, 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, checkIcon, arrowRotateCcwIcon, columnsIcon, pencilIcon, saveIcon, trashIcon, fileExcelIcon, filePdfIcon, sparklesIcon, chevronUpIcon, chevronDownIcon, chevronRightIcon, displayInlineFlexIcon, maxWidthIcon, stickIcon, unstickIcon, setColumnPositionIcon, slidersIcon, moreVerticalIcon, reorderIcon, minusIcon, insertMiddleIcon, xIcon, xCircleIcon, plusCircleIcon, chevronLeftIcon, tableWizardIcon, undoIcon, redoIcon, arrowsSwapIcon, groupIcon } from '@progress/kendo-svg-icons';
13
+ import { plusIcon, cancelIcon, lockIcon, unlockIcon, caretAltDownIcon, caretAltRightIcon, caretAltLeftIcon, arrowLeftIcon, arrowRightIcon, sortDescSmallIcon, sortAscSmallIcon, filterClearIcon, filterIcon, searchIcon, checkIcon, arrowRotateCcwIcon, columnsIcon, pencilIcon, saveIcon, trashIcon, fileExcelIcon, filePdfIcon, sparklesIcon, chevronUpIcon, chevronDownIcon, chevronRightIcon, displayInlineFlexIcon, maxWidthIcon, stickIcon, unstickIcon, setColumnPositionIcon, slidersIcon, moreVerticalIcon, reorderIcon, minusIcon, insertMiddleIcon, xIcon, xCircleIcon, plusCircleIcon, chevronLeftIcon, tableWizardIcon, undoIcon, redoIcon, arrowsSwapIcon, groupIcon } from '@progress/kendo-svg-icons';
14
14
  import { switchMap, take, map, filter, takeUntil, switchMapTo, delay, tap, throttleTime, debounceTime, distinctUntilChanged, skip, auditTime, bufferCount, flatMap } from 'rxjs/operators';
15
15
  import * as i1$2 from '@progress/kendo-angular-l10n';
16
16
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
17
17
  import * as i53 from '@progress/kendo-angular-pager';
18
18
  import { PagerContextService, PagerNavigationService, PagerTemplateDirective, KENDO_PAGER } from '@progress/kendo-angular-pager';
19
- import { orderBy, isCompositeFilterDescriptor, groupBy, filterBy, process } from '@progress/kendo-data-query';
19
+ import { orderBy, isCompositeFilterDescriptor, filterBy, groupBy, process } from '@progress/kendo-data-query';
20
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';
@@ -1933,7 +1933,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1933
1933
  }] }]; } });
1934
1934
 
1935
1935
  /**
1936
- * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_reactive_editing_grid#toc-setting-up-custom-inputs)).
1936
+ * Lets you customize the content of edited cells by providing a column edit-cell template for the Grid ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
1937
1937
  * Place an `<ng-template>` tag with the `kendoGridEditTemplate` directive inside a `<kendo-grid-column>` tag to define the template.
1938
1938
  *
1939
1939
  * The template context includes:
@@ -2218,6 +2218,14 @@ class ColumnBase {
2218
2218
  * @hidden
2219
2219
  */
2220
2220
  initialMinResizableWidth;
2221
+ /**
2222
+ * @hidden
2223
+ */
2224
+ initiallyChecked;
2225
+ /**
2226
+ * @hidden
2227
+ */
2228
+ currentlyChecked;
2221
2229
  /**
2222
2230
  * @hidden
2223
2231
  */
@@ -3037,7 +3045,7 @@ class SpanColumnComponent extends ColumnBase {
3037
3045
  includeInChooser = false;
3038
3046
  /**
3039
3047
  * Sets whether the edit template of the column is rendered.
3040
- * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_reactive_editing_grid)).
3048
+ * To enable editing for a spanned column, set an edit template for it ([see example](slug:custom_editors_grid#setting-up-custom-editors)).
3041
3049
  * @default false
3042
3050
  */
3043
3051
  set editable(value) {
@@ -3499,6 +3507,7 @@ class NavigationService {
3499
3507
  return columnIndexInsideGroup !== columnGroupChildren.length - 1;
3500
3508
  }
3501
3509
  }
3510
+ preventScroll = false;
3502
3511
  viewport;
3503
3512
  columnViewport;
3504
3513
  activeRowIndex = 0;
@@ -5094,6 +5103,9 @@ class ColumnInfoService {
5094
5103
  return this.list().filter(column => !column.isVisible);
5095
5104
  }
5096
5105
  get leafNamedColumns() {
5106
+ if (!this.list) {
5107
+ return [];
5108
+ }
5097
5109
  const columns = expandColumns(this.list().filterSort(column => !column.isColumnGroup))
5098
5110
  .filter(column => column.matchesMedia && column.displayTitle);
5099
5111
  return orderBy(columns, [{ field: 'locked', dir: 'desc' }]);
@@ -5253,8 +5265,14 @@ class LogicalCellDirective {
5253
5265
  this.focusGroup.focus();
5254
5266
  }
5255
5267
  else {
5256
- if (!this.logicalSlaveCell && this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
5257
- this.microtask(() => this.isFocused() && el.focus());
5268
+ if (!this.logicalSlaveCell &&
5269
+ this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
5270
+ this.microtask(() => {
5271
+ if (this.isFocused()) {
5272
+ el.focus({ preventScroll: this.navigationService.preventScroll });
5273
+ this.navigationService.preventScroll = false;
5274
+ }
5275
+ });
5258
5276
  }
5259
5277
  this.renderer.addClass(el, 'k-focus');
5260
5278
  }
@@ -8953,11 +8971,11 @@ class FilterMenuInputWrapperComponent extends FilterInputWrapperComponent {
8953
8971
  this.filterService.menuTabbingService.firstFocusable = this.firstOperatorDropDown;
8954
8972
  if (this.ctx.grid?.isActionSheetExpanded) {
8955
8973
  this.subs.add(this.adaptiveGridService.animationEnd.subscribe(() => {
8956
- this.firstOperatorDropDown.focus();
8974
+ this.firstOperatorDropDown.wrapper.nativeElement.focus({ preventScroll: true });
8957
8975
  }));
8958
8976
  }
8959
8977
  else {
8960
- this.firstOperatorDropDown.focus();
8978
+ this.firstOperatorDropDown.wrapper.nativeElement.focus({ preventScroll: true });
8961
8979
  }
8962
8980
  }
8963
8981
  }
@@ -11061,7 +11079,13 @@ class FilterMenuComponent {
11061
11079
  this.cdr.markForCheck();
11062
11080
  }
11063
11081
  focusRoot() {
11064
- this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
11082
+ if (this.isNavigable) {
11083
+ this.navigationService.preventScroll = true;
11084
+ this.navigationService.focusCell(0, this.column.leafIndex);
11085
+ }
11086
+ else {
11087
+ this.anchor.nativeElement.focus({ preventScroll: true });
11088
+ }
11065
11089
  }
11066
11090
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuComponent, deps: [{ token: FilterService }, { token: SinglePopupService }, { token: ContextService }, { token: NavigationService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: AdaptiveGridService }, { token: i0.NgZone }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11067
11091
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuComponent, isStandalone: true, selector: "kendo-grid-filter-menu", inputs: { column: "column", filter: "filter", tabIndex: "tabIndex" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }, { propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: `
@@ -11989,44 +12013,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
11989
12013
  args: ['class.k-filter-row']
11990
12014
  }] } });
11991
12015
 
11992
- /**
11993
- * @hidden
11994
- */
11995
- class ColumnMenuChooserItemCheckedDirective {
11996
- host;
11997
- kendoColumnMenuChooserItemChecked;
11998
- checkbox;
11999
- checkedChangeSub = new Subscription();
12000
- constructor(host) {
12001
- this.host = host;
12002
- }
12003
- ngAfterViewInit() {
12004
- this.checkedChangeSub.add(this.checkbox.checkedStateChange.subscribe(() => {
12005
- this.kendoColumnMenuChooserItemChecked = this.checkbox.checkedState === true;
12006
- }));
12007
- }
12008
- ngOnDestroy() {
12009
- this.checkedChangeSub.unsubscribe();
12010
- }
12011
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
12012
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuChooserItemCheckedDirective, isStandalone: true, selector: "[kendoColumnMenuChooserItemChecked]", inputs: { kendoColumnMenuChooserItemChecked: "kendoColumnMenuChooserItemChecked" }, host: { properties: { "attr.aria-checked": "this.kendoColumnMenuChooserItemChecked" } }, queries: [{ propertyName: "checkbox", first: true, predicate: CheckBoxComponent, descendants: true }], ngImport: i0 });
12013
- }
12014
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuChooserItemCheckedDirective, decorators: [{
12015
- type: Directive,
12016
- args: [{
12017
- selector: '[kendoColumnMenuChooserItemChecked]',
12018
- standalone: true
12019
- }]
12020
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { kendoColumnMenuChooserItemChecked: [{
12021
- type: HostBinding,
12022
- args: ['attr.aria-checked']
12023
- }, {
12024
- type: Input
12025
- }], checkbox: [{
12026
- type: ContentChild,
12027
- args: [CheckBoxComponent]
12028
- }] } });
12029
-
12030
12016
  /**
12031
12017
  * Represents the service passed to the [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.
12032
12018
  *
@@ -12112,12 +12098,12 @@ class ColumnListKeyboardNavigation {
12112
12098
  this.toggle(this.activeIndex, true);
12113
12099
  }
12114
12100
  toggle(index, active) {
12115
- const element = this.items[index]?.host.nativeElement;
12116
- element && this.renderer.setAttribute(this.items[index].host.nativeElement, 'tabindex', active ? '0' : '-1');
12117
- active && element?.focus();
12101
+ const element = this.items[index]?.hostElement.nativeElement.closest('.k-column-list-item');
12102
+ element && this.renderer.setAttribute(element, 'tabindex', active ? '0' : '-1');
12103
+ active && element?.focus({ preventScroll: true });
12118
12104
  }
12119
12105
  toggleCheckedState() {
12120
- this.items[this.activeIndex].host.nativeElement.firstElementChild.click();
12106
+ this.items[this.activeIndex].hostElement.nativeElement.closest('.k-column-list-item').firstElementChild.click();
12121
12107
  }
12122
12108
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListKeyboardNavigation, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable });
12123
12109
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListKeyboardNavigation });
@@ -12134,10 +12120,10 @@ class ColumnListComponent {
12134
12120
  ngZone;
12135
12121
  renderer;
12136
12122
  listNavigationService;
12123
+ cdr;
12124
+ columnInfoService;
12137
12125
  adaptiveGridService;
12138
12126
  ctx;
12139
- checkIcon = checkIcon;
12140
- arrowRotateCcwIcon = arrowRotateCcwIcon;
12141
12127
  className = true;
12142
12128
  get listSizeMd() {
12143
12129
  return !(this.ctx?.grid?.isActionSheetExpanded);
@@ -12149,40 +12135,59 @@ class ColumnListComponent {
12149
12135
  apply = new EventEmitter();
12150
12136
  columnChange = new EventEmitter();
12151
12137
  set columns(value) {
12138
+ this.listNavigationService.items = this.checkboxes?.toArray();
12152
12139
  this._columns = value.filter(column => column.includeInChooser !== false);
12153
- this.allColumns = value;
12154
- this.updateColumnState();
12155
12140
  }
12156
12141
  get columns() {
12157
12142
  return this._columns;
12158
12143
  }
12159
- showActions = true;
12144
+ get checkedCheckboxesLength() {
12145
+ return this.columns?.filter(column => column.currentlyChecked).length;
12146
+ }
12147
+ filteredColumns = [];
12160
12148
  autoSync = true;
12149
+ showSelectAll = false;
12150
+ isFiltered = false;
12161
12151
  ariaLabel;
12162
12152
  allowHideAll = false;
12163
12153
  applyText;
12164
12154
  resetText;
12165
- actionsClass = 'k-actions k-actions-stretched k-actions-horizontal';
12166
12155
  isLast;
12167
12156
  isExpanded;
12168
12157
  service;
12158
+ filterable = false;
12159
+ checkboxes;
12160
+ get columnCheckboxes() {
12161
+ if (this.showSelectAll) {
12162
+ return this.checkboxes?.toArray().slice(1);
12163
+ }
12164
+ return this.checkboxes?.toArray();
12165
+ }
12166
+ get lockedColumnCheckboxes() {
12167
+ return this.columnCheckboxes?.filter((checkbox, index) => this.filteredColumns[index]?.locked);
12168
+ }
12169
+ get unlockedColumnCheckboxes() {
12170
+ return this.columnCheckboxes?.filter((checkbox, index) => !this.filteredColumns[index]?.locked);
12171
+ }
12172
+ get checkedCheckboxes() {
12173
+ if (this.showSelectAll && !this.isFiltered) {
12174
+ return this.checkboxes?.toArray().slice(1).filter(checkbox => checkbox.checkedState).length;
12175
+ }
12176
+ return this.checkboxes?.filter(checkbox => checkbox.checkedState).length;
12177
+ }
12169
12178
  resetButton;
12170
12179
  applyButton;
12171
- options;
12172
- checkboxes;
12173
- hasLocked;
12174
- hasVisibleLocked;
12175
- unlockedCount = 0;
12176
- hasUnlockedFiltered;
12177
- hasFiltered;
12180
+ filterInput;
12178
12181
  _columns;
12179
- allColumns;
12180
12182
  domSubscriptions = new Subscription();
12181
- constructor(element, ngZone, renderer, listNavigationService, adaptiveGridService, ctx) {
12183
+ lastDisabledCheckbox;
12184
+ constructor(element, ngZone, renderer, listNavigationService, cdr, columnInfoService, adaptiveGridService, ctx) {
12182
12185
  this.element = element;
12183
12186
  this.ngZone = ngZone;
12184
12187
  this.renderer = renderer;
12185
12188
  this.listNavigationService = listNavigationService;
12189
+ this.cdr = cdr;
12190
+ this.columnInfoService = columnInfoService;
12186
12191
  this.adaptiveGridService = adaptiveGridService;
12187
12192
  this.ctx = ctx;
12188
12193
  }
@@ -12192,17 +12197,17 @@ class ColumnListComponent {
12192
12197
  }
12193
12198
  this.ngZone.runOutsideAngular(() => {
12194
12199
  this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'click', (e) => {
12195
- e.stopImmediatePropagation();
12196
- this.ngZone.onStable.pipe(take(1)).subscribe(() => {
12197
- this.handleCheckBoxClick(e);
12198
- });
12200
+ if (e.target.classList.contains('k-checkbox')) {
12201
+ const label = e.target.closest('.k-column-list-item');
12202
+ this.setTabindex(label);
12203
+ }
12199
12204
  }));
12200
12205
  this.domSubscriptions.add(this.renderer.listen(this.element.nativeElement, 'keydown', this.onKeydown));
12201
12206
  });
12202
12207
  }
12203
12208
  ngAfterViewInit() {
12204
12209
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
12205
- this.listNavigationService.items = this.options.toArray();
12210
+ this.listNavigationService.items = this.checkboxes.toArray();
12206
12211
  if (this.adaptiveGridService?.viewType !== 'columnMenu') {
12207
12212
  this.listNavigationService.toggle(0, true);
12208
12213
  }
@@ -12219,38 +12224,88 @@ class ColumnListComponent {
12219
12224
  return;
12220
12225
  }
12221
12226
  if (changes['isLast'] && this.isLast) {
12222
- this.service.menuTabbingService.lastFocusable = this.applyButton.nativeElement;
12227
+ this.service.menuTabbingService.lastFocusable = this.applyButton?.nativeElement;
12223
12228
  }
12224
12229
  if (changes['isExpanded'] && this.isExpanded && this.isLast && this.applyButton) {
12225
12230
  this.service.menuTabbingService.lastFocusable = this.applyButton.nativeElement;
12226
12231
  }
12227
12232
  }
12233
+ onSelectAllCheckboxChange(checkedState) {
12234
+ if (!checkedState && !this.allowHideAll) {
12235
+ const columnsToKeep = [];
12236
+ if (!columnsToKeep.length) {
12237
+ const unlockedColumns = this.filteredColumns.filter(c => !c.locked);
12238
+ if (unlockedColumns.length > 0) {
12239
+ columnsToKeep.push(unlockedColumns[0]);
12240
+ }
12241
+ }
12242
+ if (this.lockedColumnCheckboxes.length > 0) {
12243
+ const lockedColumns = this.filteredColumns.filter(c => c.locked);
12244
+ if (lockedColumns.length > 0) {
12245
+ columnsToKeep.unshift(lockedColumns[0]);
12246
+ }
12247
+ }
12248
+ this.filteredColumns.forEach(column => {
12249
+ const isChecked = columnsToKeep.indexOf(column) >= 0;
12250
+ column.currentlyChecked = isChecked;
12251
+ });
12252
+ }
12253
+ else {
12254
+ this.filteredColumns.forEach(column => {
12255
+ column.currentlyChecked = checkedState;
12256
+ });
12257
+ }
12258
+ if (this.autoSync) {
12259
+ const changedColumns = this.filteredColumns.filter(column => column.initiallyChecked !== column.currentlyChecked);
12260
+ if (changedColumns.length > 0) {
12261
+ changedColumns.forEach(column => {
12262
+ column.hidden = !column.currentlyChecked;
12263
+ column.initiallyChecked = column.currentlyChecked;
12264
+ });
12265
+ this.ngZone.run(() => {
12266
+ this.columnChange.emit(changedColumns);
12267
+ });
12268
+ }
12269
+ }
12270
+ this.filteredColumns = [...this.filteredColumns];
12271
+ this.updateDisabled();
12272
+ }
12228
12273
  ngOnDestroy() {
12229
12274
  this.domSubscriptions.unsubscribe();
12230
12275
  }
12231
- isDisabled(column) {
12232
- return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||
12233
- (this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);
12234
- }
12235
12276
  cancelChanges() {
12236
- this.checkboxes.forEach((element, index) => {
12237
- element.checkedState = !this.columns[index].hidden;
12277
+ this.columns.forEach((column) => {
12278
+ column.currentlyChecked = !column.hidden;
12279
+ column.initiallyChecked = !column.hidden;
12280
+ });
12281
+ this.filteredColumns.forEach((column) => {
12282
+ column.currentlyChecked = !column.hidden;
12283
+ column.initiallyChecked = !column.hidden;
12238
12284
  });
12239
12285
  this.updateDisabled();
12240
12286
  this.reset.emit();
12241
12287
  }
12242
12288
  applyChanges() {
12243
12289
  const changed = [];
12244
- this.checkboxes.forEach((item, index) => {
12245
- const column = this.columns[index];
12246
- const hidden = !item.checkedState;
12247
- if (Boolean(column.hidden) !== hidden) {
12248
- column.hidden = hidden;
12290
+ this.columns.forEach(column => {
12291
+ if (column.initiallyChecked !== column.currentlyChecked) {
12292
+ column.hidden = !column.currentlyChecked;
12249
12293
  changed.push(column);
12250
12294
  }
12251
12295
  });
12252
12296
  this.updateDisabled();
12253
12297
  this.apply.emit(changed);
12298
+ if (changed.length) {
12299
+ this.cdr.markForCheck();
12300
+ this.columnInfoService?.changeVisibility(changed);
12301
+ }
12302
+ }
12303
+ focusActiveColumn(e) {
12304
+ const keyboardEvent = e;
12305
+ if (keyboardEvent.shiftKey) {
12306
+ this.listNavigationService.toggle(this.listNavigationService.activeIndex, true);
12307
+ e.preventDefault();
12308
+ }
12254
12309
  }
12255
12310
  onTab(e) {
12256
12311
  if (this.isLast) {
@@ -12258,6 +12313,9 @@ class ColumnListComponent {
12258
12313
  if (this.service) {
12259
12314
  this.service.menuTabbingService.firstFocusable.focus();
12260
12315
  }
12316
+ else if (this.filterable) {
12317
+ this.filterInput?.input.nativeElement.focus();
12318
+ }
12261
12319
  else {
12262
12320
  this.listNavigationService.toggle(this.listNavigationService.activeIndex, true);
12263
12321
  }
@@ -12268,10 +12326,30 @@ class ColumnListComponent {
12268
12326
  if (code !== Keys.Tab) {
12269
12327
  e.preventDefault();
12270
12328
  }
12329
+ if (code === 'Tab' && e.shiftKey) {
12330
+ this.resetButton?.nativeElement.focus();
12331
+ e.preventDefault();
12332
+ }
12271
12333
  if (code === 'Tab' && !e.shiftKey && this.autoSync) {
12334
+ if (this.filterable) {
12335
+ this.filterInput?.input.nativeElement.focus();
12336
+ }
12337
+ e.preventDefault();
12338
+ }
12339
+ if (code === 'Tab' && e.shiftKey && this.autoSync && this.filterable) {
12340
+ this.filterInput?.input.nativeElement.focus();
12341
+ e.preventDefault();
12342
+ }
12343
+ if (code === 'Tab' && !e.shiftKey && !this.autoSync) {
12344
+ this.applyButton?.nativeElement.focus();
12272
12345
  e.preventDefault();
12273
12346
  }
12274
12347
  if (code === 'Tab' && e.shiftKey) {
12348
+ if (!this.autoSync && this.filterable && e.target.matches('.k-column-list-item')) {
12349
+ this.filterInput?.input.nativeElement.focus();
12350
+ e.preventDefault();
12351
+ return;
12352
+ }
12275
12353
  this.ngZone.run(() => {
12276
12354
  if (e.target.matches('.k-column-list-item')) {
12277
12355
  e.preventDefault();
@@ -12290,46 +12368,33 @@ class ColumnListComponent {
12290
12368
  }
12291
12369
  };
12292
12370
  updateDisabled() {
12293
- if (this.allowHideAll && !this.hasLocked) {
12371
+ const hasLockedColumns = this.columns.filter(c => c.locked).length > 0;
12372
+ if (this.allowHideAll && !hasLockedColumns) {
12294
12373
  return;
12295
12374
  }
12296
- // Cache visible columns to avoid repeated checks
12297
- const visibleColumns = [];
12298
- const columnMap = new Map();
12299
- this.checkboxes.forEach((checkbox, index) => {
12300
- // Reset all disabled states first
12301
- this.setDisabledState(checkbox, false);
12302
- if (checkbox.checkedState) {
12303
- visibleColumns.push({ checkbox, index });
12304
- columnMap.set(index, this.columns[index]);
12305
- }
12306
- });
12307
- // Only apply disabled states where needed
12308
- if (!this.allowHideAll && visibleColumns.length === 1 && !this.hasFiltered) {
12309
- this.setDisabledState(visibleColumns[0].checkbox, true);
12310
- }
12311
- else if (this.hasLocked && !this.hasUnlockedFiltered) {
12312
- const checkedUnlocked = visibleColumns.filter(item => !columnMap.get(item.index).locked);
12313
- if (checkedUnlocked.length === 1) {
12314
- this.setDisabledState(checkedUnlocked[0].checkbox, true);
12315
- }
12316
- }
12317
- }
12318
- updateColumnState() {
12319
- this.hasLocked = this.allColumns.filter(column => column.locked && (!column.hidden || column.includeInChooser !== false)).length > 0;
12320
- this.hasVisibleLocked = this.allColumns.filter(column => column.locked && !column.hidden).length > 0;
12321
- this.unlockedCount = this.columns.filter(column => !column.locked && !column.hidden).length;
12322
- const filteredColumns = this.allColumns.filter(column => column.includeInChooser === false && !column.hidden);
12323
- if (filteredColumns.length) {
12324
- this.hasFiltered = filteredColumns.length > 0;
12325
- this.hasUnlockedFiltered = filteredColumns.filter(column => !column.locked).length > 0;
12375
+ const currentlyCheckedUnlockedColumns = this.columns.filter(column => !column.locked && column.currentlyChecked).length;
12376
+ const shouldEnforceMinimumColumns = hasLockedColumns || !this.allowHideAll;
12377
+ if (shouldEnforceMinimumColumns && currentlyCheckedUnlockedColumns === 1) {
12378
+ this.disableFirstUnlockedCheckedCheckbox();
12326
12379
  }
12327
12380
  else {
12328
- this.hasFiltered = false;
12329
- this.hasUnlockedFiltered = false;
12381
+ this.enableLastDisabledColumn();
12330
12382
  }
12331
12383
  }
12384
+ disableFirstUnlockedCheckedCheckbox() {
12385
+ const index = this.filteredColumns.filter(c => !c.locked).findIndex(column => column.currentlyChecked);
12386
+ const firstUnlockedCheckedCheckbox = this.unlockedColumnCheckboxes[index];
12387
+ this.setDisabledState(firstUnlockedCheckedCheckbox, true);
12388
+ this.lastDisabledCheckbox = firstUnlockedCheckedCheckbox;
12389
+ }
12390
+ enableLastDisabledColumn() {
12391
+ this.setDisabledState(this.lastDisabledCheckbox, false);
12392
+ this.lastDisabledCheckbox = null;
12393
+ }
12332
12394
  setDisabledState(checkbox, disabled) {
12395
+ if (!checkbox) {
12396
+ return;
12397
+ }
12333
12398
  if (checkbox.disabled !== disabled) {
12334
12399
  this.ngZone.runOutsideAngular(() => {
12335
12400
  checkbox.disabled = disabled;
@@ -12346,85 +12411,64 @@ class ColumnListComponent {
12346
12411
  });
12347
12412
  }
12348
12413
  }
12349
- handleCheckBoxClick = (e) => {
12350
- const closestItem = e.target.closest('.k-column-list-item');
12351
- if (closestItem) {
12352
- const checkboxElement = closestItem.querySelector('.k-checkbox-wrap');
12353
- const index = parseInt(checkboxElement.firstElementChild.getAttribute('data-index'), 10);
12354
- const checkbox = this.checkboxes.toArray()[index];
12355
- if (e.target === checkbox.input.nativeElement) {
12356
- closestItem.focus();
12357
- e.target.classList.remove('k-focus');
12358
- }
12359
- if (this.autoSync) {
12360
- if (!this.columns[index]) {
12361
- return;
12362
- }
12363
- const column = this.columns[index];
12364
- const hidden = !checkbox.checkedState;
12365
- if (Boolean(column.hidden) !== hidden) {
12366
- this.ngZone.runOutsideAngular(() => {
12367
- column.hidden = hidden;
12368
- this.ngZone.run(() => {
12369
- this.columnChange.emit([column]);
12370
- });
12371
- });
12372
- }
12373
- }
12374
- else {
12375
- this.ngZone.run(() => this.updateDisabled());
12376
- }
12377
- if (index !== this.listNavigationService.activeIndex) {
12378
- this.listNavigationService.toggle(this.listNavigationService.activeIndex, false);
12379
- this.listNavigationService.activeIndex = index;
12380
- this.listNavigationService.toggle(index, true);
12381
- }
12414
+ onCheckboxChange(checkedState, column, _index) {
12415
+ column.currentlyChecked = checkedState;
12416
+ if (this.autoSync) {
12417
+ column.hidden = !checkedState;
12418
+ column.initiallyChecked = checkedState;
12419
+ this.columnChange.emit([column]);
12382
12420
  }
12383
- };
12384
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ColumnListKeyboardNavigation }, { token: AdaptiveGridService, optional: true }, { token: ContextService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
12385
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnListComponent, isStandalone: true, selector: "kendo-grid-columnlist", inputs: { columns: "columns", showActions: "showActions", autoSync: "autoSync", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", actionsClass: "actionsClass", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className", "class.k-column-list-md": "this.listSizeMd", "class.k-column-list-lg": "this.listSizeLg" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "options", predicate: ColumnMenuChooserItemCheckedDirective, descendants: true }, { propertyName: "checkboxes", predicate: CheckBoxComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
12421
+ this.updateDisabled();
12422
+ }
12423
+ setTabindex(labelElement) {
12424
+ if (!labelElement) {
12425
+ return;
12426
+ }
12427
+ const allLabels = this.checkboxes.map(checkbox => checkbox.hostElement.nativeElement.parentElement);
12428
+ allLabels.forEach((label) => {
12429
+ const input = label.querySelector('input');
12430
+ input.classList.remove('k-focus');
12431
+ this.renderer.removeAttribute(label, 'tabindex');
12432
+ });
12433
+ this.renderer.setAttribute(labelElement, 'tabindex', '0');
12434
+ labelElement.focus();
12435
+ this.listNavigationService.activeIndex = allLabels.indexOf(labelElement);
12436
+ }
12437
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: ColumnListKeyboardNavigation }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService, optional: true }, { token: AdaptiveGridService, optional: true }, { token: ContextService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
12438
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnListComponent, isStandalone: true, selector: "kendo-grid-columnlist", inputs: { columns: "columns", filteredColumns: "filteredColumns", autoSync: "autoSync", showSelectAll: "showSelectAll", isFiltered: "isFiltered", ariaLabel: "ariaLabel", allowHideAll: "allowHideAll", applyText: "applyText", resetText: "resetText", isLast: "isLast", isExpanded: "isExpanded", service: "service", filterable: "filterable" }, outputs: { reset: "reset", apply: "apply", columnChange: "columnChange" }, host: { properties: { "class.k-column-list-wrapper": "this.className", "class.k-column-list-md": "this.listSizeMd", "class.k-column-list-lg": "this.listSizeLg" } }, providers: [ColumnListKeyboardNavigation], viewQueries: [{ propertyName: "checkboxes", predicate: CheckBoxComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
12386
12439
  <div
12387
12440
  class="k-column-list"
12388
12441
  role="listbox"
12389
12442
  aria-multiselectable="true"
12390
12443
  [attr.aria-label]="ariaLabel">
12391
12444
  <label
12392
- *ngFor="let column of columns; let index = index;"
12445
+ *ngIf="showSelectAll"
12446
+ class='k-column-list-item'
12447
+ role="option">
12448
+ <kendo-checkbox
12449
+ #checkbox
12450
+ [inputAttributes]="{'data-index': '0'}"
12451
+ [tabindex]="-1"
12452
+ [checkedState]="checkedCheckboxesLength === columns.length"
12453
+ (checkedStateChange)="onSelectAllCheckboxChange($event)"
12454
+ ></kendo-checkbox>
12455
+ <span class="k-checkbox-label">{{ 'Select all' }}</span>
12456
+ </label>
12457
+ <label
12458
+ *ngFor="let column of filteredColumns; let index = index;"
12393
12459
  class='k-column-list-item'
12394
- [kendoColumnMenuChooserItemChecked]="!column.hidden"
12395
12460
  role="option">
12396
12461
  <kendo-checkbox
12462
+ #checkbox
12397
12463
  [inputAttributes]="{'data-index': index.toString()}"
12398
12464
  [tabindex]="-1"
12399
- [checkedState]="!column.hidden"
12400
- [disabled]="isDisabled(column)"
12465
+ [checkedState]="column.currentlyChecked"
12466
+ (checkedStateChange)="onCheckboxChange($event, column, index)"
12401
12467
  ></kendo-checkbox>
12402
12468
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12403
12469
  </label>
12404
12470
  </div>
12405
- <div [ngClass]="actionsClass" *ngIf="!autoSync && showActions">
12406
- <button
12407
- #applyButton
12408
- kendoButton
12409
- type="button"
12410
- icon="check"
12411
- [svgIcon]="checkIcon"
12412
- themeColor="primary"
12413
- (click)="applyChanges()"
12414
- (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); applyChanges();"
12415
- (keydown.space)="$event.preventDefault(); $event.stopPropagation(); applyChanges();">{{ applyText }}</button>
12416
- <button
12417
- #resetButton
12418
- kendoButton
12419
- type="button"
12420
- icon="reset"
12421
- [svgIcon]="arrowRotateCcwIcon"
12422
- (keydown.tab)="onTab($event)"
12423
- (click)="cancelChanges()"
12424
- (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); cancelChanges();"
12425
- (keydown.space)="$event.preventDefault(); $event.stopPropagation(); cancelChanges();">{{ resetText }}</button>
12426
- </div>
12427
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ColumnMenuChooserItemCheckedDirective, selector: "[kendoColumnMenuChooserItemChecked]", inputs: ["kendoColumnMenuChooserItemChecked"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }, { 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"] }] });
12471
+ `, 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: "component", type: CheckBoxComponent, selector: "kendo-checkbox", inputs: ["checkedState", "rounded"], outputs: ["checkedStateChange"], exportAs: ["kendoCheckBox"] }] });
12428
12472
  }
12429
12473
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnListComponent, decorators: [{
12430
12474
  type: Component,
@@ -12438,46 +12482,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12438
12482
  aria-multiselectable="true"
12439
12483
  [attr.aria-label]="ariaLabel">
12440
12484
  <label
12441
- *ngFor="let column of columns; let index = index;"
12485
+ *ngIf="showSelectAll"
12442
12486
  class='k-column-list-item'
12443
- [kendoColumnMenuChooserItemChecked]="!column.hidden"
12444
12487
  role="option">
12445
12488
  <kendo-checkbox
12489
+ #checkbox
12490
+ [inputAttributes]="{'data-index': '0'}"
12491
+ [tabindex]="-1"
12492
+ [checkedState]="checkedCheckboxesLength === columns.length"
12493
+ (checkedStateChange)="onSelectAllCheckboxChange($event)"
12494
+ ></kendo-checkbox>
12495
+ <span class="k-checkbox-label">{{ 'Select all' }}</span>
12496
+ </label>
12497
+ <label
12498
+ *ngFor="let column of filteredColumns; let index = index;"
12499
+ class='k-column-list-item'
12500
+ role="option">
12501
+ <kendo-checkbox
12502
+ #checkbox
12446
12503
  [inputAttributes]="{'data-index': index.toString()}"
12447
12504
  [tabindex]="-1"
12448
- [checkedState]="!column.hidden"
12449
- [disabled]="isDisabled(column)"
12505
+ [checkedState]="column.currentlyChecked"
12506
+ (checkedStateChange)="onCheckboxChange($event, column, index)"
12450
12507
  ></kendo-checkbox>
12451
12508
  <span class="k-checkbox-label">{{ column.displayTitle }}</span>
12452
12509
  </label>
12453
12510
  </div>
12454
- <div [ngClass]="actionsClass" *ngIf="!autoSync && showActions">
12455
- <button
12456
- #applyButton
12457
- kendoButton
12458
- type="button"
12459
- icon="check"
12460
- [svgIcon]="checkIcon"
12461
- themeColor="primary"
12462
- (click)="applyChanges()"
12463
- (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); applyChanges();"
12464
- (keydown.space)="$event.preventDefault(); $event.stopPropagation(); applyChanges();">{{ applyText }}</button>
12465
- <button
12466
- #resetButton
12467
- kendoButton
12468
- type="button"
12469
- icon="reset"
12470
- [svgIcon]="arrowRotateCcwIcon"
12471
- (keydown.tab)="onTab($event)"
12472
- (click)="cancelChanges()"
12473
- (keydown.enter)="$event.preventDefault(); $event.stopPropagation(); cancelChanges();"
12474
- (keydown.space)="$event.preventDefault(); $event.stopPropagation(); cancelChanges();">{{ resetText }}</button>
12475
- </div>
12476
12511
  `,
12477
12512
  standalone: true,
12478
- imports: [NgFor, ColumnMenuChooserItemCheckedDirective, NgIf, NgClass, CheckBoxComponent, ButtonComponent]
12513
+ imports: [NgFor, NgIf, CheckBoxComponent]
12479
12514
  }]
12480
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ColumnListKeyboardNavigation }, { type: AdaptiveGridService, decorators: [{
12515
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: ColumnListKeyboardNavigation }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService, decorators: [{
12516
+ type: Optional
12517
+ }] }, { type: AdaptiveGridService, decorators: [{
12481
12518
  type: Optional
12482
12519
  }] }, { type: ContextService, decorators: [{
12483
12520
  type: Optional
@@ -12498,10 +12535,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12498
12535
  type: Output
12499
12536
  }], columns: [{
12500
12537
  type: Input
12501
- }], showActions: [{
12538
+ }], filteredColumns: [{
12502
12539
  type: Input
12503
12540
  }], autoSync: [{
12504
12541
  type: Input
12542
+ }], showSelectAll: [{
12543
+ type: Input
12544
+ }], isFiltered: [{
12545
+ type: Input
12505
12546
  }], ariaLabel: [{
12506
12547
  type: Input
12507
12548
  }], allowHideAll: [{
@@ -12510,28 +12551,307 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12510
12551
  type: Input
12511
12552
  }], resetText: [{
12512
12553
  type: Input
12513
- }], actionsClass: [{
12514
- type: Input
12515
12554
  }], isLast: [{
12516
12555
  type: Input
12517
12556
  }], isExpanded: [{
12518
12557
  type: Input
12519
12558
  }], service: [{
12520
12559
  type: Input
12521
- }], resetButton: [{
12522
- type: ViewChild,
12523
- args: ['resetButton', { static: false }]
12524
- }], applyButton: [{
12525
- type: ViewChild,
12526
- args: ['applyButton', { static: false }]
12527
- }], options: [{
12528
- type: ViewChildren,
12529
- args: [ColumnMenuChooserItemCheckedDirective]
12560
+ }], filterable: [{
12561
+ type: Input
12530
12562
  }], checkboxes: [{
12531
12563
  type: ViewChildren,
12532
12564
  args: [CheckBoxComponent]
12533
12565
  }] } });
12534
12566
 
12567
+ /**
12568
+ * @hidden
12569
+ */
12570
+ class ColumnChooserContentComponent {
12571
+ cdr;
12572
+ columnInfoService;
12573
+ ctx;
12574
+ resetButton;
12575
+ applyButton;
12576
+ columnList;
12577
+ filterInput;
12578
+ filterable = true;
12579
+ showSelectAll = true;
12580
+ showCheckedCount = true;
12581
+ allowHideAll = false;
12582
+ autoSync = false;
12583
+ actionsClass = 'k-actions k-actions-stretched k-actions-horizontal';
12584
+ closeOnReset = true;
12585
+ set columns(value) {
12586
+ this._columns = value;
12587
+ }
12588
+ get columns() {
12589
+ return this._columns;
12590
+ }
12591
+ isLast;
12592
+ isExpanded;
12593
+ service;
12594
+ close = new EventEmitter();
12595
+ get selectedItemsText() {
12596
+ const count = this.columnList?.checkedCheckboxesLength || 0;
12597
+ const localizedMessage = this.messageFor('columnChooserSelectedColumnsCount');
12598
+ return replaceMessagePlaceholder(localizedMessage, 'selectedColumnsCount', count.toString());
12599
+ }
12600
+ get actionSheetOpened() {
12601
+ return this.ctx?.grid?.isActionSheetExpanded;
12602
+ }
12603
+ searchIcon = searchIcon;
12604
+ checkIcon = checkIcon;
12605
+ arrowRotateCcwIcon = arrowRotateCcwIcon;
12606
+ applyText;
12607
+ resetText;
12608
+ filteredColumns = [];
12609
+ isFiltered = false;
12610
+ _columns = [];
12611
+ constructor(cdr, columnInfoService, ctx) {
12612
+ this.cdr = cdr;
12613
+ this.columnInfoService = columnInfoService;
12614
+ this.ctx = ctx;
12615
+ }
12616
+ ngOnInit() {
12617
+ this.applyText = this.ctx?.localization.get('columnsApply');
12618
+ this.resetText = this.ctx?.localization.get('columnsReset');
12619
+ }
12620
+ ngAfterViewInit() {
12621
+ this.filteredColumns = this.columnInfoService?.leafNamedColumns.filter(column => {
12622
+ if (column.includeInChooser !== false) {
12623
+ column.initiallyChecked = column.currentlyChecked = !column.hidden;
12624
+ return true;
12625
+ }
12626
+ return false;
12627
+ });
12628
+ this.cdr.detectChanges();
12629
+ }
12630
+ ngAfterViewChecked() {
12631
+ this.columnList.resetButton = this.resetButton;
12632
+ this.columnList.applyButton = this.applyButton;
12633
+ this.columnList.filterInput = this.filterInput;
12634
+ }
12635
+ onFilter(value) {
12636
+ this.isFiltered = value.length > 0;
12637
+ this.showSelectAll = !this.isFiltered;
12638
+ const filterDescriptor = {
12639
+ field: 'displayTitle',
12640
+ operator: 'contains',
12641
+ value: value
12642
+ };
12643
+ this.filteredColumns = filterBy(this.columnInfoService?.leafNamedColumns, filterDescriptor);
12644
+ this.cdr.detectChanges();
12645
+ this.columnList.listNavigationService.activeIndex = 0;
12646
+ this.columnList.listNavigationService.items = this.columnList.checkboxes?.toArray();
12647
+ }
12648
+ messageFor = token => this.ctx?.localization.get(token);
12649
+ onChange(changed) {
12650
+ this.cdr.markForCheck();
12651
+ this.columnInfoService?.changeVisibility(changed);
12652
+ }
12653
+ applyChanges() {
12654
+ this.columnList.applyChanges();
12655
+ this.close.emit();
12656
+ }
12657
+ cancelChanges() {
12658
+ this.columnList.cancelChanges();
12659
+ if (this.closeOnReset) {
12660
+ this.close.emit();
12661
+ }
12662
+ }
12663
+ onTab(e) {
12664
+ if (e.key === 'Tab' && !e.shiftKey) {
12665
+ this.columnList.listNavigationService.toggle(this.columnList.listNavigationService.activeIndex, true);
12666
+ e.preventDefault();
12667
+ }
12668
+ if (e.key === 'Tab' && e.shiftKey && !this.service) {
12669
+ this.columnList.resetButton?.nativeElement.focus();
12670
+ e.preventDefault();
12671
+ }
12672
+ }
12673
+ onApplyButtonKeydown(e) {
12674
+ if (e.key === 'Tab') {
12675
+ this.columnList.focusActiveColumn(e);
12676
+ }
12677
+ }
12678
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserContentComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: ColumnInfoService, optional: true }, { token: ContextService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
12679
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserContentComponent, isStandalone: true, selector: "kendo-grid-column-chooser-content", inputs: { filterable: "filterable", showSelectAll: "showSelectAll", showCheckedCount: "showCheckedCount", allowHideAll: "allowHideAll", autoSync: "autoSync", actionsClass: "actionsClass", closeOnReset: "closeOnReset", columns: "columns", isLast: "isLast", isExpanded: "isExpanded", service: "service" }, outputs: { close: "close" }, viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "applyButton", first: true, predicate: ["applyButton"], descendants: true }, { propertyName: "columnList", first: true, predicate: ["columnList"], descendants: true }, { propertyName: "filterInput", first: true, predicate: ["filterInput"], descendants: true }], ngImport: i0, template: `
12680
+ <form class="k-filter-menu">
12681
+ <div class="k-filter-menu-container">
12682
+ <kendo-textbox
12683
+ #filterInput
12684
+ *ngIf="filterable"
12685
+ class="k-searchbox"
12686
+ (valueChange)="onFilter($event)"
12687
+ [kendoEventsOutsideAngular]="{'keydown': onTab}"
12688
+ [scope]="this"
12689
+ >
12690
+ <ng-template kendoPrefixTemplate>
12691
+ <kendo-icon-wrapper
12692
+ [name]="'search'"
12693
+ [svgIcon]="searchIcon">
12694
+ </kendo-icon-wrapper>
12695
+ </ng-template>
12696
+ </kendo-textbox>
12697
+ <kendo-grid-columnlist
12698
+ #columnList
12699
+ [columns]="columns"
12700
+ [filteredColumns]="filteredColumns"
12701
+ [ariaLabel]="messageFor('columns')"
12702
+ [showSelectAll]="showSelectAll"
12703
+ [isLast]="isLast"
12704
+ [isFiltered]="isFiltered"
12705
+ [filterable]="filterable"
12706
+ [isExpanded]="isExpanded"
12707
+ [service]="service"
12708
+ [applyText]="messageFor('columnsApply')"
12709
+ [resetText]="messageFor('columnsReset')"
12710
+ [autoSync]="autoSync"
12711
+ [allowHideAll]="allowHideAll"
12712
+ (columnChange)="onChange($event)"
12713
+ >
12714
+ </kendo-grid-columnlist>
12715
+ <div *ngIf="showCheckedCount" class="k-filter-selected-items">
12716
+ {{selectedItemsText}}
12717
+ </div>
12718
+ <div [ngClass]="actionsClass" *ngIf="!autoSync && !actionSheetOpened">
12719
+ <button
12720
+ #applyButton
12721
+ kendoButton
12722
+ type="button"
12723
+ icon="check"
12724
+ [svgIcon]="checkIcon"
12725
+ themeColor="primary"
12726
+ (click)="applyChanges()"
12727
+ (keydown)="onApplyButtonKeydown($event)"
12728
+ >{{ applyText }}</button>
12729
+ <button
12730
+ #resetButton
12731
+ kendoButton
12732
+ type="button"
12733
+ icon="reset"
12734
+ (keydown.tab)="columnList.onTab($event)"
12735
+ [svgIcon]="arrowRotateCcwIcon"
12736
+ (click)="cancelChanges()"
12737
+ >{{ resetText }}</button>
12738
+ </div>
12739
+ </div>
12740
+ </form>
12741
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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", "filteredColumns", "autoSync", "showSelectAll", "isFiltered", "ariaLabel", "allowHideAll", "applyText", "resetText", "isLast", "isExpanded", "service", "filterable"], outputs: ["reset", "apply", "columnChange"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: PrefixTemplateDirective, selector: "[kendoPrefixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
12742
+ }
12743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserContentComponent, decorators: [{
12744
+ type: Component,
12745
+ args: [{
12746
+ selector: 'kendo-grid-column-chooser-content',
12747
+ template: `
12748
+ <form class="k-filter-menu">
12749
+ <div class="k-filter-menu-container">
12750
+ <kendo-textbox
12751
+ #filterInput
12752
+ *ngIf="filterable"
12753
+ class="k-searchbox"
12754
+ (valueChange)="onFilter($event)"
12755
+ [kendoEventsOutsideAngular]="{'keydown': onTab}"
12756
+ [scope]="this"
12757
+ >
12758
+ <ng-template kendoPrefixTemplate>
12759
+ <kendo-icon-wrapper
12760
+ [name]="'search'"
12761
+ [svgIcon]="searchIcon">
12762
+ </kendo-icon-wrapper>
12763
+ </ng-template>
12764
+ </kendo-textbox>
12765
+ <kendo-grid-columnlist
12766
+ #columnList
12767
+ [columns]="columns"
12768
+ [filteredColumns]="filteredColumns"
12769
+ [ariaLabel]="messageFor('columns')"
12770
+ [showSelectAll]="showSelectAll"
12771
+ [isLast]="isLast"
12772
+ [isFiltered]="isFiltered"
12773
+ [filterable]="filterable"
12774
+ [isExpanded]="isExpanded"
12775
+ [service]="service"
12776
+ [applyText]="messageFor('columnsApply')"
12777
+ [resetText]="messageFor('columnsReset')"
12778
+ [autoSync]="autoSync"
12779
+ [allowHideAll]="allowHideAll"
12780
+ (columnChange)="onChange($event)"
12781
+ >
12782
+ </kendo-grid-columnlist>
12783
+ <div *ngIf="showCheckedCount" class="k-filter-selected-items">
12784
+ {{selectedItemsText}}
12785
+ </div>
12786
+ <div [ngClass]="actionsClass" *ngIf="!autoSync && !actionSheetOpened">
12787
+ <button
12788
+ #applyButton
12789
+ kendoButton
12790
+ type="button"
12791
+ icon="check"
12792
+ [svgIcon]="checkIcon"
12793
+ themeColor="primary"
12794
+ (click)="applyChanges()"
12795
+ (keydown)="onApplyButtonKeydown($event)"
12796
+ >{{ applyText }}</button>
12797
+ <button
12798
+ #resetButton
12799
+ kendoButton
12800
+ type="button"
12801
+ icon="reset"
12802
+ (keydown.tab)="columnList.onTab($event)"
12803
+ [svgIcon]="arrowRotateCcwIcon"
12804
+ (click)="cancelChanges()"
12805
+ >{{ resetText }}</button>
12806
+ </div>
12807
+ </div>
12808
+ </form>
12809
+ `,
12810
+ standalone: true,
12811
+ imports: [NgIf, NgClass, ButtonComponent, ColumnListComponent, TextBoxComponent, PrefixTemplateDirective, IconWrapperComponent, EventsOutsideAngularDirective]
12812
+ }]
12813
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: ColumnInfoService, decorators: [{
12814
+ type: Optional
12815
+ }] }, { type: ContextService, decorators: [{
12816
+ type: Optional
12817
+ }] }]; }, propDecorators: { resetButton: [{
12818
+ type: ViewChild,
12819
+ args: ['resetButton']
12820
+ }], applyButton: [{
12821
+ type: ViewChild,
12822
+ args: ['applyButton']
12823
+ }], columnList: [{
12824
+ type: ViewChild,
12825
+ args: ['columnList']
12826
+ }], filterInput: [{
12827
+ type: ViewChild,
12828
+ args: ['filterInput']
12829
+ }], filterable: [{
12830
+ type: Input
12831
+ }], showSelectAll: [{
12832
+ type: Input
12833
+ }], showCheckedCount: [{
12834
+ type: Input
12835
+ }], allowHideAll: [{
12836
+ type: Input
12837
+ }], autoSync: [{
12838
+ type: Input
12839
+ }], actionsClass: [{
12840
+ type: Input
12841
+ }], closeOnReset: [{
12842
+ type: Input
12843
+ }], columns: [{
12844
+ type: Input
12845
+ }], isLast: [{
12846
+ type: Input
12847
+ }], isExpanded: [{
12848
+ type: Input
12849
+ }], service: [{
12850
+ type: Input
12851
+ }], close: [{
12852
+ type: Output
12853
+ }] } });
12854
+
12535
12855
  /**
12536
12856
  * Represents the component for toggling visibility of the Grid columns visibility. [See example](slug:columnmenu_grid#toc-using-standalone-column-chooser).
12537
12857
  * To show and hide the columns without including the column chooser item in the [Column Menu](slug:columnmenu_grid),
@@ -12560,6 +12880,18 @@ class ColumnChooserComponent {
12560
12880
  * @default false
12561
12881
  */
12562
12882
  autoSync = false;
12883
+ /**
12884
+ * Specifies if the column chooser displays a search box.
12885
+ *
12886
+ * @default true
12887
+ */
12888
+ filterable = true;
12889
+ /**
12890
+ * Specifies if the column chooser displays a select all checkbox.
12891
+ *
12892
+ * @default true
12893
+ */
12894
+ showSelectAll = true;
12563
12895
  /**
12564
12896
  * Specifies if all columns can be hidden.
12565
12897
  *
@@ -12635,16 +12967,6 @@ class ColumnChooserComponent {
12635
12967
  this.close();
12636
12968
  }
12637
12969
  }
12638
- /**
12639
- * @hidden
12640
- */
12641
- onApply(changed) {
12642
- this.close(true);
12643
- if (changed.length) {
12644
- this.changeDetector.markForCheck();
12645
- this.columnInfoService.changeVisibility(changed);
12646
- }
12647
- }
12648
12970
  /**
12649
12971
  * @hidden
12650
12972
  */
@@ -12652,6 +12974,9 @@ class ColumnChooserComponent {
12652
12974
  this.changeDetector.markForCheck();
12653
12975
  this.columnInfoService.changeVisibility(changed);
12654
12976
  }
12977
+ /**
12978
+ * @hidden
12979
+ */
12655
12980
  close(focusAnchor = false) {
12656
12981
  if (this.popupRef) {
12657
12982
  this.popupRef.close();
@@ -12669,7 +12994,7 @@ class ColumnChooserComponent {
12669
12994
  }
12670
12995
  }
12671
12996
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }, { token: i2.PopupService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
12672
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserComponent, isStandalone: true, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }, { propertyName: "columnList", first: true, predicate: ["columnList"], descendants: true }], ngImport: i0, template: `
12997
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserComponent, isStandalone: true, selector: "kendo-grid-column-chooser", inputs: { autoSync: "autoSync", filterable: "filterable", showSelectAll: "showSelectAll", allowHideAll: "allowHideAll" }, viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true }, { propertyName: "columnList", first: true, predicate: ["columnList"], descendants: true }], ngImport: i0, template: `
12673
12998
  <button #anchor
12674
12999
  kendoButton
12675
13000
  type="button"
@@ -12682,20 +13007,19 @@ class ColumnChooserComponent {
12682
13007
  [attr.aria-expanded]="!!(popupRef)"
12683
13008
  [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
12684
13009
  <ng-template #template>
12685
- <kendo-grid-columnlist
12686
- #columnList
13010
+ <kendo-grid-column-chooser-content
12687
13011
  [columns]="columns"
12688
- [ariaLabel]="messageFor('columns')"
12689
- [isLast]="true"
12690
- [applyText]="messageFor('columnsApply')"
12691
- [resetText]="messageFor('columnsReset')"
12692
13012
  [autoSync]="autoSync"
13013
+ [filterable]="filterable"
13014
+ [showSelectAll]="showSelectAll"
13015
+ [closeOnReset]="false"
13016
+ [isLast]="true"
12693
13017
  [allowHideAll]="allowHideAll"
12694
- (apply)="onApply($event)"
12695
- (columnChange)="onChange($event)">
12696
- </kendo-grid-columnlist>
13018
+ (close)="close(true)"
13019
+ >
13020
+ </kendo-grid-column-chooser-content>
12697
13021
  </ng-template>
12698
- `, 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", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
13022
+ `, 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: ColumnChooserContentComponent, selector: "kendo-grid-column-chooser-content", inputs: ["filterable", "showSelectAll", "showCheckedCount", "allowHideAll", "autoSync", "actionsClass", "closeOnReset", "columns", "isLast", "isExpanded", "service"], outputs: ["close"] }] });
12699
13023
  }
12700
13024
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserComponent, decorators: [{
12701
13025
  type: Component,
@@ -12714,25 +13038,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
12714
13038
  [attr.aria-expanded]="!!(popupRef)"
12715
13039
  [attr.aria-controls]="!!(popupRef) ? popupId : undefined"></button>
12716
13040
  <ng-template #template>
12717
- <kendo-grid-columnlist
12718
- #columnList
13041
+ <kendo-grid-column-chooser-content
12719
13042
  [columns]="columns"
12720
- [ariaLabel]="messageFor('columns')"
12721
- [isLast]="true"
12722
- [applyText]="messageFor('columnsApply')"
12723
- [resetText]="messageFor('columnsReset')"
12724
13043
  [autoSync]="autoSync"
13044
+ [filterable]="filterable"
13045
+ [showSelectAll]="showSelectAll"
13046
+ [closeOnReset]="false"
13047
+ [isLast]="true"
12725
13048
  [allowHideAll]="allowHideAll"
12726
- (apply)="onApply($event)"
12727
- (columnChange)="onChange($event)">
12728
- </kendo-grid-columnlist>
13049
+ (close)="close(true)"
13050
+ >
13051
+ </kendo-grid-column-chooser-content>
12729
13052
  </ng-template>
12730
13053
  `,
12731
13054
  standalone: true,
12732
- imports: [ButtonComponent, ColumnListComponent]
13055
+ imports: [ButtonComponent, ColumnListComponent, ColumnChooserContentComponent]
12733
13056
  }]
12734
13057
  }], ctorParameters: function () { return [{ type: ContextService }, { type: ColumnInfoService }, { type: i2.PopupService }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { autoSync: [{
12735
13058
  type: Input
13059
+ }], filterable: [{
13060
+ type: Input
13061
+ }], showSelectAll: [{
13062
+ type: Input
12736
13063
  }], allowHideAll: [{
12737
13064
  type: Input
12738
13065
  }], anchor: [{
@@ -12867,6 +13194,18 @@ class ColumnChooserToolbarDirective extends ToolbarToolBase {
12867
13194
  * @default true
12868
13195
  */
12869
13196
  allowHideAll = true;
13197
+ /**
13198
+ * When `true`, enables the columns' filtering.
13199
+ *
13200
+ * @default true
13201
+ */
13202
+ filterable = true;
13203
+ /**
13204
+ * When `true`, displays a select all checkbox.
13205
+ *
13206
+ * @default true
13207
+ */
13208
+ showSelectAll = true;
12870
13209
  /**
12871
13210
  * @hidden
12872
13211
  */
@@ -12945,7 +13284,7 @@ class ColumnChooserToolbarDirective extends ToolbarToolBase {
12945
13284
  const direction = this.ctx.localization.rtl ? 'right' : 'left';
12946
13285
  this.popupRef = this.popupSerivce.open({
12947
13286
  anchor: this.buttonElement,
12948
- content: ColumnListComponent,
13287
+ content: ColumnChooserContentComponent,
12949
13288
  positionMode: 'absolute',
12950
13289
  anchorAlign: { vertical: 'bottom', horizontal: direction },
12951
13290
  popupAlign: { vertical: 'top', horizontal: direction }
@@ -12967,18 +13306,28 @@ class ColumnChooserToolbarDirective extends ToolbarToolBase {
12967
13306
  this.buttonElement?.setAttribute('aria-expanded', 'true');
12968
13307
  this.buttonElement?.setAttribute('aria-controls', popupId);
12969
13308
  this.host.selected = true;
12970
- const columnList = this.popupRef.content.instance;
12971
- columnList.isLast = true;
12972
- columnList.autoSync = this.autoSync;
12973
- columnList.allowHideAll = this.allowHideAll;
12974
- columnList.applyText = this.ctx.localization.get('columnsApply');
12975
- columnList.resetText = this.ctx.localization.get('columnsReset');
12976
- columnList.columns = this.ctx.grid.columns;
12977
- columnList.ariaLabel = this.ctx.localization.get('columns');
13309
+ const columnChooserContent = this.popupRef.content.instance;
13310
+ columnChooserContent.columnInfoService = this.columnInfoService;
13311
+ columnChooserContent.ctx = this.ctx;
13312
+ columnChooserContent.showSelectAll = this.showSelectAll;
13313
+ columnChooserContent.filterable = this.filterable;
13314
+ columnChooserContent.isLast = true;
13315
+ columnChooserContent.autoSync = this.autoSync;
13316
+ columnChooserContent.allowHideAll = this.allowHideAll;
13317
+ columnChooserContent.applyText = this.ctx.localization.get('columnsApply');
13318
+ columnChooserContent.resetText = this.ctx.localization.get('columnsReset');
13319
+ columnChooserContent.columns = this.ctx.grid.columns;
13320
+ columnChooserContent.filteredColumns = this.columnInfoService?.leafNamedColumns.filter(column => {
13321
+ if (column.includeInChooser !== false) {
13322
+ column.initiallyChecked = column.currentlyChecked = !column.hidden;
13323
+ return true;
13324
+ }
13325
+ return false;
13326
+ });
12978
13327
  this.subs.add(this.popupRef.popup.instance.anchorViewportLeave.subscribe(() => {
12979
13328
  this.closePopup(true);
12980
13329
  }));
12981
- this.subs.add(columnList.apply.subscribe((changed) => {
13330
+ this.subs.add(columnChooserContent.columnList.apply.subscribe((changed) => {
12982
13331
  if (changed.length) {
12983
13332
  this.cdr.markForCheck();
12984
13333
  this.columnInfoService.changeVisibility(changed);
@@ -13003,10 +13352,10 @@ class ColumnChooserToolbarDirective extends ToolbarToolBase {
13003
13352
  this.buttonElement?.setAttribute('aria-expanded', 'false');
13004
13353
  this.buttonElement?.removeAttribute('aria-controls');
13005
13354
  this.host.selected = false;
13006
- focusAnchor && this.buttonElement?.focus();
13355
+ focusAnchor && this.buttonElement?.focus({ preventScroll: true });
13007
13356
  }
13008
13357
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, deps: [{ token: i0.Renderer2 }, { token: i2.PopupService }, { token: i54.ToolBarButtonComponent }, { token: ContextService }, { token: i0.NgZone }, { token: i54.RefreshService }, { token: AdaptiveGridService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
13009
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserToolbarDirective, isStandalone: true, selector: "[kendoGridColumnChooserTool]", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll" }, usesInheritance: true, ngImport: i0 });
13358
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ColumnChooserToolbarDirective, isStandalone: true, selector: "[kendoGridColumnChooserTool]", inputs: { autoSync: "autoSync", allowHideAll: "allowHideAll", filterable: "filterable", showSelectAll: "showSelectAll" }, usesInheritance: true, ngImport: i0 });
13010
13359
  }
13011
13360
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, decorators: [{
13012
13361
  type: Directive,
@@ -13018,6 +13367,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
13018
13367
  type: Input
13019
13368
  }], allowHideAll: [{
13020
13369
  type: Input
13370
+ }], filterable: [{
13371
+ type: Input
13372
+ }], showSelectAll: [{
13373
+ type: Input
13021
13374
  }] } });
13022
13375
 
13023
13376
  /**
@@ -13703,7 +14056,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
13703
14056
  class ColumnMenuChooserComponent extends ColumnMenuItemBase {
13704
14057
  ctx;
13705
14058
  columnInfoService;
13706
- changeDetector;
13707
14059
  hostElement;
13708
14060
  /**
13709
14061
  * Fires when the content expands.
@@ -13730,23 +14082,12 @@ class ColumnMenuChooserComponent extends ColumnMenuItemBase {
13730
14082
  return this.columnInfoService.leafNamedColumns;
13731
14083
  }
13732
14084
  columnsIcon = columnsIcon;
13733
- constructor(ctx, columnInfoService, changeDetector, hostElement) {
14085
+ constructor(ctx, columnInfoService, hostElement) {
13734
14086
  super();
13735
14087
  this.ctx = ctx;
13736
14088
  this.columnInfoService = columnInfoService;
13737
- this.changeDetector = changeDetector;
13738
14089
  this.hostElement = hostElement;
13739
14090
  }
13740
- /**
13741
- * @hidden
13742
- */
13743
- onApply(changed) {
13744
- this.close();
13745
- if (changed.length) {
13746
- this.changeDetector.markForCheck();
13747
- this.columnInfoService.changeVisibility(changed);
13748
- }
13749
- }
13750
14091
  /**
13751
14092
  * @hidden
13752
14093
  */
@@ -13764,7 +14105,7 @@ class ColumnMenuChooserComponent extends ColumnMenuItemBase {
13764
14105
  this.expanded = true;
13765
14106
  this.expand.emit();
13766
14107
  }
13767
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuChooserComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
14108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuChooserComponent, deps: [{ token: ContextService }, { token: ColumnInfoService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
13768
14109
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuChooserComponent, isStandalone: true, selector: "kendo-grid-columnmenu-chooser", inputs: { expanded: "expanded", isLast: "isLast" }, outputs: { expand: "expand", collapse: "collapse" }, usesInheritance: true, ngImport: i0, template: `
13769
14110
  <kendo-grid-columnmenu-item
13770
14111
  [text]="ctx.localization.get('columns')"
@@ -13774,22 +14115,18 @@ class ColumnMenuChooserComponent extends ColumnMenuItemBase {
13774
14115
  (collapse)="onCollapse()"
13775
14116
  (expand)="onExpand()">
13776
14117
  <ng-template kendoGridColumnMenuItemContentTemplate>
13777
- <kendo-grid-columnlist
13778
- [applyText]="ctx.localization.get('columnsApply')"
13779
- [resetText]="ctx.localization.get('columnsReset')"
13780
- [ariaLabel]="ctx.localization.get('columns')"
14118
+ <kendo-grid-column-chooser-content
13781
14119
  [columns]="columns"
13782
- [autoSync]="false"
13783
- [allowHideAll]="false"
13784
- [actionsClass]="actionsClass"
13785
14120
  [isLast]="isLast"
13786
14121
  [isExpanded]="expanded"
14122
+ [closeOnReset]="false"
13787
14123
  [service]="service"
13788
- (apply)="onApply($event)">
13789
- </kendo-grid-columnlist>
14124
+ (close)="close()"
14125
+ >
14126
+ </kendo-grid-column-chooser-content>
13790
14127
  </ng-template>
13791
14128
  </kendo-grid-columnmenu-item>
13792
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
14129
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { kind: "component", type: ColumnChooserContentComponent, selector: "kendo-grid-column-chooser-content", inputs: ["filterable", "showSelectAll", "showCheckedCount", "allowHideAll", "autoSync", "actionsClass", "closeOnReset", "columns", "isLast", "isExpanded", "service"], outputs: ["close"] }] });
13793
14130
  }
13794
14131
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
13795
14132
  type: Component,
@@ -13804,26 +14141,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
13804
14141
  (collapse)="onCollapse()"
13805
14142
  (expand)="onExpand()">
13806
14143
  <ng-template kendoGridColumnMenuItemContentTemplate>
13807
- <kendo-grid-columnlist
13808
- [applyText]="ctx.localization.get('columnsApply')"
13809
- [resetText]="ctx.localization.get('columnsReset')"
13810
- [ariaLabel]="ctx.localization.get('columns')"
14144
+ <kendo-grid-column-chooser-content
13811
14145
  [columns]="columns"
13812
- [autoSync]="false"
13813
- [allowHideAll]="false"
13814
- [actionsClass]="actionsClass"
13815
14146
  [isLast]="isLast"
13816
14147
  [isExpanded]="expanded"
14148
+ [closeOnReset]="false"
13817
14149
  [service]="service"
13818
- (apply)="onApply($event)">
13819
- </kendo-grid-columnlist>
14150
+ (close)="close()"
14151
+ >
14152
+ </kendo-grid-column-chooser-content>
13820
14153
  </ng-template>
13821
14154
  </kendo-grid-columnmenu-item>
13822
14155
  `,
13823
14156
  standalone: true,
13824
- imports: [ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnListComponent]
14157
+ imports: [ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnListComponent, ColumnChooserContentComponent]
13825
14158
  }]
13826
- }], ctorParameters: function () { return [{ type: ContextService }, { type: ColumnInfoService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { expand: [{
14159
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: ColumnInfoService }, { type: i0.ElementRef }]; }, propDecorators: { expand: [{
13827
14160
  type: Output
13828
14161
  }], collapse: [{
13829
14162
  type: Output
@@ -14543,7 +14876,15 @@ class ColumnMenuContainerComponent {
14543
14876
  else {
14544
14877
  return;
14545
14878
  }
14546
- this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable?.focus());
14879
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
14880
+ const firstFocusable = this.service.menuTabbingService.firstFocusable;
14881
+ if (firstFocusable instanceof DropDownListComponent) {
14882
+ firstFocusable.wrapper.nativeElement.focus({ preventScroll: true });
14883
+ }
14884
+ else {
14885
+ firstFocusable?.focus({ preventScroll: true });
14886
+ }
14887
+ });
14547
14888
  }
14548
14889
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuContainerComponent, deps: [{ token: ColumnMenuService }, { token: NgZone }], target: i0.ɵɵFactoryTarget.Component });
14549
14890
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuContainerComponent, isStandalone: true, selector: "kendo-grid-columnmenu-container", queries: [{ propertyName: "columnMenuItems", predicate: ColumnMenuItemDirective, descendants: true }], ngImport: i0, template: `
@@ -14845,16 +15186,6 @@ class ColumnMenuComponent {
14845
15186
  get hasColumnChooser() {
14846
15187
  return hasColumnChooser(this.settings);
14847
15188
  }
14848
- /**
14849
- * @hidden
14850
- */
14851
- onApply(changed) {
14852
- this.close(true);
14853
- if (changed.length) {
14854
- this.cdr.markForCheck();
14855
- this.columnInfoService.changeVisibility(changed);
14856
- }
14857
- }
14858
15189
  /**
14859
15190
  * @hidden
14860
15191
  */
@@ -15008,7 +15339,13 @@ class ColumnMenuComponent {
15008
15339
  ariaRoot && this.renderer.setAttribute(ariaRoot, 'aria-expanded', 'false');
15009
15340
  }
15010
15341
  focusRoot() {
15011
- this.isNavigable ? this.navigationService.focusCell(0, this.column.leafIndex) : this.anchor.nativeElement.focus();
15342
+ if (this.isNavigable) {
15343
+ this.navigationService.preventScroll = true;
15344
+ this.navigationService.focusCell(0, this.column.leafIndex);
15345
+ }
15346
+ else {
15347
+ this.anchor.nativeElement.focus({ preventScroll: true });
15348
+ }
15012
15349
  }
15013
15350
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, deps: [{ token: NavigationService }, { token: SinglePopupService }, { token: ColumnMenuService }, { token: ContextService }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: ColumnInfoService }, { token: IdService, optional: true }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
15014
15351
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnMenuComponent, isStandalone: true, selector: "kendo-grid-column-menu", inputs: { standalone: "standalone", column: "column", settings: "settings", sort: "sort", filter: "filter", sortable: "sortable", columnMenuTemplate: "columnMenuTemplate", tabIndex: "tabIndex" }, host: { properties: { "class.k-grid-column-menu-standalone": "this.standalone" } }, providers: [
@@ -15168,22 +15505,18 @@ class ColumnMenuComponent {
15168
15505
  </kendo-icon-wrapper>
15169
15506
  </ng-template>
15170
15507
  <ng-template kendoTabContent>
15171
- <kendo-grid-columnlist
15172
- [applyText]="ctx.localization.get('columnsApply')"
15173
- [resetText]="ctx.localization.get('columnsReset')"
15508
+ <kendo-grid-column-chooser-content
15174
15509
  [columns]="columns"
15175
- [autoSync]="false"
15176
- [allowHideAll]="false"
15177
- [actionsClass]="actionsClass"
15178
15510
  [service]="service"
15179
- (apply)="onApply($event)">
15180
- </kendo-grid-columnlist>
15511
+ (close)="close()"
15512
+ >
15513
+ </kendo-grid-column-chooser-content>
15181
15514
  </ng-template>
15182
15515
  </kendo-tabstrip-tab>
15183
15516
  </kendo-tabstrip>
15184
15517
  </ng-template>
15185
15518
 
15186
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { kind: "component", type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: TabTitleDirective, selector: "[kendoTabTitle]" }, { kind: "directive", type: TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }] });
15519
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { kind: "component", type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: TabStripComponent, selector: "kendo-tabstrip", inputs: ["height", "animate", "tabAlignment", "tabPosition", "keepTabContent", "closable", "scrollable", "size", "closeIcon", "closeIconClass", "closeSVGIcon", "showContentArea"], outputs: ["tabSelect", "tabClose", "tabScroll"], exportAs: ["kendoTabStrip"] }, { kind: "component", type: TabStripTabComponent, selector: "kendo-tabstrip-tab", inputs: ["title", "disabled", "cssClass", "cssStyle", "selected", "closable", "closeIcon", "closeIconClass", "closeSVGIcon"], exportAs: ["kendoTabStripTab"] }, { kind: "directive", type: TabTitleDirective, selector: "[kendoTabTitle]" }, { kind: "directive", type: TabContentDirective, selector: "[kendoTabContent]" }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "component", type: ColumnChooserContentComponent, selector: "kendo-grid-column-chooser-content", inputs: ["filterable", "showSelectAll", "showCheckedCount", "allowHideAll", "autoSync", "actionsClass", "closeOnReset", "columns", "isLast", "isExpanded", "service"], outputs: ["close"] }] });
15187
15520
  }
15188
15521
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuComponent, decorators: [{
15189
15522
  type: Component,
@@ -15347,16 +15680,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
15347
15680
  </kendo-icon-wrapper>
15348
15681
  </ng-template>
15349
15682
  <ng-template kendoTabContent>
15350
- <kendo-grid-columnlist
15351
- [applyText]="ctx.localization.get('columnsApply')"
15352
- [resetText]="ctx.localization.get('columnsReset')"
15683
+ <kendo-grid-column-chooser-content
15353
15684
  [columns]="columns"
15354
- [autoSync]="false"
15355
- [allowHideAll]="false"
15356
- [actionsClass]="actionsClass"
15357
15685
  [service]="service"
15358
- (apply)="onApply($event)">
15359
- </kendo-grid-columnlist>
15686
+ (close)="close()"
15687
+ >
15688
+ </kendo-grid-column-chooser-content>
15360
15689
  </ng-template>
15361
15690
  </kendo-tabstrip-tab>
15362
15691
  </kendo-tabstrip>
@@ -15369,7 +15698,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
15369
15698
  ColumnMenuSortComponent, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuStickComponent,
15370
15699
  ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuAutoSizeColumnComponent,
15371
15700
  ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuFilterComponent, TabStripComponent,
15372
- TabStripTabComponent, TabTitleDirective, TabContentDirective, FilterMenuContainerComponent, ColumnListComponent
15701
+ TabStripTabComponent, TabTitleDirective, TabContentDirective, FilterMenuContainerComponent, ColumnListComponent,
15702
+ ColumnChooserContentComponent
15373
15703
  ]
15374
15704
  }]
15375
15705
  }], ctorParameters: function () { return [{ type: NavigationService }, { type: SinglePopupService }, { type: ColumnMenuService }, { type: ContextService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: ColumnInfoService }, { type: IdService, decorators: [{
@@ -19210,7 +19540,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19210
19540
 
19211
19541
  /**
19212
19542
  * Represents the command columns of the Grid. Define the content of the column inside an `<ng-template>` tag.
19213
- * For more information and examples, see the [Command Column Directives](slug:editing_directives_grid#toc-command-column-directives) article.
19543
+ * For more information and examples, see the [Editing Action Buttons](slug:basics_editing_grid#editing-action-buttons) article.
19214
19544
  *
19215
19545
  * @example
19216
19546
  * ```html
@@ -21457,7 +21787,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
21457
21787
  /**
21458
21788
  * Represents the `cancel` command of the Grid. Apply this directive to any `button`
21459
21789
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
21460
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
21790
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
21461
21791
  *
21462
21792
  * When a button with this directive is clicked, the
21463
21793
  * [`cancel`]({% slug api_grid_gridcomponent %}#toc-cancel) event
@@ -21561,7 +21891,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
21561
21891
  /**
21562
21892
  * Represents the `save` command of the Grid. Apply this directive to any `button`
21563
21893
  * element inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
21564
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
21894
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
21565
21895
  * When you click the button with this directive, the
21566
21896
  * [`save`]({% slug api_grid_gridcomponent %}#toc-save) event fires.
21567
21897
  * The button with `kendoGridSaveCommand` is automatically hidden when the row is not in edit mode.
@@ -21664,7 +21994,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
21664
21994
  /**
21665
21995
  * Represents the `remove` command of the Grid. Apply this directive to any `button` element
21666
21996
  * inside a [CommandColumnComponent]({% slug api_grid_commandcolumncomponent %})
21667
- * ([see example](slug:editing_directives_grid#toc-command-column-directives)).
21997
+ * ([see example](slug:basics_editing_grid#editing-action-buttons)).
21668
21998
  * When you click the button with this directive, the
21669
21999
  * [`remove`]({% slug api_grid_gridcomponent %}#toc-remove) event fires.
21670
22000
  * The button with `kendoGridRemoveCommand` is automatically hidden when the row is in edit mode.
@@ -22088,8 +22418,8 @@ const packageMetadata = {
22088
22418
  productName: 'Kendo UI for Angular',
22089
22419
  productCode: 'KENDOUIANGULAR',
22090
22420
  productCodes: ['KENDOUIANGULAR'],
22091
- publishDate: 1758036547,
22092
- version: '20.0.4-develop.2',
22421
+ publishDate: 1759496623,
22422
+ version: '20.1.0-develop.10',
22093
22423
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
22094
22424
  };
22095
22425
 
@@ -24654,6 +24984,9 @@ class ListComponent {
24654
24984
  this.handleSkipOnData = true;
24655
24985
  }
24656
24986
  if (isChanged$1('isVirtual', changes)) {
24987
+ if (this.isVirtual && !(this.minRowHeight || this.rowHeight)) {
24988
+ this.minRowHeight = calcRowHeight(this.table.nativeElement);
24989
+ }
24657
24990
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
24658
24991
  this.scroller.reset();
24659
24992
  this.rowHeightService = this.scroller.rowHeightService = new RowHeightService(this.total, this.rowHeight || this.minRowHeight);
@@ -24674,6 +25007,7 @@ class ListComponent {
24674
25007
  get totalIsAllItems() {
24675
25008
  return this.isVirtual && (Boolean(this.ctx.grid?.pageable || this.ctx.grid?.group?.length));
24676
25009
  }
25010
+ rebindGroupedDataFlag = false;
24677
25011
  ngDoCheck() {
24678
25012
  if (this.virtualColumns && (!this.viewportColumns || this.viewportWidthChange())) {
24679
25013
  this.updateViewportColumns();
@@ -24692,6 +25026,14 @@ class ListComponent {
24692
25026
  this.scroller.reset(this.skipScroll);
24693
25027
  this.scroller.total = this.allItems.length;
24694
25028
  }
25029
+ else if (totalChanged && !this.ctx.grid?.group?.length) {
25030
+ this.scroller.reset(this.skipScroll);
25031
+ this.scroller.total = this.total;
25032
+ }
25033
+ const rebindGroupedData = this.isVirtual && !totalChanged && this.ctx.grid?.group?.length && !this.rebindGroupedDataFlag;
25034
+ if (rebindGroupedData) {
25035
+ this.rebindGroupedDataFlag = true;
25036
+ }
24695
25037
  if (shouldCalculatePageSize || !isPresent(this.scroller.rowHeightService)) {
24696
25038
  const calculatedPageSize = this.virtualPageSize ?? this.calcVirtualPageSize();
24697
25039
  if (calculatedPageSize > 0) {
@@ -24712,6 +25054,10 @@ class ListComponent {
24712
25054
  });
24713
25055
  }
24714
25056
  }
25057
+ else if (this.rebindGroupedDataFlag) {
25058
+ this.ngZone.run(() => this.itemsToRender = this.allItems.slice(this.scroller.virtualSkip, this.scroller.virtualSkip + this.virtualPageSize));
25059
+ this.rebindGroupedDataFlag = false;
25060
+ }
24715
25061
  if (!this.zoneSub) {
24716
25062
  this.zoneSub = this.ngZone.onStable.subscribe(() => {
24717
25063
  if (!this.scroller.rowHeightService) {
@@ -24741,7 +25087,13 @@ class ListComponent {
24741
25087
  }
24742
25088
  if (this.isVirtual) {
24743
25089
  this.ctx.grid?.updateNavigationMetadata();
24744
- this.resetNavigationViewport();
25090
+ // when navigating down from the header to content, skip navigation to the content
25091
+ // that would be triggered by the resetNavigationViewport method to ensure that the
25092
+ // focus is correctly set on the first data row in the content area.
25093
+ const shouldResetViewport = !this.navigationService.activeRow || this.navigationService.activeRow?.dataRowIndex > -1 || isPresent(this.navigationService.activeRow?.groupItem);
25094
+ if (shouldResetViewport) {
25095
+ this.resetNavigationViewport();
25096
+ }
24745
25097
  }
24746
25098
  this.zoneSub.unsubscribe();
24747
25099
  this.zoneSub = null;
@@ -25956,6 +26308,15 @@ class GridMessages extends ComponentMessages {
25956
26308
  * Sets the text for the Grid Column Chooser and Column Chooser toolbar tool.
25957
26309
  */
25958
26310
  columns;
26311
+ /**
26312
+ * The message for the selected columns count in the Column Chooser.
26313
+ * Follows the pattern **{selectedColumnsCount} Selected items ** by default.
26314
+ *
26315
+ * The message consists of two parts - selected columns count and a localizable string.
26316
+ * To allow for reordering its parts, the `columnChooserSelectedColumnsCount` input accepts a string with a placeholder for the selected columns count.
26317
+ * The `{selectedColumnsCount}` placeholder will be replaced internally with the respective actual value.
26318
+ */
26319
+ columnChooserSelectedColumnsCount;
25959
26320
  /**
25960
26321
  * Sets the subtitle for the adaptive Grid Column Chooser and Column Chooser toolbar tool.
25961
26322
  */
@@ -26208,7 +26569,7 @@ class GridMessages extends ComponentMessages {
26208
26569
  */
26209
26570
  externalEditingCancelText;
26210
26571
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
26211
- 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", aiAssistantApplyButtonText: "aiAssistantApplyButtonText", aiAssistantToolbarToolText: "aiAssistantToolbarToolText", aiAssistantWindowTitle: "aiAssistantWindowTitle", aiAssistantWindowCloseTitle: "aiAssistantWindowCloseTitle", aiAssistantOutputCardTitle: "aiAssistantOutputCardTitle", aiAssistantOutputCardBodyContent: "aiAssistantOutputCardBodyContent", aiAssistantWindowMaximizeTitle: "aiAssistantWindowMaximizeTitle", aiAssistantWindowMinimizeTitle: "aiAssistantWindowMinimizeTitle", aiAssistantWindowRestoreTitle: "aiAssistantWindowRestoreTitle", 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", adaptiveFilterOperatorsTitle: "adaptiveFilterOperatorsTitle", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", adaptiveCloseButtonTitle: "adaptiveCloseButtonTitle", adaptiveBackButtonTitle: "adaptiveBackButtonTitle", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", filterToolbarToolText: "filterToolbarToolText", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", columnsSubtitle: "columnsSubtitle", adaptiveFilterTitle: "adaptiveFilterTitle", adaptiveSortTitle: "adaptiveSortTitle", adaptiveGroupTitle: "adaptiveGroupTitle", filterClearAllButton: "filterClearAllButton", groupClearButton: "groupClearButton", sortClearButton: "sortClearButton", sortDoneButton: "sortDoneButton", groupDoneButton: "groupDoneButton", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", sortToolbarToolText: "sortToolbarToolText", 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", editToolbarToolText: "editToolbarToolText", saveToolbarToolText: "saveToolbarToolText", addToolbarToolText: "addToolbarToolText", cancelToolbarToolText: "cancelToolbarToolText", removeToolbarToolText: "removeToolbarToolText", excelExportToolbarToolText: "excelExportToolbarToolText", pdfExportToolbarToolText: "pdfExportToolbarToolText", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext", groupToolbarToolText: "groupToolbarToolText", formValidationErrorText: "formValidationErrorText", removeConfirmationDialogTitle: "removeConfirmationDialogTitle", removeConfirmationDialogContent: "removeConfirmationDialogContent", removeConfirmationDialogConfirmText: "removeConfirmationDialogConfirmText", removeConfirmationDialogRejectText: "removeConfirmationDialogRejectText", externalEditingTitle: "externalEditingTitle", externalEditingAddTitle: "externalEditingAddTitle", externalEditingSaveText: "externalEditingSaveText", externalEditingCancelText: "externalEditingCancelText" }, usesInheritance: true, ngImport: i0 });
26572
+ 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", aiAssistantApplyButtonText: "aiAssistantApplyButtonText", aiAssistantToolbarToolText: "aiAssistantToolbarToolText", aiAssistantWindowTitle: "aiAssistantWindowTitle", aiAssistantWindowCloseTitle: "aiAssistantWindowCloseTitle", aiAssistantOutputCardTitle: "aiAssistantOutputCardTitle", aiAssistantOutputCardBodyContent: "aiAssistantOutputCardBodyContent", aiAssistantWindowMaximizeTitle: "aiAssistantWindowMaximizeTitle", aiAssistantWindowMinimizeTitle: "aiAssistantWindowMinimizeTitle", aiAssistantWindowRestoreTitle: "aiAssistantWindowRestoreTitle", 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", adaptiveFilterOperatorsTitle: "adaptiveFilterOperatorsTitle", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", adaptiveCloseButtonTitle: "adaptiveCloseButtonTitle", adaptiveBackButtonTitle: "adaptiveBackButtonTitle", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", filterToolbarToolText: "filterToolbarToolText", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", columnChooserSelectedColumnsCount: "columnChooserSelectedColumnsCount", columnsSubtitle: "columnsSubtitle", adaptiveFilterTitle: "adaptiveFilterTitle", adaptiveSortTitle: "adaptiveSortTitle", adaptiveGroupTitle: "adaptiveGroupTitle", filterClearAllButton: "filterClearAllButton", groupClearButton: "groupClearButton", sortClearButton: "sortClearButton", sortDoneButton: "sortDoneButton", groupDoneButton: "groupDoneButton", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", sortToolbarToolText: "sortToolbarToolText", 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", editToolbarToolText: "editToolbarToolText", saveToolbarToolText: "saveToolbarToolText", addToolbarToolText: "addToolbarToolText", cancelToolbarToolText: "cancelToolbarToolText", removeToolbarToolText: "removeToolbarToolText", excelExportToolbarToolText: "excelExportToolbarToolText", pdfExportToolbarToolText: "pdfExportToolbarToolText", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext", groupToolbarToolText: "groupToolbarToolText", formValidationErrorText: "formValidationErrorText", removeConfirmationDialogTitle: "removeConfirmationDialogTitle", removeConfirmationDialogContent: "removeConfirmationDialogContent", removeConfirmationDialogConfirmText: "removeConfirmationDialogConfirmText", removeConfirmationDialogRejectText: "removeConfirmationDialogRejectText", externalEditingTitle: "externalEditingTitle", externalEditingAddTitle: "externalEditingAddTitle", externalEditingSaveText: "externalEditingSaveText", externalEditingCancelText: "externalEditingCancelText" }, usesInheritance: true, ngImport: i0 });
26212
26573
  }
26213
26574
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, decorators: [{
26214
26575
  type: Directive,
@@ -26344,6 +26705,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26344
26705
  type: Input
26345
26706
  }], columns: [{
26346
26707
  type: Input
26708
+ }], columnChooserSelectedColumnsCount: [{
26709
+ type: Input
26347
26710
  }], columnsSubtitle: [{
26348
26711
  type: Input
26349
26712
  }], adaptiveFilterTitle: [{
@@ -26569,7 +26932,7 @@ class FilterToolbarToolComponent {
26569
26932
  }
26570
26933
  ngAfterViewInit() {
26571
26934
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
26572
- this.filterItems?.get(0)?.nativeElement.focus();
26935
+ this.filterItems?.get(0)?.nativeElement.focus({ preventScroll: true });
26573
26936
  });
26574
26937
  }
26575
26938
  ngOnDestroy() {
@@ -26755,7 +27118,7 @@ class SortToolbarToolComponent {
26755
27118
  }
26756
27119
  ngAfterViewInit() {
26757
27120
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
26758
- this.sortItems?.get(0)?.nativeElement.focus();
27121
+ this.sortItems?.get(0)?.nativeElement.focus({ preventScroll: true });
26759
27122
  });
26760
27123
  }
26761
27124
  ngOnDestroy() {
@@ -27317,12 +27680,12 @@ class GroupToolbarToolComponent {
27317
27680
  if (items?.first && (!isPresent$1(this.currentFocusedItemIndex) || this.currentFocusedItemIndex >= items.length || this.currentFocusedItemIndex < 0)) {
27318
27681
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
27319
27682
  this.currentFocusedItemIndex = 0;
27320
- this.groupItems.first.nativeElement.focus();
27683
+ this.groupItems.first.nativeElement.focus({ preventScroll: true });
27321
27684
  });
27322
27685
  return;
27323
27686
  }
27324
27687
  if (items?.first) {
27325
- items.get(this.currentFocusedItemIndex).nativeElement.focus();
27688
+ items.get(this.currentFocusedItemIndex).nativeElement.focus({ preventScroll: true });
27326
27689
  }
27327
27690
  }
27328
27691
  get groupItems() {
@@ -27729,7 +28092,6 @@ class AdaptiveRendererComponent {
27729
28092
  cancelIcon = cancelIcon;
27730
28093
  saveIcon = saveIcon;
27731
28094
  columns;
27732
- actionsClass = 'k-actions';
27733
28095
  externalEditingSettings;
27734
28096
  get hasSort() {
27735
28097
  return hasSort(this.ctx.grid.columnMenu, this.adaptiveGridService.column);
@@ -27827,7 +28189,7 @@ class AdaptiveRendererComponent {
27827
28189
  get hasCheckCloseIcon() {
27828
28190
  return this.adaptiveGridService.viewType === 'sortToolbarTool' || this.adaptiveGridService.viewType === 'groupToolbarTool';
27829
28191
  }
27830
- columnList;
28192
+ columnChooserContent;
27831
28193
  filterToolbarToolTemplate;
27832
28194
  filterMenuContainer;
27833
28195
  actionSheet;
@@ -27891,7 +28253,7 @@ class AdaptiveRendererComponent {
27891
28253
  this.actionSheet.nextView();
27892
28254
  }
27893
28255
  applyChanges() {
27894
- this.columnList.applyChanges();
28256
+ this.columnChooserContent.applyChanges();
27895
28257
  this.actionSheet.toggle(false);
27896
28258
  }
27897
28259
  sortBy(column) {
@@ -27943,10 +28305,11 @@ class AdaptiveRendererComponent {
27943
28305
  this.adaptiveGridService.notifyAnimationEnd();
27944
28306
  }
27945
28307
  cancelChanges() {
27946
- this.columnList.cancelChanges();
28308
+ this.columnChooserContent.cancelChanges();
28309
+ this.columnChooserContent.cdr.detectChanges();
27947
28310
  }
27948
28311
  onTab(event) {
27949
- this.columnList.onTab(event);
28312
+ this.columnChooserContent.onTab(event);
27950
28313
  }
27951
28314
  saveEditing() {
27952
28315
  const { event, formGroup, externalEditingDirective } = this.externalEditingSettings;
@@ -27954,7 +28317,7 @@ class AdaptiveRendererComponent {
27954
28317
  this.actionSheet.toggle(false);
27955
28318
  }
27956
28319
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdaptiveRendererComponent, deps: [{ token: ColumnMenuService }, { token: AdaptiveGridService }, { token: FilterService }, { token: ContextService }, { token: i2$1.AdaptiveService }, { token: SortService }, { token: ColumnInfoService }], target: i0.ɵɵFactoryTarget.Component });
27957
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdaptiveRendererComponent, isStandalone: true, selector: "kendo-grid-adaptive-renderer", viewQueries: [{ propertyName: "columnList", first: true, predicate: ["columnList"], descendants: true }, { propertyName: "filterToolbarToolTemplate", first: true, predicate: ["filterToolbarToolTemplate"], descendants: true, read: ViewContainerRef }, { propertyName: "filterMenuContainer", first: true, predicate: ["filterMenuContainer"], descendants: true }, { propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }, { propertyName: "groupToolbarTool", first: true, predicate: GroupToolbarToolComponent, descendants: true }], ngImport: i0, template: `
28320
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AdaptiveRendererComponent, isStandalone: true, selector: "kendo-grid-adaptive-renderer", viewQueries: [{ propertyName: "columnChooserContent", first: true, predicate: ["columnChooserContent"], descendants: true }, { propertyName: "filterToolbarToolTemplate", first: true, predicate: ["filterToolbarToolTemplate"], descendants: true, read: ViewContainerRef }, { propertyName: "filterMenuContainer", first: true, predicate: ["filterMenuContainer"], descendants: true }, { propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }, { propertyName: "groupToolbarTool", first: true, predicate: GroupToolbarToolComponent, descendants: true }], ngImport: i0, template: `
27958
28321
  <kendo-actionsheet
27959
28322
  [cssClass]="{
27960
28323
  'k-adaptive-actionsheet': true,
@@ -28014,19 +28377,14 @@ class AdaptiveRendererComponent {
28014
28377
  </ng-container>
28015
28378
  </ng-template>
28016
28379
  <ng-template kendoActionSheetContentTemplate>
28017
- <kendo-grid-columnlist
28018
- #columnList
28019
- [columns]="adaptiveGridService.columns"
28020
- [ariaLabel]="messageFor('columns')"
28380
+ <kendo-grid-column-chooser-content
28381
+ #columnChooserContent
28382
+ [columns]="columns"
28021
28383
  [isLast]="true"
28022
- [showActions]="false"
28023
- [applyText]="messageFor('columnsApply')"
28024
- [resetText]="messageFor('columnsReset')"
28025
28384
  [autoSync]="false"
28026
- [actionsClass]="actionsClass"
28027
28385
  [allowHideAll]="false"
28028
28386
  >
28029
- </kendo-grid-columnlist>
28387
+ </kendo-grid-column-chooser-content>
28030
28388
  </ng-template>
28031
28389
  <ng-template kendoActionSheetFooterTemplate>
28032
28390
  <ng-container [ngTemplateOutlet]="actionSheetFooterTemplate">
@@ -28168,20 +28526,15 @@ class AdaptiveRendererComponent {
28168
28526
  </ng-template>
28169
28527
 
28170
28528
  <ng-template kendoActionSheetContentTemplate>
28171
- <kendo-grid-columnlist
28529
+ <kendo-grid-column-chooser-content
28172
28530
  *ngIf="adaptiveGridService.secondaryView === 'columnChooser'"
28173
- #columnList
28531
+ #columnChooserContent
28174
28532
  [columns]="adaptiveGridService.columns"
28175
- [ariaLabel]="messageFor('columns')"
28176
28533
  [isLast]="true"
28177
- [showActions]="false"
28178
- [applyText]="messageFor('columnsApply')"
28179
- [resetText]="messageFor('columnsReset')"
28180
28534
  [autoSync]="false"
28181
- [actionsClass]="actionsClass"
28182
28535
  [allowHideAll]="false"
28183
28536
  >
28184
- </kendo-grid-columnlist>
28537
+ </kendo-grid-column-chooser-content>
28185
28538
  <kendo-grid-filter-menu-container
28186
28539
  *ngIf="adaptiveGridService.secondaryView === 'columnFilter'"
28187
28540
  [column]="adaptiveGridService.column"
@@ -28380,7 +28733,7 @@ class AdaptiveRendererComponent {
28380
28733
  {{messageFor('filterFilterButton')}}
28381
28734
  </button>
28382
28735
  </ng-template>
28383
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["actions", "actionsLayout", "overlayClickClose", "title", "subtitle", "items", "cssClass", "cssStyle", "animation", "expanded", "titleId", "initialFocus"], outputs: ["expandedChange", "action", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "component", type: ActionSheetViewComponent, selector: "kendo-actionsheet-view", inputs: ["title", "subtitle", "titleId"] }, { kind: "component", type: FilterToolbarToolComponent, selector: "kendo-filter-toolbar-tool", outputs: ["close"] }, { kind: "component", type: GroupToolbarToolComponent, selector: "kendo-group-toolbar-tool", inputs: ["adaptive"], outputs: ["close", "groupClear"] }, { kind: "component", type: ButtonDirective, 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: "directive", type: ActionSheetHeaderTemplateDirective, selector: "[kendoActionSheetHeaderTemplate]" }, { kind: "directive", type: ActionSheetContentTemplateDirective, selector: "[kendoActionSheetContentTemplate]" }, { kind: "directive", type: ActionSheetFooterTemplateDirective, selector: "[kendoActionSheetFooterTemplate]" }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { kind: "component", type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { kind: "component", type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "showActions", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: FormComponent, selector: "kendo-grid-external-form", inputs: ["controls", "formSettings", "formGroup", "actionButtons"], outputs: ["formSubmit"] }] });
28736
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["actions", "actionsLayout", "overlayClickClose", "title", "subtitle", "items", "cssClass", "cssStyle", "animation", "expanded", "titleId", "initialFocus"], outputs: ["expandedChange", "action", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "component", type: ActionSheetViewComponent, selector: "kendo-actionsheet-view", inputs: ["title", "subtitle", "titleId"] }, { kind: "component", type: FilterToolbarToolComponent, selector: "kendo-filter-toolbar-tool", outputs: ["close"] }, { kind: "component", type: GroupToolbarToolComponent, selector: "kendo-group-toolbar-tool", inputs: ["adaptive"], outputs: ["close", "groupClear"] }, { kind: "component", type: ButtonDirective, 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: "directive", type: ActionSheetHeaderTemplateDirective, selector: "[kendoActionSheetHeaderTemplate]" }, { kind: "directive", type: ActionSheetContentTemplateDirective, selector: "[kendoActionSheetContentTemplate]" }, { kind: "directive", type: ActionSheetFooterTemplateDirective, selector: "[kendoActionSheetFooterTemplate]" }, { kind: "component", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container" }, { kind: "component", type: ColumnMenuFilterComponent, selector: "kendo-grid-columnmenu-filter", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuSortComponent, selector: "kendo-grid-columnmenu-sort" }, { kind: "component", type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { kind: "component", type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }, { kind: "component", type: ColumnMenuPositionComponent, selector: "kendo-grid-columnmenu-position", inputs: ["expanded", "showLock", "showStick", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuChooserComponent, selector: "kendo-grid-columnmenu-chooser", inputs: ["expanded", "isLast"], outputs: ["expand", "collapse"] }, { kind: "component", type: ColumnMenuAutoSizeColumnComponent, selector: "kendo-grid-columnmenu-autosize-column", inputs: ["column"] }, { kind: "component", type: ColumnMenuAutoSizeAllColumnsComponent, selector: "kendo-grid-columnmenu-autosize-all-columns" }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemDirective, selector: "[kendoGridColumnMenuItem]", inputs: ["kendoGridColumnMenuItem"] }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: FormComponent, selector: "kendo-grid-external-form", inputs: ["controls", "formSettings", "formGroup", "actionButtons"], outputs: ["formSubmit"] }, { kind: "component", type: ColumnChooserContentComponent, selector: "kendo-grid-column-chooser-content", inputs: ["filterable", "showSelectAll", "showCheckedCount", "allowHideAll", "autoSync", "actionsClass", "closeOnReset", "columns", "isLast", "isExpanded", "service"], outputs: ["close"] }] });
28384
28737
  }
28385
28738
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AdaptiveRendererComponent, decorators: [{
28386
28739
  type: Component,
@@ -28446,19 +28799,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28446
28799
  </ng-container>
28447
28800
  </ng-template>
28448
28801
  <ng-template kendoActionSheetContentTemplate>
28449
- <kendo-grid-columnlist
28450
- #columnList
28451
- [columns]="adaptiveGridService.columns"
28452
- [ariaLabel]="messageFor('columns')"
28802
+ <kendo-grid-column-chooser-content
28803
+ #columnChooserContent
28804
+ [columns]="columns"
28453
28805
  [isLast]="true"
28454
- [showActions]="false"
28455
- [applyText]="messageFor('columnsApply')"
28456
- [resetText]="messageFor('columnsReset')"
28457
28806
  [autoSync]="false"
28458
- [actionsClass]="actionsClass"
28459
28807
  [allowHideAll]="false"
28460
28808
  >
28461
- </kendo-grid-columnlist>
28809
+ </kendo-grid-column-chooser-content>
28462
28810
  </ng-template>
28463
28811
  <ng-template kendoActionSheetFooterTemplate>
28464
28812
  <ng-container [ngTemplateOutlet]="actionSheetFooterTemplate">
@@ -28600,20 +28948,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28600
28948
  </ng-template>
28601
28949
 
28602
28950
  <ng-template kendoActionSheetContentTemplate>
28603
- <kendo-grid-columnlist
28951
+ <kendo-grid-column-chooser-content
28604
28952
  *ngIf="adaptiveGridService.secondaryView === 'columnChooser'"
28605
- #columnList
28953
+ #columnChooserContent
28606
28954
  [columns]="adaptiveGridService.columns"
28607
- [ariaLabel]="messageFor('columns')"
28608
28955
  [isLast]="true"
28609
- [showActions]="false"
28610
- [applyText]="messageFor('columnsApply')"
28611
- [resetText]="messageFor('columnsReset')"
28612
28956
  [autoSync]="false"
28613
- [actionsClass]="actionsClass"
28614
28957
  [allowHideAll]="false"
28615
28958
  >
28616
- </kendo-grid-columnlist>
28959
+ </kendo-grid-column-chooser-content>
28617
28960
  <kendo-grid-filter-menu-container
28618
28961
  *ngIf="adaptiveGridService.secondaryView === 'columnFilter'"
28619
28962
  [column]="adaptiveGridService.column"
@@ -28838,16 +29181,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28838
29181
  ColumnMenuAutoSizeAllColumnsComponent,
28839
29182
  ColumnMenuItemComponent,
28840
29183
  ColumnMenuItemDirective,
28841
- ColumnListComponent,
28842
29184
  FilterMenuContainerComponent,
28843
29185
  ColumnMenuLockComponent,
28844
29186
  EventsOutsideAngularDirective,
28845
- FormComponent
29187
+ FormComponent,
29188
+ ColumnChooserContentComponent
28846
29189
  ]
28847
29190
  }]
28848
- }], ctorParameters: function () { return [{ type: ColumnMenuService }, { type: AdaptiveGridService }, { type: FilterService }, { type: ContextService }, { type: i2$1.AdaptiveService }, { type: SortService }, { type: ColumnInfoService }]; }, propDecorators: { columnList: [{
29191
+ }], ctorParameters: function () { return [{ type: ColumnMenuService }, { type: AdaptiveGridService }, { type: FilterService }, { type: ContextService }, { type: i2$1.AdaptiveService }, { type: SortService }, { type: ColumnInfoService }]; }, propDecorators: { columnChooserContent: [{
28849
29192
  type: ViewChild,
28850
- args: ['columnList', { static: false }]
29193
+ args: ['columnChooserContent', { static: false }]
28851
29194
  }], filterToolbarToolTemplate: [{
28852
29195
  type: ViewChild,
28853
29196
  args: ['filterToolbarToolTemplate', { read: ViewContainerRef, static: false }]
@@ -32277,6 +32620,9 @@ class GridComponent {
32277
32620
 
32278
32621
  i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
32279
32622
  aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
32623
+
32624
+ i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
32625
+ columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
32280
32626
  >
32281
32627
  </ng-container>
32282
32628
  <kendo-grid-toolbar
@@ -33134,6 +33480,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33134
33480
 
33135
33481
  i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
33136
33482
  aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
33483
+
33484
+ i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
33485
+ columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
33137
33486
  >
33138
33487
  </ng-container>
33139
33488
  <kendo-grid-toolbar
@@ -34364,7 +34713,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34364
34713
  }] });
34365
34714
 
34366
34715
  /**
34367
- * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example]({% slug editing_directives_grid %}#toc-template-editing-directive)).
34716
+ * Represents the directive that manages editing operations in the Grid when using Template-Driven Angular Forms ([see example](slug:inline_editing_grid#using-template-driven-forms)).
34368
34717
  *
34369
34718
  * @example
34370
34719
  * ```html
@@ -34441,7 +34790,7 @@ const markAllAsTouched = (control) => {
34441
34790
  };
34442
34791
 
34443
34792
  /**
34444
- * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:editing_directives_grid#toc-reactive-editing-directive)).
34793
+ * Represents the directive that manages editing operations in the Grid when using Reactive Forms ([see example](slug:inline_editing_grid#using-reactive-forms)).
34445
34794
  *
34446
34795
  * @example
34447
34796
  * ```html
@@ -34490,7 +34839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34490
34839
  }] } });
34491
34840
 
34492
34841
  /**
34493
- * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-in-cell-editing)).
34842
+ * Represent the directive that manages in-cell editing operations in the Grid when using Reactive Forms ([see example](slug:editing_incell_grid#quick-setup)).
34494
34843
  *
34495
34844
  * @example
34496
34845
  * ```html
@@ -34576,7 +34925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34576
34925
 
34577
34926
  /**
34578
34927
  * Represents the Kendo UI Grid external editing directive. The directive manages editing operations in the Grid when using the
34579
- * External Form ([see example](slug:editing_directives_grid#external-editing)).
34928
+ * External Form ([see example](slug:external_editing_grid#quick-setup)).
34580
34929
  *
34581
34930
  * @example
34582
34931
  * ```typescript
@@ -37382,7 +37731,6 @@ const KENDO_GRID_FILTER_ROW = [
37382
37731
  * Utility array that contains the former ColumnMenu module declarations
37383
37732
  */
37384
37733
  const KENDO_GRID_COLUMN_MENU_DECLARATIONS = [
37385
- ColumnMenuChooserItemCheckedDirective,
37386
37734
  ColumnListComponent,
37387
37735
  ColumnChooserComponent,
37388
37736
  ColumnChooserToolbarDirective,
@@ -37612,7 +37960,7 @@ const KENDO_GRID = [
37612
37960
  */
37613
37961
  class GridModule {
37614
37962
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
37615
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridModule, imports: [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnMenuChooserItemCheckedDirective, ColumnListComponent, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, HighlightDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, FormComponent, DialogFormComponent, FormFormFieldComponent, UndoRedoDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, TableDirective,
37963
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: GridModule, imports: [GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FooterComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnListComponent, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuComponent, ColumnMenuLockComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridComponent, ListComponent, ToolbarComponent, LocalizedMessagesDirective, CustomMessagesComponent, DataBindingDirective, ToolbarTemplateDirective, SelectionDirective, HighlightDirective, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridMarqueeDirective, GridSpacerComponent, GridToolbarFocusableDirective, StatusBarComponent, StatusBarTemplateDirective, GridClipboardDirective, FormComponent, DialogFormComponent, FormFormFieldComponent, UndoRedoDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, TableDirective,
37616
37964
  UndoCommandToolbarDirective,
37617
37965
  RedoCommandToolbarDirective], exports: [GridComponent, ToolbarTemplateDirective, ToolbarComponent, GridSpacerComponent, StatusBarTemplateDirective, DataBindingDirective, SelectionDirective, HighlightDirective, CustomMessagesComponent, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, ExternalEditingDirective, ExpandDetailsDirective, ExpandGroupDirective, GridToolbarFocusableDirective, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, GroupHeaderComponent, GroupPanelComponent, ColumnComponent, ColumnGroupComponent, LogicalCellDirective, LogicalRowDirective, FocusableDirective, FooterTemplateDirective, ColGroupComponent, ResizableContainerDirective, i1$3.TemplateContextDirective, FieldAccessorPipe, DetailTemplateDirective, SpanColumnComponent, LoadingComponent, GridTableDirective, CommandColumnComponent, CheckboxColumnComponent, SelectionCheckboxDirective, CellTemplateDirective, EditTemplateDirective, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, TableBodyComponent, NoRecordsTemplateDirective, CellComponent, EditCommandDirective, CancelCommandDirective, SaveCommandDirective, RemoveCommandDirective, AddCommandDirective, AddCommandToolbarDirective, EditCommandToolbarDirective, SaveCommandToolbarDirective, RemoveCommandToolbarDirective, CancelCommandToolbarDirective, CellLoadingTemplateDirective, LoadingTemplateDirective, RowReorderColumnComponent, SortCommandToolbarDirective, FilterCommandToolbarDirective, AIAssistantToolbarDirective, GroupCommandToolbarDirective, SelectAllToolbarToolComponent, HeaderComponent, HeaderTemplateDirective, ColumnHandleDirective, SelectAllCheckboxDirective, FilterRowComponent, FilterCellComponent, FilterCellTemplateDirective, StringFilterCellComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellWrapperComponent, DateFilterCellComponent, FilterCellOperatorsComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, AfterFilterOperatorComponent, AfterEqFilterOperatorComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuInputWrapperComponent, StringFilterMenuInputComponent, StringFilterMenuComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, NumericFilterMenuInputComponent, DateFilterMenuInputComponent, DateFilterMenuComponent, FilterMenuHostDirective, BooleanFilterMenuComponent, FilterMenuDropDownListDirective, BooleanFilterRadioButtonDirective, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuSortComponent, ColumnMenuLockComponent, ColumnMenuStickComponent, ColumnMenuPositionComponent, ColumnMenuChooserComponent, ColumnMenuTemplateDirective, ColumnMenuContainerComponent, ColumnMenuItemDirective, ColumnMenuComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuAutoSizeAllColumnsComponent, GridClipboardDirective, UndoRedoDirective, UndoCommandToolbarDirective, RedoCommandToolbarDirective, i54.ToolBarComponent, i54.ToolbarCustomMessagesComponent, i54.ToolBarButtonComponent, i54.ToolBarButtonGroupComponent, i54.ToolBarDropDownButtonComponent, i54.ToolBarSeparatorComponent, i54.ToolBarSpacerComponent, i54.ToolBarSplitButtonComponent, i54.ToolBarToolComponent, i53.CustomMessagesComponent, i53.PagerFocusableDirective, i53.PagerInfoComponent, i53.PagerInputComponent, i53.PagerNextButtonsComponent, i53.PagerNumericButtonsComponent, i53.PagerPageSizesComponent, i53.PagerPrevButtonsComponent, i53.PagerTemplateDirective, i53.PagerComponent, i53.PagerSpacerComponent] });
37618
37966
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridModule, providers: [