@progress/kendo-angular-grid 19.0.0-develop.23 → 19.0.0-develop.25

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 (29) hide show
  1. package/codemods/template-transformer/index.js +94 -0
  2. package/codemods/utils.js +131 -0
  3. package/codemods/v19/grid-kendogridgroupbinding.js +51 -0
  4. package/codemods/v19/index.js +51 -0
  5. package/column-menu/column-menu-item.component.d.ts +16 -3
  6. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +1 -1
  7. package/esm2022/column-menu/column-menu-autosize-all.component.mjs +1 -1
  8. package/esm2022/column-menu/column-menu-autosize.component.mjs +1 -1
  9. package/esm2022/column-menu/column-menu-chooser.component.mjs +1 -1
  10. package/esm2022/column-menu/column-menu-filter.component.mjs +1 -1
  11. package/esm2022/column-menu/column-menu-item.component.mjs +33 -11
  12. package/esm2022/column-menu/column-menu-lock.component.mjs +1 -1
  13. package/esm2022/column-menu/column-menu-position.component.mjs +1 -1
  14. package/esm2022/column-menu/column-menu-sort.component.mjs +1 -1
  15. package/esm2022/column-menu/column-menu-stick.component.mjs +1 -1
  16. package/esm2022/grid.component.mjs +65 -9
  17. package/esm2022/package-metadata.mjs +2 -2
  18. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +2 -0
  19. package/esm2022/rendering/toolbar/tools/filter-command-tool.directive.mjs +14 -3
  20. package/esm2022/rendering/toolbar/tools/filter-tool-wrapper.component.mjs +1 -0
  21. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +56 -8
  22. package/esm2022/rendering/toolbar/tools/sort-command-tool.directive.mjs +14 -4
  23. package/fesm2022/progress-kendo-angular-grid.mjs +192 -44
  24. package/grid.component.d.ts +13 -0
  25. package/package.json +41 -21
  26. package/rendering/toolbar/tools/filter-command-tool.directive.d.ts +5 -0
  27. package/rendering/toolbar/tools/filter-toolbar-tool.component.d.ts +10 -2
  28. package/rendering/toolbar/tools/sort-command-tool.directive.d.ts +5 -0
  29. package/schematics/ngAdd/index.js +4 -4
@@ -91,7 +91,7 @@ export class ColumnMenuSortComponent extends ColumnMenuItemBase {
91
91
  (itemClick)="toggleSort('desc')"
92
92
  [selected]="sortedDesc">
93
93
  </kendo-grid-columnmenu-item>
94
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
94
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
95
95
  }
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuSortComponent, decorators: [{
97
97
  type: Component,
@@ -91,7 +91,7 @@ export class ColumnMenuStickComponent extends ColumnMenuItemBase {
91
91
  (itemClick)="toggleColumn()"
92
92
  [disabled]="disabled">
93
93
  </kendo-grid-columnmenu-item>
94
- `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
94
+ `, isInline: true, dependencies: [{ kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }] });
95
95
  }
96
96
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ColumnMenuStickComponent, decorators: [{
97
97
  type: Component,
@@ -915,6 +915,39 @@ export class GridComponent {
915
915
  get scrollbarWidth() {
916
916
  return this.supportService.scrollbarWidth;
917
917
  }
918
+ get showPagerInput() {
919
+ return this._showPagerInput;
920
+ }
921
+ set showPagerInput(value) {
922
+ if (this._showPagerInput === value) {
923
+ return;
924
+ }
925
+ this._showPagerInput = value;
926
+ }
927
+ get showPagerPageText() {
928
+ return this._showPagerPageText;
929
+ }
930
+ set showPagerPageText(value) {
931
+ if (!this.normalizedPageableSettings?.responsive) {
932
+ this._showPagerPageText = true;
933
+ }
934
+ if (this._showPagerPageText === value) {
935
+ return;
936
+ }
937
+ this._showPagerPageText = value;
938
+ }
939
+ get showPagerItemsText() {
940
+ return this._showPagerItemsText;
941
+ }
942
+ set showPagerItemsText(value) {
943
+ if (!this.normalizedPageableSettings?.responsive) {
944
+ this._showPagerItemsText = true;
945
+ }
946
+ if (this._showPagerItemsText === value) {
947
+ return;
948
+ }
949
+ this._showPagerItemsText = value;
950
+ }
918
951
  get headerPadding() {
919
952
  if (isUniversal()) {
920
953
  return '';
@@ -985,6 +1018,9 @@ export class GridComponent {
985
1018
  _navigable = ['table', 'pager', 'toolbar'];
986
1019
  _size = 'medium';
987
1020
  _loading = false;
1021
+ _showPagerInput = true;
1022
+ _showPagerPageText = true;
1023
+ _showPagerItemsText = true;
988
1024
  get isVirtual() {
989
1025
  return this.scrollable === 'virtual';
990
1026
  }
@@ -1627,6 +1663,12 @@ export class GridComponent {
1627
1663
  }
1628
1664
  this.pageChange.emit(event);
1629
1665
  }
1666
+ /**
1667
+ * @hidden
1668
+ */
1669
+ handlePagerVisibilityChange(prop, ev) {
1670
+ this[prop] = ev;
1671
+ }
1630
1672
  /**
1631
1673
  * @hidden
1632
1674
  */
@@ -2707,7 +2749,10 @@ export class GridComponent {
2707
2749
  [pageSizeValues]="normalizedPageableSettings.pageSizes"
2708
2750
  [previousNext]="normalizedPageableSettings.previousNext"
2709
2751
  [type]="normalizedPageableSettings.type"
2710
- (pageChange)="notifyPageChange('pager', $event)">
2752
+ (pageChange)="notifyPageChange('pager', $event)"
2753
+ (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
2754
+ (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
2755
+ (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
2711
2756
  <ng-template kendoPagerTemplate>
2712
2757
  <ng-container
2713
2758
  [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
@@ -3030,7 +3075,10 @@ export class GridComponent {
3030
3075
  [pageSizeValues]="normalizedPageableSettings.pageSizes"
3031
3076
  [previousNext]="normalizedPageableSettings.previousNext"
3032
3077
  [type]="normalizedPageableSettings.type"
3033
- (pageChange)="notifyPageChange('pager', $event)">
3078
+ (pageChange)="notifyPageChange('pager', $event)"
3079
+ (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
3080
+ (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
3081
+ (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
3034
3082
  <ng-template kendoPagerTemplate>
3035
3083
  <ng-container
3036
3084
  [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
@@ -3078,12 +3126,13 @@ export class GridComponent {
3078
3126
  *ngIf="normalizedPageableSettings.type === 'numeric' && normalizedPageableSettings.buttonCount > 0"
3079
3127
  [buttonCount]="normalizedPageableSettings.buttonCount">
3080
3128
  </kendo-pager-numeric-buttons>
3081
- <kendo-pager-input [size]="size" *ngIf="normalizedPageableSettings.type === 'input'"></kendo-pager-input>
3129
+ <kendo-pager-input [size]="size" *ngIf="normalizedPageableSettings.type === 'input' || showPagerInput" [showPageText]="showPagerPageText"></kendo-pager-input>
3082
3130
  <kendo-pager-next-buttons [size]="size" *ngIf="normalizedPageableSettings.previousNext"></kendo-pager-next-buttons>
3083
3131
  </div>
3084
3132
  <kendo-pager-page-sizes *ngIf="normalizedPageableSettings.pageSizes"
3085
3133
  [size]="size"
3086
- [pageSizes]="normalizedPageableSettings.pageSizes">
3134
+ [pageSizes]="normalizedPageableSettings.pageSizes"
3135
+ [showItemsText]="showPagerItemsText">
3087
3136
  </kendo-pager-page-sizes>
3088
3137
  <kendo-pager-info *ngIf="normalizedPageableSettings.info">
3089
3138
  </kendo-pager-info>
@@ -3093,7 +3142,7 @@ export class GridComponent {
3093
3142
  <kendo-grid-adaptive-renderer *ngIf="isAdaptiveModeEnabled"></kendo-grid-adaptive-renderer>
3094
3143
 
3095
3144
  <div kendoWatermarkOverlay *ngIf="showLicenseWatermark"></div>
3096
- `, 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", "stickyRowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }, { kind: "component", type: 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"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }], encapsulation: i0.ViewEncapsulation.None });
3145
+ `, 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", "stickyRowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]" }, { kind: "component", type: 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" }], encapsulation: i0.ViewEncapsulation.None });
3097
3146
  }
3098
3147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GridComponent, decorators: [{
3099
3148
  type: Component,
@@ -3511,7 +3560,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3511
3560
  [pageSizeValues]="normalizedPageableSettings.pageSizes"
3512
3561
  [previousNext]="normalizedPageableSettings.previousNext"
3513
3562
  [type]="normalizedPageableSettings.type"
3514
- (pageChange)="notifyPageChange('pager', $event)">
3563
+ (pageChange)="notifyPageChange('pager', $event)"
3564
+ (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
3565
+ (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
3566
+ (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
3515
3567
  <ng-template kendoPagerTemplate>
3516
3568
  <ng-container
3517
3569
  [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
@@ -3834,7 +3886,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3834
3886
  [pageSizeValues]="normalizedPageableSettings.pageSizes"
3835
3887
  [previousNext]="normalizedPageableSettings.previousNext"
3836
3888
  [type]="normalizedPageableSettings.type"
3837
- (pageChange)="notifyPageChange('pager', $event)">
3889
+ (pageChange)="notifyPageChange('pager', $event)"
3890
+ (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
3891
+ (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
3892
+ (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
3838
3893
  <ng-template kendoPagerTemplate>
3839
3894
  <ng-container
3840
3895
  [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
@@ -3882,12 +3937,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3882
3937
  *ngIf="normalizedPageableSettings.type === 'numeric' && normalizedPageableSettings.buttonCount > 0"
3883
3938
  [buttonCount]="normalizedPageableSettings.buttonCount">
3884
3939
  </kendo-pager-numeric-buttons>
3885
- <kendo-pager-input [size]="size" *ngIf="normalizedPageableSettings.type === 'input'"></kendo-pager-input>
3940
+ <kendo-pager-input [size]="size" *ngIf="normalizedPageableSettings.type === 'input' || showPagerInput" [showPageText]="showPagerPageText"></kendo-pager-input>
3886
3941
  <kendo-pager-next-buttons [size]="size" *ngIf="normalizedPageableSettings.previousNext"></kendo-pager-next-buttons>
3887
3942
  </div>
3888
3943
  <kendo-pager-page-sizes *ngIf="normalizedPageableSettings.pageSizes"
3889
3944
  [size]="size"
3890
- [pageSizes]="normalizedPageableSettings.pageSizes">
3945
+ [pageSizes]="normalizedPageableSettings.pageSizes"
3946
+ [showItemsText]="showPagerItemsText">
3891
3947
  </kendo-pager-page-sizes>
3892
3948
  <kendo-pager-info *ngIf="normalizedPageableSettings.info">
3893
3949
  </kendo-pager-info>
@@ -10,7 +10,7 @@ export const packageMetadata = {
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCode: 'KENDOUIANGULAR',
12
12
  productCodes: ['KENDOUIANGULAR'],
13
- publishDate: 1747417445,
14
- version: '19.0.0-develop.23',
13
+ publishDate: 1747671447,
14
+ version: '19.0.0-develop.25',
15
15
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
16
16
  };
@@ -149,6 +149,7 @@ export class ColumnChooserToolbarDirective extends ToolbarToolBase {
149
149
  this.renderer.setAttribute(popupAriaElement, 'role', 'dialog');
150
150
  this.buttonElement?.setAttribute('aria-expanded', 'true');
151
151
  this.buttonElement?.setAttribute('aria-controls', popupId);
152
+ this.host.selected = true;
152
153
  const columnList = this.popupRef.content.instance;
153
154
  columnList.isLast = true;
154
155
  columnList.autoSync = this.autoSync;
@@ -180,6 +181,7 @@ export class ColumnChooserToolbarDirective extends ToolbarToolBase {
180
181
  this.popupRef = null;
181
182
  this.buttonElement?.setAttribute('aria-expanded', 'false');
182
183
  this.buttonElement?.removeAttribute('aria-controls');
184
+ this.host.selected = false;
183
185
  focusAnchor && this.buttonElement?.focus();
184
186
  }
185
187
  get buttonElement() {
@@ -53,6 +53,12 @@ export class FilterCommandToolbarDirective {
53
53
  toolSubs = new Subscription();
54
54
  popupSubs;
55
55
  removeClickListener;
56
+ /**
57
+ * @hidden
58
+ */
59
+ isFilterApplied(filter) {
60
+ return isPresent(filter) && filter.filters?.length > 0;
61
+ }
56
62
  constructor(host, popupService, ctx, filterService, columnInfoService, ngZone, renderer, adaptiveGridService) {
57
63
  this.host = host;
58
64
  this.popupService = popupService;
@@ -66,8 +72,9 @@ export class FilterCommandToolbarDirective {
66
72
  ngOnInit() {
67
73
  this.toolSubs = this.host.click.subscribe(e => this.onClick(e));
68
74
  this.toolSubs.add(this.filterService.changes.subscribe(filter => {
69
- this.host.showBadge = isPresent(filter) && filter.filters.length > 0;
75
+ this.host.showBadge = this.isFilterApplied(filter);
70
76
  }));
77
+ this.host.showBadge = this.isFilterApplied(this.ctx.grid.filter);
71
78
  const hasToolbarIcon = isPresent(this.host.toolbarOptions.icon) && this.host.toolbarOptions.icon !== '';
72
79
  const hasOverflowIcon = isPresent(this.host.overflowOptions.icon) && this.host.overflowOptions.icon !== '';
73
80
  const hasIcon = hasToolbarIcon && hasOverflowIcon;
@@ -87,7 +94,7 @@ export class FilterCommandToolbarDirective {
87
94
  }
88
95
  this.buttonElement?.setAttribute('aria-haspopup', 'dialog');
89
96
  this.buttonElement?.setAttribute('aria-expanded', 'false');
90
- this.buttonElement?.setAttribute('title', this.ctx.localization.get('filter'));
97
+ this.buttonElement?.setAttribute('title', this.ctx.localization.get('filterToolbarToolText'));
91
98
  }
92
99
  ngOnDestroy() {
93
100
  if (this.toolSubs) {
@@ -132,13 +139,16 @@ export class FilterCommandToolbarDirective {
132
139
  });
133
140
  this.adaptiveGridService.popupRef = this.popupRef;
134
141
  this.setPopupAttributes();
142
+ this.host.selected = true;
135
143
  this.ngZone.runOutsideAngular(() => {
136
144
  if (!isDocumentAvailable()) {
137
145
  return;
138
146
  }
139
147
  this.removeClickListener = this.renderer.listen('document', 'click', (e) => {
140
148
  if (this.popupRef && !closest(e.target, node => node === this.popupRef.popupElement || node === this.buttonElement)) {
141
- this.closePopup();
149
+ this.ngZone.run(() => {
150
+ this.closePopup();
151
+ });
142
152
  }
143
153
  });
144
154
  });
@@ -172,6 +182,7 @@ export class FilterCommandToolbarDirective {
172
182
  closePopup() {
173
183
  this.buttonElement?.setAttribute('aria-expanded', 'false');
174
184
  this.buttonElement?.removeAttribute('aria-controls');
185
+ this.host.selected = false;
175
186
  if (this.popupRef) {
176
187
  this.popupRef.close();
177
188
  this.popupRef = null;
@@ -38,6 +38,7 @@ export class FilterToolWrapperComponent {
38
38
  columnInfoService;
39
39
  set ctx(ctx) {
40
40
  this._ctx = ctx;
41
+ this.filter = ctx.grid.filter;
41
42
  this.createPopup();
42
43
  }
43
44
  get ctx() {
@@ -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, ElementRef, EventEmitter, Output, QueryList, ViewChildren } from '@angular/core';
5
+ import { Component, ElementRef, EventEmitter, NgZone, Output, QueryList, ViewChildren } from '@angular/core';
6
6
  import { ContextService } from '../../../common/provider.service';
7
7
  import { NgFor } from '@angular/common';
8
8
  import { KENDO_BUTTON } from '@progress/kendo-angular-buttons';
@@ -13,6 +13,8 @@ import { ColumnMenuItemContentTemplateDirective } from '../../../column-menu/col
13
13
  import { ColumnInfoService } from '../../../common/column-info.service';
14
14
  import { cloneFilters } from '../../../common/filter-descriptor-differ';
15
15
  import { AdaptiveGridService } from '../../../common/adaptiveness.service';
16
+ import { filterIcon } from '@progress/kendo-svg-icons';
17
+ import { take } from 'rxjs/operators';
16
18
  import * as i0 from "@angular/core";
17
19
  import * as i1 from "../../../filtering/filter.service";
18
20
  import * as i2 from "../../../common/provider.service";
@@ -26,6 +28,7 @@ export class FilterToolbarToolComponent {
26
28
  filterService;
27
29
  ctx;
28
30
  columnInfoService;
31
+ ngZone;
29
32
  adaptiveGridService;
30
33
  filterItems;
31
34
  menuItems;
@@ -41,12 +44,45 @@ export class FilterToolbarToolComponent {
41
44
  columnMenuService;
42
45
  columns;
43
46
  filter;
47
+ activeFilterSVGIcon = filterIcon;
48
+ activeFilterIcon = 'k-i-filter';
49
+ isFilterApplied(column) {
50
+ if (!this.filter?.filters) {
51
+ return false;
52
+ }
53
+ if (Array.isArray(this.filter.filters)) {
54
+ for (const filterGroup of this.filter.filters) {
55
+ if (filterGroup.filters && Array.isArray(filterGroup.filters)) {
56
+ for (const filter of filterGroup.filters) {
57
+ if (filter.field === column.field) {
58
+ return true;
59
+ }
60
+ }
61
+ }
62
+ else if (filterGroup.field === column.field) {
63
+ return true;
64
+ }
65
+ }
66
+ }
67
+ return false;
68
+ }
69
+ isItemFocused(filterItem) {
70
+ return this.currentFocusedItem === filterItem;
71
+ }
72
+ onItemFocus(item) {
73
+ this.currentFocusedItem = item;
74
+ }
75
+ onItemFocusOut() {
76
+ this.currentFocusedItem = null;
77
+ }
78
+ currentFocusedItem = null;
44
79
  subscriptions;
45
- constructor(element, filterService, ctx, columnInfoService, adaptiveGridService) {
80
+ constructor(element, filterService, ctx, columnInfoService, ngZone, adaptiveGridService) {
46
81
  this.element = element;
47
82
  this.filterService = filterService;
48
83
  this.ctx = ctx;
49
84
  this.columnInfoService = columnInfoService;
85
+ this.ngZone = ngZone;
50
86
  this.adaptiveGridService = adaptiveGridService;
51
87
  }
52
88
  ngOnInit() {
@@ -57,7 +93,9 @@ export class FilterToolbarToolComponent {
57
93
  });
58
94
  }
59
95
  ngAfterViewInit() {
60
- this.filterItems?.get(0)?.nativeElement.focus();
96
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
97
+ this.filterItems?.get(0)?.nativeElement.focus();
98
+ });
61
99
  }
62
100
  ngOnDestroy() {
63
101
  if (this.subscriptions) {
@@ -101,7 +139,7 @@ export class FilterToolbarToolComponent {
101
139
  menuItem.contentState = 'expanded';
102
140
  }
103
141
  }
104
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterToolbarToolComponent, deps: [{ token: i0.ElementRef }, { token: i1.FilterService }, { token: i2.ContextService }, { token: i3.ColumnInfoService }, { token: i4.AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
142
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterToolbarToolComponent, deps: [{ token: i0.ElementRef }, { token: i1.FilterService }, { token: i2.ContextService }, { token: i3.ColumnInfoService }, { token: i0.NgZone }, { token: i4.AdaptiveGridService }], target: i0.ɵɵFactoryTarget.Component });
105
143
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterToolbarToolComponent, isStandalone: true, selector: "kendo-filter-toolbar-tool", outputs: { close: "close" }, viewQueries: [{ propertyName: "filterItems", predicate: ["filterItem"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: ["filterItem"], descendants: true }, { propertyName: "filterContainers", predicate: ["filterContainer"], descendants: true }], ngImport: i0, template: `
106
144
  <div [style]="hostStyles">
107
145
  <kendo-grid-columnmenu-item *ngFor="let column of columns; let i = index"
@@ -110,9 +148,14 @@ export class FilterToolbarToolComponent {
110
148
  tabindex="0"
111
149
  [column]="getColumnComponent(column)"
112
150
  [text]="column.title || getColumnComponent(column).field"
151
+ (focus)="onItemFocus(filterItem)"
152
+ (focusout)="onItemFocusOut()"
113
153
  (keydown.enter)="toggleItem($event, i)"
154
+ [indicatorSVGIcon]="isFilterApplied(column) ? activeFilterSVGIcon : null"
155
+ [indicatorIcon]="isFilterApplied(column) ? activeFilterIcon : null"
114
156
  (itemClick)="navigateView(getColumnComponent(column))"
115
- [expanded]="false">
157
+ [expanded]="false"
158
+ [focused]="isItemFocused(filterItem)">
116
159
  <ng-template kendoGridColumnMenuItemContentTemplate>
117
160
  <kendo-grid-filter-menu-container
118
161
  #filterContainer
@@ -125,7 +168,7 @@ export class FilterToolbarToolComponent {
125
168
  </ng-template>
126
169
  </kendo-grid-columnmenu-item>
127
170
  </div>
128
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
171
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }, { kind: "component", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "indicatorIcon", "indicatorSVGIcon", "text", "selected", "disabled", "expanded", "focused", "service", "column"], outputs: ["itemClick", "expand", "collapse"] }, { kind: "directive", type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
129
172
  }
130
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterToolbarToolComponent, decorators: [{
131
174
  type: Component,
@@ -139,9 +182,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
139
182
  tabindex="0"
140
183
  [column]="getColumnComponent(column)"
141
184
  [text]="column.title || getColumnComponent(column).field"
185
+ (focus)="onItemFocus(filterItem)"
186
+ (focusout)="onItemFocusOut()"
142
187
  (keydown.enter)="toggleItem($event, i)"
188
+ [indicatorSVGIcon]="isFilterApplied(column) ? activeFilterSVGIcon : null"
189
+ [indicatorIcon]="isFilterApplied(column) ? activeFilterIcon : null"
143
190
  (itemClick)="navigateView(getColumnComponent(column))"
144
- [expanded]="false">
191
+ [expanded]="false"
192
+ [focused]="isItemFocused(filterItem)">
145
193
  <ng-template kendoGridColumnMenuItemContentTemplate>
146
194
  <kendo-grid-filter-menu-container
147
195
  #filterContainer
@@ -158,7 +206,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
158
206
  standalone: true,
159
207
  imports: [NgFor, KENDO_BUTTON, FilterMenuContainerComponent, ColumnMenuItemComponent, ColumnMenuItemContentTemplateDirective]
160
208
  }]
161
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FilterService }, { type: i2.ContextService }, { type: i3.ColumnInfoService }, { type: i4.AdaptiveGridService }]; }, propDecorators: { filterItems: [{
209
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FilterService }, { type: i2.ContextService }, { type: i3.ColumnInfoService }, { type: i0.NgZone }, { type: i4.AdaptiveGridService }]; }, propDecorators: { filterItems: [{
162
210
  type: ViewChildren,
163
211
  args: ['filterItem', { read: ElementRef }]
164
212
  }], menuItems: [{
@@ -53,6 +53,12 @@ export class SortCommandToolbarDirective {
53
53
  toolSubs = new Subscription();
54
54
  popupSubs;
55
55
  removeClickListener;
56
+ /**
57
+ * @hidden
58
+ */
59
+ isSortingApplied(sort) {
60
+ return isPresent(sort) && sort.length > 0 && sort.filter(item => item.dir !== undefined).length > 0;
61
+ }
56
62
  constructor(host, popupService, ctx, sortService, columnInfoService, ngZone, renderer, adaptiveGridService) {
57
63
  this.host = host;
58
64
  this.popupService = popupService;
@@ -66,9 +72,9 @@ export class SortCommandToolbarDirective {
66
72
  ngOnInit() {
67
73
  this.toolSubs = this.host.click.subscribe(e => this.onClick(e));
68
74
  this.toolSubs.add(this.sortService.changes.subscribe(sort => {
69
- const isSortingApplied = isPresent(sort) && sort.length > 0 && sort.filter(item => item.dir !== undefined).length > 0;
70
- this.host.showBadge = isSortingApplied;
75
+ this.host.showBadge = this.isSortingApplied(sort);
71
76
  }));
77
+ this.host.showBadge = this.isSortingApplied(this.ctx.grid.sort);
72
78
  const hasToolbarIcon = isPresent(this.host.toolbarOptions.icon) && this.host.toolbarOptions.icon !== '';
73
79
  const hasOverflowIcon = isPresent(this.host.overflowOptions.icon) && this.host.overflowOptions.icon !== '';
74
80
  const hasIcon = hasToolbarIcon && hasOverflowIcon;
@@ -88,7 +94,7 @@ export class SortCommandToolbarDirective {
88
94
  }
89
95
  this.buttonElement?.setAttribute('aria-haspopup', 'dialog');
90
96
  this.buttonElement?.setAttribute('aria-expanded', 'false');
91
- this.buttonElement?.setAttribute('title', this.ctx.localization.get('sortable'));
97
+ this.buttonElement?.setAttribute('title', this.ctx.localization.get('sortToolbarToolText'));
92
98
  }
93
99
  ngOnDestroy() {
94
100
  if (this.toolSubs) {
@@ -134,13 +140,16 @@ export class SortCommandToolbarDirective {
134
140
  });
135
141
  this.adaptiveGridService.popupRef = this.popupRef;
136
142
  this.setPopupAttributes();
143
+ this.host.selected = true;
137
144
  this.ngZone.runOutsideAngular(() => {
138
145
  if (!isDocumentAvailable()) {
139
146
  return;
140
147
  }
141
148
  this.removeClickListener = this.renderer.listen('document', 'click', (e) => {
142
149
  if (this.popupRef && !closest(e.target, node => node === this.popupRef.popupElement || node === this.buttonElement)) {
143
- this.closePopup();
150
+ this.ngZone.run(() => {
151
+ this.closePopup();
152
+ });
144
153
  }
145
154
  });
146
155
  });
@@ -176,6 +185,7 @@ export class SortCommandToolbarDirective {
176
185
  closePopup() {
177
186
  this.buttonElement?.setAttribute('aria-expanded', 'false');
178
187
  this.buttonElement?.removeAttribute('aria-controls');
188
+ this.host.selected = false;
179
189
  if (this.popupRef) {
180
190
  this.popupRef.close();
181
191
  this.popupRef = null;