@progress/kendo-angular-grid 20.1.0-develop.15 → 20.1.0-develop.17

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.
@@ -6,7 +6,7 @@ import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Injectable, SecurityContext, InjectionToken, Optional, Inject, Directive, SkipSelf, Input, isDevMode, QueryList, Component, ContentChildren, ContentChild, forwardRef, Host, Output, HostBinding, Pipe, TemplateRef, ChangeDetectionStrategy, ViewChildren, ViewChild, Self, NgZone, HostListener, ElementRef, ViewContainerRef, ViewEncapsulation, inject, Injector, NgModule } from '@angular/core';
7
7
  import { merge, of, Subject, zip as zip$1, from, Subscription, interval, fromEvent, Observable, BehaviorSubject } from 'rxjs';
8
8
  import * as i1$3 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, Keys, 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';
9
+ import { isDocumentAvailable, Keys, hasClasses as hasClasses$1, isPresent as isPresent$1, normalizeNumpadKeys, anyChanged, TemplateContextDirective, DraggableDirective, EventsOutsideAngularDirective, replaceMessagePlaceholder, isChanged as isChanged$1, KendoInput, guid, areObjectsEqual, 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';
@@ -32,7 +32,7 @@ import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, FormControl, FormG
32
32
  import * as i2$1 from '@progress/kendo-angular-utils';
33
33
  import { DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
34
34
  import * as i4 from '@progress/kendo-angular-inputs';
35
- import { TextBoxComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, RadioButtonComponent, CheckBoxComponent, KENDO_FORMFIELD, KENDO_TEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_CHECKBOX } from '@progress/kendo-angular-inputs';
35
+ import { TextBoxComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, RadioButtonComponent, CheckBoxComponent, TextBoxPrefixTemplateDirective, KENDO_FORMFIELD, KENDO_TEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_CHECKBOX } from '@progress/kendo-angular-inputs';
36
36
  import * as i5 from '@progress/kendo-angular-dateinputs';
37
37
  import { DatePickerComponent, DatePickerCustomMessagesComponent, KENDO_DATEPICKER, CalendarDOMService, CenturyViewService, DecadeViewService, MonthViewService, YearViewService, NavigationService as NavigationService$1 } from '@progress/kendo-angular-dateinputs';
38
38
  import * as i54 from '@progress/kendo-angular-toolbar';
@@ -2869,6 +2869,12 @@ class ColumnComponent extends ColumnBase {
2869
2869
  * @default 'text'
2870
2870
  */
2871
2871
  filter = 'text';
2872
+ /**
2873
+ * Specifies the filter type for the filter menu UI.
2874
+ *
2875
+ * @default 'default'
2876
+ */
2877
+ filterVariant = 'default';
2872
2878
  /**
2873
2879
  * Shows or hides the filter UI for this column. [See example](slug:filtering_grid).
2874
2880
  *
@@ -2916,7 +2922,7 @@ class ColumnComponent extends ColumnBase {
2916
2922
  return this.title === undefined ? this.field : this.title;
2917
2923
  }
2918
2924
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnComponent, deps: [{ token: ColumnBase, host: true, optional: true, skipSelf: true }, { token: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
2919
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnComponent, isStandalone: true, selector: "kendo-grid-column", inputs: { field: "field", format: "format", sortable: "sortable", groupable: "groupable", editor: "editor", filter: "filter", filterable: "filterable", editable: "editable" }, providers: [
2925
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ColumnComponent, isStandalone: true, selector: "kendo-grid-column", inputs: { field: "field", format: "format", sortable: "sortable", groupable: "groupable", editor: "editor", filter: "filter", filterVariant: "filterVariant", filterable: "filterable", editable: "editable" }, providers: [
2920
2926
  {
2921
2927
  provide: ColumnBase,
2922
2928
  useExisting: forwardRef(() => ColumnComponent)
@@ -2956,6 +2962,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2956
2962
  type: Input
2957
2963
  }], filter: [{
2958
2964
  type: Input
2965
+ }], filterVariant: [{
2966
+ type: Input
2959
2967
  }], filterable: [{
2960
2968
  type: Input
2961
2969
  }], editable: [{
@@ -5485,7 +5493,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
5485
5493
  args: ['attr.aria-owns']
5486
5494
  }] } });
5487
5495
 
5488
- const FORMAT_REGEX = /\{\d+:?/;
5496
+ const FORMAT_REGEX$1 = /\{\d+:?/;
5489
5497
  /**
5490
5498
  * @hidden
5491
5499
  */
@@ -5506,7 +5514,7 @@ class FieldAccessorPipe {
5506
5514
  }
5507
5515
  formatValue(format, value) {
5508
5516
  const intl = this.intlService;
5509
- if (isString(format) && format.match(FORMAT_REGEX)) {
5517
+ if (isString(format) && FORMAT_REGEX$1.exec(format)) {
5510
5518
  return intl.format(format, value);
5511
5519
  }
5512
5520
  return intl.toString(value, format);
@@ -10677,6 +10685,300 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10677
10685
  type: Input
10678
10686
  }] } });
10679
10687
 
10688
+ /**
10689
+ * @hidden
10690
+ */
10691
+ class LocalDataChangesService {
10692
+ changes = new EventEmitter();
10693
+ data;
10694
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalDataChangesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10695
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalDataChangesService });
10696
+ }
10697
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalDataChangesService, decorators: [{
10698
+ type: Injectable
10699
+ }] });
10700
+
10701
+ const FORMAT_REGEX = /\{\d+:?/;
10702
+ /**
10703
+ * @hidden
10704
+ */
10705
+ class FormatPipe {
10706
+ intlService;
10707
+ constructor(intlService) {
10708
+ this.intlService = intlService;
10709
+ }
10710
+ transform(value, format) {
10711
+ const intl = this.intlService;
10712
+ if (isString(format) && FORMAT_REGEX.exec(format)) {
10713
+ return intl.format(format, value);
10714
+ }
10715
+ return intl.toString(value, format);
10716
+ }
10717
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatPipe, deps: [{ token: i1$4.IntlService }], target: i0.ɵɵFactoryTarget.Pipe });
10718
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FormatPipe, isStandalone: true, name: "format", pure: false });
10719
+ }
10720
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatPipe, decorators: [{
10721
+ type: Pipe,
10722
+ args: [{
10723
+ // eslint-disable-next-line @angular-eslint/pipe-prefix
10724
+ name: 'format',
10725
+ pure: false,
10726
+ standalone: true
10727
+ }]
10728
+ }], ctorParameters: function () { return [{ type: i1$4.IntlService }]; } });
10729
+
10730
+ const DEFAULT_SEARCH_DELAY = 500;
10731
+ /**
10732
+ * @hidden
10733
+ */
10734
+ class MultiCheckboxFilterComponent {
10735
+ ctx;
10736
+ dataChangesService;
10737
+ column;
10738
+ filterChange = new EventEmitter();
10739
+ constructor(ctx, dataChangesService) {
10740
+ this.ctx = ctx;
10741
+ this.dataChangesService = dataChangesService;
10742
+ }
10743
+ listData;
10744
+ searchIcon = searchIcon;
10745
+ showSelectAll = true;
10746
+ currentlySelected = new Set();
10747
+ isSearched = false;
10748
+ currentFilter;
10749
+ typingTimeout;
10750
+ ngOnInit() {
10751
+ this.listData = [...new Set(this.gridData.map(i => i[this.column.field]))].sort((a, b) => { return a - b; });
10752
+ this.currentlySelected = new Set(this.filteredGridData.map(i => i[this.column.field]));
10753
+ this.currentFilter = this.ctx.grid?.filter;
10754
+ if (this.currentFilter) {
10755
+ this.filterChange.emit(this.currentFilter);
10756
+ }
10757
+ }
10758
+ ngOnDestroy() {
10759
+ if (this.typingTimeout) {
10760
+ clearTimeout(this.typingTimeout);
10761
+ this.typingTimeout = null;
10762
+ }
10763
+ }
10764
+ isItemSelected(item) {
10765
+ return this.currentlySelected.has(item);
10766
+ }
10767
+ onSearch(value) {
10768
+ clearTimeout(this.typingTimeout);
10769
+ this.typingTimeout = setTimeout(() => {
10770
+ this.isSearched = value.length > 0;
10771
+ this.showSelectAll = !this.isSearched;
10772
+ const field = this.column?.field;
10773
+ if (!field) {
10774
+ this.listData = [];
10775
+ return;
10776
+ }
10777
+ const base = [...new Set(this.gridData.map(i => i[field]))].sort((a, b) => { return a - b; });
10778
+ if (!value) {
10779
+ this.listData = base;
10780
+ return;
10781
+ }
10782
+ this.listData = filterBy(base, { operator: 'contains', value });
10783
+ }, DEFAULT_SEARCH_DELAY);
10784
+ }
10785
+ handleCheckBoxChange(checkedState, value, selectAllChecked) {
10786
+ const field = this.column?.field;
10787
+ if (!field) {
10788
+ return;
10789
+ }
10790
+ if (!this.currentFilter) {
10791
+ const existing = this.ctx.grid.filter;
10792
+ this.currentFilter = existing ? { ...existing } : { logic: 'and', filters: [] };
10793
+ }
10794
+ const compositeIndex = this.currentFilter.filters.findIndex((f) => f && Array.isArray(f.filters) && f.filters.some((ff) => ff.field === field));
10795
+ let fieldFilters = [];
10796
+ if (compositeIndex !== -1) {
10797
+ fieldFilters = [...this.currentFilter.filters[compositeIndex].filters];
10798
+ }
10799
+ const valueForItem = (item) => item?.[field];
10800
+ if (selectAllChecked) {
10801
+ if (checkedState) {
10802
+ fieldFilters = [];
10803
+ this.currentlySelected = new Set(this.gridData.map(i => i[this.column.field]));
10804
+ }
10805
+ else {
10806
+ fieldFilters = this.gridData.map(item => ({
10807
+ field,
10808
+ operator: 'neq',
10809
+ value: valueForItem(item)
10810
+ }));
10811
+ this.currentlySelected.clear();
10812
+ }
10813
+ }
10814
+ else {
10815
+ const exists = fieldFilters.some(f => f.value === value);
10816
+ if (checkedState) {
10817
+ if (!exists) {
10818
+ fieldFilters.push({ field, operator: 'eq', value });
10819
+ }
10820
+ else {
10821
+ fieldFilters = fieldFilters.filter(f => f.value !== value);
10822
+ }
10823
+ this.currentlySelected.add(value);
10824
+ }
10825
+ else {
10826
+ if (exists) {
10827
+ fieldFilters = fieldFilters.filter(f => f.value !== value);
10828
+ }
10829
+ else {
10830
+ fieldFilters.push({ field, operator: 'neq', value });
10831
+ }
10832
+ this.currentlySelected.delete(value);
10833
+ }
10834
+ }
10835
+ if (fieldFilters.length === 0) {
10836
+ if (compositeIndex !== -1) {
10837
+ this.currentFilter.filters.splice(compositeIndex, 1);
10838
+ }
10839
+ else {
10840
+ this.currentFilter.filters = fieldFilters;
10841
+ }
10842
+ }
10843
+ else {
10844
+ const compositeBlock = {
10845
+ logic: 'and',
10846
+ filters: fieldFilters
10847
+ };
10848
+ if (compositeIndex !== -1) {
10849
+ this.currentFilter.filters[compositeIndex] = compositeBlock;
10850
+ }
10851
+ else {
10852
+ this.currentFilter.filters.push(compositeBlock);
10853
+ }
10854
+ }
10855
+ this.filterChange.emit(this.currentFilter);
10856
+ }
10857
+ get filteredGridData() {
10858
+ return filterBy(this.gridData, this.ctx.grid?.filter);
10859
+ }
10860
+ get selectAllChecked() {
10861
+ if (!this.listData) {
10862
+ return;
10863
+ }
10864
+ if (this.currentlySelected.size === this.listData.length && this.currentlySelected.size > 0) {
10865
+ return true;
10866
+ }
10867
+ else if (this.currentlySelected.size === 0) {
10868
+ return false;
10869
+ }
10870
+ else {
10871
+ return 'indeterminate';
10872
+ }
10873
+ }
10874
+ get gridData() {
10875
+ let data = [];
10876
+ const isLocalData = isPresent$1(this.ctx?.dataBindingDirective);
10877
+ if (isPresent$1(this.normalizedFilterVariant.data)) {
10878
+ data = this.normalizedFilterVariant.data;
10879
+ }
10880
+ else if (isLocalData) {
10881
+ data = this.dataChangesService.data;
10882
+ }
10883
+ else {
10884
+ data = this.ctx.grid?.flatData;
10885
+ }
10886
+ return data || [];
10887
+ }
10888
+ get normalizedFilterVariant() {
10889
+ const defaultMultiCheckboxSettings = { variant: 'multiCheckbox', search: true };
10890
+ if (typeof this.column?.filterVariant === 'string') {
10891
+ return {
10892
+ variant: this.column.filterVariant,
10893
+ search: true
10894
+ };
10895
+ }
10896
+ return Object.assign(defaultMultiCheckboxSettings, this.column?.filterVariant);
10897
+ }
10898
+ get selectedItemsMessage() {
10899
+ const localizationMsg = this.messageFor('multiCheckboxFilterSelectedItemsCount') || '';
10900
+ return replaceMessagePlaceholder(localizationMsg, 'selectedItemsCount', this.currentlySelected.size.toString());
10901
+ }
10902
+ messageFor(key) {
10903
+ return this.ctx.localization.get(key);
10904
+ }
10905
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiCheckboxFilterComponent, deps: [{ token: ContextService }, { token: LocalDataChangesService }], target: i0.ɵɵFactoryTarget.Component });
10906
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiCheckboxFilterComponent, isStandalone: true, selector: "kendo-grid-multicheckbox-filter", inputs: { column: "column" }, outputs: { filterChange: "filterChange" }, ngImport: i0, template: `
10907
+ <kendo-textbox *ngIf="normalizedFilterVariant.search"
10908
+ class="k-searchbox"
10909
+ [placeholder]="messageFor('multiCheckboxFilterSearchPlaceholder')"
10910
+ (valueChange)="onSearch($event)">
10911
+ <ng-template kendoTextBoxPrefixTemplate>
10912
+ <kendo-icon-wrapper innerCssClass="k-input-icon" name="search" [svgIcon]="searchIcon"></kendo-icon-wrapper>
10913
+ </ng-template>
10914
+ </kendo-textbox>
10915
+ <ul class="k-reset k-multicheck-wrap">
10916
+ <li class="k-item k-check-all-wrap" *ngIf="showSelectAll">
10917
+ <label class="k-label k-checkbox-label" role="option">
10918
+ <kendo-checkbox
10919
+ [checkedState]="selectAllChecked"
10920
+ (checkedStateChange)="handleCheckBoxChange($event, null, true)">
10921
+ </kendo-checkbox>
10922
+ <span>{{ messageFor('multiCheckboxFilterSelectAllLabel') }}</span>
10923
+ </label>
10924
+ </li>
10925
+ <li class="k-item" *ngFor="let item of listData">
10926
+ <label class="k-label k-checkbox-label" role="option">
10927
+ <kendo-checkbox
10928
+ [checkedState]="isItemSelected(item)"
10929
+ (checkedStateChange)="handleCheckBoxChange($event, item)">
10930
+ </kendo-checkbox>
10931
+ <span>{{ item | format: column.format }}</span>
10932
+ </label>
10933
+ </li>
10934
+ </ul>
10935
+ <div class="k-filter-selected-items">{{selectedItemsMessage}}</div>
10936
+ `, 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"] }, { 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: TextBoxPrefixTemplateDirective, selector: "[kendoTextBoxPrefixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "pipe", type: FormatPipe, name: "format" }] });
10937
+ }
10938
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiCheckboxFilterComponent, decorators: [{
10939
+ type: Component,
10940
+ args: [{
10941
+ selector: 'kendo-grid-multicheckbox-filter',
10942
+ template: `
10943
+ <kendo-textbox *ngIf="normalizedFilterVariant.search"
10944
+ class="k-searchbox"
10945
+ [placeholder]="messageFor('multiCheckboxFilterSearchPlaceholder')"
10946
+ (valueChange)="onSearch($event)">
10947
+ <ng-template kendoTextBoxPrefixTemplate>
10948
+ <kendo-icon-wrapper innerCssClass="k-input-icon" name="search" [svgIcon]="searchIcon"></kendo-icon-wrapper>
10949
+ </ng-template>
10950
+ </kendo-textbox>
10951
+ <ul class="k-reset k-multicheck-wrap">
10952
+ <li class="k-item k-check-all-wrap" *ngIf="showSelectAll">
10953
+ <label class="k-label k-checkbox-label" role="option">
10954
+ <kendo-checkbox
10955
+ [checkedState]="selectAllChecked"
10956
+ (checkedStateChange)="handleCheckBoxChange($event, null, true)">
10957
+ </kendo-checkbox>
10958
+ <span>{{ messageFor('multiCheckboxFilterSelectAllLabel') }}</span>
10959
+ </label>
10960
+ </li>
10961
+ <li class="k-item" *ngFor="let item of listData">
10962
+ <label class="k-label k-checkbox-label" role="option">
10963
+ <kendo-checkbox
10964
+ [checkedState]="isItemSelected(item)"
10965
+ (checkedStateChange)="handleCheckBoxChange($event, item)">
10966
+ </kendo-checkbox>
10967
+ <span>{{ item | format: column.format }}</span>
10968
+ </label>
10969
+ </li>
10970
+ </ul>
10971
+ <div class="k-filter-selected-items">{{selectedItemsMessage}}</div>
10972
+ `,
10973
+ standalone: true,
10974
+ imports: [NgFor, NgIf, CheckBoxComponent, TextBoxComponent, TextBoxPrefixTemplateDirective, IconWrapperComponent, FormatPipe]
10975
+ }]
10976
+ }], ctorParameters: function () { return [{ type: ContextService }, { type: LocalDataChangesService }]; }, propDecorators: { column: [{
10977
+ type: Input
10978
+ }], filterChange: [{
10979
+ type: Output
10980
+ }] } });
10981
+
10680
10982
  const isNoValueOperator = operator => (operator === "isnull"
10681
10983
  || operator === "isnotnull"
10682
10984
  || operator === "isempty"
@@ -10761,11 +11063,11 @@ class FilterMenuContainerComponent {
10761
11063
  return this._childFilter;
10762
11064
  }
10763
11065
  resetButton;
10764
- filterButton;
10765
11066
  _childFilter;
10766
11067
  subscription;
10767
11068
  _templateContext = {};
10768
11069
  _filter;
11070
+ checkboxFilter;
10769
11071
  constructor(parentService, childService, ctx, cd, menuTabbingService, adaptiveGridService) {
10770
11072
  this.parentService = parentService;
10771
11073
  this.childService = childService;
@@ -10791,7 +11093,7 @@ class FilterMenuContainerComponent {
10791
11093
  this.menuTabbingService.lastFocusable = undefined;
10792
11094
  }
10793
11095
  get disabled() {
10794
- return !this.childFilter.filters.some(validFilters);
11096
+ return this.isMultiFilter ? this.areFiltersEqual : !this.childFilter.filters.some(validFilters);
10795
11097
  }
10796
11098
  get templateContext() {
10797
11099
  this._templateContext.column = this.column;
@@ -10804,15 +11106,20 @@ class FilterMenuContainerComponent {
10804
11106
  return isPresent(this.column) && isPresent(this.column.filterMenuTemplateRef);
10805
11107
  }
10806
11108
  submit() {
10807
- const filter = trimFilters(this.childFilter);
10808
- if (filter.filters.length) {
10809
- const root = this.filter || {
10810
- filters: [],
10811
- logic: "and"
10812
- };
10813
- removeFilter(root, this.column.field);
10814
- root.filters.push(filter);
10815
- this.parentService.filter(root);
11109
+ if (this.isMultiFilter) {
11110
+ this.parentService.filter(this.checkboxFilter);
11111
+ }
11112
+ else {
11113
+ const filter = trimFilters(this.childFilter);
11114
+ if (filter.filters.length) {
11115
+ const root = this.filter || {
11116
+ filters: [],
11117
+ logic: "and"
11118
+ };
11119
+ removeFilter(root, this.column.field);
11120
+ root.filters.push(filter);
11121
+ this.parentService.filter(root);
11122
+ }
10816
11123
  }
10817
11124
  this.close.emit();
10818
11125
  return false;
@@ -10840,29 +11147,100 @@ class FilterMenuContainerComponent {
10840
11147
  }
10841
11148
  }
10842
11149
  }
11150
+ onCheckboxFilterChange(filter) {
11151
+ this.checkboxFilter = filter;
11152
+ }
11153
+ getButtonIcon(buttonType, iconType) {
11154
+ if (!this.isMultiFilter) {
11155
+ return;
11156
+ }
11157
+ const icons = {
11158
+ filter: {
11159
+ icon: 'filter',
11160
+ svgIcon: filterIcon
11161
+ },
11162
+ reset: {
11163
+ icon: 'filter-clear',
11164
+ svgIcon: filterClearIcon
11165
+ }
11166
+ };
11167
+ return icons[buttonType]?.[iconType];
11168
+ }
10843
11169
  get clearText() {
10844
11170
  return this.ctx.localization.get("filterClearButton");
10845
11171
  }
10846
11172
  get filterText() {
10847
11173
  return this.ctx.localization.get("filterFilterButton");
10848
11174
  }
11175
+ get isMultiFilter() {
11176
+ if (!isPresent(this.column?.filterVariant)) {
11177
+ return false;
11178
+ }
11179
+ const filterVariant = this.column?.filterVariant;
11180
+ return isPresent(filterVariant) && (filterVariant === 'multiCheckbox' || typeof filterVariant === 'object' && filterVariant.variant === 'multiCheckbox');
11181
+ }
11182
+ get areFiltersEqual() {
11183
+ const checkboxFilter = this.checkboxFilter;
11184
+ const gridFilter = this.filter;
11185
+ const isComposite = (f) => !!f && Array.isArray(f.filters);
11186
+ // Treat undefined and "empty (no inner filters)" as equivalent
11187
+ const isEmptyComposite = (f) => isComposite(f) && f.filters.length === 0;
11188
+ if (!checkboxFilter && !gridFilter) {
11189
+ return true;
11190
+ }
11191
+ if ((!checkboxFilter && isEmptyComposite(gridFilter)) || (!gridFilter && isEmptyComposite(checkboxFilter))) {
11192
+ return true;
11193
+ }
11194
+ if (!checkboxFilter || !gridFilter) {
11195
+ return false;
11196
+ }
11197
+ const eq = (x, y) => {
11198
+ const xIsComp = isComposite(x);
11199
+ const yIsComp = isComposite(y);
11200
+ if (xIsComp !== yIsComp) {
11201
+ return false;
11202
+ }
11203
+ if (xIsComp) {
11204
+ const xLogic = x.logic || 'and';
11205
+ const yLogic = y.logic || 'and';
11206
+ if (xLogic !== yLogic) {
11207
+ return false;
11208
+ }
11209
+ if (x.filters.length !== y.filters.length) {
11210
+ return false;
11211
+ }
11212
+ for (let i = 0; i < x.filters.length; i++) {
11213
+ if (!eq(x.filters[i], y.filters[i])) {
11214
+ return false;
11215
+ }
11216
+ }
11217
+ return true;
11218
+ }
11219
+ return areObjectsEqual(x, y);
11220
+ };
11221
+ return eq(checkboxFilter, gridFilter);
11222
+ }
10849
11223
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuContainerComponent, deps: [{ token: FilterService, skipSelf: true }, { token: FilterService }, { token: ContextService }, { token: i0.ChangeDetectorRef }, { token: MenuTabbingService }, { token: AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
10850
11224
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterMenuContainerComponent, isStandalone: true, selector: "kendo-grid-filter-menu-container", inputs: { column: "column", isLast: "isLast", isExpanded: "isExpanded", menuTabbingService: "menuTabbingService", filter: "filter", actionsClass: "actionsClass" }, outputs: { close: "close" }, providers: [
10851
11225
  FilterService,
10852
11226
  MenuTabbingService
10853
- ], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "filterButton", first: true, predicate: ["filterButton"], descendants: true }], ngImport: i0, template: `
11227
+ ], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }], ngImport: i0, template: `
10854
11228
  <form (submit)="submit()" (reset)="reset()"
10855
- class="k-filter-menu">
11229
+ class="k-filter-menu"
11230
+ [ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
10856
11231
  <div class="k-filter-menu-container">
10857
11232
  <ng-container [ngSwitch]="hasTemplate">
10858
11233
  <ng-container *ngSwitchCase="false">
10859
- <ng-container
11234
+ <ng-container *ngIf="!isMultiFilter; else multiFilter"
10860
11235
  kendoFilterMenuHost
10861
11236
  [filterService]="childService"
10862
11237
  [column]="column"
10863
11238
  [filter]="childFilter"
10864
11239
  [menuTabbingService]="menuTabbingService">
10865
11240
  </ng-container>
11241
+ <ng-template #multiFilter>
11242
+ <kendo-grid-multicheckbox-filter [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
11243
+ </ng-template>
10866
11244
  </ng-container>
10867
11245
  <ng-container *ngSwitchCase="true">
10868
11246
  <ng-template
@@ -10874,20 +11252,24 @@ class FilterMenuContainerComponent {
10874
11252
  </ng-container>
10875
11253
  </ng-container>
10876
11254
  <div *ngIf="!ctx.grid?.isActionSheetExpanded" [ngClass]="actionsClass">
10877
- <button #filterButton
11255
+ <button #filterButton kendoButton
11256
+ themeColor="primary"
10878
11257
  type="submit"
10879
- class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
11258
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
10880
11259
  [disabled]="disabled"
11260
+ [icon]="getButtonIcon('filter', 'icon')"
11261
+ [svgIcon]="getButtonIcon('filter', 'svgIcon')"
10881
11262
  (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
10882
- <button
10883
- #resetButton
11263
+ <button #resetButton kendoButton
10884
11264
  type="reset"
10885
- class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
11265
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
11266
+ [icon]="getButtonIcon('reset', 'icon')"
11267
+ [svgIcon]="getButtonIcon('reset', 'svgIcon')"
10886
11268
  (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
10887
11269
  </div>
10888
11270
  </div>
10889
11271
  </form>
10890
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
11272
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: FilterMenuHostDirective, selector: "[kendoFilterMenuHost]", inputs: ["filterService", "menuTabbingService"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MultiCheckboxFilterComponent, selector: "kendo-grid-multicheckbox-filter", inputs: ["column"], outputs: ["filterChange"] }, { 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"] }] });
10891
11273
  }
10892
11274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterMenuContainerComponent, decorators: [{
10893
11275
  type: Component,
@@ -10899,17 +11281,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10899
11281
  selector: 'kendo-grid-filter-menu-container',
10900
11282
  template: `
10901
11283
  <form (submit)="submit()" (reset)="reset()"
10902
- class="k-filter-menu">
11284
+ class="k-filter-menu"
11285
+ [ngClass]="{'k-popup k-group k-reset': isMultiFilter && !ctx.grid?.isActionSheetExpanded}">
10903
11286
  <div class="k-filter-menu-container">
10904
11287
  <ng-container [ngSwitch]="hasTemplate">
10905
11288
  <ng-container *ngSwitchCase="false">
10906
- <ng-container
11289
+ <ng-container *ngIf="!isMultiFilter; else multiFilter"
10907
11290
  kendoFilterMenuHost
10908
11291
  [filterService]="childService"
10909
11292
  [column]="column"
10910
11293
  [filter]="childFilter"
10911
11294
  [menuTabbingService]="menuTabbingService">
10912
11295
  </ng-container>
11296
+ <ng-template #multiFilter>
11297
+ <kendo-grid-multicheckbox-filter [column]="column" (filterChange)="onCheckboxFilterChange($event)"></kendo-grid-multicheckbox-filter>
11298
+ </ng-template>
10913
11299
  </ng-container>
10914
11300
  <ng-container *ngSwitchCase="true">
10915
11301
  <ng-template
@@ -10921,22 +11307,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10921
11307
  </ng-container>
10922
11308
  </ng-container>
10923
11309
  <div *ngIf="!ctx.grid?.isActionSheetExpanded" [ngClass]="actionsClass">
10924
- <button #filterButton
11310
+ <button #filterButton kendoButton
11311
+ themeColor="primary"
10925
11312
  type="submit"
10926
- class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
11313
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
10927
11314
  [disabled]="disabled"
11315
+ [icon]="getButtonIcon('filter', 'icon')"
11316
+ [svgIcon]="getButtonIcon('filter', 'svgIcon')"
10928
11317
  (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
10929
- <button
10930
- #resetButton
11318
+ <button #resetButton kendoButton
10931
11319
  type="reset"
10932
- class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
11320
+ [ngClass]="{'k-button-rectangle': !isMultiFilter}"
11321
+ [icon]="getButtonIcon('reset', 'icon')"
11322
+ [svgIcon]="getButtonIcon('reset', 'svgIcon')"
10933
11323
  (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
10934
11324
  </div>
10935
11325
  </div>
10936
11326
  </form>
10937
11327
  `,
10938
11328
  standalone: true,
10939
- imports: [FormsModule, NgSwitch, NgSwitchCase, FilterMenuHostDirective, NgIf, NgTemplateOutlet, NgClass]
11329
+ imports: [FormsModule, NgSwitch, NgSwitchCase, FilterMenuHostDirective, NgIf, NgTemplateOutlet, NgClass, MultiCheckboxFilterComponent, ButtonComponent]
10940
11330
  }]
10941
11331
  }], ctorParameters: function () { return [{ type: FilterService, decorators: [{
10942
11332
  type: SkipSelf
@@ -10957,9 +11347,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
10957
11347
  }], resetButton: [{
10958
11348
  type: ViewChild,
10959
11349
  args: ['resetButton', { static: false }]
10960
- }], filterButton: [{
10961
- type: ViewChild,
10962
- args: ['filterButton', { static: false }]
10963
11350
  }] } });
10964
11351
 
10965
11352
  let id$1 = 0;
@@ -10975,7 +11362,6 @@ class FilterMenuComponent {
10975
11362
  renderer;
10976
11363
  cdr;
10977
11364
  adaptiveGridService;
10978
- zone;
10979
11365
  idService;
10980
11366
  filterIcon = filterIcon;
10981
11367
  /**
@@ -10993,7 +11379,7 @@ class FilterMenuComponent {
10993
11379
  tabIndex = '-1';
10994
11380
  popupRef;
10995
11381
  popupSubs;
10996
- constructor(filterService, popupService, ctx, navigationService, renderer, cdr, adaptiveGridService, zone, idService) {
11382
+ constructor(filterService, popupService, ctx, navigationService, renderer, cdr, adaptiveGridService, idService) {
10997
11383
  this.filterService = filterService;
10998
11384
  this.popupService = popupService;
10999
11385
  this.ctx = ctx;
@@ -11001,7 +11387,6 @@ class FilterMenuComponent {
11001
11387
  this.renderer = renderer;
11002
11388
  this.cdr = cdr;
11003
11389
  this.adaptiveGridService = adaptiveGridService;
11004
- this.zone = zone;
11005
11390
  this.idService = idService;
11006
11391
  }
11007
11392
  ngOnDestroy() {
@@ -11087,7 +11472,7 @@ class FilterMenuComponent {
11087
11472
  this.anchor.nativeElement.focus({ preventScroll: true });
11088
11473
  }
11089
11474
  }
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 });
11475
+ 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: IdService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11091
11476
  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: `
11092
11477
  <a #anchor
11093
11478
  class="k-grid-filter-menu k-grid-header-menu"
@@ -11146,7 +11531,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
11146
11531
  standalone: true,
11147
11532
  imports: [IconWrapperComponent, FilterMenuContainerComponent],
11148
11533
  }]
11149
- }], ctorParameters: function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: AdaptiveGridService }, { type: i0.NgZone }, { type: IdService, decorators: [{
11534
+ }], ctorParameters: function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ContextService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: AdaptiveGridService }, { type: IdService, decorators: [{
11150
11535
  type: Optional
11151
11536
  }] }]; }, propDecorators: { column: [{
11152
11537
  type: Input
@@ -17249,19 +17634,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17249
17634
  args: ['dblclick']
17250
17635
  }] } });
17251
17636
 
17252
- /**
17253
- * @hidden
17254
- */
17255
- class LocalDataChangesService {
17256
- changes = new EventEmitter();
17257
- data;
17258
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalDataChangesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17259
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalDataChangesService });
17260
- }
17261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LocalDataChangesService, decorators: [{
17262
- type: Injectable
17263
- }] });
17264
-
17265
17637
  /**
17266
17638
  * @hidden
17267
17639
  */
@@ -18482,7 +18854,7 @@ class HeaderComponent {
18482
18854
  }
18483
18855
  onHeaderKeydown(column, args) {
18484
18856
  const code = normalizeNumpadKeys(args);
18485
- if (code === Keys.ArrowDown && args.altKey && this.showFilterMenu) {
18857
+ if (code === Keys.ArrowDown && args.altKey && this.showFilterMenu && this.isFilterable(column)) {
18486
18858
  args.preventDefault();
18487
18859
  args.stopImmediatePropagation();
18488
18860
  const filterMenu = this.filterMenus.find(fm => fm.column === column);
@@ -22418,8 +22790,8 @@ const packageMetadata = {
22418
22790
  productName: 'Kendo UI for Angular',
22419
22791
  productCode: 'KENDOUIANGULAR',
22420
22792
  productCodes: ['KENDOUIANGULAR'],
22421
- publishDate: 1759838840,
22422
- version: '20.1.0-develop.15',
22793
+ publishDate: 1759933234,
22794
+ version: '20.1.0-develop.17',
22423
22795
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
22424
22796
  };
22425
22797
 
@@ -26565,8 +26937,29 @@ class GridMessages extends ComponentMessages {
26565
26937
  * Sets the text for the external editing Dialog <b>Cancel</b> button.
26566
26938
  */
26567
26939
  externalEditingCancelText;
26940
+ /**
26941
+ * The placeholder text for the multi-checkbox filter search input
26942
+ */
26943
+ multiCheckboxFilterSearchPlaceholder;
26944
+ /**
26945
+ * The label for the multi-checkbox filter select all option
26946
+ */
26947
+ multiCheckboxFilterSelectAllLabel;
26948
+ /**
26949
+ * The text for the multi-checkbox filter selected items count
26950
+ *
26951
+ * The text includes the selected items count and a localizable string.
26952
+ * For 3 selected items the default text is `3 selected items`.
26953
+ *
26954
+ * To customize the text, use the `{selectedItemsCount}` placeholder and a custom localizable string.
26955
+ * For example, `{selectedItemsCount} items are selected`.
26956
+ *
26957
+ * The `{selectedItemsCount}` placeholder is replaced with the count of selected items,
26958
+ * and the message is rendered as `3 items are selected`.
26959
+ */
26960
+ multiCheckboxFilterSelectedItemsCount;
26568
26961
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
26569
- 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 });
26962
+ 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", multiCheckboxFilterSearchPlaceholder: "multiCheckboxFilterSearchPlaceholder", multiCheckboxFilterSelectAllLabel: "multiCheckboxFilterSelectAllLabel", multiCheckboxFilterSelectedItemsCount: "multiCheckboxFilterSelectedItemsCount" }, usesInheritance: true, ngImport: i0 });
26570
26963
  }
26571
26964
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, decorators: [{
26572
26965
  type: Directive,
@@ -26824,6 +27217,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
26824
27217
  type: Input
26825
27218
  }], externalEditingCancelText: [{
26826
27219
  type: Input
27220
+ }], multiCheckboxFilterSearchPlaceholder: [{
27221
+ type: Input
27222
+ }], multiCheckboxFilterSelectAllLabel: [{
27223
+ type: Input
27224
+ }], multiCheckboxFilterSelectedItemsCount: [{
27225
+ type: Input
26827
27226
  }] } });
26828
27227
 
26829
27228
  /**
@@ -30062,7 +30461,7 @@ class GridComponent {
30062
30461
  */
30063
30462
  selectable = false;
30064
30463
  /**
30065
- * Sets the descriptors for sorting the data ([see example]({% slug sorting_grid %})).
30464
+ * Sets the descriptors for sorting the data ([see example](slug:manual_sorting_grid)).
30066
30465
  */
30067
30466
  set sort(value) {
30068
30467
  if (isArray(value)) {
@@ -30095,11 +30494,11 @@ class GridComponent {
30095
30494
  */
30096
30495
  trackBy = defaultTrackBy;
30097
30496
  /**
30098
- * Sets the filter descriptor for the data ([see examples]({% slug filtering_grid %})).
30497
+ * Sets the filter descriptor for the data ([see examples](slug:manual_filtering_grid)).
30099
30498
  */
30100
30499
  filter;
30101
30500
  /**
30102
- * Sets the descriptors for grouping the data ([see example]({% slug grouping_grid %})).
30501
+ * Sets the descriptors for grouping the data ([see example](slug:manual_grouping_grid)).
30103
30502
  */
30104
30503
  set group(value) {
30105
30504
  if (isArray(value)) {
@@ -32620,6 +33019,15 @@ class GridComponent {
32620
33019
 
32621
33020
  i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
32622
33021
  columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
33022
+
33023
+ i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
33024
+ multiCheckboxFilterSearchPlaceholder="Search..."
33025
+
33026
+ i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
33027
+ multiCheckboxFilterSelectAllLabel="Select all"
33028
+
33029
+ i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
33030
+ multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
32623
33031
  >
32624
33032
  </ng-container>
32625
33033
  <kendo-grid-toolbar
@@ -33480,6 +33888,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33480
33888
 
33481
33889
  i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
33482
33890
  columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
33891
+
33892
+ i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
33893
+ multiCheckboxFilterSearchPlaceholder="Search..."
33894
+
33895
+ i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
33896
+ multiCheckboxFilterSelectAllLabel="Select all"
33897
+
33898
+ i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
33899
+ multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
33483
33900
  >
33484
33901
  </ng-container>
33485
33902
  <kendo-grid-toolbar
@@ -38086,5 +38503,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
38086
38503
  * Generated bundle index. Do not edit.
38087
38504
  */
38088
38505
 
38089
- export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarAIResponseErrorEvent, GridToolbarAIResponseSuccessEvent, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, defaultTrackBy, hasFilterMenu, hasFilterRow, isFilterable };
38506
+ export { AIAssistantToolbarDirective, AddCommandDirective, AddCommandToolbarDirective, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, AutoCompleteFilterCellComponent, BaseFilterCellComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, BooleanFilterCellComponent, BooleanFilterComponent, BooleanFilterMenuComponent, BooleanFilterRadioButtonDirective, BrowserSupportService, CELL_CONTEXT, CancelCommandDirective, CancelCommandToolbarDirective, CellCloseEvent, CellComponent, CellLoadingTemplateDirective, CellSelectionAggregateService, CellSelectionService, CellTemplateDirective, ChangeNotificationService, CheckboxColumnComponent, ColGroupComponent, ColumnBase, ColumnChooserComponent, ColumnChooserToolbarDirective, ColumnComponent, ColumnGroupComponent, ColumnHandleDirective, ColumnInfoService, ColumnListComponent, ColumnLockedChangeEvent, ColumnMenuAutoSizeAllColumnsComponent, ColumnMenuAutoSizeColumnComponent, ColumnMenuChooserComponent, ColumnMenuComponent, ColumnMenuContainerComponent, ColumnMenuFilterComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective, ColumnMenuItemDirective, ColumnMenuLockComponent, ColumnMenuPositionComponent, ColumnMenuService, ColumnMenuSortComponent, ColumnMenuStickComponent, ColumnMenuTemplateDirective, ColumnReorderEvent, ColumnReorderService, ColumnResizingService, ColumnStickyChangeEvent, ColumnVisibilityChangeEvent, ColumnsContainer, CommandColumnComponent, ContainsFilterOperatorComponent, ContextService, CustomMessagesComponent, DEFAULT_AI_REQUEST_OPTIONS, DEFAULT_SCROLLER_FACTORY, DataBindingDirective, DateFilterCellComponent, DateFilterComponent, DateFilterMenuComponent, DateFilterMenuInputComponent, DetailCollapseEvent, DetailExpandEvent, DetailTemplateDirective, DetailsService, DoesNotContainFilterOperatorComponent, DomEventsService, DragAndDropService, DragHintService, DropCueService, EditCommandDirective, EditCommandToolbarDirective, EditService as EditServiceClass, EditTemplateDirective, EditingDirectiveBase, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, ExcelCommandDirective, ExcelCommandToolbarDirective, ExcelComponent, ExcelExportEvent, ExcelModule, ExcelService, ExpandDetailsDirective, ExpandGroupDirective, ExternalEditingDirective, FieldAccessorPipe, FilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellTemplateDirective, FilterCellWrapperComponent, FilterCommandToolbarDirective, FilterInputDirective, FilterMenuComponent, FilterMenuContainerComponent, FilterMenuDropDownListDirective, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuTemplateDirective, FilterRowComponent, FilterService, FocusRoot, FocusableDirective, FooterComponent, FooterTemplateDirective, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, GridClipboardDirective, GridComponent, GridModule, GridSpacerComponent, GridTableDirective, GridToolbarAIResponseErrorEvent, GridToolbarAIResponseSuccessEvent, GridToolbarFocusableDirective, GridToolbarNavigationService, GroupCommandToolbarDirective, GroupFooterTemplateDirective, GroupHeaderColumnTemplateDirective, GroupHeaderComponent, GroupHeaderTemplateDirective, GroupInfoService, GroupPanelComponent, GroupsService, HeaderComponent, HeaderTemplateDirective, HighlightDirective, IdService, InCellEditingDirective, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, KENDO_GRID, KENDO_GRID_BODY_EXPORTS, KENDO_GRID_COLUMN_DRAGANDDROP, KENDO_GRID_COLUMN_MENU_DECLARATIONS, KENDO_GRID_COLUMN_MENU_EXPORTS, KENDO_GRID_DECLARATIONS, KENDO_GRID_EXCEL_EXPORT, KENDO_GRID_EXPORTS, KENDO_GRID_FILTER_MENU, KENDO_GRID_FILTER_MENU_EXPORTS, KENDO_GRID_FILTER_OPERATORS, KENDO_GRID_FILTER_ROW, KENDO_GRID_FILTER_ROW_EXPORTS, KENDO_GRID_FILTER_SHARED, KENDO_GRID_FOOTER_EXPORTS, KENDO_GRID_GROUP_EXPORTS, KENDO_GRID_HEADER_EXPORTS, KENDO_GRID_PDF_EXPORT, KENDO_GRID_SHARED, LessFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, ListComponent, LoadingComponent, LoadingTemplateDirective, LocalDataChangesService, LogicalCellDirective, LogicalRowDirective, MenuTabbingService, MultiCheckboxFilterComponent, NavigationService, NoRecordsTemplateDirective, NotEqualFilterOperatorComponent, NumericFilterCellComponent, NumericFilterComponent, NumericFilterMenuComponent, NumericFilterMenuInputComponent, PDFCommandDirective, PDFCommandToolbarDirective, PDFComponent, PDFMarginComponent, PDFModule, PDFService, PDFTemplateDirective, PopupCloseEvent, ReactiveEditingDirective, RedoCommandToolbarDirective, RemoveCommandDirective, RemoveCommandToolbarDirective, ResizableContainerDirective, ResizeService, ResponsiveService, RowDragHandleTemplateDirective, RowDragHintTemplateDirective, RowEditingDirectiveBase, RowReorderColumnComponent, RowReorderService, SaveCommandDirective, SaveCommandToolbarDirective, ScrollRequestService, ScrollSyncService, SelectAllCheckboxDirective, SelectAllToolbarToolComponent, SelectionCheckboxDirective, SelectionDirective, SelectionService, SinglePopupService, SizingOptionsService, Skip, SortCommandToolbarDirective, SortService, SpanColumnComponent, StartsWithFilterOperatorComponent, StatusBarTemplateDirective, StringFilterCellComponent, StringFilterComponent, StringFilterMenuComponent, StringFilterMenuInputComponent, SuspendService, TableBodyComponent, TableDirective, TemplateEditingDirective, ToolbarComponent, ToolbarTemplateDirective, UndoCommandToolbarDirective, UndoRedoDirective, UndoRedoEvent, defaultTrackBy, hasFilterMenu, hasFilterRow, isFilterable };
38090
38507