@progress/kendo-angular-dropdowns 5.4.0-dev.202106231124 → 5.5.0-dev.202110281138

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 (47) hide show
  1. package/dist/cdn/js/kendo-angular-dropdowns.js +2 -2
  2. package/dist/cdn/main.js +1 -1
  3. package/dist/es/common/list.component.js +1 -1
  4. package/dist/es/common/localization/messages.js +4 -0
  5. package/dist/es/common/shared.module.js +3 -1
  6. package/dist/es/dropdowntrees/checked-state/base-check.directive.js +54 -0
  7. package/dist/es/dropdowntrees/checked-state/check-all.directive.js +181 -0
  8. package/dist/es/dropdowntrees/checked-state/check.directive.js +15 -36
  9. package/dist/es/dropdowntrees/dropdowntree.component.js +4 -0
  10. package/dist/es/dropdowntrees/multiselecttree.component.js +66 -17
  11. package/dist/es/index.js +2 -0
  12. package/dist/es/multiselect/multiselect.component.js +8 -1
  13. package/dist/es/package-metadata.js +1 -1
  14. package/dist/es2015/common/list.component.js +6 -6
  15. package/dist/es2015/common/localization/messages.d.ts +4 -0
  16. package/dist/es2015/common/localization/messages.js +4 -0
  17. package/dist/es2015/common/shared.module.js +3 -1
  18. package/dist/es2015/dropdowntrees/checked-state/base-check.directive.d.ts +32 -0
  19. package/dist/es2015/dropdowntrees/checked-state/base-check.directive.js +48 -0
  20. package/dist/es2015/dropdowntrees/checked-state/check-all.directive.d.ts +53 -0
  21. package/dist/es2015/dropdowntrees/checked-state/check-all.directive.js +161 -0
  22. package/dist/es2015/dropdowntrees/checked-state/check.directive.d.ts +3 -5
  23. package/dist/es2015/dropdowntrees/checked-state/check.directive.js +5 -26
  24. package/dist/es2015/dropdowntrees/dropdowntree.component.d.ts +4 -0
  25. package/dist/es2015/dropdowntrees/dropdowntree.component.js +4 -0
  26. package/dist/es2015/dropdowntrees/multiselecttree.component.d.ts +18 -0
  27. package/dist/es2015/dropdowntrees/multiselecttree.component.js +91 -20
  28. package/dist/es2015/index.d.ts +2 -0
  29. package/dist/es2015/index.js +2 -0
  30. package/dist/es2015/index.metadata.json +1 -1
  31. package/dist/es2015/multiselect/multiselect.component.js +8 -1
  32. package/dist/es2015/package-metadata.js +1 -1
  33. package/dist/fesm2015/index.js +314 -55
  34. package/dist/fesm5/index.js +319 -57
  35. package/dist/npm/common/list.component.js +1 -1
  36. package/dist/npm/common/localization/messages.js +4 -0
  37. package/dist/npm/common/shared.module.js +3 -1
  38. package/dist/npm/dropdowntrees/checked-state/base-check.directive.js +56 -0
  39. package/dist/npm/dropdowntrees/checked-state/check-all.directive.js +183 -0
  40. package/dist/npm/dropdowntrees/checked-state/check.directive.js +14 -35
  41. package/dist/npm/dropdowntrees/dropdowntree.component.js +4 -0
  42. package/dist/npm/dropdowntrees/multiselecttree.component.js +66 -17
  43. package/dist/npm/index.js +4 -0
  44. package/dist/npm/multiselect/multiselect.component.js +8 -1
  45. package/dist/npm/package-metadata.js +1 -1
  46. package/dist/systemjs/kendo-angular-dropdowns.js +1 -1
  47. package/package.json +1 -1
@@ -398,7 +398,7 @@ var ListComponent = /** @class */ (function () {
398
398
  ListComponent = tslib_1.__decorate([
399
399
  core_1.Component({
400
400
  selector: 'kendo-list',
401
- template: "\n <div *ngIf=\"dataService.grouped\"\n class='k-outer-group-header k-first'\n [ngClass]=\"{'k-virtual-item': virtual}\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n >\n <ng-template *ngIf=\"fixedGroupTemplate\"\n [templateContext]=\"{\n templateRef: fixedGroupTemplate.templateRef,\n $implicit: currentGroup\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!fixedGroupTemplate\"><strong>{{ currentGroup }}</strong> </ng-template>\n </div>\n <div #content\n [ngClass]=\"{ 'k-virtual-content': virtual, 'k-list-scroller': !virtual }\"\n [style.maxHeight.px]=\"height\"\n [style.overflowY]=\"overflowY\"\n unselectable=\"on\">\n <ul #list\n role=\"listbox\"\n [class]=\"listClass\"\n [ngClass]=\"{ 'k-virtual-list': virtual }\"\n [attr.id]=\"id\"\n [attr.aria-hidden]=\"!show\">\n <ng-template *ngIf=\"!dataService.grouped && show\" ngFor let-dataItem let-itemIndex=\"index\" [ngForOf]=\"data\">\n <li\n role=\"option\"\n kendoDropDownsSelectable\n [checkboxes]=\"checkboxes\"\n [height]=\"virtual?.itemHeight\"\n [index]=\"itemIndex + startFrom\"\n [multipleSelection]=\"multipleSelection\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem)\"\n [attr.tabIndex]=\"-1\"\n class=\"k-item\"\n [ngClass]=\"{ 'k-virtual-item': virtual, 'k-state-disabled': isDisabled(itemIndex) }\">\n <label class=\"k-checkbox-label\">\n <input *ngIf=\"checkboxes.enabled\"\n type=\"checkbox\"\n class=\"k-checkbox\"\n (change)=\"onCheckedChange($event, itemIndex)\"\n [checked]=\"isChecked(itemIndex)\"\n />\n </label>\n <ng-template *ngIf=\"template\"\n [templateContext]=\"{\n templateRef: template.templateRef,\n $implicit: dataItem\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!template\">{{ getText(dataItem) }}</ng-template>\n </li>\n </ng-template>\n <ng-template *ngIf=\"dataService.grouped\" ngFor let-dataItem let-itemIndex=\"index\" [ngForOf]=\"data\">\n <li\n *ngIf=\"dataItem.header && dataItem.index > 0\"\n role=\"group\"\n class='k-outer-group-header'\n [ngClass]=\"{ 'k-virtual-item': virtual }\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n [attr.group-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\">\n <ng-template *ngIf=\"groupTemplate\"\n [templateContext]=\"{\n templateRef: groupTemplate.templateRef,\n $implicit: dataItem.value\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!groupTemplate\"><strong> {{ dataItem.value }}</strong> </ng-template>\n </li>\n <li\n *ngIf=\"!dataItem.header\"\n role=\"option\"\n kendoDropDownsSelectable\n [height]=\"virtual?.itemHeight\"\n [index]=\"dataItem.offsetIndex\"\n [multipleSelection]=\"multipleSelection\"\n [attr.absolute-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\"\n class=\"k-item\"\n [ngClass]=\"{ 'k-virtual-item': virtual, 'k-state-disabled': isDisabled(dataItem.offsetIndex) }\">\n <ng-template *ngIf=\"template\"\n [templateContext]=\"{\n templateRef: template.templateRef,\n $implicit: dataItem.value\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!template\">{{ getText(dataItem.value) }}</ng-template>\n </li>\n </ng-template>\n <kendo-resize-sensor\n *ngIf=\"!virtual\"\n (resize)=\"listResize.emit()\"\n >\n </kendo-resize-sensor>\n </ul>\n <div *ngIf=\"virtual\" #virtualContainer class=\"k-height-container\" role=\"presentation\">\n <div [style.height.px]=\"scrollHeight\">\n <kendo-resize-sensor (resize)=\"listResize.emit()\"></kendo-resize-sensor>\n </div>\n </div>\n </div>\n "
401
+ template: "\n <div *ngIf=\"dataService.grouped\"\n class='k-outer-group-header k-first'\n [ngClass]=\"{'k-virtual-item': virtual}\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n >\n <ng-template *ngIf=\"fixedGroupTemplate\"\n [templateContext]=\"{\n templateRef: fixedGroupTemplate.templateRef,\n $implicit: currentGroup\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!fixedGroupTemplate\"><strong>{{ currentGroup }}</strong> </ng-template>\n </div>\n <div #content\n [ngClass]=\"{ 'k-virtual-content': virtual, 'k-list-scroller': !virtual }\"\n [style.maxHeight.px]=\"height\"\n [style.overflowY]=\"overflowY\"\n unselectable=\"on\">\n <ul #list\n role=\"listbox\"\n [class]=\"listClass\"\n [ngClass]=\"{ 'k-virtual-list': virtual }\"\n [attr.id]=\"id\"\n [attr.aria-hidden]=\"!show\">\n <ng-template *ngIf=\"!dataService.grouped && show\" ngFor let-dataItem let-itemIndex=\"index\" [ngForOf]=\"data\">\n <li\n role=\"option\"\n kendoDropDownsSelectable\n [checkboxes]=\"checkboxes\"\n [height]=\"virtual?.itemHeight\"\n [index]=\"itemIndex + startFrom\"\n [multipleSelection]=\"multipleSelection\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem)\"\n [attr.tabIndex]=\"-1\"\n class=\"k-item\"\n [ngClass]=\"{ 'k-virtual-item': virtual, 'k-state-disabled': isDisabled(itemIndex) }\">\n <label *ngIf=\"checkboxes.enabled\"\n class=\"k-checkbox-label\">\n <input type=\"checkbox\"\n class=\"k-checkbox\"\n (change)=\"onCheckedChange($event, itemIndex)\"\n [checked]=\"isChecked(itemIndex)\"\n />\n </label>\n <ng-template *ngIf=\"template\"\n [templateContext]=\"{\n templateRef: template.templateRef,\n $implicit: dataItem\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!template\">{{ getText(dataItem) }}</ng-template>\n </li>\n </ng-template>\n <ng-template *ngIf=\"dataService.grouped\" ngFor let-dataItem let-itemIndex=\"index\" [ngForOf]=\"data\">\n <li\n *ngIf=\"dataItem.header && dataItem.index > 0\"\n role=\"group\"\n class='k-outer-group-header'\n [ngClass]=\"{ 'k-virtual-item': virtual }\"\n [ngStyle]=\"{\n 'height.px': virtual?.itemHeight,\n 'minHeight.px' : virtual?.itemHeight,\n 'boxSizing' : virtual ? 'border-box' : 'inherit'}\"\n [attr.group-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\">\n <ng-template *ngIf=\"groupTemplate\"\n [templateContext]=\"{\n templateRef: groupTemplate.templateRef,\n $implicit: dataItem.value\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!groupTemplate\"><strong> {{ dataItem.value }}</strong> </ng-template>\n </li>\n <li\n *ngIf=\"!dataItem.header\"\n role=\"option\"\n kendoDropDownsSelectable\n [height]=\"virtual?.itemHeight\"\n [index]=\"dataItem.offsetIndex\"\n [multipleSelection]=\"multipleSelection\"\n [attr.absolute-index]=\"dataItem.index\"\n [attr.id]=\"optionPrefix + '-' + getValue(dataItem.value)\"\n [attr.tabIndex]=\"-1\"\n class=\"k-item\"\n [ngClass]=\"{ 'k-virtual-item': virtual, 'k-state-disabled': isDisabled(dataItem.offsetIndex) }\">\n <ng-template *ngIf=\"template\"\n [templateContext]=\"{\n templateRef: template.templateRef,\n $implicit: dataItem.value\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!template\">{{ getText(dataItem.value) }}</ng-template>\n </li>\n </ng-template>\n <kendo-resize-sensor\n *ngIf=\"!virtual\"\n (resize)=\"listResize.emit()\"\n >\n </kendo-resize-sensor>\n </ul>\n <div *ngIf=\"virtual\" #virtualContainer class=\"k-height-container\" role=\"presentation\">\n <div [style.height.px]=\"scrollHeight\">\n <kendo-resize-sensor (resize)=\"listResize.emit()\"></kendo-resize-sensor>\n </div>\n </div>\n </div>\n "
402
402
  }),
403
403
  tslib_1.__metadata("design:paramtypes", [data_service_1.DataService,
404
404
  core_1.ElementRef,
@@ -23,6 +23,10 @@ var Messages = /** @class */ (function (_super) {
23
23
  core_1.Input(),
24
24
  tslib_1.__metadata("design:type", String)
25
25
  ], Messages.prototype, "clearTitle", void 0);
26
+ tslib_1.__decorate([
27
+ core_1.Input(),
28
+ tslib_1.__metadata("design:type", String)
29
+ ], Messages.prototype, "checkAllText", void 0);
26
30
  return Messages;
27
31
  }(kendo_angular_l10n_1.ComponentMessages));
28
32
  exports.Messages = Messages;
@@ -18,6 +18,7 @@ var list_item_directive_1 = require("./list-item.directive");
18
18
  var selectable_directive_1 = require("./selection/selectable.directive");
19
19
  var template_context_directive_1 = require("./templates/template-context.directive");
20
20
  var check_directive_1 = require("../dropdowntrees/checked-state/check.directive");
21
+ var check_all_directive_1 = require("../dropdowntrees/checked-state/check-all.directive");
21
22
  var INTERNAL_DIRECTIVES = [
22
23
  list_component_1.ListComponent,
23
24
  list_item_directive_1.ListItemDirective,
@@ -25,7 +26,8 @@ var INTERNAL_DIRECTIVES = [
25
26
  searchbar_component_1.SearchBarComponent,
26
27
  template_context_directive_1.TemplateContextDirective,
27
28
  taglist_component_1.TagListComponent,
28
- check_directive_1.CheckDirective
29
+ check_directive_1.CheckDirective,
30
+ check_all_directive_1.CheckAllDirective
29
31
  ];
30
32
  /**
31
33
  * @hidden
@@ -0,0 +1,56 @@
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
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var tslib_1 = require("tslib");
8
+ var core_1 = require("@angular/core");
9
+ var util_1 = require("../../common/util");
10
+ /**
11
+ * @hidden
12
+ *
13
+ * A directive which manages the in-memory checked state of the MultiSelectTree nodes.
14
+ */
15
+ var BaseCheckDirective = /** @class */ (function () {
16
+ function BaseCheckDirective() {
17
+ }
18
+ BaseCheckDirective.prototype.addItem = function (item) {
19
+ if (this.isItemChecked(item)) {
20
+ return;
21
+ }
22
+ var level = util_1.getHierarchicalItemLevel(item.index);
23
+ var candidate = tslib_1.__assign({}, item, { level: level });
24
+ this.checkedItems.push(candidate);
25
+ this.checkedKeys.add(util_1.valueFrom(candidate, this.valueField));
26
+ };
27
+ BaseCheckDirective.prototype.removeItem = function (item) {
28
+ var _this = this;
29
+ if (!this.isItemChecked(item)) {
30
+ return;
31
+ }
32
+ var level = util_1.getHierarchicalItemLevel(item.index);
33
+ var candidate = tslib_1.__assign({}, item, { level: level });
34
+ this.checkedItems = this.checkedItems
35
+ .filter(function (item) { return util_1.valueFrom(item, _this.valueField) !== util_1.valueFrom(candidate, _this.valueField); });
36
+ this.checkedKeys.delete(util_1.valueFrom(candidate, this.valueField));
37
+ };
38
+ BaseCheckDirective.prototype.isItemChecked = function (item) {
39
+ return this.checkedKeys.has(util_1.valueFrom(item, this.valueField));
40
+ };
41
+ BaseCheckDirective.prototype.updateItems = function () {
42
+ var _this = this;
43
+ this.checkedItems = this.checkedItems || [];
44
+ this.checkedKeys = new Set(this.checkedItems.map(function (item) { return util_1.valueFrom(item, _this.valueField); }));
45
+ };
46
+ tslib_1.__decorate([
47
+ core_1.Input(),
48
+ tslib_1.__metadata("design:type", Object)
49
+ ], BaseCheckDirective.prototype, "valueField", void 0);
50
+ tslib_1.__decorate([
51
+ core_1.Input(),
52
+ tslib_1.__metadata("design:type", Array)
53
+ ], BaseCheckDirective.prototype, "checkedItems", void 0);
54
+ return BaseCheckDirective;
55
+ }());
56
+ exports.BaseCheckDirective = BaseCheckDirective;
@@ -0,0 +1,183 @@
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
+ "use strict";
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var tslib_1 = require("tslib");
8
+ var core_1 = require("@angular/core");
9
+ var kendo_angular_treeview_1 = require("@progress/kendo-angular-treeview");
10
+ var util_1 = require("../../common/util");
11
+ var base_check_directive_1 = require("./base-check.directive");
12
+ /**
13
+ * @hidden
14
+ *
15
+ * A directive which manages the in-memory checked state of the MultiSelectTree nodes.
16
+ */
17
+ var CheckAllDirective = /** @class */ (function (_super) {
18
+ tslib_1.__extends(CheckAllDirective, _super);
19
+ function CheckAllDirective(element, zone, cdr, renderer) {
20
+ var _this = _super.call(this) || this;
21
+ _this.element = element;
22
+ _this.zone = zone;
23
+ _this.cdr = cdr;
24
+ _this.renderer = renderer;
25
+ /**
26
+ * Fires when the `checkedItems` collection was updated.
27
+ */
28
+ _this.checkedItemsChange = new core_1.EventEmitter();
29
+ /**
30
+ * Holds a Set with just the checked item keys.
31
+ *
32
+ * Should be updated each time the `checkedItems` value or content is changed.
33
+ * Can be used for efficient look-up of whether an item is checked or not (O(1) access time).
34
+ */
35
+ _this.checkedKeys = new Set();
36
+ return _this;
37
+ }
38
+ CheckAllDirective.prototype.handleChange = function (event) {
39
+ var _this = this;
40
+ // Need to store the current checkbox state at the moment of click
41
+ this.currentCheckedState = event.checked;
42
+ this.currentIndeterminateState = this.isIndeterminate;
43
+ this.treeview.nodes.map(function (_value, index) {
44
+ var itemIndex = String(index);
45
+ var itemLookup = _this.treeview.itemLookup(itemIndex);
46
+ _this.checkNode(itemLookup);
47
+ });
48
+ this.checkedItemsChange.emit(this.checkedItems.slice());
49
+ };
50
+ Object.defineProperty(CheckAllDirective.prototype, "isIndeterminate", {
51
+ get: function () {
52
+ var _this = this;
53
+ var isIndeterminate = this.treeview.nodes.some(function (_node, index) {
54
+ var itemIndex = String(index);
55
+ var itemLookup = _this.treeview.itemLookup(itemIndex);
56
+ return _this.someChecked(itemLookup);
57
+ });
58
+ return this.isChecked ? false : isIndeterminate;
59
+ },
60
+ enumerable: true,
61
+ configurable: true
62
+ });
63
+ Object.defineProperty(CheckAllDirective.prototype, "isChecked", {
64
+ get: function () {
65
+ var _this = this;
66
+ var isChecked = this.treeview.nodes.every(function (_node, index) {
67
+ var itemIndex = String(index);
68
+ var itemLookup = _this.treeview.itemLookup(itemIndex);
69
+ return _this.allChecked(itemLookup);
70
+ });
71
+ return isChecked;
72
+ },
73
+ enumerable: true,
74
+ configurable: true
75
+ });
76
+ CheckAllDirective.prototype.ngOnChanges = function (changes) {
77
+ if (util_1.isPresent(changes.checkedItems)) {
78
+ this.updateItems();
79
+ this.renderer.setProperty(this.element.nativeElement, 'checked', this.isChecked);
80
+ this.renderer.setProperty(this.element.nativeElement, 'indeterminate', this.isIndeterminate);
81
+ }
82
+ };
83
+ CheckAllDirective.prototype.ngOnInit = function () {
84
+ var _this = this;
85
+ if (this.focused) {
86
+ this.nextTick(function () { return _this.element.nativeElement.focus(); });
87
+ }
88
+ };
89
+ CheckAllDirective.prototype.nextTick = function (fn) {
90
+ this.zone.runOutsideAngular(function () { return setTimeout(fn); });
91
+ };
92
+ CheckAllDirective.prototype.checkNode = function (itemLookup) {
93
+ var _this = this;
94
+ if (this.treeview.isDisabled(itemLookup.item.dataItem, itemLookup.item.index)) {
95
+ return;
96
+ }
97
+ var pendingCheck = [];
98
+ var filter = function (item) {
99
+ return _this.treeview.isVisible(item.dataItem, item.index) &&
100
+ !_this.treeview.isDisabled(item.dataItem, item.index);
101
+ };
102
+ pendingCheck.push(itemLookup.item);
103
+ util_1.fetchDescendentNodes(itemLookup, filter)
104
+ .forEach(function (lookup) { return pendingCheck.push(lookup.item); });
105
+ pendingCheck.forEach(function (item) {
106
+ if (_this.currentIndeterminateState) {
107
+ _this.lastAction === 'check' ?
108
+ _this.addItem(item) :
109
+ _this.removeItem(item);
110
+ return;
111
+ }
112
+ _this.currentCheckedState ?
113
+ _this.addItem(item) :
114
+ _this.removeItem(item);
115
+ });
116
+ };
117
+ CheckAllDirective.prototype.allChecked = function (lookup) {
118
+ var _this = this;
119
+ var children = lookup && lookup.children;
120
+ if (!Array.isArray(children)) {
121
+ return;
122
+ }
123
+ var childrenChecked = children.every(function (child) {
124
+ if (child.children.length) {
125
+ return _this.isItemChecked(child.item) && _this.allChecked(child);
126
+ }
127
+ return _this.isItemChecked(child.item);
128
+ });
129
+ return childrenChecked && this.isItemChecked(lookup.item);
130
+ };
131
+ CheckAllDirective.prototype.someChecked = function (lookup) {
132
+ var _this = this;
133
+ var children = lookup && lookup.children;
134
+ if (!Array.isArray(children)) {
135
+ return;
136
+ }
137
+ var childrenChecked = children.some(function (child) {
138
+ if (child.children.length) {
139
+ return _this.isItemChecked(child.item) || _this.someChecked(child);
140
+ }
141
+ return _this.isItemChecked(child.item);
142
+ });
143
+ return childrenChecked || this.isItemChecked(lookup.item);
144
+ };
145
+ tslib_1.__decorate([
146
+ core_1.Input(),
147
+ tslib_1.__metadata("design:type", String)
148
+ ], CheckAllDirective.prototype, "lastAction", void 0);
149
+ tslib_1.__decorate([
150
+ core_1.Input(),
151
+ tslib_1.__metadata("design:type", kendo_angular_treeview_1.TreeViewComponent)
152
+ ], CheckAllDirective.prototype, "treeview", void 0);
153
+ tslib_1.__decorate([
154
+ core_1.Input(),
155
+ tslib_1.__metadata("design:type", Array)
156
+ ], CheckAllDirective.prototype, "checkedItems", void 0);
157
+ tslib_1.__decorate([
158
+ core_1.Input(),
159
+ tslib_1.__metadata("design:type", Object)
160
+ ], CheckAllDirective.prototype, "valueField", void 0);
161
+ tslib_1.__decorate([
162
+ core_1.Input('checkAll'),
163
+ tslib_1.__metadata("design:type", Boolean)
164
+ ], CheckAllDirective.prototype, "focused", void 0);
165
+ tslib_1.__decorate([
166
+ core_1.Output(),
167
+ tslib_1.__metadata("design:type", core_1.EventEmitter)
168
+ ], CheckAllDirective.prototype, "checkedItemsChange", void 0);
169
+ tslib_1.__decorate([
170
+ core_1.HostListener('change', ['$event.target']),
171
+ tslib_1.__metadata("design:type", Function),
172
+ tslib_1.__metadata("design:paramtypes", [Object]),
173
+ tslib_1.__metadata("design:returntype", void 0)
174
+ ], CheckAllDirective.prototype, "handleChange", null);
175
+ CheckAllDirective = tslib_1.__decorate([
176
+ core_1.Directive({
177
+ selector: '[checkAll]' // tslint:disable-line
178
+ }),
179
+ tslib_1.__metadata("design:paramtypes", [core_1.ElementRef, core_1.NgZone, core_1.ChangeDetectorRef, core_1.Renderer2])
180
+ ], CheckAllDirective);
181
+ return CheckAllDirective;
182
+ }(base_check_directive_1.BaseCheckDirective));
183
+ exports.CheckAllDirective = CheckAllDirective;
@@ -10,38 +10,40 @@ var kendo_angular_treeview_1 = require("@progress/kendo-angular-treeview");
10
10
  var rxjs_1 = require("rxjs");
11
11
  var operators_1 = require("rxjs/operators");
12
12
  var util_1 = require("../../common/util");
13
+ var base_check_directive_1 = require("./base-check.directive");
13
14
  /**
14
15
  * @hidden
15
16
  *
16
17
  * A directive which manages the in-memory checked state of the MultiSelectTree nodes.
17
18
  */
18
- var CheckDirective = /** @class */ (function () {
19
+ var CheckDirective = /** @class */ (function (_super) {
20
+ tslib_1.__extends(CheckDirective, _super);
19
21
  function CheckDirective(treeView) {
20
- this.treeView = treeView;
22
+ var _this = _super.call(this) || this;
23
+ _this.treeView = treeView;
21
24
  /**
22
25
  * Fires when the `checkedItems` collection was updated.
23
26
  */
24
- this.checkedItemsChange = new core_1.EventEmitter();
27
+ _this.checkedItemsChange = new core_1.EventEmitter();
25
28
  /**
26
29
  * Holds a Set with just the checked item keys.
27
30
  *
28
31
  * Should be updated each time the `checkedItems` value or content is changed.
29
32
  * Can be used for efficient look-up of whether an item is checked or not (O(1) access time).
30
33
  */
31
- this.checkedKeys = new Set();
32
- this.subscriptions = new rxjs_1.Subscription();
33
- this.subscriptions.add(this.treeView.checkedChange
34
- .subscribe(this.handleCheckedChange.bind(this)));
35
- this.treeView.isChecked = this.getCheckedState.bind(this);
34
+ _this.checkedKeys = new Set();
35
+ _this.subscriptions = new rxjs_1.Subscription();
36
+ _this.subscriptions.add(_this.treeView.checkedChange
37
+ .subscribe(_this.handleCheckedChange.bind(_this)));
38
+ _this.treeView.isChecked = _this.getCheckedState.bind(_this);
39
+ return _this;
36
40
  }
37
41
  CheckDirective.prototype.ngOnChanges = function (changes) {
38
- var _this = this;
39
42
  if (util_1.isPresent(changes.checkable)) {
40
43
  this.toggleCheckOnClick();
41
44
  }
42
45
  if (util_1.isPresent(changes.checkedItems)) {
43
- this.checkedItems = this.checkedItems || [];
44
- this.checkedKeys = new Set(this.checkedItems.map(function (item) { return util_1.valueFrom(item, _this.valueField); }));
46
+ this.updateItems();
45
47
  }
46
48
  };
47
49
  CheckDirective.prototype.ngOnDestroy = function () {
@@ -126,29 +128,6 @@ var CheckDirective = /** @class */ (function () {
126
128
  currentParent = currentParent.parent;
127
129
  }
128
130
  };
129
- CheckDirective.prototype.addItem = function (item) {
130
- if (this.isItemChecked(item)) {
131
- return;
132
- }
133
- var level = util_1.getHierarchicalItemLevel(item.index);
134
- var candidate = tslib_1.__assign({}, item, { level: level });
135
- this.checkedItems.push(candidate);
136
- this.checkedKeys.add(util_1.valueFrom(candidate, this.valueField));
137
- };
138
- CheckDirective.prototype.removeItem = function (item) {
139
- var _this = this;
140
- if (!this.isItemChecked(item)) {
141
- return;
142
- }
143
- var level = util_1.getHierarchicalItemLevel(item.index);
144
- var candidate = tslib_1.__assign({}, item, { level: level });
145
- this.checkedItems = this.checkedItems
146
- .filter(function (item) { return util_1.valueFrom(item, _this.valueField) !== util_1.valueFrom(candidate, _this.valueField); });
147
- this.checkedKeys.delete(util_1.valueFrom(candidate, this.valueField));
148
- };
149
- CheckDirective.prototype.isItemChecked = function (item) {
150
- return this.checkedKeys.has(util_1.valueFrom(item, this.valueField));
151
- };
152
131
  CheckDirective.prototype.isItemIndeterminate = function (lookup) {
153
132
  var children = lookup.children;
154
133
  if (!Array.isArray(children) || children.length === 0) {
@@ -188,5 +167,5 @@ var CheckDirective = /** @class */ (function () {
188
167
  tslib_1.__metadata("design:paramtypes", [kendo_angular_treeview_1.TreeViewComponent])
189
168
  ], CheckDirective);
190
169
  return CheckDirective;
191
- }());
170
+ }(base_check_directive_1.BaseCheckDirective));
192
171
  exports.CheckDirective = CheckDirective;
@@ -172,6 +172,10 @@ var DropDownTreeComponent = /** @class */ (function () {
172
172
  * @hidden
173
173
  */
174
174
  this.selectedKeys = [];
175
+ /**
176
+ * @hidden
177
+ */
178
+ this.filterStateChange = new core_1.EventEmitter();
175
179
  /**
176
180
  * @hidden
177
181
  */
@@ -112,6 +112,12 @@ var MultiSelectTreeComponent = /** @class */ (function () {
112
112
  * @default false
113
113
  */
114
114
  this.filterable = false;
115
+ /**
116
+ * If `checkАll` is set to `true` and the checkboxes are enabled, a tri-state checkbox appears above the embedded treeview.
117
+ * Clicking the checkbox checks or unchecks all enabled items of the treeview that are loaded.
118
+ * @default false
119
+ */
120
+ this.checkAll = false;
115
121
  /**
116
122
  * A function which determines if a specific node has child nodes.
117
123
  */
@@ -186,6 +192,10 @@ var MultiSelectTreeComponent = /** @class */ (function () {
186
192
  * Fires when the value of the built-in filter input element changes.
187
193
  */
188
194
  this.filterChange = new core_1.EventEmitter();
195
+ /**
196
+ * @hidden
197
+ */
198
+ this.filterStateChange = new core_1.EventEmitter();
189
199
  /**
190
200
  * @hidden
191
201
  */
@@ -211,6 +221,7 @@ var MultiSelectTreeComponent = /** @class */ (function () {
211
221
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
212
222
  this._isFocused = false;
213
223
  this.subscriptions = [];
224
+ this.lastAction = 'check';
214
225
  this.onTouchedCallback = util_1.noop;
215
226
  this.onChangeCallback = util_1.noop;
216
227
  this.direction = localization.rtl ? 'rtl' : 'ltr';
@@ -226,7 +237,7 @@ var MultiSelectTreeComponent = /** @class */ (function () {
226
237
  this._treeview = treeview;
227
238
  if (treeview) {
228
239
  // If filtering is enabled, focus the TreeView on mobile devices instead of the filter input
229
- if (this.isFocused && !this.filterable || this.touchEnabled) {
240
+ if (this.isFocused && !this.filterable && !this.checkAll || this.touchEnabled) {
230
241
  treeview.focus();
231
242
  }
232
243
  /**
@@ -547,6 +558,20 @@ var MultiSelectTreeComponent = /** @class */ (function () {
547
558
  enumerable: true,
548
559
  configurable: true
549
560
  });
561
+ Object.defineProperty(MultiSelectTreeComponent.prototype, "isFilterActive", {
562
+ get: function () {
563
+ return this.filterInput && document.activeElement === this.filterInput.nativeElement;
564
+ },
565
+ enumerable: true,
566
+ configurable: true
567
+ });
568
+ Object.defineProperty(MultiSelectTreeComponent.prototype, "isCheckAllActive", {
569
+ get: function () {
570
+ return this.checkAllInput && document.activeElement === this.checkAllInput.nativeElement;
571
+ },
572
+ enumerable: true,
573
+ configurable: true
574
+ });
550
575
  MultiSelectTreeComponent.prototype.ngOnInit = function () {
551
576
  var _this = this;
552
577
  this.renderer.removeAttribute(this.hostElement.nativeElement, 'tabindex');
@@ -770,6 +795,7 @@ var MultiSelectTreeComponent = /** @class */ (function () {
770
795
  */
771
796
  MultiSelectTreeComponent.prototype.handleCheckedItemsChange = function (items) {
772
797
  this.valueDepth = items.map(function (item) { return item.level; });
798
+ this.lastAction = items.length > this.dataItems.length ? 'check' : 'uncheck';
773
799
  this.dataItems = items.slice();
774
800
  this.updateValue(this.dataItems);
775
801
  };
@@ -791,12 +817,12 @@ var MultiSelectTreeComponent = /** @class */ (function () {
791
817
  if (tag instanceof Array) {
792
818
  // Remove group tag
793
819
  this.dataItems = this.dataItems.filter(function (_item, i) { return i < _this.showAfter || _this.disabledIndices.has(i); });
794
- this.valueDepth = this.valueDepth.filter(function (_item, i) { return i < _this.showAfter; });
820
+ this.valueDepth = this.valueDepth.filter(function (_item, i) { return i < _this.showAfter || _this.disabledIndices.has(i); });
795
821
  }
796
822
  else {
797
823
  // Remove single tag
798
- this.dataItems = this.dataItems.filter(function (_item, i) { return i !== index; });
799
- this.valueDepth = this.valueDepth.filter(function (_item, i) { return i !== index; });
824
+ this.dataItems = this.dataItems.filter(function (_item, i) { return i !== index || _this.disabledIndices.has(i); });
825
+ this.valueDepth = this.valueDepth.filter(function (_item, i) { return i !== index || _this.disabledIndices.has(i); });
800
826
  }
801
827
  this.updateValue(this.dataItems);
802
828
  // focus the wrapper if the component is not focused - the floating label reacts to focus/blur
@@ -822,7 +848,7 @@ var MultiSelectTreeComponent = /** @class */ (function () {
822
848
  this.value = this.value.filter(function (_item, index) { return _this.disabledIndices.has(index); });
823
849
  this.dataItems = this.dataItems.filter(function (_item, index) { return _this.disabledIndices.has(index); });
824
850
  this.valueDepth = this.valueDepth.filter(function (_depth, index) { return _this.disabledIndices.has(index); });
825
- this.emitValueChange();
851
+ this.emitValueChange(this.value);
826
852
  };
827
853
  /**
828
854
  * @hidden
@@ -862,6 +888,13 @@ var MultiSelectTreeComponent = /** @class */ (function () {
862
888
  this.filterChange.next(term);
863
889
  this.allNodesHidden = this.nodes.every(function (node, index) { return !_this.isVisible(node, String(index)); });
864
890
  };
891
+ /**
892
+ * @hidden
893
+ */
894
+ MultiSelectTreeComponent.prototype.toggleCheckAll = function () {
895
+ this.checkAllInput.nativeElement.focus();
896
+ this.checkAllInput.nativeElement.click();
897
+ };
865
898
  MultiSelectTreeComponent.prototype.verifySettings = function () {
866
899
  if (!core_1.isDevMode()) {
867
900
  return;
@@ -987,17 +1020,20 @@ var MultiSelectTreeComponent = /** @class */ (function () {
987
1020
  return;
988
1021
  }
989
1022
  var isFirstNodeActive = this.treeview['navigationService']['activeIndex'] === '0';
990
- if (this.filterable) {
991
- var isFilterActive = this.filterInput.nativeElement === document.activeElement;
992
- if (isFilterActive) {
993
- this.focus();
994
- }
995
- else if (!isFilterActive && isFirstNodeActive) {
996
- this.filterInput.nativeElement.focus();
997
- }
998
- }
999
- if (!this.filterable && isFirstNodeActive) {
1023
+ // Current focus is on the filter input => should focus the wrapper
1024
+ if (this.filterable && this.isFilterActive) {
1000
1025
  this.focus();
1026
+ // Current focus is on the treeview first node => should focus the check all checkbox if enabled
1027
+ }
1028
+ else if (this.checkAll && !this.isCheckAllActive && isFirstNodeActive) {
1029
+ this.checkAllInput.nativeElement.focus();
1030
+ // Current focus is either on the check all checkbox or the treeview's first node
1031
+ // => should focus either the filter input (if enabled) or the wrapper
1032
+ }
1033
+ else if (this.isCheckAllActive || isFirstNodeActive) {
1034
+ this.filterable ?
1035
+ this.filterInput.nativeElement.focus() :
1036
+ this.focus();
1001
1037
  }
1002
1038
  };
1003
1039
  MultiSelectTreeComponent.prototype.handleDownKey = function (event) {
@@ -1005,9 +1041,14 @@ var MultiSelectTreeComponent = /** @class */ (function () {
1005
1041
  return;
1006
1042
  }
1007
1043
  event.originalEvent.preventDefault();
1008
- // Put the focus back on the filter input if the wrapper is focused
1044
+ // Current focus is on the wrapper => should focus the filter input
1009
1045
  if (this.filterable && this.isWrapperActive) {
1010
1046
  this.filterInput.nativeElement.focus();
1047
+ // Current focus is on the wrapper/filter input => should focus check all checkbox if enabled
1048
+ }
1049
+ else if (this.checkAll && (this.isWrapperActive || this.isFilterActive)) {
1050
+ this.checkAllInput.nativeElement.focus();
1051
+ // Should focus the treeview if filterable and check all are disabled
1011
1052
  }
1012
1053
  else if (!this.treeview.isActive) {
1013
1054
  this.treeview.focus();
@@ -1168,6 +1209,10 @@ var MultiSelectTreeComponent = /** @class */ (function () {
1168
1209
  core_1.ViewChild('filterInput', { static: false }),
1169
1210
  tslib_1.__metadata("design:type", core_1.ElementRef)
1170
1211
  ], MultiSelectTreeComponent.prototype, "filterInput", void 0);
1212
+ tslib_1.__decorate([
1213
+ core_1.ViewChild('checkAllInput', { static: false }),
1214
+ tslib_1.__metadata("design:type", core_1.ElementRef)
1215
+ ], MultiSelectTreeComponent.prototype, "checkAllInput", void 0);
1171
1216
  tslib_1.__decorate([
1172
1217
  core_1.Input(),
1173
1218
  tslib_1.__metadata("design:type", Number),
@@ -1250,6 +1295,10 @@ var MultiSelectTreeComponent = /** @class */ (function () {
1250
1295
  core_1.Input(),
1251
1296
  tslib_1.__metadata("design:type", Boolean)
1252
1297
  ], MultiSelectTreeComponent.prototype, "filterable", void 0);
1298
+ tslib_1.__decorate([
1299
+ core_1.Input(),
1300
+ tslib_1.__metadata("design:type", Boolean)
1301
+ ], MultiSelectTreeComponent.prototype, "checkAll", void 0);
1253
1302
  tslib_1.__decorate([
1254
1303
  core_1.Input(),
1255
1304
  tslib_1.__metadata("design:type", Function)
@@ -1350,7 +1399,7 @@ var MultiSelectTreeComponent = /** @class */ (function () {
1350
1399
  }
1351
1400
  ],
1352
1401
  selector: 'kendo-multiselecttree',
1353
- template: "\n <ng-container kendoMultiSelectTreeLocalizedMessages\n i18n-noDataText=\"kendo.multiselecttree.noDataText|The text displayed in the popup when there are no items\"\n noDataText=\"NO DATA FOUND\"\n\n i18n-clearTitle=\"kendo.multiselecttree.clearTitle|The title of the clear button\"\n clearTitle=\"clear\"\n >\n </ng-container>\n <div #wrapper\n [ngClass]=\"{\n 'k-multiselect-wrap': true,\n 'k-floatwrap': true,\n 'k-state-disabled': this.disabled\n }\"\n role=\"listbox\"\n aria-haspopup=\"tree\"\n [attr.aria-describedby]=\"tagListId\"\n [attr.aria-readonly]=\"readonly\"\n [attr.aria-activedescendant]=\"focusedTagId\"\n [attr.tabindex]=\"tabindex\"\n [attr.id]=\"focusableId\"\n [attr.dir]=\"direction\"\n (click)=\"handleClick()\"\n (keydown)=\"handleKeydown($event)\"\n [kendoEventsOutsideAngular]=\"{\n focus: handleFocus,\n blur: handleBlur\n }\"\n [scope]=\"this\"\n >\n <kendo-taglist\n [id]=\"tagListId\"\n [tags]=\"tags\"\n [focused]=\"focusedTagIndex\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [valueDepth]=\"valueDepth\"\n [disabled]=\"disabled\"\n [tagPrefix]=\"tagPrefix\"\n [template]=\"tagTemplate\"\n [groupTemplate]=\"groupTagTemplate\"\n [disabledIndices]=\"disabledIndices\"\n (removeTag)=\"handleRemoveTag($event)\"\n >\n </kendo-taglist>\n <span *ngIf=\"!tags || !tags.length\"\n class=\"k-input k-readonly\"\n >\n {{ placeholder }}\n </span>\n <span\n *ngIf=\"!disabled && !loading && !readonly && clearButton && tags?.length\"\n class=\"k-icon k-clear-value k-i-close\"\n [attr.title]=\"messageFor('clearTitle')\"\n role=\"button\"\n tabindex=\"-1\"\n (mousedown)=\"clearAll($event)\"\n >\n </span>\n <span\n *ngIf=\"loading\"\n class=\"k-icon k-i-loading\"\n >\n </span>\n </div>\n <ng-template #popupTemplate>\n <span\n *ngIf=\"filterable\"\n class=\"k-list-filter\"\n >\n <input\n #filterInput\n (input)=\"handleFilterInputChange($event.target.value)\"\n [filterInput]=\"filterable && !touchEnabled\"\n (keydown.arrowdown)=\"handleKeydown($event)\"\n (keydown.arrowup)=\"handleKeydown($event)\"\n (keydown.alt.arrowup)=\"handleKeydown($event)\"\n [(ngModel)]=\"filter\"\n class=\"k-textbox\"\n role=\"textbox\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n tabindex=\"0\"\n aria-disabled=\"false\"\n aria-readonly=\"false\"\n [kendoEventsOutsideAngular]=\"{\n blur: handleBlur\n }\"\n [scope]=\"this\"\n >\n <span class=\"k-icon k-i-zoom\"></span>\n </span>\n <!--header template-->\n <ng-template\n *ngIf=\"headerTemplate\"\n [templateContext]=\"{\n templateRef: headerTemplate?.templateRef\n }\">\n </ng-template>\n <kendo-treeview\n #treeview\n [nodes]=\"data\"\n [style.maxHeight.px]=\"listHeight\"\n [animate]=\"false\"\n kendoMultiSelectTreeCheckable\n [checkable]=\"checkableSettings\"\n [checkedItems]=\"checkedItems\"\n [valueField]=\"valueField\"\n [textField]=\"textField\"\n [children]=\"children\"\n [hasChildren]=\"hasChildren\"\n [isExpanded]=\"isNodeExpanded\"\n [isDisabled]=\"itemDisabled\"\n [nodeTemplate]=\"nodeTemplate\"\n [loadOnDemand]=\"loadOnDemand\"\n [filter]=\"filter\"\n [isVisible]=\"isNodeVisible\"\n (keydown)=\"handleKeydown($event)\"\n (nodeClick)=\"handleNodeClick($event)\"\n (expand)=\"nodeExpand.emit($event)\"\n (collapse)=\"nodeCollapse.emit($event)\"\n (checkedItemsChange)=\"handleCheckedItemsChange($event)\"\n [kendoEventsOutsideAngular]=\"{\n focusout: handleBlur\n }\"\n [scope]=\"this\"\n >\n </kendo-treeview>\n <!--footer template-->\n <ng-template\n *ngIf=\"footerTemplate\"\n [templateContext]=\"{\n templateRef: footerTemplate?.templateRef\n }\">\n </ng-template>\n <!--no-data template-->\n <div class=\"k-nodata\" *ngIf=\"data?.length === 0 || allNodesHidden\">\n <ng-template [ngIf]=\"noDataTemplate\"\n [templateContext]=\"{\n templateRef: noDataTemplate?.templateRef\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!noDataTemplate\">\n <div>{{ messageFor('noDataText') }}</div>\n </ng-template>\n </div>\n </ng-template>\n <ng-container #container></ng-container>\n "
1402
+ template: "\n <ng-container kendoMultiSelectTreeLocalizedMessages\n i18n-noDataText=\"kendo.multiselecttree.noDataText|The text displayed in the popup when there are no items\"\n noDataText=\"NO DATA FOUND\"\n\n i18n-clearTitle=\"kendo.multiselecttree.clearTitle|The title of the clear button\"\n clearTitle=\"clear\"\n\n i18n-checkAllText=\"kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox\"\n checkAllText=\"Check all\"\n >\n </ng-container>\n <div #wrapper\n [ngClass]=\"{\n 'k-multiselect-wrap': true,\n 'k-floatwrap': true,\n 'k-state-disabled': this.disabled\n }\"\n role=\"listbox\"\n aria-haspopup=\"tree\"\n [attr.aria-describedby]=\"tagListId\"\n [attr.aria-readonly]=\"readonly\"\n [attr.aria-activedescendant]=\"focusedTagId\"\n [attr.tabindex]=\"tabindex\"\n [attr.id]=\"focusableId\"\n [attr.dir]=\"direction\"\n (click)=\"handleClick()\"\n (keydown)=\"handleKeydown($event)\"\n [kendoEventsOutsideAngular]=\"{\n focus: handleFocus,\n blur: handleBlur\n }\"\n [scope]=\"this\"\n >\n <kendo-taglist\n [id]=\"tagListId\"\n [tags]=\"tags\"\n [focused]=\"focusedTagIndex\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [valueDepth]=\"valueDepth\"\n [disabled]=\"disabled\"\n [tagPrefix]=\"tagPrefix\"\n [template]=\"tagTemplate\"\n [groupTemplate]=\"groupTagTemplate\"\n [disabledIndices]=\"disabledIndices\"\n (removeTag)=\"handleRemoveTag($event)\"\n >\n </kendo-taglist>\n <span *ngIf=\"!tags || !tags.length\"\n class=\"k-input k-readonly\"\n >\n {{ placeholder }}\n </span>\n <span\n *ngIf=\"!disabled && !loading && !readonly && clearButton && tags?.length\"\n class=\"k-icon k-clear-value k-i-close\"\n [attr.title]=\"messageFor('clearTitle')\"\n role=\"button\"\n tabindex=\"-1\"\n (click)=\"clearAll($event)\"\n >\n </span>\n <span\n *ngIf=\"loading\"\n class=\"k-icon k-i-loading\"\n >\n </span>\n </div>\n <ng-template #popupTemplate>\n <span\n *ngIf=\"filterable\"\n class=\"k-list-filter\"\n >\n <input\n #filterInput\n (input)=\"handleFilterInputChange($event.target.value)\"\n [filterInput]=\"filterable && !touchEnabled\"\n (keydown)=\"handleKeydown($event)\"\n [(ngModel)]=\"filter\"\n class=\"k-textbox\"\n role=\"textbox\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n tabindex=\"0\"\n aria-disabled=\"false\"\n aria-readonly=\"false\"\n [kendoEventsOutsideAngular]=\"{\n blur: handleBlur\n }\"\n [scope]=\"this\"\n >\n <span class=\"k-icon k-i-zoom\"></span>\n </span>\n <!--header template-->\n <ng-template\n *ngIf=\"headerTemplate\"\n [templateContext]=\"{\n templateRef: headerTemplate?.templateRef\n }\">\n </ng-template>\n <div *ngIf=\"checkAll\" class=\"k-check-all\">\n <input\n #checkAllInput\n [checkAll]=\"!filterable && !touchEnabled\"\n type=\"checkbox\"\n class=\"k-checkbox\"\n role=\"checkbox\"\n tabindex=\"0\"\n aria-disabled=\"false\"\n aria-readonly=\"false\"\n [treeview]=\"treeview\"\n [checkedItems]=\"checkedItems\"\n [valueField]=\"valueField\"\n [lastAction]=\"lastAction\"\n (checkedItemsChange)=\"handleCheckedItemsChange($event)\"\n (keydown)=\"handleKeydown($event)\"\n [kendoEventsOutsideAngular]=\"{\n blur: handleBlur\n }\"\n [scope]=\"this\"\n >\n <span\n class=\"k-checkbox-label\"\n (click)=\"toggleCheckAll()\"\n (mousedown)=\"$event.preventDefault()\"\n >\n {{ messageFor('checkAllText') }}\n </span>\n </div>\n <kendo-treeview\n #treeview\n [nodes]=\"data\"\n [style.maxHeight.px]=\"listHeight\"\n [animate]=\"false\"\n kendoMultiSelectTreeCheckable\n [checkable]=\"checkableSettings\"\n [checkedItems]=\"checkedItems\"\n [valueField]=\"valueField\"\n [textField]=\"textField\"\n [children]=\"children\"\n [hasChildren]=\"hasChildren\"\n [isExpanded]=\"isNodeExpanded\"\n [isDisabled]=\"itemDisabled\"\n [nodeTemplate]=\"nodeTemplate\"\n [loadOnDemand]=\"loadOnDemand\"\n [filter]=\"filter\"\n [isVisible]=\"isNodeVisible\"\n (keydown)=\"handleKeydown($event)\"\n (nodeClick)=\"handleNodeClick($event)\"\n (expand)=\"nodeExpand.emit($event)\"\n (collapse)=\"nodeCollapse.emit($event)\"\n (checkedItemsChange)=\"handleCheckedItemsChange($event)\"\n [kendoEventsOutsideAngular]=\"{\n focusout: handleBlur\n }\"\n [scope]=\"this\"\n >\n </kendo-treeview>\n <!--footer template-->\n <ng-template\n *ngIf=\"footerTemplate\"\n [templateContext]=\"{\n templateRef: footerTemplate?.templateRef\n }\">\n </ng-template>\n <!--no-data template-->\n <div class=\"k-nodata\" *ngIf=\"data?.length === 0 || allNodesHidden\">\n <ng-template [ngIf]=\"noDataTemplate\"\n [templateContext]=\"{\n templateRef: noDataTemplate?.templateRef\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!noDataTemplate\">\n <div>{{ messageFor('noDataText') }}</div>\n </ng-template>\n </div>\n </ng-template>\n <ng-container #container></ng-container>\n "
1354
1403
  }),
1355
1404
  tslib_1.__param(7, core_1.Optional()), tslib_1.__param(7, core_1.Inject(touch_enabled_1.TOUCH_ENABLED)),
1356
1405
  tslib_1.__metadata("design:paramtypes", [kendo_angular_popup_1.PopupService,
package/dist/npm/index.js CHANGED
@@ -45,6 +45,10 @@ var tag_template_directive_1 = require("./common/templates/tag-template.directiv
45
45
  exports.TagTemplateDirective = tag_template_directive_1.TagTemplateDirective
46
46
  var dropdownlist_component_1 = require("./dropdownlist/dropdownlist.component");
47
47
  exports.DROPDOWNLIST_VALUE_ACCESSOR = dropdownlist_component_1.DROPDOWNLIST_VALUE_ACCESSOR
48
+ var base_check_directive_1 = require("./dropdowntrees/checked-state/base-check.directive");
49
+ exports.BaseCheckDirective = base_check_directive_1.BaseCheckDirective
50
+ var check_all_directive_1 = require("./dropdowntrees/checked-state/check-all.directive");
51
+ exports.CheckAllDirective = check_all_directive_1.CheckAllDirective
48
52
  var check_directive_1 = require("./dropdowntrees/checked-state/check.directive");
49
53
  exports.CheckDirective = check_directive_1.CheckDirective
50
54
  var summary_tag_directive_1 = require("./dropdowntrees/summary-tag/summary-tag.directive");