@progress/kendo-angular-grid 5.5.2-dev.202201041402 → 6.0.0

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 (90) hide show
  1. package/LICENSE.md +1 -1
  2. package/NOTICE.txt +119 -79
  3. package/README.md +1 -1
  4. package/dist/cdn/js/kendo-angular-grid.js +2 -2
  5. package/dist/cdn/main.js +1 -1
  6. package/dist/es/column-menu/column-chooser.component.js +1 -1
  7. package/dist/es/column-menu/column-list.component.js +1 -1
  8. package/dist/es/dragdrop/draggable-column.directive.js +3 -3
  9. package/dist/es/filtering/cell/filter-cell-operators.component.js +1 -1
  10. package/dist/es/filtering/cell/string-filter-cell.component.js +1 -1
  11. package/dist/es/filtering/filter-input.directive.js +2 -1
  12. package/dist/es/filtering/menu/boolean-filter-menu.component.js +1 -1
  13. package/dist/es/filtering/menu/filter-menu-container.component.js +1 -1
  14. package/dist/es/filtering/menu/string-filter-menu-input.component.js +1 -1
  15. package/dist/es/grid.component.js +4 -5
  16. package/dist/es/grouping/group-indicator.component.js +1 -1
  17. package/dist/es/navigation/focusable.directive.js +5 -5
  18. package/dist/es/package-metadata.js +1 -1
  19. package/dist/es/pager/pager-numeric-buttons.component.js +1 -1
  20. package/dist/es/pager/pager.component.js +0 -5
  21. package/dist/es/pdf/export-element.js +1 -1
  22. package/dist/es/rendering/cell.component.js +1 -1
  23. package/dist/es/rendering/constants.js +1 -1
  24. package/dist/es/rendering/details-expand.directive.js +20 -6
  25. package/dist/es/rendering/header/header.component.js +1 -1
  26. package/dist/es/rendering/toolbar/toolbar-template.directive.js +4 -4
  27. package/dist/es/selection/pair-set.js +91 -0
  28. package/dist/es/selection/selection-default.js +48 -30
  29. package/dist/es/utils.js +1 -3
  30. package/dist/es2015/column-menu/column-chooser.component.js +2 -2
  31. package/dist/es2015/column-menu/column-list.component.js +3 -3
  32. package/dist/es2015/dragdrop/draggable-column.directive.js +3 -3
  33. package/dist/es2015/filtering/cell/filter-cell-operators.component.js +3 -3
  34. package/dist/es2015/filtering/cell/string-filter-cell.component.js +1 -1
  35. package/dist/es2015/filtering/filter-input.directive.js +2 -1
  36. package/dist/es2015/filtering/menu/boolean-filter-menu.component.js +1 -1
  37. package/dist/es2015/filtering/menu/filter-menu-container.component.js +2 -2
  38. package/dist/es2015/filtering/menu/string-filter-menu-input.component.js +1 -1
  39. package/dist/es2015/grid.component.d.ts +4 -4
  40. package/dist/es2015/grid.component.js +4 -5
  41. package/dist/es2015/grouping/group-indicator.component.js +2 -2
  42. package/dist/es2015/index.metadata.json +1 -1
  43. package/dist/es2015/navigation/focusable.directive.d.ts +5 -5
  44. package/dist/es2015/navigation/focusable.directive.js +5 -5
  45. package/dist/es2015/package-metadata.js +1 -1
  46. package/dist/es2015/pager/pager-numeric-buttons.component.js +1 -1
  47. package/dist/es2015/pager/pager.component.d.ts +0 -1
  48. package/dist/es2015/pager/pager.component.js +0 -5
  49. package/dist/es2015/pdf/export-element.js +1 -1
  50. package/dist/es2015/rendering/cell.component.js +3 -3
  51. package/dist/es2015/rendering/constants.d.ts +1 -1
  52. package/dist/es2015/rendering/constants.js +1 -1
  53. package/dist/es2015/rendering/details-expand.directive.d.ts +8 -2
  54. package/dist/es2015/rendering/details-expand.directive.js +20 -6
  55. package/dist/es2015/rendering/header/header.component.js +1 -1
  56. package/dist/es2015/rendering/toolbar/toolbar-template.directive.d.ts +4 -4
  57. package/dist/es2015/rendering/toolbar/toolbar-template.directive.js +4 -4
  58. package/dist/es2015/selection/pair-set.d.ts +50 -0
  59. package/dist/es2015/selection/pair-set.js +81 -0
  60. package/dist/es2015/selection/selection-default.d.ts +10 -2
  61. package/dist/es2015/selection/selection-default.js +42 -28
  62. package/dist/es2015/utils.d.ts +2 -2
  63. package/dist/fesm2015/index.js +179 -78
  64. package/dist/fesm5/index.js +186 -74
  65. package/dist/npm/column-menu/column-chooser.component.js +1 -1
  66. package/dist/npm/column-menu/column-list.component.js +1 -1
  67. package/dist/npm/dragdrop/draggable-column.directive.js +3 -3
  68. package/dist/npm/filtering/cell/filter-cell-operators.component.js +1 -1
  69. package/dist/npm/filtering/cell/string-filter-cell.component.js +1 -1
  70. package/dist/npm/filtering/filter-input.directive.js +2 -1
  71. package/dist/npm/filtering/menu/boolean-filter-menu.component.js +1 -1
  72. package/dist/npm/filtering/menu/filter-menu-container.component.js +1 -1
  73. package/dist/npm/filtering/menu/string-filter-menu-input.component.js +1 -1
  74. package/dist/npm/grid.component.js +4 -5
  75. package/dist/npm/grouping/group-indicator.component.js +1 -1
  76. package/dist/npm/navigation/focusable.directive.js +5 -5
  77. package/dist/npm/package-metadata.js +1 -1
  78. package/dist/npm/pager/pager-numeric-buttons.component.js +1 -1
  79. package/dist/npm/pager/pager.component.js +0 -5
  80. package/dist/npm/pdf/export-element.js +1 -1
  81. package/dist/npm/rendering/cell.component.js +1 -1
  82. package/dist/npm/rendering/constants.js +1 -1
  83. package/dist/npm/rendering/details-expand.directive.js +19 -5
  84. package/dist/npm/rendering/header/header.component.js +1 -1
  85. package/dist/npm/rendering/toolbar/toolbar-template.directive.js +4 -4
  86. package/dist/npm/selection/pair-set.js +93 -0
  87. package/dist/npm/selection/selection-default.js +48 -30
  88. package/dist/npm/utils.js +1 -3
  89. package/dist/systemjs/kendo-angular-grid.js +1 -1
  90. package/package.json +14 -14
@@ -3,9 +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
- /* tslint:disable:no-input-rename */
7
6
  import { Input, EventEmitter, Output } from '@angular/core';
8
7
  import { isPresent } from "../utils";
8
+ import { PairSet } from './pair-set';
9
9
  /**
10
10
  * @hidden
11
11
  */
@@ -21,20 +21,33 @@ var Selection = /** @class */ (function () {
21
21
  * Fires when the `selectedKeys` collection has been updated.
22
22
  */
23
23
  this.selectedKeysChange = new EventEmitter();
24
+ this.rowSelectionState = new Set();
25
+ this.cellSelectionState = new PairSet();
24
26
  this.init();
25
27
  }
28
+ Object.defineProperty(Selection.prototype, "isCellSelectionMode", {
29
+ get: function () {
30
+ return isPresent(this.grid.selectable) && this.grid.selectable['cell'];
31
+ },
32
+ enumerable: true,
33
+ configurable: true
34
+ });
35
+ Selection.prototype.ngOnChanges = function (changes) {
36
+ // skip reinitialization if the user data is the same as the last state change
37
+ if (isPresent(changes.selectedKeys) && this.lastSelectionState !== this.selectedKeys) {
38
+ this.setState(this.selectedKeys);
39
+ }
40
+ };
26
41
  Selection.prototype.init = function () {
27
42
  var _this = this;
28
43
  if (!isPresent(this.grid.rowSelected)) {
29
- this.grid.rowSelected = function (row) {
30
- return _this.selectedKeys.indexOf(_this.getItemKey(row)) >= 0;
31
- };
44
+ this.grid.rowSelected = function (row) { return _this.rowSelectionState.has(_this.getItemKey(row)); };
32
45
  }
33
46
  if (!isPresent(this.grid.cellSelected)) {
34
47
  this.grid.cellSelected = function (row, column, colIndex) {
35
48
  var contender = _this.getSelectionItem(row, column, colIndex);
36
49
  return {
37
- selected: _this.selectedKeys.some(function (item) { return item.columnKey === contender.columnKey && item.itemKey === contender.itemKey; }),
50
+ selected: _this.cellSelectionState.has(contender.itemKey, contender.columnKey),
38
51
  item: contender
39
52
  };
40
53
  };
@@ -53,7 +66,8 @@ var Selection = /** @class */ (function () {
53
66
  * @hidden
54
67
  */
55
68
  Selection.prototype.reset = function () {
56
- this.selectedKeys = [];
69
+ this.rowSelectionState.clear();
70
+ this.cellSelectionState.clear();
57
71
  };
58
72
  Selection.prototype.getItemKey = function (row) {
59
73
  if (this.selectionKey) {
@@ -90,45 +104,49 @@ var Selection = /** @class */ (function () {
90
104
  if (selection.selectedRows) {
91
105
  selection.deselectedRows.forEach(function (item) {
92
106
  var itemKey = _this.getItemKey(item);
93
- var itemIndex = _this.selectedKeys.indexOf(itemKey);
94
- if (itemIndex >= 0) {
95
- _this.selectedKeys.splice(itemIndex, 1);
96
- }
107
+ _this.rowSelectionState.delete(itemKey);
97
108
  });
98
- if (this.grid.selectableSettings.mode === "single" && this.selectedKeys.length > 0) {
109
+ if (this.grid.selectableSettings.mode === "single" && this.rowSelectionState.size > 0) {
99
110
  this.reset();
100
111
  }
101
112
  selection.selectedRows.forEach(function (item) {
102
113
  var itemKey = _this.getItemKey(item);
103
- if (_this.selectedKeys.indexOf(itemKey) < 0) {
104
- _this.selectedKeys.push(itemKey);
105
- }
114
+ _this.rowSelectionState.add(itemKey);
106
115
  });
107
116
  }
108
117
  else {
109
- selection.deselectedCells.forEach(function (item) {
110
- var itemIndex = _this.getCellSelectionItemIndex(item);
111
- if (itemIndex >= 0) {
112
- _this.selectedKeys.splice(itemIndex, 1);
113
- }
118
+ selection.deselectedCells.forEach(function (_a) {
119
+ var itemKey = _a.itemKey, columnKey = _a.columnKey;
120
+ _this.cellSelectionState.delete(itemKey, columnKey);
114
121
  });
115
- if (this.grid.selectableSettings.mode === "single" && this.selectedKeys.length > 0) {
122
+ if (this.grid.selectableSettings.mode === "single" && this.cellSelectionState.size > 0) {
116
123
  this.reset();
117
124
  }
118
- selection.selectedCells.forEach(function (item) {
119
- var itemIndex = _this.getCellSelectionItemIndex(item);
120
- if (itemIndex < 0) {
121
- _this.selectedKeys.push(item);
122
- }
125
+ selection.selectedCells.forEach(function (_a) {
126
+ var itemKey = _a.itemKey, columnKey = _a.columnKey;
127
+ _this.cellSelectionState.add(itemKey, columnKey);
123
128
  });
124
129
  }
125
130
  this.cd.markForCheck();
126
- this.selectedKeysChange.emit(this.selectedKeys);
131
+ this.notifyChange();
132
+ };
133
+ Selection.prototype.notifyChange = function () {
134
+ this.lastSelectionState = this.stateToArray();
135
+ this.selectedKeysChange.emit(this.lastSelectionState);
136
+ };
137
+ Selection.prototype.setState = function (selectedKeys) {
138
+ this.reset();
139
+ if (this.isCellSelectionMode) {
140
+ this.cellSelectionState = new PairSet(selectedKeys, 'itemKey', 'columnKey');
141
+ }
142
+ else {
143
+ this.rowSelectionState = new Set(selectedKeys);
144
+ }
127
145
  };
128
- Selection.prototype.getCellSelectionItemIndex = function (item) {
129
- return this.selectedKeys.findIndex(function (selectedItem) {
130
- return selectedItem.itemKey === item.itemKey && selectedItem.columnKey === item.columnKey;
131
- });
146
+ Selection.prototype.stateToArray = function () {
147
+ return this.isCellSelectionMode ?
148
+ this.cellSelectionState.toArray('itemKey', 'columnKey') :
149
+ Array.from(this.rowSelectionState);
132
150
  };
133
151
  tslib_1.__decorate([
134
152
  Input(),
package/dist/es/utils.js CHANGED
@@ -40,9 +40,7 @@ export var isUniversal = function () { return typeof document === 'undefined'; }
40
40
  /**
41
41
  * @hidden
42
42
  */
43
- export var isString = function (value) {
44
- return typeof value === 'string';
45
- };
43
+ export var isString = function (value) { return typeof value === 'string'; };
46
44
  /**
47
45
  * @hidden
48
46
  */
@@ -129,9 +129,9 @@ ColumnChooserComponent = tslib_1.__decorate([
129
129
  <button #anchor
130
130
  type="button"
131
131
  (click)="toggle(anchor, template)"
132
- class="k-button k-bare k-button-icon"
132
+ class="k-button k-button-flat-base k-button-flat k-icon-button k-button-md k-rounded-md k-button-rectangle k-icon-button"
133
133
  [attr.title]="localization.get('columns')">
134
- <span class="k-icon k-i-columns"></span>
134
+ <span class="k-button-icon k-icon k-i-columns"></span>
135
135
  </button>
136
136
  <ng-template #template>
137
137
  <span class='k-column-chooser-title'>{{ localization.get('columns') }}</span>
@@ -214,12 +214,12 @@ ColumnListComponent = tslib_1.__decorate([
214
214
  template: `
215
215
  <div class="k-column-list">
216
216
  <label *ngFor="let column of columns; let index = index;" class='k-column-list-item'>
217
- <input class="k-checkbox" type="checkbox" [attr.data-index]="index" [checked]="!column.hidden" [disabled]="isDisabled(column)" /><span class="k-checkbox-label">{{ column.displayTitle }}</span>
217
+ <input class="k-checkbox k-checkbox-md k-rounded-md" type="checkbox" [attr.data-index]="index" [checked]="!column.hidden" [disabled]="isDisabled(column)" /><span class="k-checkbox-label">{{ column.displayTitle }}</span>
218
218
  </label>
219
219
  </div>
220
220
  <div [ngClass]="actionsClass" *ngIf="!autoSync">
221
- <button type="button" class="k-button" (click)="cancelChanges()">{{ resetText }}</button>
222
- <button #applyButton type="button" (keydown.tab)="onTab($event)" class="k-button k-primary" (click)="applyChanges()">{{ applyText }}</button>
221
+ <button type="button" class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="cancelChanges()">{{ resetText }}</button>
222
+ <button #applyButton type="button" (keydown.tab)="onTab($event)" class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle" (click)="applyChanges()">{{ applyText }}</button>
223
223
  </div>
224
224
  `
225
225
  }),
@@ -22,9 +22,9 @@ const preventOnDblClick = release => mouseDown => of(mouseDown).pipe(delay(150),
22
22
  const ɵ0 = preventOnDblClick;
23
23
  const hasClass = className => el => new RegExp(`(^| )${className}( |$)`).test(el.className);
24
24
  const ɵ1 = hasClass;
25
- const isDeleteButton = or(hasClass("k-i-group-delete"), hasClass("k-button-icon"));
26
- const isSortIcon = or(hasClass("k-i-sort-asc-sm"), hasClass("k-i-sort-desc-sm"));
27
- const skipButtons = and(not(isDeleteButton), not(isSortIcon), not(isFocusableWithTabKey), not(matchesNodeName("label")));
25
+ const isDeleteButton = or(hasClass('k-i-group-delete'), hasClass('k-icon-button'));
26
+ const isSortIcon = or(hasClass('k-i-sort-asc-sm'), hasClass('k-i-sort-desc-sm'));
27
+ const skipButtons = and(not(isDeleteButton), not(isSortIcon), not(isFocusableWithTabKey), not(matchesNodeName('label')));
28
28
  const elementUnderCursor = ({ clientX, clientY }) => document.elementFromPoint(clientX, clientY);
29
29
  const ɵ2 = elementUnderCursor;
30
30
  const hideThenShow = (element, cont) => {
@@ -131,12 +131,12 @@ FilterCellOperatorsComponent = tslib_1.__decorate([
131
131
  </kendo-dropdownlist>
132
132
  <button type="button"
133
133
  kendoGridFocusable
134
- [ngClass]="{'k-clear-button-visible': showButton}"
135
- class="k-button k-button-icon"
134
+ *ngIf="showButton"
135
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle k-icon-button"
136
136
  [title]="clearText"
137
137
  (click)="clearClick()"
138
138
  (keydown)="clearKeydown($event)">
139
- <span class="k-icon k-i-filter-clear"></span>
139
+ <span class="k-icon k-button-icon k-i-filter-clear"></span>
140
140
  </button>
141
141
  `
142
142
  }),
@@ -70,7 +70,7 @@ StringFilterCellComponent = tslib_1.__decorate([
70
70
  [defaultOperator]="operator"
71
71
  [showOperators]="showOperators">
72
72
  <input
73
- class="k-textbox"
73
+ kendoTextBox
74
74
  kendoGridFocusable
75
75
  kendoFilterInput
76
76
  [columnLabel]="columnLabel"
@@ -66,7 +66,8 @@ let FilterInputDirective = class FilterInputDirective {
66
66
  addAriaAttributes() {
67
67
  const ariaValue = this.columnLabel;
68
68
  if (this.kendoInput && this.kendoInput.focusableId && isDocumentAvailable()) {
69
- const focusableElement = this.element.nativeElement.querySelector(`#${this.kendoInput.focusableId}`);
69
+ const focusableElement = this.element.nativeElement.querySelector(`#${this.kendoInput.focusableId}`) ||
70
+ this.element.nativeElement;
70
71
  this.renderer.setAttribute(focusableElement, 'aria-label', ariaValue);
71
72
  }
72
73
  else {
@@ -121,7 +121,7 @@ BooleanFilterMenuComponent = tslib_1.__decorate([
121
121
  [columnLabel]="columnLabel"
122
122
  #input
123
123
  [name]="idPrefix"
124
- class="k-radio"
124
+ kendoRadioButton
125
125
  [checked]="isSelected(item.value)"
126
126
  [attr.id]="radioId(item.value)"
127
127
  (change)="onChange(item.value, input)"
@@ -221,11 +221,11 @@ FilterMenuContainerComponent = tslib_1.__decorate([
221
221
  <button
222
222
  #resetButton
223
223
  type="reset"
224
- class="k-button"
224
+ class="k-button k-button-solid-base k-button-solid k-button-md k-rounded-md k-button-rectangle"
225
225
  (keydown.tab)="onTab($event, 'reset')">{{clearText}}</button>
226
226
  <button #filterButton
227
227
  type="submit"
228
- class="k-button k-primary"
228
+ class="k-button k-button-solid-primary k-button-solid k-button-md k-rounded-md k-button-rectangle"
229
229
  [disabled]="disabled"
230
230
  (keydown.tab)="onTab($event, 'filter')">{{filterText}}</button>
231
231
  </div>
@@ -70,7 +70,7 @@ StringFilterMenuInputComponent = tslib_1.__decorate([
70
70
  [menuTabbingService]="menuTabbingService"
71
71
  >
72
72
  <input
73
- class="k-textbox"
73
+ kendoTextBox
74
74
  kendoFilterInput
75
75
  [columnLabel]="columnLabel"
76
76
  [filterDelay]="0"
@@ -808,7 +808,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
808
808
  * [resizable]="true"
809
809
  * style="height: 300px">
810
810
  * <ng-template kendoGridToolbarTemplate>
811
- * <button class="k-button" (click)="grid.autoFitColumn(groupColumn)">
811
+ * <button kendoButton (click)="grid.autoFitColumn(groupColumn)">
812
812
  * Auto-fit the group column
813
813
  * </button>
814
814
  * </ng-template>
@@ -872,10 +872,10 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
872
872
  * [resizable]="true"
873
873
  * style="height: 300px">
874
874
  * <ng-template kendoGridToolbarTemplate>
875
- * <button class="k-button" (click)="grid.autoFitColumns([firstColumn, lastColumn])">
875
+ * <button kendoButton (click)="grid.autoFitColumns([firstColumn, lastColumn])">
876
876
  * Auto-fit the first and last column
877
877
  * </button>
878
- * <button class="k-button" (click)="grid.autoFitColumns()">
878
+ * <button kendoButton (click)="grid.autoFitColumns()">
879
879
  * Auto-fit all columns
880
880
  * </button>
881
881
  * </ng-template>
@@ -1000,7 +1000,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
1000
1000
  * [reorderable]="true"
1001
1001
  * style="height: 300px">
1002
1002
  * <ng-template kendoGridToolbarTemplate>
1003
- * <button class="k-button"
1003
+ * <button kendoButton
1004
1004
  * (click)="grid.reorderColumn(groupColumn, 2, { before: true })">
1005
1005
  * Move the group column before the last one.
1006
1006
  * </button>
@@ -1212,7 +1212,7 @@ let GridComponent = class GridComponent {
1212
1212
  * [resizable]="true"
1213
1213
  * style="height: 300px">
1214
1214
  * <ng-template kendoGridToolbarTemplate>
1215
- * <button class="k-button" (click)="grid.autoFitColumn(groupColumn)">
1215
+ * <button kendoButton (click)="grid.autoFitColumn(groupColumn)">
1216
1216
  * Auto-fit the group column
1217
1217
  * </button>
1218
1218
  * </ng-template>
@@ -1278,10 +1278,10 @@ let GridComponent = class GridComponent {
1278
1278
  * [resizable]="true"
1279
1279
  * style="height: 300px">
1280
1280
  * <ng-template kendoGridToolbarTemplate>
1281
- * <button class="k-button" (click)="grid.autoFitColumns([firstColumn, lastColumn])">
1281
+ * <button kendoButton (click)="grid.autoFitColumns([firstColumn, lastColumn])">
1282
1282
  * Auto-fit the first and last column
1283
1283
  * </button>
1284
- * <button class="k-button" (click)="grid.autoFitColumns()">
1284
+ * <button kendoButton (click)="grid.autoFitColumns()">
1285
1285
  * Auto-fit all columns
1286
1286
  * </button>
1287
1287
  * </ng-template>
@@ -1454,7 +1454,7 @@ let GridComponent = class GridComponent {
1454
1454
  * [reorderable]="true"
1455
1455
  * style="height: 300px">
1456
1456
  * <ng-template kendoGridToolbarTemplate>
1457
- * <button class="k-button"
1457
+ * <button kendoButton
1458
1458
  * (click)="grid.reorderColumn(groupColumn, 2, { before: true })">
1459
1459
  * Move the group column before the last one.
1460
1460
  * </button>
@@ -2291,7 +2291,6 @@ tslib_1.__decorate([
2291
2291
  tslib_1.__metadata("design:paramtypes", [])
2292
2292
  ], GridComponent.prototype, "dir", null);
2293
2293
  tslib_1.__decorate([
2294
- HostBinding('class.k-widget'),
2295
2294
  HostBinding('class.k-grid'),
2296
2295
  tslib_1.__metadata("design:type", Boolean),
2297
2296
  tslib_1.__metadata("design:paramtypes", [])
@@ -67,8 +67,8 @@ GroupIndicatorComponent = tslib_1.__decorate([
67
67
  [class.k-i-sort-asc-sm]="dir === 'asc'"
68
68
  [class.k-i-sort-desc-sm]="dir === 'desc'"></span>
69
69
  {{groupTitle}}</a>
70
- <a class="k-button k-button-icon k-bare" tabindex="-1" (click)="removeDescriptor()">
71
- <span class="k-icon k-i-group-delete"></span>
70
+ <a class="k-button k-button-flat-base k-button-flat k-icon-button k-button-md k-rounded-md k-button-rectangle k-icon-button" tabindex="-1" (click)="removeDescriptor()">
71
+ <span class="k-button-icon k-icon k-i-group-delete"></span>
72
72
  </a>
73
73
  `
74
74
  })