@progress/kendo-angular-dropdowns 6.0.1-dev.202201201244 → 6.0.2-dev.202202221531

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 (52) 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/autocomplete/autocomplete.component.js +9 -22
  4. package/dist/es/comboboxes/combobox.component.js +9 -22
  5. package/dist/es/comboboxes/multicolumncombobox.component.js +1 -1
  6. package/dist/es/common/localization/messages.js +4 -0
  7. package/dist/es/common/searchbar.component.js +8 -1
  8. package/dist/es/common/taglist.component.js +1 -1
  9. package/dist/es/dropdownlist/dropdownlist.component.js +10 -16
  10. package/dist/es/dropdowntrees/checked-state/base-check.directive.js +19 -5
  11. package/dist/es/dropdowntrees/dropdowntree.component.js +1 -1
  12. package/dist/es/dropdowntrees/multiselecttree.component.js +13 -1
  13. package/dist/es/multiselect/multiselect.component.js +28 -23
  14. package/dist/es/package-metadata.js +1 -1
  15. package/dist/es2015/autocomplete/autocomplete.component.d.ts +4 -4
  16. package/dist/es2015/autocomplete/autocomplete.component.js +10 -18
  17. package/dist/es2015/comboboxes/combobox.component.d.ts +4 -4
  18. package/dist/es2015/comboboxes/combobox.component.js +14 -19
  19. package/dist/es2015/comboboxes/multicolumncombobox.component.js +3 -2
  20. package/dist/es2015/common/localization/messages.d.ts +4 -0
  21. package/dist/es2015/common/localization/messages.js +4 -0
  22. package/dist/es2015/common/searchbar.component.d.ts +1 -0
  23. package/dist/es2015/common/searchbar.component.js +4 -1
  24. package/dist/es2015/common/taglist.component.js +0 -3
  25. package/dist/es2015/dropdownlist/dropdownlist.component.d.ts +4 -3
  26. package/dist/es2015/dropdownlist/dropdownlist.component.js +15 -16
  27. package/dist/es2015/dropdowntrees/checked-state/base-check.directive.d.ts +7 -0
  28. package/dist/es2015/dropdowntrees/checked-state/base-check.directive.js +19 -5
  29. package/dist/es2015/dropdowntrees/dropdowntree.component.js +5 -0
  30. package/dist/es2015/dropdowntrees/multiselecttree.component.d.ts +1 -0
  31. package/dist/es2015/dropdowntrees/multiselecttree.component.js +9 -1
  32. package/dist/es2015/index.metadata.json +1 -1
  33. package/dist/es2015/multiselect/multiselect.component.d.ts +8 -5
  34. package/dist/es2015/multiselect/multiselect.component.js +27 -21
  35. package/dist/es2015/package-metadata.js +1 -1
  36. package/dist/fesm2015/index.js +110 -86
  37. package/dist/fesm5/index.js +103 -93
  38. package/dist/npm/autocomplete/autocomplete.component.js +9 -22
  39. package/dist/npm/comboboxes/combobox.component.js +9 -22
  40. package/dist/npm/comboboxes/multicolumncombobox.component.js +1 -1
  41. package/dist/npm/common/localization/messages.js +4 -0
  42. package/dist/npm/common/searchbar.component.js +8 -1
  43. package/dist/npm/common/taglist.component.js +1 -1
  44. package/dist/npm/dropdownlist/dropdownlist.component.js +10 -16
  45. package/dist/npm/dropdowntrees/checked-state/base-check.directive.js +18 -4
  46. package/dist/npm/dropdowntrees/dropdowntree.component.js +1 -1
  47. package/dist/npm/dropdowntrees/multiselecttree.component.js +13 -1
  48. package/dist/npm/multiselect/multiselect.component.js +28 -23
  49. package/dist/npm/package-metadata.js +1 -1
  50. package/dist/systemjs/kendo-angular-dropdowns.js +1 -1
  51. package/package.json +3 -5
  52. package/schematics/ngAdd/index.js +1 -1
@@ -120,7 +120,8 @@ var MultiSelectComponent = /** @class */ (function () {
120
120
  */
121
121
  this.clearButton = true;
122
122
  /**
123
- * A user-defined callback function which receives an array of selected data items and maps them to an array of tags.
123
+ * A user-defined callback function which receives an array of selected data items and maps them to an array of tags
124
+ * ([see examples]({% slug summarytagmode_multiselect %}#toc-rendering-of-tags)).
124
125
  *
125
126
  * @param { Any[] } dataItems - The selected data items from the list.
126
127
  * @returns { Any[] } - The tags that will be rendered by the component.
@@ -235,6 +236,7 @@ var MultiSelectComponent = /** @class */ (function () {
235
236
  */
236
237
  this.removeTag = new EventEmitter();
237
238
  this.hostClasses = true;
239
+ this.role = 'combobox';
238
240
  this.initialized = false;
239
241
  this._size = 'medium';
240
242
  this._rounded = 'medium';
@@ -611,6 +613,13 @@ var MultiSelectComponent = /** @class */ (function () {
611
613
  enumerable: true,
612
614
  configurable: true
613
615
  });
616
+ Object.defineProperty(MultiSelectComponent.prototype, "isAriaExpanded", {
617
+ get: function () {
618
+ return this.isOpen;
619
+ },
620
+ enumerable: true,
621
+ configurable: true
622
+ });
614
623
  /**
615
624
  * @hidden
616
625
  */
@@ -695,19 +704,12 @@ var MultiSelectComponent = /** @class */ (function () {
695
704
  Object.defineProperty(MultiSelectComponent.prototype, "noDataLabel", {
696
705
  get: function () {
697
706
  if (this.dataService.itemsCount === 0) {
698
- return this.noDataText;
707
+ return this.messageFor('noDataText');
699
708
  }
700
709
  },
701
710
  enumerable: true,
702
711
  configurable: true
703
712
  });
704
- Object.defineProperty(MultiSelectComponent.prototype, "clearTitle", {
705
- get: function () {
706
- return this.localization.get('clearTitle');
707
- },
708
- enumerable: true,
709
- configurable: true
710
- });
711
713
  Object.defineProperty(MultiSelectComponent.prototype, "clearButtonVisiblity", {
712
714
  get: function () {
713
715
  if (this.touchEnabled) {
@@ -927,9 +929,8 @@ var MultiSelectComponent = /** @class */ (function () {
927
929
  .changes.subscribe(function (_a) {
928
930
  var rtl = _a.rtl;
929
931
  _this.direction = rtl ? 'rtl' : 'ltr';
930
- _this.setMessages();
932
+ _this.cdr.markForCheck();
931
933
  });
932
- this.setMessages();
933
934
  this.setState(this.value);
934
935
  this.setComponentClasses();
935
936
  this.initialized = true;
@@ -953,7 +954,6 @@ var MultiSelectComponent = /** @class */ (function () {
953
954
  MultiSelectComponent.prototype.ngOnDestroy = function () {
954
955
  this._toggle(false);
955
956
  this.unsubscribeEvents();
956
- clearTimeout(this.messagesTimeout);
957
957
  };
958
958
  /**
959
959
  * Toggles the visibility of the popup
@@ -991,6 +991,12 @@ var MultiSelectComponent = /** @class */ (function () {
991
991
  this.text = "";
992
992
  this.value = [];
993
993
  };
994
+ /**
995
+ * @hidden
996
+ */
997
+ MultiSelectComponent.prototype.messageFor = function (key) {
998
+ return this.localization.get(key);
999
+ };
994
1000
  // NG MODEL BINDINGS
995
1001
  /**
996
1002
  * @hidden
@@ -1435,16 +1441,6 @@ var MultiSelectComponent = /** @class */ (function () {
1435
1441
  setTimeout(function () { return _this._zone.run(f); });
1436
1442
  });
1437
1443
  };
1438
- MultiSelectComponent.prototype.setMessages = function () {
1439
- var _this = this;
1440
- this._zone.runOutsideAngular(function () {
1441
- clearTimeout(_this.messagesTimeout);
1442
- _this.messagesTimeout = setTimeout(function () {
1443
- _this.noDataText = _this.localization.get('noDataText');
1444
- _this.cdr.detectChanges();
1445
- });
1446
- });
1447
- };
1448
1444
  MultiSelectComponent.prototype.setComponentClasses = function () {
1449
1445
  if (this.size) {
1450
1446
  this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));
@@ -1681,6 +1677,15 @@ var MultiSelectComponent = /** @class */ (function () {
1681
1677
  tslib_1.__metadata("design:type", Boolean),
1682
1678
  tslib_1.__metadata("design:paramtypes", [])
1683
1679
  ], MultiSelectComponent.prototype, "isLoading", null);
1680
+ tslib_1.__decorate([
1681
+ HostBinding('attr.role'),
1682
+ tslib_1.__metadata("design:type", String)
1683
+ ], MultiSelectComponent.prototype, "role", void 0);
1684
+ tslib_1.__decorate([
1685
+ HostBinding('attr.aria-expanded'),
1686
+ tslib_1.__metadata("design:type", Boolean),
1687
+ tslib_1.__metadata("design:paramtypes", [])
1688
+ ], MultiSelectComponent.prototype, "isAriaExpanded", null);
1684
1689
  tslib_1.__decorate([
1685
1690
  HostListener('mousedown', ['$event']),
1686
1691
  tslib_1.__metadata("design:type", Function),
@@ -1709,7 +1714,7 @@ var MultiSelectComponent = /** @class */ (function () {
1709
1714
  }
1710
1715
  ],
1711
1716
  selector: 'kendo-multiselect',
1712
- template: "\n <ng-container kendoMultiSelectLocalizedMessages\n i18n-noDataText=\"kendo.multiselect.noDataText|The text displayed in the popup when there are no items\"\n noDataText=\"NO DATA FOUND\"\n\n i18n-clearTitle=\"kendo.combobox.clearTitle|The title of the clear button\"\n clearTitle=\"clear\"\n >\n </ng-container>\n <kendo-taglist\n [size]=\"size\"\n [rounded]=\"rounded\"\n [fillMode]=\"fillMode\"\n [id]=\"tagListId\"\n [tags]=\"tags\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [focused]=\"focusedTagIndex\"\n [disabled]=\"disabled\"\n [template]=\"tagTemplate\"\n [groupTemplate]=\"groupTagTemplate\"\n [tagPrefix]=\"tagPrefix\"\n [disabledIndices]=\"disabledIndices\"\n (removeTag)=\"handleRemoveTag($event)\"\n >\n <kendo-searchbar\n #searchbar\n [id]=\"focusableId\"\n [role]=\"'listbox'\"\n [tagListId]=\"tagListId\"\n [activeDescendant]=\"activeDescendant\"\n [noDataLabel]=\"noDataLabel\"\n [userInput]=\"text\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabIndex]=\"tabIndex\"\n [popupOpen]=\"isOpen\"\n [placeholder]=\"placeholder\"\n (onNavigate)=\"handleNavigate($event)\"\n (valueChange)=\"handleFilter($event)\"\n (onBlur)=\"onSearchBarBlur()\"\n (onFocus)=\"onSearchBarFocus()\"\n >\n </kendo-searchbar>\n </kendo-taglist>\n\n <span\n *ngIf=\"!loading && !readonly && clearButton && (tags?.length || text?.length)\"\n class=\"k-clear-value\"\n [style.visibility]=\"clearButtonVisiblity\"\n [attr.title]=\"clearTitle\"\n role=\"button\"\n tabindex=\"-1\"\n (mousedown)=\"clearAll($event)\"\n >\n <span class=\"k-icon k-i-x\"></span>\n </span>\n <span\n *ngIf=\"loading\"\n class=\"k-icon k-i-loading\"\n >\n </span>\n <ng-template #popupTemplate>\n <!--header template-->\n <ng-template *ngIf=\"headerTemplate\"\n [templateContext]=\"{\n templateRef: headerTemplate.templateRef\n }\">\n </ng-template>\n <!--custom item template-->\n <div\n *ngIf=\"allowCustom && text\"\n class=\"k-list\"\n [ngClass]=\"customItemSizeClass\"\n >\n <div class=\"k-list-item k-custom-item\" kendoDropDownsSelectable [multipleSelection]=\"true\" [index]=\"-1\">\n <ng-template *ngIf=\"customItemTemplate;else default_custom_item_template\"\n [templateContext]=\"{\n templateRef: customItemTemplate.templateRef,\n $implicit: text\n }\">\n </ng-template>\n <ng-template #default_custom_item_template>{{ text }}</ng-template>\n <span class=\"k-icon k-i-plus\" style=\"float: right\"></span>\n </div>\n </div>\n <!--list-->\n <kendo-list\n #optionsList\n [size]=\"size\"\n [rounded]=\"rounded\"\n [id]=\"listBoxId\"\n [optionPrefix]=\"optionPrefix\"\n [data]=\"data\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [height]=\"listHeight\"\n [template]=\"template\"\n [groupTemplate]=\"groupTemplate\"\n [fixedGroupTemplate]=\"fixedGroupTemplate\"\n [show]=\"isOpen\"\n [multipleSelection]=\"true\"\n [virtual]=\"virtual\"\n (pageChange)=\"pageChange($event)\"\n [checkboxes]=\"checkboxes\"\n >\n </kendo-list>\n <!--no data template-->\n <div class=\"k-no-data\" *ngIf=\"data.length === 0\">\n <ng-template [ngIf]=\"noDataTemplate\"\n [templateContext]=\"{\n templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!noDataTemplate\">\n <div>{{ noDataText }}</div>\n </ng-template>\n </div>\n <!--footer template-->\n <ng-template *ngIf=\"footerTemplate\"\n [templateContext]=\"{\n templateRef: footerTemplate.templateRef\n }\">\n </ng-template>\n </ng-template>\n <ng-template [ngIf]=\"isOpen\">\n <kendo-resize-sensor (resize)=\"onResize()\"></kendo-resize-sensor>\n </ng-template>\n <ng-container #container></ng-container>\n "
1717
+ template: "\n <ng-container kendoMultiSelectLocalizedMessages\n i18n-noDataText=\"kendo.multiselect.noDataText|The text displayed in the popup when there are no items\"\n noDataText=\"NO DATA FOUND\"\n\n i18n-clearTitle=\"kendo.multiselect.clearTitle|The title of the clear button\"\n clearTitle=\"clear\"\n >\n </ng-container>\n <kendo-taglist\n [size]=\"size\"\n [rounded]=\"rounded\"\n [fillMode]=\"fillMode\"\n [id]=\"tagListId\"\n [tags]=\"tags\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [focused]=\"focusedTagIndex\"\n [disabled]=\"disabled\"\n [template]=\"tagTemplate\"\n [groupTemplate]=\"groupTagTemplate\"\n [tagPrefix]=\"tagPrefix\"\n [disabledIndices]=\"disabledIndices\"\n (removeTag)=\"handleRemoveTag($event)\"\n >\n <kendo-searchbar\n #searchbar\n [id]=\"focusableId\"\n [role]=\"'textbox'\"\n [tagListId]=\"tagListId\"\n [activeDescendant]=\"activeDescendant\"\n [noDataLabel]=\"noDataLabel\"\n [userInput]=\"text\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n [tabIndex]=\"tabIndex\"\n [popupOpen]=\"isOpen\"\n [placeholder]=\"placeholder\"\n (onNavigate)=\"handleNavigate($event)\"\n (valueChange)=\"handleFilter($event)\"\n (onBlur)=\"onSearchBarBlur()\"\n (onFocus)=\"onSearchBarFocus()\"\n >\n </kendo-searchbar>\n </kendo-taglist>\n\n <span\n *ngIf=\"!loading && !readonly && clearButton && (tags?.length || text?.length)\"\n class=\"k-clear-value\"\n [style.visibility]=\"clearButtonVisiblity\"\n [attr.title]=\"messageFor('clearTitle')\"\n role=\"button\"\n tabindex=\"-1\"\n (mousedown)=\"clearAll($event)\"\n >\n <span class=\"k-icon k-i-x\"></span>\n </span>\n <span\n *ngIf=\"loading\"\n class=\"k-icon k-i-loading\"\n >\n </span>\n <ng-template #popupTemplate>\n <!--header template-->\n <ng-template *ngIf=\"headerTemplate\"\n [templateContext]=\"{\n templateRef: headerTemplate.templateRef\n }\">\n </ng-template>\n <!--custom item template-->\n <div\n *ngIf=\"allowCustom && text\"\n class=\"k-list\"\n [ngClass]=\"customItemSizeClass\"\n >\n <div class=\"k-list-item k-custom-item\" kendoDropDownsSelectable [multipleSelection]=\"true\" [index]=\"-1\">\n <ng-template *ngIf=\"customItemTemplate;else default_custom_item_template\"\n [templateContext]=\"{\n templateRef: customItemTemplate.templateRef,\n $implicit: text\n }\">\n </ng-template>\n <ng-template #default_custom_item_template>{{ text }}</ng-template>\n <span class=\"k-icon k-i-plus\" style=\"float: right\"></span>\n </div>\n </div>\n <!--list-->\n <kendo-list\n #optionsList\n [size]=\"size\"\n [rounded]=\"rounded\"\n [id]=\"listBoxId\"\n [optionPrefix]=\"optionPrefix\"\n [data]=\"data\"\n [textField]=\"textField\"\n [valueField]=\"valueField\"\n [height]=\"listHeight\"\n [template]=\"template\"\n [groupTemplate]=\"groupTemplate\"\n [fixedGroupTemplate]=\"fixedGroupTemplate\"\n [show]=\"isOpen\"\n [multipleSelection]=\"true\"\n [virtual]=\"virtual\"\n (pageChange)=\"pageChange($event)\"\n [checkboxes]=\"checkboxes\"\n >\n </kendo-list>\n <!--no data template-->\n <div class=\"k-no-data\" *ngIf=\"data.length === 0\">\n <ng-template [ngIf]=\"noDataTemplate\"\n [templateContext]=\"{\n templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined\n }\">\n </ng-template>\n <ng-template [ngIf]=\"!noDataTemplate\">\n <div>{{ messageFor('noDataText') }}</div>\n </ng-template>\n </div>\n <!--footer template-->\n <ng-template *ngIf=\"footerTemplate\"\n [templateContext]=\"{\n templateRef: footerTemplate.templateRef\n }\">\n </ng-template>\n </ng-template>\n <ng-template [ngIf]=\"isOpen\">\n <kendo-resize-sensor (resize)=\"onResize()\"></kendo-resize-sensor>\n </ng-template>\n <ng-container #container></ng-container>\n "
1713
1718
  }),
1714
1719
  tslib_1.__param(11, Optional()), tslib_1.__param(11, Inject(TOUCH_ENABLED)),
1715
1720
  tslib_1.__metadata("design:paramtypes", [ElementRef,
@@ -9,7 +9,7 @@ export var packageMetadata = {
9
9
  name: '@progress/kendo-angular-dropdowns',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1642682344,
12
+ publishDate: 1645543730,
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
  };
@@ -87,7 +87,6 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
87
87
  togglePopup(open: boolean): void;
88
88
  readonly activeDescendant: string;
89
89
  readonly noDataLabel: string;
90
- readonly clearTitle: string;
91
90
  /**
92
91
  * Defines whether the first match from the suggestions list will be automatically focused.
93
92
  * By default, `highlightFirst` is set to `true`.
@@ -276,7 +275,6 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
276
275
  listBoxId: string;
277
276
  optionPrefix: string;
278
277
  popupRef: PopupRef;
279
- noDataText: string;
280
278
  protected onChangeCallback: Function;
281
279
  protected onTouchedCallback: Function;
282
280
  constructor(localization: LocalizationService, dataService: DataService, popupService: PopupService, selectionService: SelectionService, navigationService: NavigationService, disabledItemsService: DisabledItemsService, _zone: NgZone, cdr: ChangeDetectorRef, renderer: Renderer2, hostElement: ElementRef, touchEnabled: boolean);
@@ -289,6 +287,10 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
289
287
  * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.
290
288
  */
291
289
  reset(): void;
290
+ /**
291
+ * @hidden
292
+ */
293
+ messageFor(key: string): string;
292
294
  /**
293
295
  * @hidden
294
296
  */
@@ -370,7 +372,6 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
370
372
  private closeSubscription;
371
373
  private localizationChangeSubscription;
372
374
  private touchstartDisposeHandler;
373
- private messagesTimeout;
374
375
  private wrapper;
375
376
  private _isFocused;
376
377
  private direction;
@@ -388,6 +389,5 @@ export declare class AutoCompleteComponent implements ControlValueAccessor, OnDe
388
389
  private triggerPopupEvents;
389
390
  private firstFocusableIndex;
390
391
  private findIndexPredicate;
391
- private setMessages;
392
392
  private setComponentClasses;
393
393
  }
@@ -265,12 +265,9 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
265
265
  }
266
266
  get noDataLabel() {
267
267
  if (this.data.length === 0) {
268
- return this.noDataText;
268
+ return this.messageFor('noDataText');
269
269
  }
270
270
  }
271
- get clearTitle() {
272
- return this.localization.get('clearTitle');
273
- }
274
271
  /**
275
272
  * Sets the data of the AutoComplete.
276
273
  *
@@ -439,15 +436,13 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
439
436
  .changes
440
437
  .subscribe(({ rtl }) => {
441
438
  this.direction = rtl ? 'rtl' : 'ltr';
442
- this.setMessages();
439
+ this.cdr.detectChanges();
443
440
  });
444
- this.setMessages();
445
441
  this.setComponentClasses();
446
442
  }
447
443
  ngOnDestroy() {
448
444
  this.destroyPopup();
449
445
  this.unsubscribeEvents();
450
- clearTimeout(this.messagesTimeout);
451
446
  if (this.localizationChangeSubscription) {
452
447
  this.localizationChangeSubscription.unsubscribe();
453
448
  }
@@ -467,6 +462,12 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
467
462
  reset() {
468
463
  this.value = NO_VALUE;
469
464
  }
465
+ /**
466
+ * @hidden
467
+ */
468
+ messageFor(key) {
469
+ return this.localization.get(key);
470
+ }
470
471
  /**
471
472
  * @hidden
472
473
  */
@@ -861,15 +862,6 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
861
862
  };
862
863
  }
863
864
  }
864
- setMessages() {
865
- this._zone.runOutsideAngular(() => {
866
- clearTimeout(this.messagesTimeout);
867
- this.messagesTimeout = setTimeout(() => {
868
- this.noDataText = this.localization.get('noDataText');
869
- this.cdr.detectChanges();
870
- });
871
- });
872
- }
873
865
  setComponentClasses() {
874
866
  if (this.size) {
875
867
  this.renderer.addClass(this.wrapper, getSizeClass('input', this.size));
@@ -1122,7 +1114,7 @@ AutoCompleteComponent = AutoCompleteComponent_1 = tslib_1.__decorate([
1122
1114
  *ngIf="!loading && !readonly && (clearButton && text?.length)"
1123
1115
  class="k-clear-value"
1124
1116
  [style.visibility]="clearButtonVisiblity"
1125
- [attr.title]="clearTitle"
1117
+ [attr.title]="messageFor('clearTitle')"
1126
1118
  role="button"
1127
1119
  tabindex="-1"
1128
1120
  (click)="clearValue($event)"
@@ -1165,7 +1157,7 @@ AutoCompleteComponent = AutoCompleteComponent_1 = tslib_1.__decorate([
1165
1157
  }">
1166
1158
  </ng-template>
1167
1159
  <ng-template [ngIf]="!noDataTemplate">
1168
- <div>{{ noDataText }}</div>
1160
+ <div>{{ messageFor('noDataText') }}</div>
1169
1161
  </ng-template>
1170
1162
  </div>
1171
1163
  <!--footer template-->
@@ -68,7 +68,6 @@ export declare class ComboBoxComponent implements ControlValueAccessor, OnDestro
68
68
  togglePopup(open: boolean): void;
69
69
  readonly activeDescendant: string;
70
70
  readonly noDataLabel: string;
71
- readonly clearTitle: string;
72
71
  readonly appendTo: ViewContainerRef;
73
72
  dataItem: any;
74
73
  selected: any[];
@@ -332,7 +331,6 @@ export declare class ComboBoxComponent implements ControlValueAccessor, OnDestro
332
331
  listBoxId: string;
333
332
  optionPrefix: string;
334
333
  popupRef: PopupRef;
335
- noDataText: string;
336
334
  protected readonly popupWidth: {
337
335
  min: string;
338
336
  max: string;
@@ -349,7 +347,6 @@ export declare class ComboBoxComponent implements ControlValueAccessor, OnDestro
349
347
  */
350
348
  protected defaultVirtualPageSize: number;
351
349
  private valueSubscription;
352
- private messagesTimeout;
353
350
  private _filtering;
354
351
  private _text;
355
352
  private filterText;
@@ -416,6 +413,10 @@ export declare class ComboBoxComponent implements ControlValueAccessor, OnDestro
416
413
  * should be rendered in the input when the component is not focused.
417
414
  */
418
415
  isEmpty(): boolean;
416
+ /**
417
+ * @hidden
418
+ */
419
+ messageFor(key: string): string;
419
420
  /**
420
421
  * @hidden
421
422
  */
@@ -519,7 +520,6 @@ export declare class ComboBoxComponent implements ControlValueAccessor, OnDestro
519
520
  private _toggle;
520
521
  private triggerPopupEvents;
521
522
  private clearFilter;
522
- private setMessages;
523
523
  private subscribeTouchEvents;
524
524
  private attachSelectClickHandler;
525
525
  private setComponentClasses;
@@ -272,12 +272,9 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
272
272
  }
273
273
  get noDataLabel() {
274
274
  if (this.data.length === 0) {
275
- return this.noDataText;
275
+ return this.messageFor('noDataText');
276
276
  }
277
277
  }
278
- get clearTitle() {
279
- return this.localization.get('clearTitle');
280
- }
281
278
  get appendTo() {
282
279
  const { appendTo } = this.popupSettings;
283
280
  if (!appendTo || appendTo === 'root') {
@@ -495,7 +492,6 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
495
492
  this.createValueStream();
496
493
  this.subscribeTouchEvents();
497
494
  this.attachSelectClickHandler();
498
- this.setMessages();
499
495
  this.setComponentClasses();
500
496
  }
501
497
  createValueStream() {
@@ -602,7 +598,7 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
602
598
  this.subs.add(this.localization
603
599
  .changes.subscribe(({ rtl }) => {
604
600
  this.direction = rtl ? 'rtl' : 'ltr';
605
- this.setMessages();
601
+ this.cdr.detectChanges();
606
602
  }));
607
603
  this.subs.add(merge(this.navigationService.up, this.navigationService.down, this.navigationService.home, this.navigationService.end)
608
604
  .pipe(filter((event) => isPresent(event.index)))
@@ -635,7 +631,6 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
635
631
  }
636
632
  ngOnDestroy() {
637
633
  this.destroyPopup();
638
- clearTimeout(this.messagesTimeout);
639
634
  this.subs.unsubscribe();
640
635
  if (isPresent(this.valueSubscription)) {
641
636
  this.valueSubscription.unsubscribe();
@@ -732,6 +727,12 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
732
727
  const valueEmpty = !isPresent(this.value) || isEmptyString(this.value);
733
728
  return textEmpty && valueEmpty;
734
729
  }
730
+ /**
731
+ * @hidden
732
+ */
733
+ messageFor(key) {
734
+ return this.localization.get(key);
735
+ }
735
736
  /**
736
737
  * @hidden
737
738
  */
@@ -1214,15 +1215,6 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
1214
1215
  this.filterText = '';
1215
1216
  this.filterChange.emit(this.filterText);
1216
1217
  }
1217
- setMessages() {
1218
- this.zone.runOutsideAngular(() => {
1219
- clearTimeout(this.messagesTimeout);
1220
- this.messagesTimeout = setTimeout(() => {
1221
- this.noDataText = this.localization.get('noDataText');
1222
- this.cdr.detectChanges();
1223
- });
1224
- });
1225
- }
1226
1218
  subscribeTouchEvents() {
1227
1219
  if (!isDocumentAvailable() || !this.touchEnabled) {
1228
1220
  return;
@@ -1498,6 +1490,9 @@ ComboBoxComponent = ComboBoxComponent_1 = tslib_1.__decorate([
1498
1490
 
1499
1491
  i18n-clearTitle="kendo.combobox.clearTitle|The title of the clear button"
1500
1492
  clearTitle="clear"
1493
+
1494
+ i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
1495
+ selectButtonText="Select"
1501
1496
  >
1502
1497
  </ng-container>
1503
1498
  <kendo-searchbar #searchbar
@@ -1523,7 +1518,7 @@ ComboBoxComponent = ComboBoxComponent_1 = tslib_1.__decorate([
1523
1518
  class="k-clear-value"
1524
1519
  [style.visibility]="clearButtonVisiblity"
1525
1520
  aria-hidden="true"
1526
- [attr.title]="clearTitle"
1521
+ [attr.title]="messageFor('clearTitle')"
1527
1522
  (click)="clearValue($event)"
1528
1523
  [kendoEventsOutsideAngular]="{
1529
1524
  mousedown: preventEventDefault
@@ -1533,11 +1528,11 @@ ComboBoxComponent = ComboBoxComponent_1 = tslib_1.__decorate([
1533
1528
  </span>
1534
1529
  <button
1535
1530
  #select
1536
- aria-hidden="true"
1537
1531
  unselectable="on"
1538
1532
  type="button"
1539
1533
  class="k-input-button k-button k-icon-button"
1540
1534
  [ngClass]="selectButtonClasses"
1535
+ [attr.aria-label]="messageFor('selectButtonText')"
1541
1536
  [kendoEventsOutsideAngular]="{
1542
1537
  mousedown: preventEventDefault
1543
1538
  }"
@@ -1578,7 +1573,7 @@ ComboBoxComponent = ComboBoxComponent_1 = tslib_1.__decorate([
1578
1573
  }">
1579
1574
  </ng-template>
1580
1575
  <ng-template [ngIf]="!noDataTemplate">
1581
- <div>{{ noDataText }}</div>
1576
+ <div>{{ messageFor('noDataText') }}</div>
1582
1577
  </ng-template>
1583
1578
  </div>
1584
1579
  <!--footer template-->
@@ -222,7 +222,7 @@ MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = tslib_1.__decora
222
222
  class="k-clear-value"
223
223
  [style.visibility]="clearButtonVisiblity"
224
224
  aria-hidden="true"
225
- [attr.title]="clearTitle"
225
+ [attr.title]="messageFor('clearTitle')"
226
226
  (click)="clearValue($event)"
227
227
  [kendoEventsOutsideAngular]="{
228
228
  mousedown: preventEventDefault
@@ -239,6 +239,7 @@ MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = tslib_1.__decora
239
239
  type="button"
240
240
  class="k-input-button k-button k-icon-button"
241
241
  [ngClass]="selectButtonClasses"
242
+ [attr.aria-label]="messageFor('selectButtonText')"
242
243
  [kendoEventsOutsideAngular]="{
243
244
  mousedown: preventEventDefault
244
245
  }"
@@ -363,7 +364,7 @@ MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = tslib_1.__decora
363
364
  >
364
365
  </ng-template>
365
366
  <ng-template [ngIf]="!noDataTemplate">
366
- <div>{{ noDataText }}</div>
367
+ <div>{{ messageFor('noDataText') }}</div>
367
368
  </ng-template>
368
369
  </div>
369
370
 
@@ -19,4 +19,8 @@ export declare class Messages extends ComponentMessages {
19
19
  * The text displayed for the check-all checkbox.
20
20
  */
21
21
  checkAllText: string;
22
+ /**
23
+ * The text set as aria-label on the select button.
24
+ */
25
+ selectButtonText: string;
22
26
  }
@@ -22,3 +22,7 @@ tslib_1.__decorate([
22
22
  Input(),
23
23
  tslib_1.__metadata("design:type", String)
24
24
  ], Messages.prototype, "checkAllText", void 0);
25
+ tslib_1.__decorate([
26
+ Input(),
27
+ tslib_1.__metadata("design:type", String)
28
+ ], Messages.prototype, "selectButtonText", void 0);
@@ -32,6 +32,7 @@ export declare class SearchBarComponent implements OnChanges, OnInit, OnDestroy
32
32
  searchBarClass: boolean;
33
33
  readonly value: string;
34
34
  placeholder: string;
35
+ readonly ariaExpanded: boolean;
35
36
  private _userInput;
36
37
  private _previousValue;
37
38
  private _placeholder;
@@ -43,6 +43,9 @@ let SearchBarComponent = class SearchBarComponent {
43
43
  get placeholder() {
44
44
  return this._placeholder;
45
45
  }
46
+ get ariaExpanded() {
47
+ return this.role === 'combobox' ? this.popupOpen : null;
48
+ }
46
49
  ngOnInit() {
47
50
  this.localizationChangeSubscription = this.localization
48
51
  .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');
@@ -242,7 +245,7 @@ SearchBarComponent = tslib_1.__decorate([
242
245
  [attr.aria-disabled]="disabled"
243
246
  [attr.aria-readonly]="readonly"
244
247
  aria-haspopup="listbox"
245
- [attr.aria-expanded]="popupOpen"
248
+ [attr.aria-expanded]="ariaExpanded"
246
249
  [attr.aria-owns]="listId"
247
250
  [attr.aria-describedby]="tagListId"
248
251
  [attr.aria-activedescendant]="activeDescendant"
@@ -164,11 +164,8 @@ TagListComponent = tslib_1.__decorate([
164
164
  template: `
165
165
  <div
166
166
  *ngFor="let tag of tags; let index = index;"
167
- role="option"
168
167
  [attr.id]="itemId(tag, index)"
169
168
  [attr.aria-hidden]="tagAriaHidden(index)"
170
- aria-selected="true"
171
- [attr.aria-setsize]="tags?.length"
172
169
  class="k-chip"
173
170
  [ngClass]="{
174
171
  'k-focus': index === focused,
@@ -313,7 +313,6 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
313
313
  direction: Direction;
314
314
  dataItem: any;
315
315
  popupRef: PopupRef;
316
- noDataText: string;
317
316
  protected onTouchedCallback: Function;
318
317
  protected onChangeCallback: Function;
319
318
  private popupMouseDownHandler;
@@ -341,7 +340,6 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
341
340
  private _popupSettings;
342
341
  private _virtualSettings;
343
342
  private localizationChangesSubscription;
344
- private messagesTimeout;
345
343
  private _size;
346
344
  private _rounded;
347
345
  private _fillMode;
@@ -406,6 +404,10 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
406
404
  * the model will not update automatically and the `selectionChange` and `valueChange` events will not be fired.
407
405
  */
408
406
  reset(): void;
407
+ /**
408
+ * @hidden
409
+ */
410
+ messageFor(key: string): string;
409
411
  /**
410
412
  * @hidden
411
413
  */
@@ -498,7 +500,6 @@ export declare class DropDownListComponent implements ControlValueAccessor, OnDe
498
500
  * @hidden
499
501
  */
500
502
  pageChange(event: PageChangeEvent): void;
501
- private setMessages;
502
503
  private assignAriaDescribedBy;
503
504
  private setComponentClasses;
504
505
  }
@@ -211,14 +211,14 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
211
211
  return this.listBoxId;
212
212
  }
213
213
  get ariaActivedescendant() {
214
- if (!isPresent(this.dataItem)) {
214
+ if (!isPresent(this.dataItem) || !this.isOpen) {
215
215
  return;
216
216
  }
217
217
  return this.optionPrefix + "-" + getter(this.dataItem, this.valueField);
218
218
  }
219
219
  get noDataLabel() {
220
220
  if (this.dataService.itemsCount === 0) {
221
- return this.noDataText;
221
+ return this.messageFor('noDataText');
222
222
  }
223
223
  }
224
224
  get appendTo() {
@@ -532,9 +532,8 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
532
532
  this.localizationChangesSubscription = this.localization
533
533
  .changes.subscribe(({ rtl }) => {
534
534
  this.direction = rtl ? 'rtl' : 'ltr';
535
- this.setMessages();
535
+ this.cdr.detectChanges();
536
536
  });
537
- this.setMessages();
538
537
  this.assignAriaDescribedBy();
539
538
  this.setComponentClasses();
540
539
  }
@@ -558,7 +557,6 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
558
557
  ngOnDestroy() {
559
558
  this.destroyPopup();
560
559
  this.unsubscribeEvents();
561
- clearTimeout(this.messagesTimeout);
562
560
  if (this.localizationChangesSubscription) {
563
561
  this.localizationChangesSubscription.unsubscribe();
564
562
  }
@@ -679,6 +677,12 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
679
677
  reset() {
680
678
  this.value = undefined;
681
679
  }
680
+ /**
681
+ * @hidden
682
+ */
683
+ messageFor(key) {
684
+ return this.localization.get(key);
685
+ }
682
686
  /**
683
687
  * @hidden
684
688
  */
@@ -1173,15 +1177,6 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
1173
1177
  const virtual = this.virtual;
1174
1178
  virtual.skip = event.skip;
1175
1179
  }
1176
- setMessages() {
1177
- this._zone.runOutsideAngular(() => {
1178
- clearTimeout(this.messagesTimeout);
1179
- this.messagesTimeout = setTimeout(() => {
1180
- this.noDataText = this.localization.get('noDataText');
1181
- this.cdr.detectChanges();
1182
- });
1183
- });
1184
- }
1185
1180
  assignAriaDescribedBy() {
1186
1181
  const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';
1187
1182
  const trimmed = currentValue.replace(this.valueLabelId, '').trim();
@@ -1483,9 +1478,12 @@ DropDownListComponent = DropDownListComponent_1 = tslib_1.__decorate([
1483
1478
  <ng-container kendoDropDownListLocalizedMessages
1484
1479
  i18n-noDataText="kendo.dropdownlist.noDataText|The text displayed in the popup when there are no items"
1485
1480
  noDataText="NO DATA FOUND"
1481
+
1482
+ i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
1483
+ selectButtonText="Select"
1486
1484
  >
1487
1485
  </ng-container>
1488
- <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
1486
+ <span class="k-input-inner" unselectable="on" role="option" [id]="valueLabelId">
1489
1487
  <span class="k-input-value-text">
1490
1488
  <ng-template *ngIf="valueTemplate"
1491
1489
  [templateContext]="{
@@ -1502,6 +1500,7 @@ DropDownListComponent = DropDownListComponent_1 = tslib_1.__decorate([
1502
1500
  type="button"
1503
1501
  class="k-input-button k-button k-icon-button"
1504
1502
  [ngClass]="selectButtonClasses"
1503
+ [attr.aria-label]="messageFor('selectButtonText')"
1505
1504
  [kendoEventsOutsideAngular]="{
1506
1505
  mousedown: onMouseDown
1507
1506
  }"
@@ -1597,7 +1596,7 @@ DropDownListComponent = DropDownListComponent_1 = tslib_1.__decorate([
1597
1596
  }">
1598
1597
  </ng-template>
1599
1598
  <ng-template [ngIf]="!noDataTemplate">
1600
- <div>{{ noDataText }}</div>
1599
+ <div>{{ messageFor('noDataText') }}</div>
1601
1600
  </ng-template>
1602
1601
  </div>
1603
1602
  <!--footer template-->
@@ -29,4 +29,11 @@ export declare abstract class BaseCheckDirective {
29
29
  protected removeItem(item: TreeItem): void;
30
30
  protected isItemChecked(item: CheckedItem): boolean;
31
31
  protected updateItems(): void;
32
+ /**
33
+ * Adds the item's depth to the item's value to allow duplicate values on different levels.
34
+ *
35
+ * @param item - The checked key.
36
+ * @returns { string } - A string key consisting of the item's `valueField` value and its depth.
37
+ */
38
+ private getKey;
32
39
  }