@progress/kendo-angular-grid 20.1.0-develop.3 → 20.1.0-develop.30

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 (64) hide show
  1. package/column-menu/column-list.component.d.ts +0 -2
  2. package/columns/column.component.d.ts +8 -1
  3. package/columns/command-column.component.d.ts +1 -1
  4. package/columns/span-column.component.d.ts +1 -1
  5. package/editing/cancel-command.directive.d.ts +1 -1
  6. package/editing/edit-row-options.interface.d.ts +1 -1
  7. package/editing/edit-template.directive.d.ts +1 -1
  8. package/editing/remove-command.directive.d.ts +1 -1
  9. package/editing/save-command.directive.d.ts +1 -1
  10. package/editing-directives/edit-service.interface.d.ts +2 -2
  11. package/editing-directives/external-editing.directive.d.ts +1 -1
  12. package/editing-directives/in-cell-editing.directive.d.ts +1 -1
  13. package/editing-directives/reactive-editing.directive.d.ts +1 -1
  14. package/editing-directives/template-editing.directive.d.ts +1 -1
  15. package/esm2022/column-menu/column-list-kb-nav.service.mjs +1 -1
  16. package/esm2022/column-menu/column-list.component.mjs +7 -43
  17. package/esm2022/column-menu/column-menu-container.component.mjs +10 -1
  18. package/esm2022/column-menu/column-menu.component.mjs +7 -1
  19. package/esm2022/columns/column.component.mjs +9 -1
  20. package/esm2022/columns/command-column.component.mjs +1 -1
  21. package/esm2022/columns/span-column.component.mjs +1 -1
  22. package/esm2022/common/clipboard.directive.mjs +3 -0
  23. package/esm2022/editing/cancel-command.directive.mjs +1 -1
  24. package/esm2022/editing/edit-template.directive.mjs +1 -1
  25. package/esm2022/editing/remove-command.directive.mjs +1 -1
  26. package/esm2022/editing/save-command.directive.mjs +1 -1
  27. package/esm2022/editing-directives/external-editing.directive.mjs +1 -1
  28. package/esm2022/editing-directives/in-cell-editing.directive.mjs +1 -1
  29. package/esm2022/editing-directives/reactive-editing.directive.mjs +1 -1
  30. package/esm2022/editing-directives/template-editing.directive.mjs +1 -1
  31. package/esm2022/filtering/menu/filter-menu-container.component.mjs +120 -31
  32. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +2 -2
  33. package/esm2022/filtering/menu/filter-menu.component.mjs +11 -7
  34. package/esm2022/filtering/multicheckbox-filter.component.mjs +290 -0
  35. package/esm2022/grid.component.mjs +25 -12
  36. package/esm2022/index.mjs +1 -0
  37. package/esm2022/localization/messages.mjs +28 -1
  38. package/esm2022/navigation/logical-cell.directive.mjs +8 -2
  39. package/esm2022/navigation/navigation.service.mjs +1 -0
  40. package/esm2022/package-metadata.mjs +2 -2
  41. package/esm2022/pdf/pdf.component.mjs +8 -3
  42. package/esm2022/rendering/cell.component.mjs +2 -2
  43. package/esm2022/rendering/common/field-accessor.pipe.mjs +1 -1
  44. package/esm2022/rendering/common/format.pipe.mjs +37 -0
  45. package/esm2022/rendering/header/header.component.mjs +1 -1
  46. package/esm2022/rendering/list.component.mjs +2 -2
  47. package/esm2022/rendering/table-body.component.mjs +4 -2
  48. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +1 -1
  49. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +1 -1
  50. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +2 -2
  51. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +1 -1
  52. package/esm2022/scrolling/scroller.service.mjs +0 -3
  53. package/fesm2022/progress-kendo-angular-grid.mjs +1781 -1348
  54. package/filtering/filterable.d.ts +23 -0
  55. package/filtering/menu/filter-menu-container.component.d.ts +5 -1
  56. package/filtering/menu/filter-menu.component.d.ts +3 -4
  57. package/filtering/multicheckbox-filter.component.d.ts +43 -0
  58. package/grid.component.d.ts +4 -6
  59. package/index.d.ts +1 -0
  60. package/localization/messages.d.ts +22 -1
  61. package/navigation/navigation.service.d.ts +1 -0
  62. package/package.json +21 -21
  63. package/rendering/common/format.pipe.d.ts +17 -0
  64. package/schematics/ngAdd/index.js +4 -4
@@ -2,7 +2,7 @@
2
2
  * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
- import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, QueryList, ViewChild, isDevMode, NgZone, ViewChildren, ChangeDetectorRef, ViewEncapsulation, ViewContainerRef, ContentChild } from '@angular/core';
5
+ import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, QueryList, ViewChild, isDevMode, NgZone, ViewChildren, ChangeDetectorRef, ViewEncapsulation, ViewContainerRef } from '@angular/core';
6
6
  import { ZoneAwareEventEmitter } from './common/event-emitter';
7
7
  import { FormControl, FormGroup } from '@angular/forms';
8
8
  import { merge } from 'rxjs';
@@ -101,7 +101,6 @@ import { AdaptiveRendererComponent } from './adaptiveness/adaptive-renderer.comp
101
101
  import { ColumnMenuService } from './column-menu/column-menu.service';
102
102
  import { MenuTabbingService } from './filtering/menu/menu-tabbing.service';
103
103
  import { DataMappingService } from './data/data-mapping.service';
104
- import { AIAssistantToolbarDirective } from './rendering/toolbar/tools/ai-assistant/ai-tool.directive';
105
104
  import * as i0 from "@angular/core";
106
105
  import * as i1 from "./layout/browser-support.service";
107
106
  import * as i2 from "./selection/selection.service";
@@ -312,7 +311,7 @@ export class GridComponent {
312
311
  */
313
312
  selectable = false;
314
313
  /**
315
- * Sets the descriptors for sorting the data ([see example]({% slug sorting_grid %})).
314
+ * Sets the descriptors for sorting the data ([see example](slug:manual_sorting_grid)).
316
315
  */
317
316
  set sort(value) {
318
317
  if (isArray(value)) {
@@ -345,11 +344,11 @@ export class GridComponent {
345
344
  */
346
345
  trackBy = defaultTrackBy;
347
346
  /**
348
- * Sets the filter descriptor for the data ([see examples]({% slug filtering_grid %})).
347
+ * Sets the filter descriptor for the data ([see examples](slug:manual_filtering_grid)).
349
348
  */
350
349
  filter;
351
350
  /**
352
- * Sets the descriptors for grouping the data ([see example]({% slug grouping_grid %})).
351
+ * Sets the descriptors for grouping the data ([see example](slug:manual_grouping_grid)).
353
352
  */
354
353
  set group(value) {
355
354
  if (isArray(value)) {
@@ -924,7 +923,6 @@ export class GridComponent {
924
923
  this._customToolbarTemplate = customToolbarTemplate;
925
924
  }
926
925
  columnMenuTemplates;
927
- aiAssistantToolbarTool;
928
926
  lockedHeader;
929
927
  header;
930
928
  footer = new QueryList();
@@ -2494,7 +2492,7 @@ export class GridComponent {
2494
2492
  ColumnMenuService,
2495
2493
  MenuTabbingService,
2496
2494
  DataMappingService
2497
- ], queries: [{ propertyName: "aiAssistantToolbarTool", first: true, predicate: AIAssistantToolbarDirective, descendants: true }, { propertyName: "columns", predicate: ColumnBase }, { propertyName: "detailTemplateChildren", predicate: DetailTemplateDirective }, { propertyName: "cellLoadingTemplateChildren", predicate: CellLoadingTemplateDirective }, { propertyName: "loadingTemplateChildren", predicate: LoadingTemplateDirective }, { propertyName: "statusBarTemplateChildren", predicate: StatusBarTemplateDirective }, { propertyName: "noRecordsTemplateChildren", predicate: NoRecordsTemplateDirective }, { propertyName: "pagerTemplateChildren", predicate: PagerTemplateDirective }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], viewQueries: [{ propertyName: "lockedHeader", first: true, predicate: ["lockedHeader"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "ariaRoot", first: true, predicate: ["ariaRoot"], descendants: true, static: true }, { propertyName: "dragTargetContainer", first: true, predicate: DragTargetContainerDirective, descendants: true }, { propertyName: "dropTargetContainer", first: true, predicate: DropTargetContainerDirective, descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "windowContainer", first: true, predicate: ["windowContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "adaptiveRenderer", first: true, predicate: AdaptiveRendererComponent, descendants: true }, { propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoGrid"], usesOnChanges: true, ngImport: i0, template: `
2495
+ ], queries: [{ propertyName: "columns", predicate: ColumnBase }, { propertyName: "detailTemplateChildren", predicate: DetailTemplateDirective }, { propertyName: "cellLoadingTemplateChildren", predicate: CellLoadingTemplateDirective }, { propertyName: "loadingTemplateChildren", predicate: LoadingTemplateDirective }, { propertyName: "statusBarTemplateChildren", predicate: StatusBarTemplateDirective }, { propertyName: "noRecordsTemplateChildren", predicate: NoRecordsTemplateDirective }, { propertyName: "pagerTemplateChildren", predicate: PagerTemplateDirective }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], viewQueries: [{ propertyName: "lockedHeader", first: true, predicate: ["lockedHeader"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "ariaRoot", first: true, predicate: ["ariaRoot"], descendants: true, static: true }, { propertyName: "dragTargetContainer", first: true, predicate: DragTargetContainerDirective, descendants: true }, { propertyName: "dropTargetContainer", first: true, predicate: DropTargetContainerDirective, descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "windowContainer", first: true, predicate: ["windowContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "adaptiveRenderer", first: true, predicate: AdaptiveRendererComponent, descendants: true }, { propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoGrid"], usesOnChanges: true, ngImport: i0, template: `
2498
2496
  <ng-container kendoGridLocalizedMessages
2499
2497
  i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
2500
2498
  groupPanelEmpty="Drag a column header and drop it here to group by that column"
@@ -2870,6 +2868,15 @@ export class GridComponent {
2870
2868
 
2871
2869
  i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
2872
2870
  columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
2871
+
2872
+ i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
2873
+ multiCheckboxFilterSearchPlaceholder="Search..."
2874
+
2875
+ i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
2876
+ multiCheckboxFilterSelectAllLabel="Select all"
2877
+
2878
+ i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
2879
+ multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
2873
2880
  >
2874
2881
  </ng-container>
2875
2882
  <kendo-grid-toolbar
@@ -3288,10 +3295,10 @@ export class GridComponent {
3288
3295
  </kendo-pager-info>
3289
3296
  </ng-template>
3290
3297
  <div #dialogContainer></div>
3298
+ <div #windowContainer></div>
3291
3299
 
3292
3300
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
3293
3301
  <kendo-resize-sensor *ngIf="isVirtual" (resize)="onResize()"></kendo-resize-sensor>
3294
- <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
3295
3302
 
3296
3303
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
3297
3304
  `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: GridToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass", "rowHeight", "detailRowHeight"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i27.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i27.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i27.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i27.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i27.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i27.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i27.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i27.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i27.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], encapsulation: i0.ViewEncapsulation.None });
@@ -3730,6 +3737,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3730
3737
 
3731
3738
  i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
3732
3739
  columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
3740
+
3741
+ i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
3742
+ multiCheckboxFilterSearchPlaceholder="Search..."
3743
+
3744
+ i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
3745
+ multiCheckboxFilterSelectAllLabel="Select all"
3746
+
3747
+ i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
3748
+ multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
3733
3749
  >
3734
3750
  </ng-container>
3735
3751
  <kendo-grid-toolbar
@@ -4148,10 +4164,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4148
4164
  </kendo-pager-info>
4149
4165
  </ng-template>
4150
4166
  <div #dialogContainer></div>
4167
+ <div #windowContainer></div>
4151
4168
 
4152
4169
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
4153
4170
  <kendo-resize-sensor *ngIf="isVirtual" (resize)="onResize()"></kendo-resize-sensor>
4154
- <div *ngIf="aiAssistantToolbarTool" #windowContainer></div>
4155
4171
 
4156
4172
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
4157
4173
  `,
@@ -4360,9 +4376,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
4360
4376
  }], columnMenuTemplates: [{
4361
4377
  type: ContentChildren,
4362
4378
  args: [ColumnMenuTemplateDirective]
4363
- }], aiAssistantToolbarTool: [{
4364
- type: ContentChild,
4365
- args: [AIAssistantToolbarDirective]
4366
4379
  }], lockedHeader: [{
4367
4380
  type: ViewChild,
4368
4381
  args: ['lockedHeader']
package/esm2022/index.mjs CHANGED
@@ -46,6 +46,7 @@ export { DropCueService } from './dragdrop/drop-cue.service';
46
46
  export { EditService as EditServiceClass } from './editing/edit.service';
47
47
  export { NumericFilterComponent } from './filtering/numeric-filter.component';
48
48
  export { StringFilterComponent } from './filtering/string-filter.component';
49
+ export { MultiCheckboxFilterComponent } from './filtering/multicheckbox-filter.component';
49
50
  export { GroupInfoService } from './grouping/group-info.service';
50
51
  export { GroupsService } from './grouping/groups.service';
51
52
  export { BrowserSupportService } from './layout/browser-support.service';
@@ -582,8 +582,29 @@ export class GridMessages extends ComponentMessages {
582
582
  * Sets the text for the external editing Dialog <b>Cancel</b> button.
583
583
  */
584
584
  externalEditingCancelText;
585
+ /**
586
+ * The placeholder text for the multi-checkbox filter search input
587
+ */
588
+ multiCheckboxFilterSearchPlaceholder;
589
+ /**
590
+ * The label for the multi-checkbox filter select all option
591
+ */
592
+ multiCheckboxFilterSelectAllLabel;
593
+ /**
594
+ * The text for the multi-checkbox filter selected items count
595
+ *
596
+ * The text includes the selected items count and a localizable string.
597
+ * For 3 selected items the default text is `3 selected items`.
598
+ *
599
+ * To customize the text, use the `{selectedItemsCount}` placeholder and a custom localizable string.
600
+ * For example, `{selectedItemsCount} items are selected`.
601
+ *
602
+ * The `{selectedItemsCount}` placeholder is replaced with the count of selected items,
603
+ * and the message is rendered as `3 items are selected`.
604
+ */
605
+ multiCheckboxFilterSelectedItemsCount;
585
606
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
586
- 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 });
607
+ 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 });
587
608
  }
588
609
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridMessages, decorators: [{
589
610
  type: Directive,
@@ -841,4 +862,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
841
862
  type: Input
842
863
  }], externalEditingCancelText: [{
843
864
  type: Input
865
+ }], multiCheckboxFilterSearchPlaceholder: [{
866
+ type: Input
867
+ }], multiCheckboxFilterSelectAllLabel: [{
868
+ type: Input
869
+ }], multiCheckboxFilterSelectedItemsCount: [{
870
+ type: Input
844
871
  }] } });
@@ -123,8 +123,14 @@ export class LogicalCellDirective {
123
123
  this.focusGroup.focus();
124
124
  }
125
125
  else {
126
- if (!this.logicalSlaveCell && this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
127
- this.microtask(() => this.isFocused() && el.focus());
126
+ if (!this.logicalSlaveCell &&
127
+ this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {
128
+ this.microtask(() => {
129
+ if (this.isFocused()) {
130
+ el.focus({ preventScroll: this.navigationService.preventScroll });
131
+ this.navigationService.preventScroll = false;
132
+ }
133
+ });
128
134
  }
129
135
  this.renderer.addClass(el, 'k-focus');
130
136
  }
@@ -155,6 +155,7 @@ export class NavigationService {
155
155
  return columnIndexInsideGroup !== columnGroupChildren.length - 1;
156
156
  }
157
157
  }
158
+ preventScroll = false;
158
159
  viewport;
159
160
  columnViewport;
160
161
  activeRowIndex = 0;
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1758189236,
14
- version: '20.1.0-develop.3',
13
+ publishDate: 1760442313,
14
+ version: '20.1.0-develop.30',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -176,11 +176,16 @@ export class PDFComponent extends PDFExportComponent {
176
176
  overlayContent.scrollTop = content.scrollTop;
177
177
  overlayContent.scrollLeft = content.scrollLeft;
178
178
  if (!this.ctx?.grid?.isStacked) {
179
- overlayQuery.header().scrollLeft = query.header().scrollLeft;
179
+ const header = query.header();
180
+ const overlayHeader = overlayQuery.header();
181
+ if (header && overlayHeader) {
182
+ overlayHeader.scrollLeft = header.scrollLeft;
183
+ }
180
184
  }
181
185
  const footer = query.footer();
182
- if (footer) {
183
- overlayQuery.footer().scrollLeft = footer.scrollLeft;
186
+ const overlayFooter = overlayQuery.footer();
187
+ if (footer && overlayFooter) {
188
+ overlayFooter.scrollLeft = footer.scrollLeft;
184
189
  }
185
190
  const lockedContent = query.content(true);
186
191
  if (lockedContent) {
@@ -312,7 +312,7 @@ export class CellComponent {
312
312
  </ng-container>
313
313
  </div>
314
314
  </div>
315
- <div class="k-grid-stack-cell" *ngIf="detailTemplate?.showIf(item.data, $any(item).index)">
315
+ <div class="k-grid-stack-cell" *ngIf="detailTemplate?.showIf(item.data, $any(item).index)" [attr.aria-expanded]="item.isExpanded">
316
316
  <div class="k-grid-stack-content">
317
317
  <button kendoButton
318
318
  fillMode="flat"
@@ -520,7 +520,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
520
520
  </ng-container>
521
521
  </div>
522
522
  </div>
523
- <div class="k-grid-stack-cell" *ngIf="detailTemplate?.showIf(item.data, $any(item).index)">
523
+ <div class="k-grid-stack-cell" *ngIf="detailTemplate?.showIf(item.data, $any(item).index)" [attr.aria-expanded]="item.isExpanded">
524
524
  <div class="k-grid-stack-content">
525
525
  <button kendoButton
526
526
  fillMode="flat"
@@ -29,7 +29,7 @@ export class FieldAccessorPipe {
29
29
  }
30
30
  formatValue(format, value) {
31
31
  const intl = this.intlService;
32
- if (isString(format) && format.match(FORMAT_REGEX)) {
32
+ if (isString(format) && FORMAT_REGEX.exec(format)) {
33
33
  return intl.format(format, value);
34
34
  }
35
35
  return intl.toString(value, format);
@@ -0,0 +1,37 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2025 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { Pipe } from '@angular/core';
6
+ import { isString } from '../../utils';
7
+ import { IntlService } from '@progress/kendo-angular-intl';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@progress/kendo-angular-intl";
10
+ const FORMAT_REGEX = /\{\d+:?/;
11
+ /**
12
+ * @hidden
13
+ */
14
+ export class FormatPipe {
15
+ intlService;
16
+ constructor(intlService) {
17
+ this.intlService = intlService;
18
+ }
19
+ transform(value, format) {
20
+ const intl = this.intlService;
21
+ if (isString(format) && FORMAT_REGEX.exec(format)) {
22
+ return intl.format(format, value);
23
+ }
24
+ return intl.toString(value, format);
25
+ }
26
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatPipe, deps: [{ token: i1.IntlService }], target: i0.ɵɵFactoryTarget.Pipe });
27
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FormatPipe, isStandalone: true, name: "format", pure: false });
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatPipe, decorators: [{
30
+ type: Pipe,
31
+ args: [{
32
+ // eslint-disable-next-line @angular-eslint/pipe-prefix
33
+ name: 'format',
34
+ pure: false,
35
+ standalone: true
36
+ }]
37
+ }], ctorParameters: function () { return [{ type: i1.IntlService }]; } });
@@ -169,7 +169,7 @@ export class HeaderComponent {
169
169
  }
170
170
  onHeaderKeydown(column, args) {
171
171
  const code = normalizeNumpadKeys(args);
172
- if (code === Keys.ArrowDown && args.altKey && this.showFilterMenu) {
172
+ if (code === Keys.ArrowDown && args.altKey && this.showFilterMenu && this.isFilterable(column)) {
173
173
  args.preventDefault();
174
174
  args.stopImmediatePropagation();
175
175
  const filterMenu = this.filterMenus.find(fm => fm.column === column);
@@ -864,7 +864,7 @@ export class ListComponent {
864
864
  <div></div>
865
865
  </div>
866
866
  </div>
867
- <div
867
+ <div
868
868
  #container
869
869
  class="k-grid-content k-virtual-content"
870
870
  [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
@@ -989,7 +989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
989
989
  <div></div>
990
990
  </div>
991
991
  </div>
992
- <div
992
+ <div
993
993
  #container
994
994
  class="k-grid-content k-virtual-content"
995
995
  [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
@@ -616,7 +616,8 @@ export class TableBodyComponent {
616
616
  [dataItem]="item.data"
617
617
  [detailExpandCell]="true"
618
618
  aria-selected="false"
619
- role="gridcell">
619
+ role="gridcell"
620
+ [attr.aria-expanded]="item.isExpanded">
620
621
  <a
621
622
  *ngIf="detailTemplate.showIf(item.data, $any(item).index)"
622
623
  [attr.title]="detailButtonTitle(item)"
@@ -936,7 +937,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
936
937
  [dataItem]="item.data"
937
938
  [detailExpandCell]="true"
938
939
  aria-selected="false"
939
- role="gridcell">
940
+ role="gridcell"
941
+ [attr.aria-expanded]="item.isExpanded">
940
942
  <a
941
943
  *ngIf="detailTemplate.showIf(item.data, $any(item).index)"
942
944
  [attr.title]="detailButtonTitle(item)"
@@ -216,7 +216,7 @@ export class ColumnChooserToolbarDirective extends ToolbarToolBase {
216
216
  this.buttonElement?.setAttribute('aria-expanded', 'false');
217
217
  this.buttonElement?.removeAttribute('aria-controls');
218
218
  this.host.selected = false;
219
- focusAnchor && this.buttonElement?.focus();
219
+ focusAnchor && this.buttonElement?.focus({ preventScroll: true });
220
220
  }
221
221
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnChooserToolbarDirective, deps: [{ token: i0.Renderer2 }, { token: i1.PopupService }, { token: i2.ToolBarButtonComponent }, { token: i3.ContextService }, { token: i0.NgZone }, { token: i2.RefreshService }, { token: i4.AdaptiveGridService }, { token: i5.ColumnInfoService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
222
222
  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 });
@@ -91,7 +91,7 @@ export class FilterToolbarToolComponent {
91
91
  }
92
92
  ngAfterViewInit() {
93
93
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
94
- this.filterItems?.get(0)?.nativeElement.focus();
94
+ this.filterItems?.get(0)?.nativeElement.focus({ preventScroll: true });
95
95
  });
96
96
  }
97
97
  ngOnDestroy() {
@@ -34,12 +34,12 @@ export class GroupToolbarToolComponent {
34
34
  if (items?.first && (!isPresent(this.currentFocusedItemIndex) || this.currentFocusedItemIndex >= items.length || this.currentFocusedItemIndex < 0)) {
35
35
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
36
36
  this.currentFocusedItemIndex = 0;
37
- this.groupItems.first.nativeElement.focus();
37
+ this.groupItems.first.nativeElement.focus({ preventScroll: true });
38
38
  });
39
39
  return;
40
40
  }
41
41
  if (items?.first) {
42
- items.get(this.currentFocusedItemIndex).nativeElement.focus();
42
+ items.get(this.currentFocusedItemIndex).nativeElement.focus({ preventScroll: true });
43
43
  }
44
44
  }
45
45
  get groupItems() {
@@ -70,7 +70,7 @@ export class SortToolbarToolComponent {
70
70
  }
71
71
  ngAfterViewInit() {
72
72
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
73
- this.sortItems?.get(0)?.nativeElement.focus();
73
+ this.sortItems?.get(0)?.nativeElement.focus({ preventScroll: true });
74
74
  });
75
75
  }
76
76
  ngOnDestroy() {
@@ -133,9 +133,6 @@ export class ScrollerService {
133
133
  const lastItemIndex = this.rowHeightService.index(scrollTop + offsetHeight);
134
134
  const overflow = Math.max(firstItemIndex + (this.virtualPageSize || this.take) - this.total, 0);
135
135
  firstItemIndex = Math.max(firstItemIndex - overflow, 0);
136
- if (lastItemIndex < this.lastLoaded) {
137
- this.lastLoaded = lastItemIndex;
138
- }
139
136
  if (down) {
140
137
  const atBottom = scrollHeight - clientHeight - scrollTop < SCROLL_BOTTOM_THRESHOLD;
141
138
  if (atBottom) {