@progress/kendo-angular-grid 6.0.2-dev.202201270915 → 6.0.3

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.
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-grid',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1643274250,
12
+ publishDate: 1644936604,
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
  };
@@ -574,7 +574,7 @@ HeaderComponent = tslib_1.__decorate([
574
574
  <ng-template [ngIf]="!column.headerTemplateRef">
575
575
  <span class="k-column-title">{{column.displayTitle}}</span>
576
576
  </ng-template>
577
- <span [attr.aria-label]="sortableLabel" [ngClass]="sortIcon(column.field)"></span>
577
+ <span role="note" [attr.aria-label]="sortableLabel" [ngClass]="sortIcon(column.field)"></span>
578
578
  <span *ngIf="showSortNumbering(column)" class="k-sort-order">{{sortOrder(column.field)}}</span>
579
579
  </span>
580
580
  <span role="status"
@@ -4,7 +4,7 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { Renderer2, ElementRef, OnDestroy, AfterContentChecked, OnChanges, EventEmitter, NgZone } from '@angular/core';
6
6
  import { SelectionService } from './selection.service';
7
- import { SelectAllCheckboxState } from "./types";
7
+ import { SelectAllCheckboxState } from './types';
8
8
  /**
9
9
  * Represents the select-all checkbox feature of the Grid ([see example]({% slug selection_grid %}#toc-select-all-feature)).
10
10
  */
@@ -6,7 +6,8 @@ import * as tslib_1 from "tslib";
6
6
  import { detectIE } from './../utils';
7
7
  import { Directive, HostBinding, Renderer2, ElementRef, Input, Output, EventEmitter, NgZone } from '@angular/core';
8
8
  import { SelectionService } from './selection.service';
9
- import { isPresent } from "../utils";
9
+ import { isPresent } from '../utils';
10
+ import { hasObservers } from '@progress/kendo-angular-common';
10
11
  /**
11
12
  * Represents the select-all checkbox feature of the Grid ([see example]({% slug selection_grid %}#toc-select-all-feature)).
12
13
  */
@@ -21,10 +22,10 @@ let SelectAllCheckboxDirective = class SelectAllCheckboxDirective {
21
22
  * ([see example]({% slug selection_grid %}#toc-select-all-feature)).
22
23
  */
23
24
  this.selectAllChange = new EventEmitter();
24
- this.type = "checkbox";
25
+ this.type = 'checkbox';
25
26
  this.stateSet = false;
26
27
  this.ngZone.runOutsideAngular(() => {
27
- this.destroyClick = this.renderer.listen(this.el.nativeElement, "click", this.onClick.bind(this));
28
+ this.destroyClick = this.renderer.listen(this.el.nativeElement, 'click', this.onClick.bind(this));
28
29
  });
29
30
  }
30
31
  ngAfterContentChecked() {
@@ -42,14 +43,20 @@ let SelectAllCheckboxDirective = class SelectAllCheckboxDirective {
42
43
  * @hidden
43
44
  */
44
45
  onClick() {
45
- // yields consistent cross-browser behavior when clicking an "indeterminate" checkbox
46
+ // yields consistent cross-browser behavior when clicking an indeterminate checkbox
46
47
  const undefinedCheckedStateInIE = detectIE() && this.selectionService.selectAllState === undefined;
47
48
  const isChecked = undefinedCheckedStateInIE ? true : this.el.nativeElement.checked;
48
49
  const options = this.selectionService.options;
49
- this.selectAllChange.emit(isChecked ? "checked" : "unchecked");
50
- if (options.enabled && options.mode === "multiple") {
50
+ const enabledAndMultiple = options.enabled && options.mode === 'multiple';
51
+ const shouldEmitSelectAll = hasObservers(this.selectAllChange);
52
+ if (enabledAndMultiple || shouldEmitSelectAll) {
51
53
  this.ngZone.run(() => {
52
- this.selectionService.updateAll(isChecked);
54
+ if (enabledAndMultiple) {
55
+ this.selectionService.updateAll(isChecked);
56
+ }
57
+ if (shouldEmitSelectAll) {
58
+ this.selectAllChange.emit(isChecked ? 'checked' : 'unchecked');
59
+ }
53
60
  });
54
61
  }
55
62
  }
@@ -59,17 +66,17 @@ let SelectAllCheckboxDirective = class SelectAllCheckboxDirective {
59
66
  setState() {
60
67
  const state = this.stateSet ? this.stateToBool() : this.selectionService.selectAllState;
61
68
  const elem = this.el.nativeElement;
62
- this.renderer.setProperty(elem, "indeterminate", !isPresent(state));
63
- this.renderer.setProperty(elem, "checked", isPresent(state) ? state : false);
69
+ this.renderer.setProperty(elem, 'indeterminate', !isPresent(state));
70
+ this.renderer.setProperty(elem, 'checked', isPresent(state) ? state : false);
64
71
  }
65
72
  /**
66
73
  * @hidden
67
74
  */
68
75
  stateToBool() {
69
76
  switch (this.state) {
70
- case "checked":
77
+ case 'checked':
71
78
  return true;
72
- case "unchecked":
79
+ case 'unchecked':
73
80
  return false;
74
81
  default:
75
82
  return undefined;
@@ -2831,7 +2831,7 @@ const packageMetadata = {
2831
2831
  name: '@progress/kendo-angular-grid',
2832
2832
  productName: 'Kendo UI for Angular',
2833
2833
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
2834
- publishDate: 1643274250,
2834
+ publishDate: 1644936604,
2835
2835
  version: '',
2836
2836
  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'
2837
2837
  };
@@ -16976,7 +16976,7 @@ HeaderComponent = __decorate([
16976
16976
  <ng-template [ngIf]="!column.headerTemplateRef">
16977
16977
  <span class="k-column-title">{{column.displayTitle}}</span>
16978
16978
  </ng-template>
16979
- <span [attr.aria-label]="sortableLabel" [ngClass]="sortIcon(column.field)"></span>
16979
+ <span role="note" [attr.aria-label]="sortableLabel" [ngClass]="sortIcon(column.field)"></span>
16980
16980
  <span *ngIf="showSortNumbering(column)" class="k-sort-order">{{sortOrder(column.field)}}</span>
16981
16981
  </span>
16982
16982
  <span role="status"
@@ -17329,10 +17329,10 @@ let SelectAllCheckboxDirective = class SelectAllCheckboxDirective {
17329
17329
  * ([see example]({% slug selection_grid %}#toc-select-all-feature)).
17330
17330
  */
17331
17331
  this.selectAllChange = new EventEmitter();
17332
- this.type = "checkbox";
17332
+ this.type = 'checkbox';
17333
17333
  this.stateSet = false;
17334
17334
  this.ngZone.runOutsideAngular(() => {
17335
- this.destroyClick = this.renderer.listen(this.el.nativeElement, "click", this.onClick.bind(this));
17335
+ this.destroyClick = this.renderer.listen(this.el.nativeElement, 'click', this.onClick.bind(this));
17336
17336
  });
17337
17337
  }
17338
17338
  ngAfterContentChecked() {
@@ -17350,14 +17350,20 @@ let SelectAllCheckboxDirective = class SelectAllCheckboxDirective {
17350
17350
  * @hidden
17351
17351
  */
17352
17352
  onClick() {
17353
- // yields consistent cross-browser behavior when clicking an "indeterminate" checkbox
17353
+ // yields consistent cross-browser behavior when clicking an indeterminate checkbox
17354
17354
  const undefinedCheckedStateInIE = detectIE() && this.selectionService.selectAllState === undefined;
17355
17355
  const isChecked = undefinedCheckedStateInIE ? true : this.el.nativeElement.checked;
17356
17356
  const options = this.selectionService.options;
17357
- this.selectAllChange.emit(isChecked ? "checked" : "unchecked");
17358
- if (options.enabled && options.mode === "multiple") {
17357
+ const enabledAndMultiple = options.enabled && options.mode === 'multiple';
17358
+ const shouldEmitSelectAll = hasObservers(this.selectAllChange);
17359
+ if (enabledAndMultiple || shouldEmitSelectAll) {
17359
17360
  this.ngZone.run(() => {
17360
- this.selectionService.updateAll(isChecked);
17361
+ if (enabledAndMultiple) {
17362
+ this.selectionService.updateAll(isChecked);
17363
+ }
17364
+ if (shouldEmitSelectAll) {
17365
+ this.selectAllChange.emit(isChecked ? 'checked' : 'unchecked');
17366
+ }
17361
17367
  });
17362
17368
  }
17363
17369
  }
@@ -17367,17 +17373,17 @@ let SelectAllCheckboxDirective = class SelectAllCheckboxDirective {
17367
17373
  setState() {
17368
17374
  const state$$1 = this.stateSet ? this.stateToBool() : this.selectionService.selectAllState;
17369
17375
  const elem = this.el.nativeElement;
17370
- this.renderer.setProperty(elem, "indeterminate", !isPresent(state$$1));
17371
- this.renderer.setProperty(elem, "checked", isPresent(state$$1) ? state$$1 : false);
17376
+ this.renderer.setProperty(elem, 'indeterminate', !isPresent(state$$1));
17377
+ this.renderer.setProperty(elem, 'checked', isPresent(state$$1) ? state$$1 : false);
17372
17378
  }
17373
17379
  /**
17374
17380
  * @hidden
17375
17381
  */
17376
17382
  stateToBool() {
17377
17383
  switch (this.state) {
17378
- case "checked":
17384
+ case 'checked':
17379
17385
  return true;
17380
- case "unchecked":
17386
+ case 'unchecked':
17381
17387
  return false;
17382
17388
  default:
17383
17389
  return undefined;
@@ -3044,7 +3044,7 @@ var packageMetadata = {
3044
3044
  name: '@progress/kendo-angular-grid',
3045
3045
  productName: 'Kendo UI for Angular',
3046
3046
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
3047
- publishDate: 1643274250,
3047
+ publishDate: 1644936604,
3048
3048
  version: '',
3049
3049
  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'
3050
3050
  };
@@ -17456,7 +17456,7 @@ var HeaderComponent = /** @class */ (function () {
17456
17456
  Component({
17457
17457
  selector: '[kendoGridHeader]',
17458
17458
  styles: ["\n .k-column-resizer {\n cursor: col-resize;\n display: block;\n height: 1000%;\n position: absolute;\n top: 0;\n width: .5em;\n }\n "],
17459
- template: "\n <ng-template [ngIf]=\"true\">\n <tr *ngFor=\"let i of columnLevels; let levelIndex = index\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"levelIndex\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <th\n class=\"k-group-cell k-header\"\n role=\"presentation\"\n *ngFor=\"let g of groups\">\n </th>\n <th class=\"k-hierarchy-cell k-header\"\n role=\"presentation\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </th>\n <ng-template ngFor let-column [ngForOf]=\"columnsForLevel(levelIndex)\" [ngForTrackBy]=\"trackByIndex\" let-columnIndex=\"index\" let-last=\"last\">\n <th *ngIf=\"!isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [headerLabelText]=\"column.title || column.field\"\n [colSpan]=\"column.colspan\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n role=\"columnheader\"\n aria-selected=\"false\"\n [attr.aria-sort]=\"sortState(column)\"\n (keydown)=\"onHeaderKeydown(column, $event)\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n field: column.field,\n type: 'column',\n column: column,\n hint: column.title || column.field,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-filterable]=\"(showFilterMenu && isFilterable(column)) || showColumnMenu(column)\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-grid-header-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.sticky ? addStickyStyles(column) : column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n\n <ng-template [ngIf]=\"!isSortable(column)\">\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"isSortable(column)\">\n <span class=\"k-cell-inner\">\n <span #link class=\"k-link\" (click)=\"onSortClick(column, $event, link)\">\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">\n <span class=\"k-column-title\">{{column.displayTitle}}</span>\n </ng-template>\n <span [attr.aria-label]=\"sortableLabel\" [ngClass]=\"sortIcon(column.field)\"></span>\n <span *ngIf=\"showSortNumbering(column)\" class=\"k-sort-order\">{{sortOrder(column.field)}}</span>\n </span>\n <span role=\"status\"\n class=\"k-sort-status\"\n style=\"position: absolute; left: -10000px;\"\n [innerHtml]=\"sortStatus(column)\">\n </span>\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n </span>\n </ng-template>\n\n <ng-template [ngIf]=\"isCheckboxColumn(column) && !column.headerTemplateRef && column.showSelectAll\">\n <input\n class=\"k-checkbox k-checkbox-md k-rounded-md\"\n [attr.id]=\"selectAllCheckboxId()\"\n [attr.aria-label]=\"selectAllCheckboxLabel\"\n kendoGridSelectAllCheckbox\n kendoGridFocusable>\n </ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n <th *ngIf=\"isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n [colSpan]=\"column.colspan\"\n [headerLabelText]=\"column.title || column.field\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n type: 'columnGroup',\n column: column,\n hint: column.title,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-filterable]=\"showColumnMenu(column)\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: lockedColumnsCount + columnIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n </ng-template>\n </tr>\n <tr *ngIf=\"showFilterRow\"\n kendoGridFilterRow\n [columns]=\"leafColumns\"\n [filter]=\"filter\"\n [groups]=\"groups\"\n [detailTemplate]=\"detailTemplate\"\n [lockedColumnsCount]=\"lockedColumnsCount\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"totalColumnLevels + 1\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n ></tr>\n </ng-template>\n "
17459
+ template: "\n <ng-template [ngIf]=\"true\">\n <tr *ngFor=\"let i of columnLevels; let levelIndex = index\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"levelIndex\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <th\n class=\"k-group-cell k-header\"\n role=\"presentation\"\n *ngFor=\"let g of groups\">\n </th>\n <th class=\"k-hierarchy-cell k-header\"\n role=\"presentation\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </th>\n <ng-template ngFor let-column [ngForOf]=\"columnsForLevel(levelIndex)\" [ngForTrackBy]=\"trackByIndex\" let-columnIndex=\"index\" let-last=\"last\">\n <th *ngIf=\"!isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [headerLabelText]=\"column.title || column.field\"\n [colSpan]=\"column.colspan\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n role=\"columnheader\"\n aria-selected=\"false\"\n [attr.aria-sort]=\"sortState(column)\"\n (keydown)=\"onHeaderKeydown(column, $event)\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n field: column.field,\n type: 'column',\n column: column,\n hint: column.title || column.field,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-filterable]=\"(showFilterMenu && isFilterable(column)) || showColumnMenu(column)\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-grid-header-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.sticky ? addStickyStyles(column) : column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n\n <ng-template [ngIf]=\"!isSortable(column)\">\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"isSortable(column)\">\n <span class=\"k-cell-inner\">\n <span #link class=\"k-link\" (click)=\"onSortClick(column, $event, link)\">\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">\n <span class=\"k-column-title\">{{column.displayTitle}}</span>\n </ng-template>\n <span role=\"note\" [attr.aria-label]=\"sortableLabel\" [ngClass]=\"sortIcon(column.field)\"></span>\n <span *ngIf=\"showSortNumbering(column)\" class=\"k-sort-order\">{{sortOrder(column.field)}}</span>\n </span>\n <span role=\"status\"\n class=\"k-sort-status\"\n style=\"position: absolute; left: -10000px;\"\n [innerHtml]=\"sortStatus(column)\">\n </span>\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n </span>\n </ng-template>\n\n <ng-template [ngIf]=\"isCheckboxColumn(column) && !column.headerTemplateRef && column.showSelectAll\">\n <input\n class=\"k-checkbox k-checkbox-md k-rounded-md\"\n [attr.id]=\"selectAllCheckboxId()\"\n [attr.aria-label]=\"selectAllCheckboxLabel\"\n kendoGridSelectAllCheckbox\n kendoGridFocusable>\n </ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n <th *ngIf=\"isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n [colSpan]=\"column.colspan\"\n [headerLabelText]=\"column.title || column.field\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n type: 'columnGroup',\n column: column,\n hint: column.title,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-filterable]=\"showColumnMenu(column)\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: lockedColumnsCount + columnIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n </ng-template>\n </tr>\n <tr *ngIf=\"showFilterRow\"\n kendoGridFilterRow\n [columns]=\"leafColumns\"\n [filter]=\"filter\"\n [groups]=\"groups\"\n [detailTemplate]=\"detailTemplate\"\n [lockedColumnsCount]=\"lockedColumnsCount\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"totalColumnLevels + 1\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n ></tr>\n </ng-template>\n "
17460
17460
  }),
17461
17461
  __metadata("design:paramtypes", [SinglePopupService,
17462
17462
  DragHintService,
@@ -17736,10 +17736,10 @@ var SelectAllCheckboxDirective = /** @class */ (function () {
17736
17736
  * ([see example]({% slug selection_grid %}#toc-select-all-feature)).
17737
17737
  */
17738
17738
  this.selectAllChange = new EventEmitter();
17739
- this.type = "checkbox";
17739
+ this.type = 'checkbox';
17740
17740
  this.stateSet = false;
17741
17741
  this.ngZone.runOutsideAngular(function () {
17742
- _this.destroyClick = _this.renderer.listen(_this.el.nativeElement, "click", _this.onClick.bind(_this));
17742
+ _this.destroyClick = _this.renderer.listen(_this.el.nativeElement, 'click', _this.onClick.bind(_this));
17743
17743
  });
17744
17744
  }
17745
17745
  SelectAllCheckboxDirective.prototype.ngAfterContentChecked = function () {
@@ -17758,14 +17758,20 @@ var SelectAllCheckboxDirective = /** @class */ (function () {
17758
17758
  */
17759
17759
  SelectAllCheckboxDirective.prototype.onClick = function () {
17760
17760
  var _this = this;
17761
- // yields consistent cross-browser behavior when clicking an "indeterminate" checkbox
17761
+ // yields consistent cross-browser behavior when clicking an indeterminate checkbox
17762
17762
  var undefinedCheckedStateInIE = detectIE() && this.selectionService.selectAllState === undefined;
17763
17763
  var isChecked = undefinedCheckedStateInIE ? true : this.el.nativeElement.checked;
17764
17764
  var options = this.selectionService.options;
17765
- this.selectAllChange.emit(isChecked ? "checked" : "unchecked");
17766
- if (options.enabled && options.mode === "multiple") {
17765
+ var enabledAndMultiple = options.enabled && options.mode === 'multiple';
17766
+ var shouldEmitSelectAll = hasObservers(this.selectAllChange);
17767
+ if (enabledAndMultiple || shouldEmitSelectAll) {
17767
17768
  this.ngZone.run(function () {
17768
- _this.selectionService.updateAll(isChecked);
17769
+ if (enabledAndMultiple) {
17770
+ _this.selectionService.updateAll(isChecked);
17771
+ }
17772
+ if (shouldEmitSelectAll) {
17773
+ _this.selectAllChange.emit(isChecked ? 'checked' : 'unchecked');
17774
+ }
17769
17775
  });
17770
17776
  }
17771
17777
  };
@@ -17775,17 +17781,17 @@ var SelectAllCheckboxDirective = /** @class */ (function () {
17775
17781
  SelectAllCheckboxDirective.prototype.setState = function () {
17776
17782
  var state$$1 = this.stateSet ? this.stateToBool() : this.selectionService.selectAllState;
17777
17783
  var elem = this.el.nativeElement;
17778
- this.renderer.setProperty(elem, "indeterminate", !isPresent(state$$1));
17779
- this.renderer.setProperty(elem, "checked", isPresent(state$$1) ? state$$1 : false);
17784
+ this.renderer.setProperty(elem, 'indeterminate', !isPresent(state$$1));
17785
+ this.renderer.setProperty(elem, 'checked', isPresent(state$$1) ? state$$1 : false);
17780
17786
  };
17781
17787
  /**
17782
17788
  * @hidden
17783
17789
  */
17784
17790
  SelectAllCheckboxDirective.prototype.stateToBool = function () {
17785
17791
  switch (this.state) {
17786
- case "checked":
17792
+ case 'checked':
17787
17793
  return true;
17788
- case "unchecked":
17794
+ case 'unchecked':
17789
17795
  return false;
17790
17796
  default:
17791
17797
  return undefined;
@@ -11,7 +11,7 @@ exports.packageMetadata = {
11
11
  name: '@progress/kendo-angular-grid',
12
12
  productName: 'Kendo UI for Angular',
13
13
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
14
- publishDate: 1643274250,
14
+ publishDate: 1644936604,
15
15
  version: '',
16
16
  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'
17
17
  };
@@ -565,7 +565,7 @@ var HeaderComponent = /** @class */ (function () {
565
565
  core_1.Component({
566
566
  selector: '[kendoGridHeader]',
567
567
  styles: ["\n .k-column-resizer {\n cursor: col-resize;\n display: block;\n height: 1000%;\n position: absolute;\n top: 0;\n width: .5em;\n }\n "],
568
- template: "\n <ng-template [ngIf]=\"true\">\n <tr *ngFor=\"let i of columnLevels; let levelIndex = index\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"levelIndex\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <th\n class=\"k-group-cell k-header\"\n role=\"presentation\"\n *ngFor=\"let g of groups\">\n </th>\n <th class=\"k-hierarchy-cell k-header\"\n role=\"presentation\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </th>\n <ng-template ngFor let-column [ngForOf]=\"columnsForLevel(levelIndex)\" [ngForTrackBy]=\"trackByIndex\" let-columnIndex=\"index\" let-last=\"last\">\n <th *ngIf=\"!isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [headerLabelText]=\"column.title || column.field\"\n [colSpan]=\"column.colspan\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n role=\"columnheader\"\n aria-selected=\"false\"\n [attr.aria-sort]=\"sortState(column)\"\n (keydown)=\"onHeaderKeydown(column, $event)\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n field: column.field,\n type: 'column',\n column: column,\n hint: column.title || column.field,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-filterable]=\"(showFilterMenu && isFilterable(column)) || showColumnMenu(column)\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-grid-header-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.sticky ? addStickyStyles(column) : column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n\n <ng-template [ngIf]=\"!isSortable(column)\">\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"isSortable(column)\">\n <span class=\"k-cell-inner\">\n <span #link class=\"k-link\" (click)=\"onSortClick(column, $event, link)\">\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">\n <span class=\"k-column-title\">{{column.displayTitle}}</span>\n </ng-template>\n <span [attr.aria-label]=\"sortableLabel\" [ngClass]=\"sortIcon(column.field)\"></span>\n <span *ngIf=\"showSortNumbering(column)\" class=\"k-sort-order\">{{sortOrder(column.field)}}</span>\n </span>\n <span role=\"status\"\n class=\"k-sort-status\"\n style=\"position: absolute; left: -10000px;\"\n [innerHtml]=\"sortStatus(column)\">\n </span>\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n </span>\n </ng-template>\n\n <ng-template [ngIf]=\"isCheckboxColumn(column) && !column.headerTemplateRef && column.showSelectAll\">\n <input\n class=\"k-checkbox k-checkbox-md k-rounded-md\"\n [attr.id]=\"selectAllCheckboxId()\"\n [attr.aria-label]=\"selectAllCheckboxLabel\"\n kendoGridSelectAllCheckbox\n kendoGridFocusable>\n </ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n <th *ngIf=\"isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n [colSpan]=\"column.colspan\"\n [headerLabelText]=\"column.title || column.field\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n type: 'columnGroup',\n column: column,\n hint: column.title,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-filterable]=\"showColumnMenu(column)\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: lockedColumnsCount + columnIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n </ng-template>\n </tr>\n <tr *ngIf=\"showFilterRow\"\n kendoGridFilterRow\n [columns]=\"leafColumns\"\n [filter]=\"filter\"\n [groups]=\"groups\"\n [detailTemplate]=\"detailTemplate\"\n [lockedColumnsCount]=\"lockedColumnsCount\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"totalColumnLevels + 1\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n ></tr>\n </ng-template>\n "
568
+ template: "\n <ng-template [ngIf]=\"true\">\n <tr *ngFor=\"let i of columnLevels; let levelIndex = index\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"levelIndex\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n <th\n class=\"k-group-cell k-header\"\n role=\"presentation\"\n *ngFor=\"let g of groups\">\n </th>\n <th class=\"k-hierarchy-cell k-header\"\n role=\"presentation\"\n *ngIf=\"detailTemplate?.templateRef\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"0\"\n aria-selected=\"false\"\n >\n </th>\n <ng-template ngFor let-column [ngForOf]=\"columnsForLevel(levelIndex)\" [ngForTrackBy]=\"trackByIndex\" let-columnIndex=\"index\" let-last=\"last\">\n <th *ngIf=\"!isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [headerLabelText]=\"column.title || column.field\"\n [colSpan]=\"column.colspan\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n role=\"columnheader\"\n aria-selected=\"false\"\n [attr.aria-sort]=\"sortState(column)\"\n (keydown)=\"onHeaderKeydown(column, $event)\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n field: column.field,\n type: 'column',\n column: column,\n hint: column.title || column.field,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-filterable]=\"(showFilterMenu && isFilterable(column)) || showColumnMenu(column)\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-grid-header-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.sticky ? addStickyStyles(column) : column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n\n <ng-template [ngIf]=\"!isSortable(column)\">\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"isSortable(column)\">\n <span class=\"k-cell-inner\">\n <span #link class=\"k-link\" (click)=\"onSortClick(column, $event, link)\">\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: column.leafIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">\n <span class=\"k-column-title\">{{column.displayTitle}}</span>\n </ng-template>\n <span role=\"note\" [attr.aria-label]=\"sortableLabel\" [ngClass]=\"sortIcon(column.field)\"></span>\n <span *ngIf=\"showSortNumbering(column)\" class=\"k-sort-order\">{{sortOrder(column.field)}}</span>\n </span>\n <span role=\"status\"\n class=\"k-sort-status\"\n style=\"position: absolute; left: -10000px;\"\n [innerHtml]=\"sortStatus(column)\">\n </span>\n <kendo-grid-filter-menu\n *ngIf=\"showFilterMenu && isFilterable(column)\"\n [column]=\"column\"\n [filter]=\"filter\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-filter-menu>\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\"\n [sort]=\"sort\"\n [filter]=\"filter\"\n [sortable]=\"sortable\"\n [tabIndex]=\"tabIndex\">\n </kendo-grid-column-menu>\n </span>\n </ng-template>\n\n <ng-template [ngIf]=\"isCheckboxColumn(column) && !column.headerTemplateRef && column.showSelectAll\">\n <input\n class=\"k-checkbox k-checkbox-md k-rounded-md\"\n [attr.id]=\"selectAllCheckboxId()\"\n [attr.aria-label]=\"selectAllCheckboxLabel\"\n kendoGridSelectAllCheckbox\n kendoGridFocusable>\n </ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n <th *ngIf=\"isColumnGroupComponent(column)\"\n kendoGridLogicalCell\n [logicalRowIndex]=\"levelIndex\"\n [logicalColIndex]=\"logicalColumnIndex(column)\"\n [rowSpan]=\"column.rowspan(totalColumnLevels)\"\n [colSpan]=\"column.colspan\"\n [headerLabelText]=\"column.title || column.field\"\n kendoDropTarget\n kendoDraggable\n kendoDraggableColumn\n [enableDrag]=\"shouldActivate(column)\"\n [context]=\"{\n type: 'columnGroup',\n column: column,\n hint: column.title,\n lastColumn: last && columnIndex === 0\n }\"\n class=\"k-header\"\n [class.k-first]=\"isFirstOnRow(column, columnIndex)\"\n [class.k-filterable]=\"showColumnMenu(column)\"\n [class.k-grid-content-sticky]=\"column.sticky\"\n [ngClass]=\"column.headerClass\"\n [ngStyle]=\"column.headerStyle\"\n [attr.rowspan]=\"column.rowspan(totalColumnLevels)\"\n [attr.colspan]=\"column.colspan\">\n <kendo-grid-column-menu *ngIf=\"showColumnMenu(column)\"\n [standalone]=\"false\"\n [settings]=\"columnMenu\"\n [column]=\"column\"\n [columnMenuTemplate]=\"columnMenuTemplate\">\n </kendo-grid-column-menu>\n <ng-template\n [templateContext]=\"{\n templateRef: column.headerTemplateRef,\n columnIndex: lockedColumnsCount + columnIndex,\n column: column,\n $implicit: column\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!column.headerTemplateRef\">{{column.displayTitle}}</ng-template>\n <span kendoGridColumnHandle\n kendoDraggable\n class=\"k-column-resizer\"\n *ngIf=\"resizable\"\n [column]=\"column\"\n [columns]=\"columns\">\n </span>\n </th>\n </ng-template>\n </tr>\n <tr *ngIf=\"showFilterRow\"\n kendoGridFilterRow\n [columns]=\"leafColumns\"\n [filter]=\"filter\"\n [groups]=\"groups\"\n [detailTemplate]=\"detailTemplate\"\n [lockedColumnsCount]=\"lockedColumnsCount\"\n kendoGridLogicalRow\n [logicalRowIndex]=\"totalColumnLevels + 1\"\n [logicalSlaveRow]=\"lockedColumnsCount > 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n ></tr>\n </ng-template>\n "
569
569
  }),
570
570
  tslib_1.__metadata("design:paramtypes", [single_popup_service_1.SinglePopupService,
571
571
  drag_hint_service_1.DragHintService,
@@ -9,6 +9,7 @@ var utils_1 = require("./../utils");
9
9
  var core_1 = require("@angular/core");
10
10
  var selection_service_1 = require("./selection.service");
11
11
  var utils_2 = require("../utils");
12
+ var kendo_angular_common_1 = require("@progress/kendo-angular-common");
12
13
  /**
13
14
  * Represents the select-all checkbox feature of the Grid ([see example]({% slug selection_grid %}#toc-select-all-feature)).
14
15
  */
@@ -24,10 +25,10 @@ var SelectAllCheckboxDirective = /** @class */ (function () {
24
25
  * ([see example]({% slug selection_grid %}#toc-select-all-feature)).
25
26
  */
26
27
  this.selectAllChange = new core_1.EventEmitter();
27
- this.type = "checkbox";
28
+ this.type = 'checkbox';
28
29
  this.stateSet = false;
29
30
  this.ngZone.runOutsideAngular(function () {
30
- _this.destroyClick = _this.renderer.listen(_this.el.nativeElement, "click", _this.onClick.bind(_this));
31
+ _this.destroyClick = _this.renderer.listen(_this.el.nativeElement, 'click', _this.onClick.bind(_this));
31
32
  });
32
33
  }
33
34
  SelectAllCheckboxDirective.prototype.ngAfterContentChecked = function () {
@@ -46,14 +47,20 @@ var SelectAllCheckboxDirective = /** @class */ (function () {
46
47
  */
47
48
  SelectAllCheckboxDirective.prototype.onClick = function () {
48
49
  var _this = this;
49
- // yields consistent cross-browser behavior when clicking an "indeterminate" checkbox
50
+ // yields consistent cross-browser behavior when clicking an indeterminate checkbox
50
51
  var undefinedCheckedStateInIE = utils_1.detectIE() && this.selectionService.selectAllState === undefined;
51
52
  var isChecked = undefinedCheckedStateInIE ? true : this.el.nativeElement.checked;
52
53
  var options = this.selectionService.options;
53
- this.selectAllChange.emit(isChecked ? "checked" : "unchecked");
54
- if (options.enabled && options.mode === "multiple") {
54
+ var enabledAndMultiple = options.enabled && options.mode === 'multiple';
55
+ var shouldEmitSelectAll = kendo_angular_common_1.hasObservers(this.selectAllChange);
56
+ if (enabledAndMultiple || shouldEmitSelectAll) {
55
57
  this.ngZone.run(function () {
56
- _this.selectionService.updateAll(isChecked);
58
+ if (enabledAndMultiple) {
59
+ _this.selectionService.updateAll(isChecked);
60
+ }
61
+ if (shouldEmitSelectAll) {
62
+ _this.selectAllChange.emit(isChecked ? 'checked' : 'unchecked');
63
+ }
57
64
  });
58
65
  }
59
66
  };
@@ -63,17 +70,17 @@ var SelectAllCheckboxDirective = /** @class */ (function () {
63
70
  SelectAllCheckboxDirective.prototype.setState = function () {
64
71
  var state = this.stateSet ? this.stateToBool() : this.selectionService.selectAllState;
65
72
  var elem = this.el.nativeElement;
66
- this.renderer.setProperty(elem, "indeterminate", !utils_2.isPresent(state));
67
- this.renderer.setProperty(elem, "checked", utils_2.isPresent(state) ? state : false);
73
+ this.renderer.setProperty(elem, 'indeterminate', !utils_2.isPresent(state));
74
+ this.renderer.setProperty(elem, 'checked', utils_2.isPresent(state) ? state : false);
68
75
  };
69
76
  /**
70
77
  * @hidden
71
78
  */
72
79
  SelectAllCheckboxDirective.prototype.stateToBool = function () {
73
80
  switch (this.state) {
74
- case "checked":
81
+ case 'checked':
75
82
  return true;
76
- case "unchecked":
83
+ case 'unchecked':
77
84
  return false;
78
85
  default:
79
86
  return undefined;