@progress/kendo-angular-grid 6.0.4-dev.202202221309 → 6.1.0-dev.202203010950

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 (45) hide show
  1. package/dist/cdn/js/kendo-angular-grid.js +2 -2
  2. package/dist/cdn/main.js +1 -1
  3. package/dist/es/columns/sort-settings.js +2 -1
  4. package/dist/es/grid.component.js +22 -4
  5. package/dist/es/main.js +1 -0
  6. package/dist/es/package-metadata.js +1 -1
  7. package/dist/es/rendering/body.module.js +5 -2
  8. package/dist/es/rendering/common/loading.component.js +7 -2
  9. package/dist/es/rendering/header/header.component.js +31 -6
  10. package/dist/es/rendering/list.component.js +5 -1
  11. package/dist/es/rendering/loading-template.directive.js +24 -0
  12. package/dist/es/rendering/table-body.component.js +2 -2
  13. package/dist/es2015/columns/sort-settings.d.ts +33 -69
  14. package/dist/es2015/columns/sort-settings.js +2 -1
  15. package/dist/es2015/grid.component.d.ts +7 -3
  16. package/dist/es2015/grid.component.js +19 -4
  17. package/dist/es2015/index.metadata.json +1 -1
  18. package/dist/es2015/main.d.ts +2 -1
  19. package/dist/es2015/main.js +1 -0
  20. package/dist/es2015/package-metadata.js +1 -1
  21. package/dist/es2015/rendering/body.module.js +5 -2
  22. package/dist/es2015/rendering/common/loading.component.d.ts +2 -0
  23. package/dist/es2015/rendering/common/loading.component.js +13 -4
  24. package/dist/es2015/rendering/header/header.component.d.ts +14 -2
  25. package/dist/es2015/rendering/header/header.component.js +30 -6
  26. package/dist/es2015/rendering/list.component.d.ts +1 -0
  27. package/dist/es2015/rendering/list.component.js +7 -3
  28. package/dist/es2015/rendering/loading-template.directive.d.ts +14 -0
  29. package/dist/es2015/rendering/loading-template.directive.js +23 -0
  30. package/dist/es2015/rendering/table-body.component.d.ts +1 -1
  31. package/dist/es2015/rendering/table-body.component.js +3 -2
  32. package/dist/fesm2015/index.js +94 -23
  33. package/dist/fesm5/index.js +90 -19
  34. package/dist/npm/columns/sort-settings.js +2 -1
  35. package/dist/npm/grid.component.js +22 -4
  36. package/dist/npm/main.js +2 -0
  37. package/dist/npm/package-metadata.js +1 -1
  38. package/dist/npm/rendering/body.module.js +5 -2
  39. package/dist/npm/rendering/common/loading.component.js +6 -1
  40. package/dist/npm/rendering/header/header.component.js +31 -6
  41. package/dist/npm/rendering/list.component.js +5 -1
  42. package/dist/npm/rendering/loading-template.directive.js +26 -0
  43. package/dist/npm/rendering/table-body.component.js +2 -2
  44. package/dist/systemjs/kendo-angular-grid.js +1 -1
  45. package/package.json +5 -3
@@ -9,7 +9,8 @@ var DEFAULTS = {
9
9
  allowUnsort: true,
10
10
  mode: 'single',
11
11
  showIndexes: true,
12
- initialDirection: 'asc'
12
+ initialDirection: 'asc',
13
+ multiSortKey: 'none'
13
14
  };
14
15
  /**
15
16
  * @hidden
@@ -70,6 +70,7 @@ import { defaultTrackBy } from './common/default-track-by';
70
70
  import { CellSelectionService } from './selection/cell-selection.service';
71
71
  import { ColumnStickyChangeEvent } from './column-menu/column-sticky-change-event';
72
72
  import { CellLoadingTemplateDirective } from './rendering/cell-loading.template.directive';
73
+ import { LoadingTemplateDirective } from './rendering/loading-template.directive';
73
74
  var createControl = function (source) { return function (acc, key) {
74
75
  acc[key] = new FormControl(source[key]);
75
76
  return acc;
@@ -822,15 +823,28 @@ var GridComponent = /** @class */ (function () {
822
823
  enumerable: true,
823
824
  configurable: true
824
825
  });
825
- Object.defineProperty(GridComponent.prototype, "loadingTemplate", {
826
+ Object.defineProperty(GridComponent.prototype, "cellLoadingTemplate", {
826
827
  get: function () {
827
- if (this._customLoadingTemplate) {
828
+ if (this._cellLoadingTemplate) {
828
829
  return this._customDetailTemplate;
829
830
  }
831
+ return this.cellLoadingTemplateChildren ? this.cellLoadingTemplateChildren.first : undefined;
832
+ },
833
+ set: function (cellLoadingTemplate) {
834
+ this._cellLoadingTemplate = cellLoadingTemplate;
835
+ },
836
+ enumerable: true,
837
+ configurable: true
838
+ });
839
+ Object.defineProperty(GridComponent.prototype, "loadingTemplate", {
840
+ get: function () {
841
+ if (this._loadingTemplate) {
842
+ return this._loadingTemplate;
843
+ }
830
844
  return this.loadingTemplateChildren ? this.loadingTemplateChildren.first : undefined;
831
845
  },
832
846
  set: function (loadingTemplate) {
833
- this._customLoadingTemplate = loadingTemplate;
847
+ this._loadingTemplate = loadingTemplate;
834
848
  },
835
849
  enumerable: true,
836
850
  configurable: true
@@ -2587,6 +2601,10 @@ var GridComponent = /** @class */ (function () {
2587
2601
  tslib_1.__decorate([
2588
2602
  ContentChildren(CellLoadingTemplateDirective),
2589
2603
  tslib_1.__metadata("design:type", QueryList)
2604
+ ], GridComponent.prototype, "cellLoadingTemplateChildren", void 0);
2605
+ tslib_1.__decorate([
2606
+ ContentChildren(LoadingTemplateDirective),
2607
+ tslib_1.__metadata("design:type", QueryList)
2590
2608
  ], GridComponent.prototype, "loadingTemplateChildren", void 0);
2591
2609
  tslib_1.__decorate([
2592
2610
  ContentChildren(NoRecordsTemplateDirective),
@@ -2680,7 +2698,7 @@ var GridComponent = /** @class */ (function () {
2680
2698
  // Styles for backwards compatibility with kendo-theme-default@v2.46.0 and earlier.
2681
2699
  " .k-grid .k-grid-aria-root {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .k-grid .k-filter-row td {\n white-space: nowrap;\n }"
2682
2700
  ],
2683
- template: "\n <ng-container kendoGridLocalizedMessages\n i18n-groupPanelEmpty=\"kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty\"\n groupPanelEmpty=\"Drag a column header and drop it here to group by that column\"\n\n i18n-noRecords=\"kendo.grid.noRecords|The label visible in the Grid when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-pagerLabel=\"kendo.grid.pagerLabel|The label for the Grid pager\"\n pagerLabel=\"{{ 'Page navigation, page {currentPage} of {totalPages}' }}\"\n\n i18n-pagerFirstPage=\"kendo.grid.pagerFirstPage|The label for the first page button in Grid pager\"\n pagerFirstPage=\"Go to the first page\"\n\n i18n-pagerPreviousPage=\"kendo.grid.pagerPreviousPage|The label for the previous page button in Grid pager\"\n pagerPreviousPage=\"Go to the previous page\"\n\n i18n-pagerNextPage=\"kendo.grid.pagerNextPage|The label for the next page button in Grid pager\"\n pagerNextPage=\"Go to the next page\"\n\n i18n-pagerLastPage=\"kendo.grid.pagerLastPage|The label for the last page button in Grid pager\"\n pagerLastPage=\"Go to the last page\"\n\n i18n-pagerPage=\"kendo.grid.pagerPage|The label before the current page number in the Grid pager\"\n pagerPage=\"Page\"\n\n i18n-pagerOf=\"kendo.grid.pagerOf|The label before the total pages number in the Grid pager\"\n pagerOf=\"of\"\n\n i18n-pagerItems=\"kendo.grid.pagerItems|The label after the total pages number in the Grid pager\"\n pagerItems=\"items\"\n\n i18n-pagerPageNumberInputTitle=\"kendo.grid.pagerPageNumberInputTitle|The label for the pager input in the Grid pager\"\n pagerPageNumberInputTitle=\"Page Number\"\n\n i18n-pagerItemsPerPage=\"kendo.grid.pagerItemsPerPage|The label for the page size chooser in the Grid pager\"\n pagerItemsPerPage=\"items per page\"\n\n i18n-filter=\"kendo.grid.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterInputLabel=\"kendo.grid.filterInputLabel|The label of the filter row and menu inputs\"\n filterInputLabel=\"{{ '{columnName} Filter' }}\"\n\n i18n-filterMenuTitle=\"kendo.grid.filterMenuTitle|The title of the filter menu icon\"\n filterMenuTitle=\"{{ '{columnName} Filter Menu' }}\"\n\n i18n-filterMenuOperatorsDropDownLabel=\"kendo.grid.filterMenuOperatorsDropDownLabel|The label of the filter menu operators dropdown\"\n filterMenuOperatorsDropDownLabel=\"{{ '{columnName} Filter Operators' }}\"\n\n i18n-filterMenuLogicDropDownLabel=\"kendo.grid.filterMenuLogicDropDownLabel|The label of the filter menu logic dropdown\"\n filterMenuLogicDropDownLabel=\"{{ '{columnName} Filter Logic' }}\"\n\n i18n-filterEqOperator=\"kendo.grid.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.grid.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.grid.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.grid.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.grid.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.grid.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.grid.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.grid.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.grid.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.grid.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.grid.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.grid.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.grid.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.grid.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.grid.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.grid.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.grid.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.grid.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.grid.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.grid.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.grid.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.grid.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.grid.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.grid.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.grid.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.grid.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-gridLabel=\"kendo.grid.gridLabel|The Grid aria-label\"\n gridLabel=\"Data table\"\n\n i18n-columnMenu=\"kendo.grid.columnMenu|The title of the column menu icon\"\n columnMenu=\"{{ '{columnName} Column Menu' }}\"\n\n i18n-columns=\"kendo.grid.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock=\"kendo.grid.lock|The text shown in the column menu for the lock item\"\n lock=\"Lock\"\n\n i18n-unlock=\"kendo.grid.unlock|The text shown in the column menu for the unlock item\"\n unlock=\"Unlock\"\n\n i18n-setColumnPosition=\"kendo.grid.setColumnPosition|The text shown in the column menu for the set column position item\"\n setColumnPosition=\"Set Column Position\"\n\n i18n-stick=\"kendo.grid.stick|The text shown in the column menu for the stick item\"\n stick=\"Stick\"\n\n i18n-unstick=\"kendo.grid.unstick|The text shown in the column menu for the unstick item\"\n unstick=\"Unstick\"\n\n i18n-sortable=\"kendo.grid.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.grid.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.grid.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.grid.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.grid.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.grid.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"\n\n i18n-detailExpand=\"kendo.grid.detailExpand|The title of the expand icon of detail rows.\"\n detailExpand=\"Expand Details\"\n\n i18n-detailCollapse=\"kendo.grid.detailCollapse|The title of the collapse icon of detail rows.\"\n detailCollapse=\"Collapse Details\"\n\n i18n-filterDateToday=\"kendo.grid.filterDateToday|The text of the Today button of the Date filter.\"\n filterDateToday=\"TODAY\"\n\n i18n-filterDateToggle=\"kendo.grid.filterDateToggle|The title of the Toggle button of the Date filter.\"\n filterDateToggle=\"Toggle Calendar\"\n\n i18n-filterNumericDecrement=\"kendo.grid.filterNumericDecrement|The title of the Decrement button of the Numeric filter.\"\n filterNumericDecrement=\"Decrement\"\n\n i18n-filterNumericIncrement=\"kendo.grid.filterNumericIncrement|The title of the Increment button of the Numeric filter.\"\n filterNumericIncrement=\"Increment\"\n\n i18n-selectionCheckboxLabel=\"kendo.grid.selectionCheckboxLabel|The labels of the checkbox column checkboxes.\"\n selectionCheckboxLabel=\"Select Row\"\n\n i18n-selectAllCheckboxLabel=\"kendo.grid.selectAllCheckboxLabel|The label of the checkbox column select all checkbox.\"\n selectAllCheckboxLabel=\"Select All Rows\"\n\n i18n-groupCollapse=\"kendo.grid.groupCollapse|The text of the title and aria-label attributes applied to the collapse icon of group rows.\"\n groupCollapse=\"Collapse Group\"\n\n i18n-groupExpand=\"kendo.grid.groupExpand|The text of the title and aria-label attributes applied to the expand icon of group rows.\"\n groupExpand=\"Expand Group\"\n >\n </ng-container>\n <kendo-grid-toolbar class=\"k-toolbar k-grid-toolbar\" *ngIf=\"showTopToolbar\" position=\"top\"></kendo-grid-toolbar>\n <kendo-pager\n *ngIf=\"showTopPager\"\n [tabindex]=\"navigable ? '0' : '-1'\"\n [attr.role]=\"navigable ? 'navigation' : undefined\"\n class=\"k-grid-pager-top\"\n [template]=\"pagerTemplate\"\n [pageSize]=\"pageSize\"\n [total]=\"view.total\"\n [skip]=\"skip\"\n [options]=\"pageable\"\n (pageChange)=\"notifyPageChange('pager', $event)\">\n </kendo-pager>\n <kendo-grid-group-panel\n *ngIf=\"showGroupPanel\"\n [text]=\"groupableEmptyText\"\n [groups]=\"group\"\n (change)=\"groupChange.emit($event)\">\n </kendo-grid-group-panel>\n <div #ariaRoot\n class=\"k-grid-aria-root\"\n role=\"grid\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-rowcount]=\"ariaRowCount\"\n [attr.aria-colcount]=\"ariaColCount\">\n <ng-template [ngIf]=\"isScrollable\">\n <div *ngIf=\"!hideHeader\"\n class=\"k-grid-header\"\n role=\"presentation\"\n [style.padding]=\"headerPadding\">\n <div *ngIf=\"isLocked\"\n #lockedHeader\n role=\"presentation\"\n class=\"k-grid-header-locked\"\n [style.width.px]=\"lockedWidth\">\n <table [locked]=\"true\" role=\"presentation\" [style.width.px]=\"lockedWidth\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [columns]=\"lockedLeafColumns\"\n [groups]=\"group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <thead kendoGridHeader\n [resizable]=\"resizable\"\n [scrollable]=\"true\"\n [columns]=\"lockedColumns\"\n [totalColumnLevels]=\"totalColumnLevels\"\n [sort]=\"sort\"\n [groups]=\"group\"\n [filter]=\"filter\"\n [filterable]=\"filterable\"\n [groupable]=\"showGroupPanel\"\n [reorderable]=\"reorderable\"\n [sortable]=\"sortable\"\n [columnMenu]=\"columnMenuOptions\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [totalColumnsCount]=\"leafColumns.length\"\n [detailTemplate]=\"detailTemplate\"\n [tabIndex]=\"navigable ? '-1' : '0'\">\n </thead>\n </table>\n </div><div #header class=\"k-grid-header-wrap\" role=\"presentation\" data-scrollable\n [kendoGridResizableContainer]=\"lockedLeafColumns.length\"\n [lockedWidth]=\"lockedWidth + scrollbarWidth + 2\">\n <table role=\"presentation\" [style.width.px]=\"nonLockedWidth\" [virtualColumns]=\"virtualColumns\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [columns]=\"headerLeafColumns\"\n [groups]=\"isLocked ? [] : group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <thead kendoGridHeader\n [resizable]=\"resizable\"\n role=\"presentation\"\n [scrollable]=\"true\"\n [columns]=\"headerColumns\"\n [totalColumnLevels]=\"totalColumnLevels\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [filterable]=\"filterable\"\n [groupable]=\"showGroupPanel\"\n [reorderable]=\"reorderable\"\n [groups]=\"isLocked ? [] : group\"\n [sortable]=\"sortable\"\n [columnMenu]=\"columnMenuOptions\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [lockedColumnsCount]=\"lockedLeafColumns.length\"\n [totalColumnsCount]=\"leafColumns.length\"\n [detailTemplate]=\"detailTemplate\"\n [tabIndex]=\"navigable ? '-1' : '0'\">\n </thead>\n </table>\n <div *ngIf=\"virtualColumns\" class=\"k-width-container\" role=\"presentation\">\n <div [style.width.px]=\"columnsContainer.unlockedWidth\"></div>\n </div>\n </div>\n </div>\n <kendo-grid-list\n [data]=\"view\"\n [rowHeight]=\"rowHeight\"\n [detailRowHeight]=\"detailRowHeight\"\n [total]=\"totalCount\"\n [take]=\"pageSize\"\n [groups]=\"group\"\n [groupable]=\"groupable\"\n [skip]=\"skip\"\n [trackBy]=\"trackBy\"\n [columns]=\"columnsContainer\"\n [selectable]=\"selectable\"\n [filterable]=\"filterable\"\n [detailTemplate]=\"detailTemplate\"\n [noRecordsTemplate]=\"noRecordsTemplate\"\n (pageChange)=\"notifyPageChange('list', $event)\"\n [rowClass]=\"rowClass\"\n [rowSticky]=\"rowSticky\"\n [loading]=\"loading\"\n [isVirtual]=\"isVirtual\"\n [loadingTemplate]=\"loadingTemplate?.templateRef\"\n [virtualColumns]=\"virtualColumns\"\n (scrollBottom)=\"notifyScrollBottom()\"\n (contentScroll)=\"contentScroll.emit($event)\"\n kendoDraggable\n kendoGridSelectionMarquee\n [enableDrag]=\"marqueeSelection\"\n >\n </kendo-grid-list>\n <div\n *ngIf=\"showFooter\"\n class=\"k-grid-footer\"\n [style.padding]=\"headerPadding\">\n <div\n *ngIf=\"lockedLeafColumns.length\"\n class=\"k-grid-footer-locked\"\n [style.width.px]=\"lockedWidth\">\n <table role=\"presentation\" [locked]=\"true\" [style.width.px]=\"lockedWidth\">\n <colgroup kendoGridColGroup\n [columns]=\"lockedLeafColumns\"\n [groups]=\"group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tfoot kendoGridFooter\n [scrollable]=\"true\"\n [groups]=\"group\"\n [columns]=\"lockedLeafColumns\"\n [detailTemplate]=\"detailTemplate\"\n [logicalRowIndex]=\"ariaRowCount\">\n </tfoot>\n </table>\n </div><div #footer\n class=\"k-grid-footer-wrap\" data-scrollable\n [kendoGridResizableContainer]=\"lockedLeafColumns.length\"\n [lockedWidth]=\"lockedWidth + scrollbarWidth + 3\">\n <table role=\"presentation\" [style.width.px]=\"nonLockedWidth\">\n <colgroup kendoGridColGroup\n [columns]=\"nonLockedLeafColumns\"\n [groups]=\"isLocked ? [] : group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tfoot kendoGridFooter\n [logicalRowIndex]=\"ariaRowCount\"\n [scrollable]=\"true\"\n [groups]=\"isLocked ? [] : group\"\n [columns]=\"nonLockedLeafColumns\"\n [lockedColumnsCount]=\"lockedLeafColumns.length\"\n [detailTemplate]=\"detailTemplate\">\n </tfoot>\n </table>\n </div>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"!isScrollable\">\n <table [style.table-layout]=\"resizable ? 'fixed' : null\">\n <colgroup kendoGridColGroup\n [columns]=\"leafColumns\"\n [groups]=\"group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <thead kendoGridHeader\n *ngIf=\"!hideHeader\"\n [resizable]=\"resizable\"\n [scrollable]=\"false\"\n [columns]=\"visibleColumns\"\n [totalColumnLevels]=\"totalColumnLevels\"\n [groups]=\"group\"\n [groupable]=\"showGroupPanel\"\n [reorderable]=\"reorderable\"\n [sort]=\"sort\"\n [sortable]=\"sortable\"\n [filter]=\"filter\"\n [filterable]=\"filterable\"\n [columnMenu]=\"columnMenuOptions\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [detailTemplate]=\"detailTemplate\"\n [tabIndex]=\"navigable ? '-1' : '0'\">\n </thead>\n <tbody kendoGridTableBody\n [isLoading]=\"loading\"\n [groups]=\"group\"\n [data]=\"view\"\n [skip]=\"skip\"\n [columns]=\"leafColumns\"\n [selectable]=\"selectable\"\n [filterable]=\"filterable\"\n [noRecordsTemplate]=\"noRecordsTemplate\"\n [detailTemplate]=\"detailTemplate\"\n [showGroupFooters]=\"showGroupFooters\"\n [trackBy]=\"trackBy\"\n [rowClass]=\"rowClass\"\n kendoDraggable\n kendoGridSelectionMarquee\n [enableDrag]=\"marqueeSelection\">\n </tbody>\n <tfoot kendoGridFooter\n *ngIf=\"showFooter\"\n [scrollable]=\"false\"\n [logicalRowIndex]=\"ariaRowCount\"\n [groups]=\"group\"\n [columns]=\"leafColumns\"\n [detailTemplate]=\"detailTemplate\">\n </tfoot>\n </table>\n <div *ngIf=\"loading\" kendoGridLoading>\n </div>\n </ng-template>\n </div>\n <kendo-pager\n *ngIf=\"showBottomPager\"\n [tabindex]=\"navigable ? '0' : '-1'\"\n [attr.role]=\"navigable ? 'navigation' : undefined\"\n [template]=\"pagerTemplate\"\n [pageSize]=\"pageSize\"\n [total]=\"view.total\"\n [skip]=\"skip\"\n [options]=\"pageable\"\n (pageChange)=\"notifyPageChange('pager', $event)\">\n </kendo-pager>\n <kendo-grid-toolbar class=\"k-toolbar k-grid-toolbar k-grid-toolbar-bottom\" *ngIf=\"showBottomToolbar\" position=\"bottom\"></kendo-grid-toolbar>\n "
2701
+ template: "\n <ng-container kendoGridLocalizedMessages\n i18n-groupPanelEmpty=\"kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty\"\n groupPanelEmpty=\"Drag a column header and drop it here to group by that column\"\n\n i18n-noRecords=\"kendo.grid.noRecords|The label visible in the Grid when there are no records\"\n noRecords=\"No records available.\"\n\n i18n-pagerLabel=\"kendo.grid.pagerLabel|The label for the Grid pager\"\n pagerLabel=\"{{ 'Page navigation, page {currentPage} of {totalPages}' }}\"\n\n i18n-pagerFirstPage=\"kendo.grid.pagerFirstPage|The label for the first page button in Grid pager\"\n pagerFirstPage=\"Go to the first page\"\n\n i18n-pagerPreviousPage=\"kendo.grid.pagerPreviousPage|The label for the previous page button in Grid pager\"\n pagerPreviousPage=\"Go to the previous page\"\n\n i18n-pagerNextPage=\"kendo.grid.pagerNextPage|The label for the next page button in Grid pager\"\n pagerNextPage=\"Go to the next page\"\n\n i18n-pagerLastPage=\"kendo.grid.pagerLastPage|The label for the last page button in Grid pager\"\n pagerLastPage=\"Go to the last page\"\n\n i18n-pagerPage=\"kendo.grid.pagerPage|The label before the current page number in the Grid pager\"\n pagerPage=\"Page\"\n\n i18n-pagerOf=\"kendo.grid.pagerOf|The label before the total pages number in the Grid pager\"\n pagerOf=\"of\"\n\n i18n-pagerItems=\"kendo.grid.pagerItems|The label after the total pages number in the Grid pager\"\n pagerItems=\"items\"\n\n i18n-pagerPageNumberInputTitle=\"kendo.grid.pagerPageNumberInputTitle|The label for the pager input in the Grid pager\"\n pagerPageNumberInputTitle=\"Page Number\"\n\n i18n-pagerItemsPerPage=\"kendo.grid.pagerItemsPerPage|The label for the page size chooser in the Grid pager\"\n pagerItemsPerPage=\"items per page\"\n\n i18n-filter=\"kendo.grid.filter|The label of the filter cell or icon\"\n filter=\"Filter\"\n\n i18n-filterInputLabel=\"kendo.grid.filterInputLabel|The label of the filter row and menu inputs\"\n filterInputLabel=\"{{ '{columnName} Filter' }}\"\n\n i18n-filterMenuTitle=\"kendo.grid.filterMenuTitle|The title of the filter menu icon\"\n filterMenuTitle=\"{{ '{columnName} Filter Menu' }}\"\n\n i18n-filterMenuOperatorsDropDownLabel=\"kendo.grid.filterMenuOperatorsDropDownLabel|The label of the filter menu operators dropdown\"\n filterMenuOperatorsDropDownLabel=\"{{ '{columnName} Filter Operators' }}\"\n\n i18n-filterMenuLogicDropDownLabel=\"kendo.grid.filterMenuLogicDropDownLabel|The label of the filter menu logic dropdown\"\n filterMenuLogicDropDownLabel=\"{{ '{columnName} Filter Logic' }}\"\n\n i18n-filterEqOperator=\"kendo.grid.filterEqOperator|The text of the equal filter operator\"\n filterEqOperator=\"Is equal to\"\n\n i18n-filterNotEqOperator=\"kendo.grid.filterNotEqOperator|The text of the not equal filter operator\"\n filterNotEqOperator=\"Is not equal to\"\n\n i18n-filterIsNullOperator=\"kendo.grid.filterIsNullOperator|The text of the is null filter operator\"\n filterIsNullOperator=\"Is null\"\n\n i18n-filterIsNotNullOperator=\"kendo.grid.filterIsNotNullOperator|The text of the is not null filter operator\"\n filterIsNotNullOperator=\"Is not null\"\n\n i18n-filterIsEmptyOperator=\"kendo.grid.filterIsEmptyOperator|The text of the is empty filter operator\"\n filterIsEmptyOperator=\"Is empty\"\n\n i18n-filterIsNotEmptyOperator=\"kendo.grid.filterIsNotEmptyOperator|The text of the is not empty filter operator\"\n filterIsNotEmptyOperator=\"Is not empty\"\n\n i18n-filterStartsWithOperator=\"kendo.grid.filterStartsWithOperator|The text of the starts with filter operator\"\n filterStartsWithOperator=\"Starts with\"\n\n i18n-filterContainsOperator=\"kendo.grid.filterContainsOperator|The text of the contains filter operator\"\n filterContainsOperator=\"Contains\"\n\n i18n-filterNotContainsOperator=\"kendo.grid.filterNotContainsOperator|The text of the does not contain filter operator\"\n filterNotContainsOperator=\"Does not contain\"\n\n i18n-filterEndsWithOperator=\"kendo.grid.filterEndsWithOperator|The text of the ends with filter operator\"\n filterEndsWithOperator=\"Ends with\"\n\n i18n-filterGteOperator=\"kendo.grid.filterGteOperator|The text of the greater than or equal filter operator\"\n filterGteOperator=\"Is greater than or equal to\"\n\n i18n-filterGtOperator=\"kendo.grid.filterGtOperator|The text of the greater than filter operator\"\n filterGtOperator=\"Is greater than\"\n\n i18n-filterLteOperator=\"kendo.grid.filterLteOperator|The text of the less than or equal filter operator\"\n filterLteOperator=\"Is less than or equal to\"\n\n i18n-filterLtOperator=\"kendo.grid.filterLtOperator|The text of the less than filter operator\"\n filterLtOperator=\"Is less than\"\n\n i18n-filterIsTrue=\"kendo.grid.filterIsTrue|The text of the IsTrue boolean filter option\"\n filterIsTrue=\"Is True\"\n\n i18n-filterIsFalse=\"kendo.grid.filterIsFalse|The text of the IsFalse boolean filter option\"\n filterIsFalse=\"Is False\"\n\n i18n-filterBooleanAll=\"kendo.grid.filterBooleanAll|The text of the (All) boolean filter option\"\n filterBooleanAll=\"(All)\"\n\n i18n-filterAfterOrEqualOperator=\"kendo.grid.filterAfterOrEqualOperator|The text of the after or equal date filter operator\"\n filterAfterOrEqualOperator=\"Is after or equal to\"\n\n i18n-filterAfterOperator=\"kendo.grid.filterAfterOperator|The text of the after date filter operator\"\n filterAfterOperator=\"Is after\"\n\n i18n-filterBeforeOperator=\"kendo.grid.filterBeforeOperator|The text of the before date filter operator\"\n filterBeforeOperator=\"Is before\"\n\n i18n-filterBeforeOrEqualOperator=\"kendo.grid.filterBeforeOrEqualOperator|The text of the before or equal date filter operator\"\n filterBeforeOrEqualOperator=\"Is before or equal to\"\n\n i18n-filterFilterButton=\"kendo.grid.filterFilterButton|The text of the filter button\"\n filterFilterButton=\"Filter\"\n\n i18n-filterClearButton=\"kendo.grid.filterClearButton|The text of the clear filter button\"\n filterClearButton=\"Clear\"\n\n i18n-filterAndLogic=\"kendo.grid.filterAndLogic|The text of the And filter logic\"\n filterAndLogic=\"And\"\n\n i18n-filterOrLogic=\"kendo.grid.filterOrLogic|The text of the Or filter logic\"\n filterOrLogic=\"Or\"\n\n i18n-loading=\"kendo.grid.loading|The loading text\"\n loading=\"Loading\"\n\n i18n-gridLabel=\"kendo.grid.gridLabel|The Grid aria-label\"\n gridLabel=\"Data table\"\n\n i18n-columnMenu=\"kendo.grid.columnMenu|The title of the column menu icon\"\n columnMenu=\"{{ '{columnName} Column Menu' }}\"\n\n i18n-columns=\"kendo.grid.columns|The text shown in the column menu for the columns item\"\n columns=\"Columns\"\n\n i18n-lock=\"kendo.grid.lock|The text shown in the column menu for the lock item\"\n lock=\"Lock\"\n\n i18n-unlock=\"kendo.grid.unlock|The text shown in the column menu for the unlock item\"\n unlock=\"Unlock\"\n\n i18n-setColumnPosition=\"kendo.grid.setColumnPosition|The text shown in the column menu for the set column position item\"\n setColumnPosition=\"Set Column Position\"\n\n i18n-stick=\"kendo.grid.stick|The text shown in the column menu for the stick item\"\n stick=\"Stick\"\n\n i18n-unstick=\"kendo.grid.unstick|The text shown in the column menu for the unstick item\"\n unstick=\"Unstick\"\n\n i18n-sortable=\"kendo.grid.sortable|The label of the sort icon\"\n sortable=\"Sortable\"\n\n i18n-sortAscending=\"kendo.grid.sortAscending|The text shown in the column menu for the sort ascending item\"\n sortAscending=\"Sort Ascending\"\n\n i18n-sortDescending=\"kendo.grid.sortDescending|The text shown in the column menu for the sort descending item\"\n sortDescending=\"Sort Descending\"\n\n i18n-sortedAscending=\"kendo.grid.sortedAscending|The status announcement when a column is sorted ascending\"\n sortedAscending=\"Sorted Ascending\"\n\n i18n-sortedDescending=\"kendo.grid.sortedDescending|The status announcement when a column is sorted descending\"\n sortedDescending=\"Sorted Descending\"\n\n i18n-sortedDefault=\"kendo.grid.sortedDefault|The status announcement when a column is no longer sorted\"\n sortedDefault=\"Not Sorted\"\n\n i18n-columnsApply=\"kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button\"\n columnsApply=\"Apply\"\n\n i18n-columnsReset=\"kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button\"\n columnsReset=\"Reset\"\n\n i18n-detailExpand=\"kendo.grid.detailExpand|The title of the expand icon of detail rows.\"\n detailExpand=\"Expand Details\"\n\n i18n-detailCollapse=\"kendo.grid.detailCollapse|The title of the collapse icon of detail rows.\"\n detailCollapse=\"Collapse Details\"\n\n i18n-filterDateToday=\"kendo.grid.filterDateToday|The text of the Today button of the Date filter.\"\n filterDateToday=\"TODAY\"\n\n i18n-filterDateToggle=\"kendo.grid.filterDateToggle|The title of the Toggle button of the Date filter.\"\n filterDateToggle=\"Toggle Calendar\"\n\n i18n-filterNumericDecrement=\"kendo.grid.filterNumericDecrement|The title of the Decrement button of the Numeric filter.\"\n filterNumericDecrement=\"Decrement\"\n\n i18n-filterNumericIncrement=\"kendo.grid.filterNumericIncrement|The title of the Increment button of the Numeric filter.\"\n filterNumericIncrement=\"Increment\"\n\n i18n-selectionCheckboxLabel=\"kendo.grid.selectionCheckboxLabel|The labels of the checkbox column checkboxes.\"\n selectionCheckboxLabel=\"Select Row\"\n\n i18n-selectAllCheckboxLabel=\"kendo.grid.selectAllCheckboxLabel|The label of the checkbox column select all checkbox.\"\n selectAllCheckboxLabel=\"Select All Rows\"\n\n i18n-groupCollapse=\"kendo.grid.groupCollapse|The text of the title and aria-label attributes applied to the collapse icon of group rows.\"\n groupCollapse=\"Collapse Group\"\n\n i18n-groupExpand=\"kendo.grid.groupExpand|The text of the title and aria-label attributes applied to the expand icon of group rows.\"\n groupExpand=\"Expand Group\"\n >\n </ng-container>\n <kendo-grid-toolbar class=\"k-toolbar k-grid-toolbar\" *ngIf=\"showTopToolbar\" position=\"top\"></kendo-grid-toolbar>\n <kendo-pager\n *ngIf=\"showTopPager\"\n [tabindex]=\"navigable ? '0' : '-1'\"\n [attr.role]=\"navigable ? 'navigation' : undefined\"\n class=\"k-grid-pager-top\"\n [template]=\"pagerTemplate\"\n [pageSize]=\"pageSize\"\n [total]=\"view.total\"\n [skip]=\"skip\"\n [options]=\"pageable\"\n (pageChange)=\"notifyPageChange('pager', $event)\">\n </kendo-pager>\n <kendo-grid-group-panel\n *ngIf=\"showGroupPanel\"\n [text]=\"groupableEmptyText\"\n [groups]=\"group\"\n (change)=\"groupChange.emit($event)\">\n </kendo-grid-group-panel>\n <div #ariaRoot\n class=\"k-grid-aria-root\"\n role=\"grid\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-rowcount]=\"ariaRowCount\"\n [attr.aria-colcount]=\"ariaColCount\">\n <ng-template [ngIf]=\"isScrollable\">\n <div *ngIf=\"!hideHeader\"\n class=\"k-grid-header\"\n role=\"presentation\"\n [style.padding]=\"headerPadding\">\n <div *ngIf=\"isLocked\"\n #lockedHeader\n role=\"presentation\"\n class=\"k-grid-header-locked\"\n [style.width.px]=\"lockedWidth\">\n <table [locked]=\"true\" role=\"presentation\" [style.width.px]=\"lockedWidth\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [columns]=\"lockedLeafColumns\"\n [groups]=\"group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <thead kendoGridHeader\n [resizable]=\"resizable\"\n [scrollable]=\"true\"\n [columns]=\"lockedColumns\"\n [totalColumnLevels]=\"totalColumnLevels\"\n [sort]=\"sort\"\n [groups]=\"group\"\n [filter]=\"filter\"\n [filterable]=\"filterable\"\n [groupable]=\"showGroupPanel\"\n [reorderable]=\"reorderable\"\n [sortable]=\"sortable\"\n [columnMenu]=\"columnMenuOptions\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [totalColumnsCount]=\"leafColumns.length\"\n [detailTemplate]=\"detailTemplate\"\n [tabIndex]=\"navigable ? '-1' : '0'\">\n </thead>\n </table>\n </div><div #header class=\"k-grid-header-wrap\" role=\"presentation\" data-scrollable\n [kendoGridResizableContainer]=\"lockedLeafColumns.length\"\n [lockedWidth]=\"lockedWidth + scrollbarWidth + 2\">\n <table role=\"presentation\" [style.width.px]=\"nonLockedWidth\" [virtualColumns]=\"virtualColumns\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [columns]=\"headerLeafColumns\"\n [groups]=\"isLocked ? [] : group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <thead kendoGridHeader\n [resizable]=\"resizable\"\n role=\"presentation\"\n [scrollable]=\"true\"\n [columns]=\"headerColumns\"\n [totalColumnLevels]=\"totalColumnLevels\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [filterable]=\"filterable\"\n [groupable]=\"showGroupPanel\"\n [reorderable]=\"reorderable\"\n [groups]=\"isLocked ? [] : group\"\n [sortable]=\"sortable\"\n [columnMenu]=\"columnMenuOptions\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [lockedColumnsCount]=\"lockedLeafColumns.length\"\n [totalColumnsCount]=\"leafColumns.length\"\n [detailTemplate]=\"detailTemplate\"\n [tabIndex]=\"navigable ? '-1' : '0'\">\n </thead>\n </table>\n <div *ngIf=\"virtualColumns\" class=\"k-width-container\" role=\"presentation\">\n <div [style.width.px]=\"columnsContainer.unlockedWidth\"></div>\n </div>\n </div>\n </div>\n <kendo-grid-list\n [data]=\"view\"\n [rowHeight]=\"rowHeight\"\n [detailRowHeight]=\"detailRowHeight\"\n [total]=\"totalCount\"\n [take]=\"pageSize\"\n [groups]=\"group\"\n [groupable]=\"groupable\"\n [skip]=\"skip\"\n [trackBy]=\"trackBy\"\n [columns]=\"columnsContainer\"\n [selectable]=\"selectable\"\n [filterable]=\"filterable\"\n [detailTemplate]=\"detailTemplate\"\n [noRecordsTemplate]=\"noRecordsTemplate\"\n (pageChange)=\"notifyPageChange('list', $event)\"\n [rowClass]=\"rowClass\"\n [rowSticky]=\"rowSticky\"\n [loading]=\"loading\"\n [isVirtual]=\"isVirtual\"\n [cellLoadingTemplate]=\"cellLoadingTemplate?.templateRef\"\n [loadingTemplate]=\"loadingTemplate?.templateRef\"\n [virtualColumns]=\"virtualColumns\"\n (scrollBottom)=\"notifyScrollBottom()\"\n (contentScroll)=\"contentScroll.emit($event)\"\n kendoDraggable\n kendoGridSelectionMarquee\n [enableDrag]=\"marqueeSelection\"\n >\n </kendo-grid-list>\n <div\n *ngIf=\"showFooter\"\n class=\"k-grid-footer\"\n [style.padding]=\"headerPadding\">\n <div\n *ngIf=\"lockedLeafColumns.length\"\n class=\"k-grid-footer-locked\"\n [style.width.px]=\"lockedWidth\">\n <table role=\"presentation\" [locked]=\"true\" [style.width.px]=\"lockedWidth\">\n <colgroup kendoGridColGroup\n [columns]=\"lockedLeafColumns\"\n [groups]=\"group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tfoot kendoGridFooter\n [scrollable]=\"true\"\n [groups]=\"group\"\n [columns]=\"lockedLeafColumns\"\n [detailTemplate]=\"detailTemplate\"\n [logicalRowIndex]=\"ariaRowCount\">\n </tfoot>\n </table>\n </div><div #footer\n class=\"k-grid-footer-wrap\" data-scrollable\n [kendoGridResizableContainer]=\"lockedLeafColumns.length\"\n [lockedWidth]=\"lockedWidth + scrollbarWidth + 3\">\n <table role=\"presentation\" [style.width.px]=\"nonLockedWidth\">\n <colgroup kendoGridColGroup\n [columns]=\"nonLockedLeafColumns\"\n [groups]=\"isLocked ? [] : group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tfoot kendoGridFooter\n [logicalRowIndex]=\"ariaRowCount\"\n [scrollable]=\"true\"\n [groups]=\"isLocked ? [] : group\"\n [columns]=\"nonLockedLeafColumns\"\n [lockedColumnsCount]=\"lockedLeafColumns.length\"\n [detailTemplate]=\"detailTemplate\">\n </tfoot>\n </table>\n </div>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"!isScrollable\">\n <table [style.table-layout]=\"resizable ? 'fixed' : null\">\n <colgroup kendoGridColGroup\n [columns]=\"leafColumns\"\n [groups]=\"group\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <thead kendoGridHeader\n *ngIf=\"!hideHeader\"\n [resizable]=\"resizable\"\n [scrollable]=\"false\"\n [columns]=\"visibleColumns\"\n [totalColumnLevels]=\"totalColumnLevels\"\n [groups]=\"group\"\n [groupable]=\"showGroupPanel\"\n [reorderable]=\"reorderable\"\n [sort]=\"sort\"\n [sortable]=\"sortable\"\n [filter]=\"filter\"\n [filterable]=\"filterable\"\n [columnMenu]=\"columnMenuOptions\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [detailTemplate]=\"detailTemplate\"\n [tabIndex]=\"navigable ? '-1' : '0'\">\n </thead>\n <tbody kendoGridTableBody\n [isLoading]=\"loading\"\n [groups]=\"group\"\n [data]=\"view\"\n [skip]=\"skip\"\n [columns]=\"leafColumns\"\n [selectable]=\"selectable\"\n [filterable]=\"filterable\"\n [noRecordsTemplate]=\"noRecordsTemplate\"\n [detailTemplate]=\"detailTemplate\"\n [showGroupFooters]=\"showGroupFooters\"\n [trackBy]=\"trackBy\"\n [rowClass]=\"rowClass\"\n kendoDraggable\n kendoGridSelectionMarquee\n [enableDrag]=\"marqueeSelection\">\n </tbody>\n <tfoot kendoGridFooter\n *ngIf=\"showFooter\"\n [scrollable]=\"false\"\n [logicalRowIndex]=\"ariaRowCount\"\n [groups]=\"group\"\n [columns]=\"leafColumns\"\n [detailTemplate]=\"detailTemplate\">\n </tfoot>\n </table>\n <div [loadingTemplate]=\"loadingTemplate\" *ngIf=\"loading\" kendoGridLoading>\n </div>\n </ng-template>\n </div>\n <kendo-pager\n *ngIf=\"showBottomPager\"\n [tabindex]=\"navigable ? '0' : '-1'\"\n [attr.role]=\"navigable ? 'navigation' : undefined\"\n [template]=\"pagerTemplate\"\n [pageSize]=\"pageSize\"\n [total]=\"view.total\"\n [skip]=\"skip\"\n [options]=\"pageable\"\n (pageChange)=\"notifyPageChange('pager', $event)\">\n </kendo-pager>\n <kendo-grid-toolbar class=\"k-toolbar k-grid-toolbar k-grid-toolbar-bottom\" *ngIf=\"showBottomToolbar\" position=\"bottom\"></kendo-grid-toolbar>\n "
2684
2702
  }),
2685
2703
  tslib_1.__metadata("design:paramtypes", [BrowserSupportService,
2686
2704
  SelectionService,
package/dist/es/main.js CHANGED
@@ -15,6 +15,7 @@ export { ToolbarComponent } from './rendering/toolbar/toolbar.component';
15
15
  export { ToolbarTemplateDirective } from './rendering/toolbar/toolbar-template.directive';
16
16
  export { CellTemplateDirective } from './rendering/cell-template.directive';
17
17
  export { CellLoadingTemplateDirective } from './rendering/cell-loading.template.directive';
18
+ export { LoadingTemplateDirective } from './rendering/loading-template.directive';
18
19
  export { HeaderTemplateDirective } from './rendering/header/header-template.directive';
19
20
  export { FooterTemplateDirective } from './rendering/footer/footer-template.directive';
20
21
  export { PagerTemplateDirective } from './pager/pager-template.directive';
@@ -9,7 +9,7 @@ export var packageMetadata = {
9
9
  name: '@progress/kendo-angular-grid',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1645534887,
12
+ publishDate: 1646127685,
13
13
  version: '',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
15
15
  };
@@ -25,6 +25,7 @@ import { GroupModule } from "../grouping/group.module";
25
25
  import { NumericTextBoxModule } from "@progress/kendo-angular-inputs";
26
26
  import { DatePickerModule } from '@progress/kendo-angular-dateinputs';
27
27
  import { CellLoadingTemplateDirective } from './cell-loading.template.directive';
28
+ import { LoadingTemplateDirective } from './loading-template.directive';
28
29
  var exported = [
29
30
  CommandColumnComponent,
30
31
  CheckboxColumnComponent,
@@ -39,7 +40,8 @@ var exported = [
39
40
  SaveCommandDirective,
40
41
  RemoveCommandDirective,
41
42
  AddCommandDirective,
42
- CellLoadingTemplateDirective
43
+ CellLoadingTemplateDirective,
44
+ LoadingTemplateDirective
43
45
  ];
44
46
  var importedModules = [
45
47
  CommonModule,
@@ -70,7 +72,8 @@ var BodyModule = /** @class */ (function () {
70
72
  SaveCommandDirective,
71
73
  RemoveCommandDirective,
72
74
  AddCommandDirective,
73
- CellLoadingTemplateDirective
75
+ CellLoadingTemplateDirective,
76
+ LoadingTemplateDirective
74
77
  ];
75
78
  };
76
79
  BodyModule = tslib_1.__decorate([
@@ -3,8 +3,9 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as tslib_1 from "tslib";
6
- import { Component, HostBinding } from '@angular/core';
6
+ import { Component, HostBinding, Input } from '@angular/core';
7
7
  import { LocalizationService } from '@progress/kendo-angular-l10n';
8
+ import { LoadingTemplateDirective } from '../loading-template.directive';
8
9
  /**
9
10
  * @hidden
10
11
  */
@@ -24,10 +25,14 @@ var LoadingComponent = /** @class */ (function () {
24
25
  HostBinding('class.k-loading-mask'),
25
26
  tslib_1.__metadata("design:type", Boolean)
26
27
  ], LoadingComponent.prototype, "hostClass", void 0);
28
+ tslib_1.__decorate([
29
+ Input(),
30
+ tslib_1.__metadata("design:type", LoadingTemplateDirective)
31
+ ], LoadingComponent.prototype, "loadingTemplate", void 0);
27
32
  LoadingComponent = tslib_1.__decorate([
28
33
  Component({
29
34
  selector: '[kendoGridLoading]',
30
- template: "\n <span class=\"k-loading-text\">{{ loadingText }}</span>\n <div class=\"k-loading-image\"></div>\n <div class=\"k-loading-color\"></div>\n "
35
+ template: "\n <ng-container *ngIf=\"!loadingTemplate\">\n <span class=\"k-loading-text\">{{ loadingText }}</span>\n <div class=\"k-loading-image\"></div>\n <div class=\"k-loading-color\"></div>\n </ng-container>\n <ng-template *ngIf=\"loadingTemplate\" [ngTemplateOutlet]=\"loadingTemplate?.templateRef\">\n </ng-template>\n "
31
36
  }),
32
37
  tslib_1.__metadata("design:paramtypes", [LocalizationService])
33
38
  ], LoadingComponent);
@@ -90,6 +90,7 @@ var lockable = function (_a) {
90
90
  };
91
91
  var ɵ10 = lockable;
92
92
  var rules = and(ofColumnType, reorderable, notInSpanColumn, notSameElement, sameParent, not(lastNonLocked), lockable);
93
+ var modifierKeys = ['alt', 'ctrl', 'shift', 'meta'];
93
94
  /**
94
95
  * @hidden
95
96
  */
@@ -140,8 +141,8 @@ var HeaderComponent = /** @class */ (function () {
140
141
  enumerable: true,
141
142
  configurable: true
142
143
  });
143
- HeaderComponent.prototype.sortColumn = function (column) {
144
- this.sortService.sort(this.toggleSort(column));
144
+ HeaderComponent.prototype.sortColumn = function (descriptor) {
145
+ this.sortService.sort(descriptor);
145
146
  };
146
147
  HeaderComponent.prototype.onSortClick = function (column, event, link) {
147
148
  var target = event.target;
@@ -152,7 +153,9 @@ var HeaderComponent = /** @class */ (function () {
152
153
  return;
153
154
  }
154
155
  }
155
- this.sortColumn(column);
156
+ var modifier = this.matchModifier(event);
157
+ var toggledColumn = this.toggleSort(column, modifier);
158
+ this.sortColumn(toggledColumn);
156
159
  };
157
160
  HeaderComponent.prototype.onHeaderKeydown = function (column, args) {
158
161
  if (args.keyCode === Keys.ArrowDown && args.altKey && this.showFilterMenu) {
@@ -171,7 +174,8 @@ var HeaderComponent = /** @class */ (function () {
171
174
  return;
172
175
  }
173
176
  if (args.keyCode === Keys.Enter && isPresent(column.field)) {
174
- this.sortService.sort(this.toggleSort(column));
177
+ var modifier = this.matchModifier(args);
178
+ this.sortService.sort(this.toggleSort(column, modifier));
175
179
  }
176
180
  };
177
181
  HeaderComponent.prototype.showSortNumbering = function (column) {
@@ -227,14 +231,35 @@ var HeaderComponent = /** @class */ (function () {
227
231
  }
228
232
  return this.localization.get(msg);
229
233
  };
230
- HeaderComponent.prototype.toggleSort = function (column) {
234
+ /**
235
+ *
236
+ * @param column
237
+ * @param modifier - Indicates whether the client-defined `multiSortKey` modifier is met. Defaults to `true`.
238
+ * @returns - SortDescriptor[]
239
+ */
240
+ HeaderComponent.prototype.toggleSort = function (column, modifier) {
241
+ if (modifier === void 0) { modifier = true; }
231
242
  var _a = normalize(this.sortable, column.sortable), allowUnsort = _a.allowUnsort, mode = _a.mode, initialDirection = _a.initialDirection;
232
243
  var descriptor = this.toggleDirection(column.field, allowUnsort, initialDirection);
233
- if (mode === 'single') {
244
+ if (mode === 'single' || !modifier) {
234
245
  return [descriptor];
235
246
  }
236
247
  return this.sort.filter(function (desc) { return desc.field !== column.field; }).concat([descriptor]);
237
248
  };
249
+ /**
250
+ *
251
+ * Determines whether the modifier key (if any) passed
252
+ * with a click/keyboard event matches the user-defined multiSortKey.
253
+ */
254
+ HeaderComponent.prototype.matchModifier = function (event) {
255
+ var multiSortKey = normalize(this.sortable).multiSortKey;
256
+ if (multiSortKey === 'none') {
257
+ return modifierKeys.every(function (key) { return !event[key + "Key"]; });
258
+ }
259
+ return multiSortKey === 'ctrl'
260
+ ? event.ctrlKey || event.metaKey
261
+ : event[multiSortKey + "Key"];
262
+ };
238
263
  HeaderComponent.prototype.ngAfterViewInit = function () {
239
264
  this.subscription.add(observe(this.dropTargets)
240
265
  .subscribe(this.attachTargets.bind(this)));
@@ -723,6 +723,10 @@ var ListComponent = /** @class */ (function () {
723
723
  Input(),
724
724
  tslib_1.__metadata("design:type", Boolean)
725
725
  ], ListComponent.prototype, "isVirtual", void 0);
726
+ tslib_1.__decorate([
727
+ Input(),
728
+ tslib_1.__metadata("design:type", TemplateRef)
729
+ ], ListComponent.prototype, "cellLoadingTemplate", void 0);
726
730
  tslib_1.__decorate([
727
731
  Input(),
728
732
  tslib_1.__metadata("design:type", TemplateRef)
@@ -768,7 +772,7 @@ var ListComponent = /** @class */ (function () {
768
772
  }
769
773
  ],
770
774
  selector: 'kendo-grid-list',
771
- template: "\n <div #lockedContainer class=\"k-grid-content-locked\" role=\"presentation\"\n *ngIf=\"isLocked\" [style.width.px]=\"lockedWidth\"\n [kendoEventsOutsideAngular]=\"{\n keydown: lockedKeydown,\n scroll: lockedScroll,\n mousewheel: lockedMousewheel,\n DOMMouseScroll: lockedMousewheel\n }\"\n [scope]=\"this\"\n >\n <div role=\"presentation\" class=\"k-grid-table-wrap\">\n <table [locked]=\"true\" #lockedTable class=\"k-grid-table\" role=\"presentation\" [style.width.px]=\"lockedWidth\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [groups]=\"groups\"\n [columns]=\"lockedLeafColumns\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tbody kendoGridTableBody\n role=\"presentation\"\n [groups]=\"groups\"\n [isLocked]=\"true\"\n [data]=\"data\"\n [noRecordsText]=\"''\"\n [columns]=\"lockedLeafColumns\"\n [totalColumnsCount]=\"leafColumns.length\"\n [detailTemplate]=\"detailTemplate\"\n [showGroupFooters]=\"showFooter\"\n [skip]=\"skip\"\n [selectable]=\"selectable\"\n [trackBy]=\"trackBy\"\n [filterable]=\"filterable\"\n [rowClass]=\"rowClass\"\n [isLoading]=\"loading\"\n [isVirtual]=\"isVirtual\"\n [loadingTemplate]=\"loadingTemplate\">\n </tbody>\n </table>\n <kendo-resize-sensor></kendo-resize-sensor>\n </div>\n <div class=\"k-height-container\" role=\"presentation\">\n <div [style.height.px]=\"totalHeight\"></div>\n </div>\n </div><div #container\n class=\"k-grid-content k-virtual-content\"\n role=\"presentation\" tabindex=\"-1\"\n [kendoGridResizableContainer]=\"lockedLeafColumns.length\"\n [lockedWidth]=\"lockedWidth + 1\">\n <div role=\"presentation\" class=\"k-grid-table-wrap\">\n <table [style.width.px]=\"nonLockedWidth\" #table [virtualColumns]=\"virtualColumns\"\n class=\"k-grid-table\" role=\"presentation\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [groups]=\"isLocked ? [] : groups\"\n [columns]=\"nonLockedColumnsToRender\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tbody kendoGridTableBody\n role=\"presentation\"\n [skipGroupDecoration]=\"isLocked\"\n [data]=\"data\"\n [groups]=\"groups\"\n [showGroupFooters]=\"showFooter\"\n [columns]=\"nonLockedColumnsToRender\"\n [allColumns]=\"nonLockedLeafColumns\"\n [detailTemplate]=\"detailTemplate\"\n [noRecordsTemplate]=\"noRecordsTemplate\"\n [lockedColumnsCount]=\"lockedLeafColumns.length\"\n [totalColumnsCount]=\"leafColumns.length\"\n [skip]=\"skip\"\n [selectable]=\"selectable\"\n [trackBy]=\"trackBy\"\n [filterable]=\"filterable\"\n [rowClass]=\"rowClass\"\n [rowSticky]=\"rowSticky\"\n [virtualColumns]=\"virtualColumns\"\n [isLoading]=\"loading\"\n [isVirtual]=\"isVirtual\"\n [loadingTemplate]=\"loadingTemplate\">\n </tbody>\n </table>\n <kendo-resize-sensor *ngIf=\"isLocked\"></kendo-resize-sensor>\n </div>\n <kendo-resize-sensor *ngIf=\"isLocked || virtualColumns\"></kendo-resize-sensor>\n <div class=\"k-height-container\" role=\"presentation\">\n <div [style.height.px]=\"totalHeight\"></div>\n </div>\n <div *ngIf=\"virtualColumns\" class=\"k-width-container\" role=\"presentation\">\n <div [style.width.px]=\"totalWidth\"></div>\n </div>\n </div>\n <div *ngIf=\"loading\" kendoGridLoading>\n </div>\n "
775
+ template: "\n <div #lockedContainer class=\"k-grid-content-locked\" role=\"presentation\"\n *ngIf=\"isLocked\" [style.width.px]=\"lockedWidth\"\n [kendoEventsOutsideAngular]=\"{\n keydown: lockedKeydown,\n scroll: lockedScroll,\n mousewheel: lockedMousewheel,\n DOMMouseScroll: lockedMousewheel\n }\"\n [scope]=\"this\"\n >\n <div role=\"presentation\" class=\"k-grid-table-wrap\">\n <table [locked]=\"true\" #lockedTable class=\"k-grid-table\" role=\"presentation\" [style.width.px]=\"lockedWidth\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [groups]=\"groups\"\n [columns]=\"lockedLeafColumns\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tbody kendoGridTableBody\n role=\"presentation\"\n [groups]=\"groups\"\n [isLocked]=\"true\"\n [data]=\"data\"\n [noRecordsText]=\"''\"\n [columns]=\"lockedLeafColumns\"\n [totalColumnsCount]=\"leafColumns.length\"\n [detailTemplate]=\"detailTemplate\"\n [showGroupFooters]=\"showFooter\"\n [skip]=\"skip\"\n [selectable]=\"selectable\"\n [trackBy]=\"trackBy\"\n [filterable]=\"filterable\"\n [rowClass]=\"rowClass\"\n [isLoading]=\"loading\"\n [isVirtual]=\"isVirtual\"\n [cellLoadingTemplate]=\"cellLoadingTemplate\">\n </tbody>\n </table>\n <kendo-resize-sensor></kendo-resize-sensor>\n </div>\n <div class=\"k-height-container\" role=\"presentation\">\n <div [style.height.px]=\"totalHeight\"></div>\n </div>\n </div><div #container\n class=\"k-grid-content k-virtual-content\"\n role=\"presentation\" tabindex=\"-1\"\n [kendoGridResizableContainer]=\"lockedLeafColumns.length\"\n [lockedWidth]=\"lockedWidth + 1\">\n <div role=\"presentation\" class=\"k-grid-table-wrap\">\n <table [style.width.px]=\"nonLockedWidth\" #table [virtualColumns]=\"virtualColumns\"\n class=\"k-grid-table\" role=\"presentation\">\n <colgroup kendoGridColGroup\n role=\"presentation\"\n [groups]=\"isLocked ? [] : groups\"\n [columns]=\"nonLockedColumnsToRender\"\n [detailTemplate]=\"detailTemplate\">\n </colgroup>\n <tbody kendoGridTableBody\n role=\"presentation\"\n [skipGroupDecoration]=\"isLocked\"\n [data]=\"data\"\n [groups]=\"groups\"\n [showGroupFooters]=\"showFooter\"\n [columns]=\"nonLockedColumnsToRender\"\n [allColumns]=\"nonLockedLeafColumns\"\n [detailTemplate]=\"detailTemplate\"\n [noRecordsTemplate]=\"noRecordsTemplate\"\n [lockedColumnsCount]=\"lockedLeafColumns.length\"\n [totalColumnsCount]=\"leafColumns.length\"\n [skip]=\"skip\"\n [selectable]=\"selectable\"\n [trackBy]=\"trackBy\"\n [filterable]=\"filterable\"\n [rowClass]=\"rowClass\"\n [rowSticky]=\"rowSticky\"\n [virtualColumns]=\"virtualColumns\"\n [isLoading]=\"loading\"\n [isVirtual]=\"isVirtual\"\n [cellLoadingTemplate]=\"cellLoadingTemplate\">\n </tbody>\n </table>\n <kendo-resize-sensor *ngIf=\"isLocked\"></kendo-resize-sensor>\n </div>\n <kendo-resize-sensor *ngIf=\"isLocked || virtualColumns\"></kendo-resize-sensor>\n <div class=\"k-height-container\" role=\"presentation\">\n <div [style.height.px]=\"totalHeight\"></div>\n </div>\n <div *ngIf=\"virtualColumns\" class=\"k-width-container\" role=\"presentation\">\n <div [style.width.px]=\"totalWidth\"></div>\n </div>\n </div>\n <div [loadingTemplate]=\"loadingTemplate\" *ngIf=\"loading\" kendoGridLoading>\n </div>\n "
772
776
  }),
773
777
  tslib_1.__param(0, Inject(SCROLLER_FACTORY_TOKEN)),
774
778
  tslib_1.__metadata("design:paramtypes", [Object, DetailsService,
@@ -0,0 +1,24 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import * as tslib_1 from "tslib";
6
+ import { Directive, TemplateRef } from '@angular/core';
7
+ /**
8
+ * Creates a loading template that overrides the default loading indicator of the Grid Component.
9
+ * To define a loading template, nest an `<ng-template>` tag with the `kendoGridLoadingTemplate` directive inside the `<kendo-grid>` tag
10
+ * [see example]({% slug databinding_grid %}#toc-loading-template).
11
+ */
12
+ var LoadingTemplateDirective = /** @class */ (function () {
13
+ function LoadingTemplateDirective(templateRef) {
14
+ this.templateRef = templateRef;
15
+ }
16
+ LoadingTemplateDirective = tslib_1.__decorate([
17
+ Directive({
18
+ selector: '[kendoGridLoadingTemplate]'
19
+ }),
20
+ tslib_1.__metadata("design:paramtypes", [TemplateRef])
21
+ ], LoadingTemplateDirective);
22
+ return LoadingTemplateDirective;
23
+ }());
24
+ export { LoadingTemplateDirective };
@@ -448,7 +448,7 @@ var TableBodyComponent = /** @class */ (function () {
448
448
  tslib_1.__decorate([
449
449
  Input(),
450
450
  tslib_1.__metadata("design:type", TemplateRef)
451
- ], TableBodyComponent.prototype, "loadingTemplate", void 0);
451
+ ], TableBodyComponent.prototype, "cellLoadingTemplate", void 0);
452
452
  tslib_1.__decorate([
453
453
  Input(),
454
454
  tslib_1.__metadata("design:type", Boolean)
@@ -484,7 +484,7 @@ var TableBodyComponent = /** @class */ (function () {
484
484
  TableBodyComponent = tslib_1.__decorate([
485
485
  Component({
486
486
  selector: '[kendoGridTableBody]',
487
- template: "\n <ng-template [ngIf]=\"editService.hasNewItem\">\n <tr class=\"k-grid-add-row k-grid-edit-row\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"addRowLogicalIndex()\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <ng-template [ngIf]=\"!skipGroupDecoration\">\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\" role=\"presentation\"></td>\n </ng-template>\n <td class=\"k-hierarchy-cell\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"addRowLogicalIndex()\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </td>\n <td *ngFor=\"let column of columns; let columnIndex = index; trackBy: trackByColumns;\"\n kendoGridCell\n [rowIndex]=\"-1\"\n [columnIndex]=\"lockedColumnsCount + columnIndex\"\n [isNew]=\"true\"\n [column]=\"column\"\n [dataItem]=\"newDataItem\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [ngClass]=\"column.cssClass\"\n [style.left]=\"column.sticky ? '0' : undefined\"\n [ngStyle]=\"column.sticky ? addStickyColumnStyles(column) : column.style\"\n [attr.colspan]=\"column.colspan\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"addRowLogicalIndex()\"\n [logicalColIndex]=\"logicalColIndex(column)\"\n [colSpan]=\"column.colspan\"\n role=\"gridcell\">\n </td>\n </tr>\n </ng-template>\n <tr *ngIf=\"data?.length === 0 || data == null\" class=\"k-grid-norecords\">\n <td [attr.colspan]=\"colSpan\">\n <ng-template\n [ngIf]=\"noRecordsTemplate?.templateRef\"\n [templateContext]=\"{\n templateRef: noRecordsTemplate?.templateRef\n }\">\n </ng-template>\n <ng-container *ngIf=\"!noRecordsTemplate?.templateRef\">\n {{noRecordsText}}\n </ng-container>\n </td>\n </tr>\n <ng-template ngFor\n [ngForOf]=\"data\"\n [ngForTrackBy]=\"trackByWrapper\"\n let-item\n let-rowIndex=\"index\">\n <tr *ngIf=\"isGroup(item) && isParentGroupExpanded(item) && showGroupHeader(item)\"\n kendoGridGroupHeader\n [columns]=\"columns\"\n [groups]=\"groups\"\n [item]=\"item\"\n [hasDetails]=\"detailTemplate?.templateRef\"\n [skipGroupDecoration]=\"skipGroupDecoration\"\n [hasGroupHeaderColumn]=\"hasGroupHeaderColumn\"\n [groupHeaderColumns]=\"groupHeaderColumns\"\n [rowIndex]=\"rowIndex + 1\"\n [totalColumnsCount]=\"totalColumnsCount\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"groupHeaderSlaveCellsCount\">\n </tr>\n <tr\n *ngIf=\"isDataItem(item) && (!item.group || isDataItemInExpandedGroup(item))\"\n kendoGridLogicalRow\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n [class.k-grid-row-sticky]=\"rowSticky ? rowSticky({ dataItem: item.data, index: item.index }) : false\"\n [ngClass]=\"rowClass({ dataItem: item.data, index: item.index })\"\n [class.k-alt]=\"isOdd(item)\"\n [class.k-master-row]=\"detailTemplate?.templateRef\"\n [class.k-grid-edit-row]=\"isEditingRow(item.index)\"\n [attr.data-kendo-grid-item-index]=\"item.index\"\n [class.k-state-selected]=\"isSelectable() && isRowSelected(item)\">\n <ng-template [ngIf]=\"!skipGroupDecoration\">\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\" role=\"presentation\"></td>\n </ng-template>\n <td class=\"k-hierarchy-cell\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"0\"\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [detailExpandCell]=\"true\"\n aria-selected=\"false\"\n >\n <a class=\"k-icon\"\n *ngIf=\"detailTemplate.showIf(item.data, item.index)\"\n [ngClass]=\"detailButtonStyles(item)\"\n [attr.title]=\"detailButtonTitle(item)\"\n [attr.aria-label]=\"detailButtonTitle(item)\"\n href=\"#\" tabindex=\"-1\" (click)=\"toggleRow(item.index, item.data)\"></a>\n </td>\n <td\n kendoGridCell\n [rowIndex]=\"item.index\"\n [columnIndex]=\"lockedColumnsCount + columnIndex\"\n [attr.data-kendo-grid-column-index]=\"lockedColumnsCount + columnIndex\"\n [column]=\"column\"\n [dataItem]=\"item.data\"\n [isLoading]=\"isLoading\"\n [isVirtual]=\"isVirtual\"\n [loadingTemplate]=\"loadingTemplate\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"logicalColIndex(column)\"\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [colIndex]=\"columnIndex\"\n [colSpan]=\"column.colspan\"\n role=\"gridcell\"\n [attr.aria-selected]=\"isSelectable() ? isAriaSelected(item, column) : undefined\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [class.k-touch-action-none]=\"isSelectable() && $any(selectable).drag\"\n [class.k-touch-action-auto]=\"!(isSelectable() && $any(selectable).drag)\"\n [ngClass]=\"column.cssClass\"\n [class.k-grid-edit-cell]=\"isEditingCell(item.index, column)\"\n [ngStyle]=\"column.sticky ? addStickyColumnStyles(column) : column.style\"\n [attr.colspan]=\"column.colspan\"\n [class.k-state-selected]=\"isSelectable && cellSelectionService.isCellSelected(item, column)\"\n *ngFor=\"let column of columns; let columnIndex = index; trackBy: trackByColumns;\">\n </td>\n </tr>\n <tr *ngIf=\"isDataItem(item) &&\n (!item.group || isDataItemInExpandedGroup(item)) &&\n detailTemplate?.templateRef &&\n detailTemplate.showIf(item.data, item.index) &&\n isExpanded(item)\"\n class=\"k-detail-row\"\n [class.k-alt]=\"isOdd(item)\"\n kendoGridLogicalRow\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [logicalRowIndex]=\"logicalRowIndex(rowIndex) + 1\"\n [logicalSlaveRow]=\"false\"\n [logicalCellsCount]=\"1\"\n >\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\"></td>\n <td class=\"k-hierarchy-cell\"></td>\n <td class=\"k-detail-cell\"\n [attr.colspan]=\"columnsSpan\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex) + 1\"\n [logicalColIndex]=\"0\"\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [colIndex]=\"0\"\n [colSpan]=\"allColumnsSpan + 1\"\n role=\"gridcell\" aria-selected=\"false\"\n >\n <ng-template\n [ngTemplateOutlet]=\"detailTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{\n dataItem: item.data,\n rowIndex: item.index,\n $implicit: item.data\n }\">\n </ng-template>\n </td>\n </tr>\n <tr *ngIf=\"isFooter(item) &&\n item.group &&\n (isFooterItemInExpandedGroup(item) || (showGroupFooters && isParentGroupExpanded(item.group))) &&\n !item.data.hideFooter\"\n class=\"k-group-footer\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <ng-template [ngIf]=\"!skipGroupDecoration\">\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\"></td>\n </ng-template>\n <td class=\"k-hierarchy-cell\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </td>\n <td kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"logicalColIndex(column)\"\n [attr.data-skip]=\"skipGroupDecoration\"\n *ngFor=\"let column of footerColumns; let columnIndex = index; trackBy: trackByColumns;\">\n <ng-template\n [templateContext]=\"{\n templateRef: column.groupFooterTemplateRef,\n group: item.data,\n field: column.field,\n column: column,\n aggregates: item.data?.aggregates,\n $implicit: item.data?.aggregates\n }\">\n </ng-template>\n </td>\n </tr>\n </ng-template>\n <kendo-resize-sensor *ngIf=\"rowSticky\" (resize)=\"resizeHandler()\"></kendo-resize-sensor>\n "
487
+ template: "\n <ng-template [ngIf]=\"editService.hasNewItem\">\n <tr class=\"k-grid-add-row k-grid-edit-row\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"addRowLogicalIndex()\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <ng-template [ngIf]=\"!skipGroupDecoration\">\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\" role=\"presentation\"></td>\n </ng-template>\n <td class=\"k-hierarchy-cell\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"addRowLogicalIndex()\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </td>\n <td *ngFor=\"let column of columns; let columnIndex = index; trackBy: trackByColumns;\"\n kendoGridCell\n [rowIndex]=\"-1\"\n [columnIndex]=\"lockedColumnsCount + columnIndex\"\n [isNew]=\"true\"\n [column]=\"column\"\n [dataItem]=\"newDataItem\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [ngClass]=\"column.cssClass\"\n [style.left]=\"column.sticky ? '0' : undefined\"\n [ngStyle]=\"column.sticky ? addStickyColumnStyles(column) : column.style\"\n [attr.colspan]=\"column.colspan\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"addRowLogicalIndex()\"\n [logicalColIndex]=\"logicalColIndex(column)\"\n [colSpan]=\"column.colspan\"\n role=\"gridcell\">\n </td>\n </tr>\n </ng-template>\n <tr *ngIf=\"data?.length === 0 || data == null\" class=\"k-grid-norecords\">\n <td [attr.colspan]=\"colSpan\">\n <ng-template\n [ngIf]=\"noRecordsTemplate?.templateRef\"\n [templateContext]=\"{\n templateRef: noRecordsTemplate?.templateRef\n }\">\n </ng-template>\n <ng-container *ngIf=\"!noRecordsTemplate?.templateRef\">\n {{noRecordsText}}\n </ng-container>\n </td>\n </tr>\n\n <ng-template ngFor\n [ngForOf]=\"data\"\n [ngForTrackBy]=\"trackByWrapper\"\n let-item\n let-rowIndex=\"index\">\n <tr *ngIf=\"isGroup(item) && isParentGroupExpanded(item) && showGroupHeader(item)\"\n kendoGridGroupHeader\n [columns]=\"columns\"\n [groups]=\"groups\"\n [item]=\"item\"\n [hasDetails]=\"detailTemplate?.templateRef\"\n [skipGroupDecoration]=\"skipGroupDecoration\"\n [hasGroupHeaderColumn]=\"hasGroupHeaderColumn\"\n [groupHeaderColumns]=\"groupHeaderColumns\"\n [rowIndex]=\"rowIndex + 1\"\n [totalColumnsCount]=\"totalColumnsCount\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"groupHeaderSlaveCellsCount\">\n </tr>\n <tr\n *ngIf=\"isDataItem(item) && (!item.group || isDataItemInExpandedGroup(item))\"\n kendoGridLogicalRow\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n [class.k-grid-row-sticky]=\"rowSticky ? rowSticky({ dataItem: item.data, index: item.index }) : false\"\n [ngClass]=\"rowClass({ dataItem: item.data, index: item.index })\"\n [class.k-alt]=\"isOdd(item)\"\n [class.k-master-row]=\"detailTemplate?.templateRef\"\n [class.k-grid-edit-row]=\"isEditingRow(item.index)\"\n [attr.data-kendo-grid-item-index]=\"item.index\"\n [class.k-state-selected]=\"isSelectable() && isRowSelected(item)\">\n <ng-template [ngIf]=\"!skipGroupDecoration\">\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\" role=\"presentation\"></td>\n </ng-template>\n <td class=\"k-hierarchy-cell\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"0\"\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [detailExpandCell]=\"true\"\n aria-selected=\"false\"\n >\n <a class=\"k-icon\"\n *ngIf=\"detailTemplate.showIf(item.data, item.index)\"\n [ngClass]=\"detailButtonStyles(item)\"\n [attr.title]=\"detailButtonTitle(item)\"\n [attr.aria-label]=\"detailButtonTitle(item)\"\n href=\"#\" tabindex=\"-1\" (click)=\"toggleRow(item.index, item.data)\"></a>\n </td>\n <td\n kendoGridCell\n [rowIndex]=\"item.index\"\n [columnIndex]=\"lockedColumnsCount + columnIndex\"\n [attr.data-kendo-grid-column-index]=\"lockedColumnsCount + columnIndex\"\n [column]=\"column\"\n [dataItem]=\"item.data\"\n [isLoading]=\"isLoading\"\n [isVirtual]=\"isVirtual\"\n [loadingTemplate]=\"cellLoadingTemplate\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"logicalColIndex(column)\"\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [colIndex]=\"columnIndex\"\n [colSpan]=\"column.colspan\"\n role=\"gridcell\"\n [attr.aria-selected]=\"isSelectable() ? isAriaSelected(item, column) : undefined\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [class.k-touch-action-none]=\"isSelectable() && $any(selectable).drag\"\n [class.k-touch-action-auto]=\"!(isSelectable() && $any(selectable).drag)\"\n [ngClass]=\"column.cssClass\"\n [class.k-grid-edit-cell]=\"isEditingCell(item.index, column)\"\n [ngStyle]=\"column.sticky ? addStickyColumnStyles(column) : column.style\"\n [attr.colspan]=\"column.colspan\"\n [class.k-state-selected]=\"isSelectable && cellSelectionService.isCellSelected(item, column)\"\n *ngFor=\"let column of columns; let columnIndex = index; trackBy: trackByColumns;\">\n </td>\n </tr>\n <tr *ngIf=\"isDataItem(item) &&\n (!item.group || isDataItemInExpandedGroup(item)) &&\n detailTemplate?.templateRef &&\n detailTemplate.showIf(item.data, item.index) &&\n isExpanded(item)\"\n class=\"k-detail-row\"\n [class.k-alt]=\"isOdd(item)\"\n kendoGridLogicalRow\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [logicalRowIndex]=\"logicalRowIndex(rowIndex) + 1\"\n [logicalSlaveRow]=\"false\"\n [logicalCellsCount]=\"1\"\n >\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\"></td>\n <td class=\"k-hierarchy-cell\"></td>\n <td class=\"k-detail-cell\"\n [attr.colspan]=\"columnsSpan\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex) + 1\"\n [logicalColIndex]=\"0\"\n [dataRowIndex]=\"item.index\"\n [dataItem]=\"item.data\"\n [colIndex]=\"0\"\n [colSpan]=\"allColumnsSpan + 1\"\n role=\"gridcell\" aria-selected=\"false\"\n >\n <ng-template\n [ngTemplateOutlet]=\"detailTemplate.templateRef\"\n [ngTemplateOutletContext]=\"{\n dataItem: item.data,\n rowIndex: item.index,\n $implicit: item.data\n }\">\n </ng-template>\n </td>\n </tr>\n <tr *ngIf=\"isFooter(item) &&\n item.group &&\n (isFooterItemInExpandedGroup(item) || (showGroupFooters && isParentGroupExpanded(item.group))) &&\n !item.data.hideFooter\"\n class=\"k-group-footer\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <ng-template [ngIf]=\"!skipGroupDecoration\">\n <td class=\"k-group-cell\" *ngFor=\"let g of groups\"></td>\n </ng-template>\n <td class=\"k-hierarchy-cell\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </td>\n <td kendoGridLogicalCell\n [logicalRowIndex]=\"logicalRowIndex(rowIndex)\"\n [logicalColIndex]=\"logicalColIndex(column)\"\n [attr.data-skip]=\"skipGroupDecoration\"\n *ngFor=\"let column of footerColumns; let columnIndex = index; trackBy: trackByColumns;\">\n <ng-template\n [templateContext]=\"{\n templateRef: column.groupFooterTemplateRef,\n group: item.data,\n field: column.field,\n column: column,\n aggregates: item.data?.aggregates,\n $implicit: item.data?.aggregates\n }\">\n </ng-template>\n </td>\n </tr>\n </ng-template>\n <kendo-resize-sensor *ngIf=\"rowSticky\" (resize)=\"resizeHandler()\"></kendo-resize-sensor>\n "
488
488
  }),
489
489
  tslib_1.__metadata("design:paramtypes", [DetailsService,
490
490
  GroupsService,
@@ -5,7 +5,7 @@
5
5
  /**
6
6
  * Defines the settings for sorting the Grid column.
7
7
  */
8
- export declare type ColumnSortSettings = boolean | {
8
+ export interface ColumnSortSettings {
9
9
  /**
10
10
  * Enables the removal of the column sorting.
11
11
  */
@@ -18,90 +18,54 @@ export declare type ColumnSortSettings = boolean | {
18
18
  * - `desc`
19
19
  */
20
20
  initialDirection?: 'asc' | 'desc';
21
- };
21
+ }
22
22
  /**
23
- * Defines the settings for sorting the Grid.
23
+ * Specifies settings for sorting by single column.
24
24
  */
25
- export declare type SortSettings = boolean | ColumnSortSettings & {
25
+ export interface SingleSortSettings extends ColumnSortSettings {
26
26
  /**
27
27
  * The sort mode of the Grid.
28
- *
29
- * The available values for setting the sort modes are:
30
- * - `single`
31
- * - `multiple`
32
28
  */
33
- mode?: 'single' | 'multiple';
34
- /**
35
- * Enables the sort-sequence indicators for sorting multiple columns.
36
- */
37
- showIndexes?: boolean;
38
- };
29
+ mode?: 'single';
30
+ }
39
31
  /**
40
- * @hidden
32
+ * Specifies a modifier key.
41
33
  */
42
- export declare const normalize: (...settings: (boolean | {
43
- /**
44
- * Enables the removal of the column sorting.
45
- */
46
- allowUnsort?: boolean;
47
- /**
48
- * Determines the initial (from the unsorted to the sorted state) sort direction.
49
- *
50
- * The available values for setting the initial sort direction are:
51
- * - `asc` (default)
52
- * - `desc`
53
- */
54
- initialDirection?: "desc" | "asc";
55
- } | (false & {
34
+ export declare type ModifierKey = 'none' | 'ctrl' | 'shift' | 'alt';
35
+ /**
36
+ * Specifies settings for sorting by multiple columns.
37
+ */
38
+ export interface MultipleSortSettings extends ColumnSortSettings {
56
39
  /**
57
40
  * The sort mode of the Grid.
58
- *
59
- * The available values for setting the sort modes are:
60
- * - `single`
61
- * - `multiple`
62
41
  */
63
- mode?: "single" | "multiple";
42
+ mode?: 'multiple';
64
43
  /**
65
44
  * Enables the sort-sequence indicators for sorting multiple columns.
66
45
  */
67
46
  showIndexes?: boolean;
68
- }) | (true & {
69
47
  /**
70
- * The sort mode of the Grid.
48
+ * Specifies the modifier key for sorting by 2nd or more columns.
71
49
  *
72
- * The available values for setting the sort modes are:
73
- * - `single`
74
- * - `multiple`
75
- */
76
- mode?: "single" | "multiple";
77
- /**
78
- * Enables the sort-sequence indicators for sorting multiple columns.
79
- */
80
- showIndexes?: boolean;
81
- }) | ({
82
- /**
83
- * Enables the removal of the column sorting.
84
- */
85
- allowUnsort?: boolean;
86
- /**
87
- * Determines the initial (from the unsorted to the sorted state) sort direction.
50
+ * The default value is 'none', meaning that clicking a column will add it to the sort order.
51
+ * Selecting a key modifier along with the click will remove sorting from all other columns.
88
52
  *
89
- * The available values for setting the initial sort direction are:
90
- * - `asc` (default)
91
- * - `desc`
92
- */
93
- initialDirection?: "desc" | "asc";
94
- } & {
95
- /**
96
- * The sort mode of the Grid.
53
+ * If the key is set to 'ctrl', 'shift' or 'alt', clicking a column will remove sorting from all other columns.
54
+ * The specified key must be pressed to add the column to the sort order instead.
97
55
  *
98
- * The available values for setting the sort modes are:
99
- * - `single`
100
- * - `multiple`
101
- */
102
- mode?: "single" | "multiple";
103
- /**
104
- * Enables the sort-sequence indicators for sorting multiple columns.
56
+ * > The `ctrl` value corresponds to the `Command` key in a macOS environment.
57
+ *
58
+ * @default 'none'
105
59
  */
106
- showIndexes?: boolean;
107
- }))[]) => any;
60
+ multiSortKey?: ModifierKey;
61
+ }
62
+ /**
63
+ * Defines the settings for sorting the Grid.
64
+ * Can be of type `boolean`, [SingleSortSettings]({% slug api_grid_singlesortsettings %}),
65
+ * or [MultipleSortSettings]({% slug api_grid_multiplesortsettings %}).
66
+ */
67
+ export declare type SortSettings = boolean | SingleSortSettings | MultipleSortSettings;
68
+ /**
69
+ * @hidden
70
+ */
71
+ export declare const normalize: (...settings: (boolean | ColumnSortSettings | SingleSortSettings | MultipleSortSettings)[]) => any;