@progress/kendo-angular-grid 20.1.0-develop.2 → 20.1.0-develop.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/column-menu/column-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/editing/cancel-command.directive.mjs +1 -1
  23. package/esm2022/editing/edit-template.directive.mjs +1 -1
  24. package/esm2022/editing/remove-command.directive.mjs +1 -1
  25. package/esm2022/editing/save-command.directive.mjs +1 -1
  26. package/esm2022/editing-directives/external-editing.directive.mjs +1 -1
  27. package/esm2022/editing-directives/in-cell-editing.directive.mjs +1 -1
  28. package/esm2022/editing-directives/reactive-editing.directive.mjs +1 -1
  29. package/esm2022/editing-directives/template-editing.directive.mjs +1 -1
  30. package/esm2022/filtering/menu/filter-menu-container.component.mjs +120 -31
  31. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +2 -2
  32. package/esm2022/filtering/menu/filter-menu.component.mjs +11 -7
  33. package/esm2022/filtering/multicheckbox-filter.component.mjs +268 -0
  34. package/esm2022/grid.component.mjs +21 -3
  35. package/esm2022/index.mjs +1 -0
  36. package/esm2022/localization/messages.mjs +28 -1
  37. package/esm2022/navigation/logical-cell.directive.mjs +8 -2
  38. package/esm2022/navigation/navigation.service.mjs +1 -0
  39. package/esm2022/package-metadata.mjs +2 -2
  40. package/esm2022/rendering/common/field-accessor.pipe.mjs +1 -1
  41. package/esm2022/rendering/common/format.pipe.mjs +37 -0
  42. package/esm2022/rendering/header/header.component.mjs +1 -1
  43. package/esm2022/rendering/list.component.mjs +18 -2
  44. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +1 -1
  45. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +1 -1
  46. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +2 -2
  47. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +1 -1
  48. package/esm2022/scrolling/scroller.service.mjs +0 -3
  49. package/fesm2022/progress-kendo-angular-grid.mjs +553 -132
  50. package/filtering/filterable.d.ts +23 -0
  51. package/filtering/menu/filter-menu-container.component.d.ts +5 -1
  52. package/filtering/menu/filter-menu.component.d.ts +3 -4
  53. package/filtering/multicheckbox-filter.component.d.ts +41 -0
  54. package/grid.component.d.ts +3 -3
  55. package/index.d.ts +1 -0
  56. package/localization/messages.d.ts +22 -1
  57. package/navigation/navigation.service.d.ts +1 -0
  58. package/package.json +21 -21
  59. package/rendering/common/format.pipe.d.ts +17 -0
  60. package/rendering/list.component.d.ts +1 -0
  61. package/schematics/ngAdd/index.js +4 -4
@@ -312,7 +312,7 @@ export class GridComponent {
312
312
  */
313
313
  selectable = false;
314
314
  /**
315
- * Sets the descriptors for sorting the data ([see example]({% slug sorting_grid %})).
315
+ * Sets the descriptors for sorting the data ([see example](slug:manual_sorting_grid)).
316
316
  */
317
317
  set sort(value) {
318
318
  if (isArray(value)) {
@@ -345,11 +345,11 @@ export class GridComponent {
345
345
  */
346
346
  trackBy = defaultTrackBy;
347
347
  /**
348
- * Sets the filter descriptor for the data ([see examples]({% slug filtering_grid %})).
348
+ * Sets the filter descriptor for the data ([see examples](slug:manual_filtering_grid)).
349
349
  */
350
350
  filter;
351
351
  /**
352
- * Sets the descriptors for grouping the data ([see example]({% slug grouping_grid %})).
352
+ * Sets the descriptors for grouping the data ([see example](slug:manual_grouping_grid)).
353
353
  */
354
354
  set group(value) {
355
355
  if (isArray(value)) {
@@ -2870,6 +2870,15 @@ export class GridComponent {
2870
2870
 
2871
2871
  i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
2872
2872
  columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
2873
+
2874
+ i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
2875
+ multiCheckboxFilterSearchPlaceholder="Search..."
2876
+
2877
+ i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
2878
+ multiCheckboxFilterSelectAllLabel="Select all"
2879
+
2880
+ i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
2881
+ multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
2873
2882
  >
2874
2883
  </ng-container>
2875
2884
  <kendo-grid-toolbar
@@ -3730,6 +3739,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3730
3739
 
3731
3740
  i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
3732
3741
  columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
3742
+
3743
+ i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
3744
+ multiCheckboxFilterSearchPlaceholder="Search..."
3745
+
3746
+ i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
3747
+ multiCheckboxFilterSelectAllLabel="Select all"
3748
+
3749
+ i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
3750
+ multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
3733
3751
  >
3734
3752
  </ng-container>
3735
3753
  <kendo-grid-toolbar
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: 1758187632,
14
- version: '20.1.0-develop.2',
13
+ publishDate: 1760010088,
14
+ version: '20.1.0-develop.20',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -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);
@@ -270,6 +270,9 @@ export class ListComponent {
270
270
  this.handleSkipOnData = true;
271
271
  }
272
272
  if (isChanged('isVirtual', changes)) {
273
+ if (this.isVirtual && !(this.minRowHeight || this.rowHeight)) {
274
+ this.minRowHeight = calcRowHeight(this.table.nativeElement);
275
+ }
273
276
  this.ngZone.onStable.pipe(take(1)).subscribe(() => {
274
277
  this.scroller.reset();
275
278
  this.rowHeightService = this.scroller.rowHeightService = new RowHeightService(this.total, this.rowHeight || this.minRowHeight);
@@ -290,6 +293,7 @@ export class ListComponent {
290
293
  get totalIsAllItems() {
291
294
  return this.isVirtual && (Boolean(this.ctx.grid?.pageable || this.ctx.grid?.group?.length));
292
295
  }
296
+ rebindGroupedDataFlag = false;
293
297
  ngDoCheck() {
294
298
  if (this.virtualColumns && (!this.viewportColumns || this.viewportWidthChange())) {
295
299
  this.updateViewportColumns();
@@ -308,6 +312,14 @@ export class ListComponent {
308
312
  this.scroller.reset(this.skipScroll);
309
313
  this.scroller.total = this.allItems.length;
310
314
  }
315
+ else if (totalChanged && !this.ctx.grid?.group?.length) {
316
+ this.scroller.reset(this.skipScroll);
317
+ this.scroller.total = this.total;
318
+ }
319
+ const rebindGroupedData = this.isVirtual && !totalChanged && this.ctx.grid?.group?.length && !this.rebindGroupedDataFlag;
320
+ if (rebindGroupedData) {
321
+ this.rebindGroupedDataFlag = true;
322
+ }
311
323
  if (shouldCalculatePageSize || !isPresent(this.scroller.rowHeightService)) {
312
324
  const calculatedPageSize = this.virtualPageSize ?? this.calcVirtualPageSize();
313
325
  if (calculatedPageSize > 0) {
@@ -328,6 +340,10 @@ export class ListComponent {
328
340
  });
329
341
  }
330
342
  }
343
+ else if (this.rebindGroupedDataFlag) {
344
+ this.ngZone.run(() => this.itemsToRender = this.allItems.slice(this.scroller.virtualSkip, this.scroller.virtualSkip + this.virtualPageSize));
345
+ this.rebindGroupedDataFlag = false;
346
+ }
331
347
  if (!this.zoneSub) {
332
348
  this.zoneSub = this.ngZone.onStable.subscribe(() => {
333
349
  if (!this.scroller.rowHeightService) {
@@ -848,7 +864,7 @@ export class ListComponent {
848
864
  <div></div>
849
865
  </div>
850
866
  </div>
851
- <div
867
+ <div
852
868
  #container
853
869
  class="k-grid-content k-virtual-content"
854
870
  [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
@@ -973,7 +989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
973
989
  <div></div>
974
990
  </div>
975
991
  </div>
976
- <div
992
+ <div
977
993
  #container
978
994
  class="k-grid-content k-virtual-content"
979
995
  [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
@@ -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) {