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

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 (51) 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 +17 -18
  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 +112 -88
  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
@@ -23,7 +23,7 @@ const packageMetadata = {
23
23
  name: '@progress/kendo-angular-dropdowns',
24
24
  productName: 'Kendo UI for Angular',
25
25
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
26
- publishDate: 1642685068,
26
+ publishDate: 1645547418,
27
27
  version: '',
28
28
  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'
29
29
  };
@@ -343,6 +343,9 @@ let SearchBarComponent = class SearchBarComponent {
343
343
  get placeholder() {
344
344
  return this._placeholder;
345
345
  }
346
+ get ariaExpanded() {
347
+ return this.role === 'combobox' ? this.popupOpen : null;
348
+ }
346
349
  ngOnInit() {
347
350
  this.localizationChangeSubscription = this.localization
348
351
  .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');
@@ -542,7 +545,7 @@ SearchBarComponent = __decorate([
542
545
  [attr.aria-disabled]="disabled"
543
546
  [attr.aria-readonly]="readonly"
544
547
  aria-haspopup="listbox"
545
- [attr.aria-expanded]="popupOpen"
548
+ [attr.aria-expanded]="ariaExpanded"
546
549
  [attr.aria-owns]="listId"
547
550
  [attr.aria-describedby]="tagListId"
548
551
  [attr.aria-activedescendant]="activeDescendant"
@@ -2207,12 +2210,9 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
2207
2210
  }
2208
2211
  get noDataLabel() {
2209
2212
  if (this.data.length === 0) {
2210
- return this.noDataText;
2213
+ return this.messageFor('noDataText');
2211
2214
  }
2212
2215
  }
2213
- get clearTitle() {
2214
- return this.localization.get('clearTitle');
2215
- }
2216
2216
  /**
2217
2217
  * Sets the data of the AutoComplete.
2218
2218
  *
@@ -2381,15 +2381,13 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
2381
2381
  .changes
2382
2382
  .subscribe(({ rtl }) => {
2383
2383
  this.direction = rtl ? 'rtl' : 'ltr';
2384
- this.setMessages();
2384
+ this.cdr.detectChanges();
2385
2385
  });
2386
- this.setMessages();
2387
2386
  this.setComponentClasses();
2388
2387
  }
2389
2388
  ngOnDestroy() {
2390
2389
  this.destroyPopup();
2391
2390
  this.unsubscribeEvents();
2392
- clearTimeout(this.messagesTimeout);
2393
2391
  if (this.localizationChangeSubscription) {
2394
2392
  this.localizationChangeSubscription.unsubscribe();
2395
2393
  }
@@ -2409,6 +2407,12 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
2409
2407
  reset() {
2410
2408
  this.value = NO_VALUE;
2411
2409
  }
2410
+ /**
2411
+ * @hidden
2412
+ */
2413
+ messageFor(key) {
2414
+ return this.localization.get(key);
2415
+ }
2412
2416
  /**
2413
2417
  * @hidden
2414
2418
  */
@@ -2803,15 +2807,6 @@ let AutoCompleteComponent = AutoCompleteComponent_1 = class AutoCompleteComponen
2803
2807
  };
2804
2808
  }
2805
2809
  }
2806
- setMessages() {
2807
- this._zone.runOutsideAngular(() => {
2808
- clearTimeout(this.messagesTimeout);
2809
- this.messagesTimeout = setTimeout(() => {
2810
- this.noDataText = this.localization.get('noDataText');
2811
- this.cdr.detectChanges();
2812
- });
2813
- });
2814
- }
2815
2810
  setComponentClasses() {
2816
2811
  if (this.size) {
2817
2812
  this.renderer.addClass(this.wrapper, getSizeClass('input', this.size));
@@ -3064,7 +3059,7 @@ AutoCompleteComponent = AutoCompleteComponent_1 = __decorate([
3064
3059
  *ngIf="!loading && !readonly && (clearButton && text?.length)"
3065
3060
  class="k-clear-value"
3066
3061
  [style.visibility]="clearButtonVisiblity"
3067
- [attr.title]="clearTitle"
3062
+ [attr.title]="messageFor('clearTitle')"
3068
3063
  role="button"
3069
3064
  tabindex="-1"
3070
3065
  (click)="clearValue($event)"
@@ -3107,7 +3102,7 @@ AutoCompleteComponent = AutoCompleteComponent_1 = __decorate([
3107
3102
  }">
3108
3103
  </ng-template>
3109
3104
  <ng-template [ngIf]="!noDataTemplate">
3110
- <div>{{ noDataText }}</div>
3105
+ <div>{{ messageFor('noDataText') }}</div>
3111
3106
  </ng-template>
3112
3107
  </div>
3113
3108
  <!--footer template-->
@@ -3434,12 +3429,9 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
3434
3429
  }
3435
3430
  get noDataLabel() {
3436
3431
  if (this.data.length === 0) {
3437
- return this.noDataText;
3432
+ return this.messageFor('noDataText');
3438
3433
  }
3439
3434
  }
3440
- get clearTitle() {
3441
- return this.localization.get('clearTitle');
3442
- }
3443
3435
  get appendTo() {
3444
3436
  const { appendTo } = this.popupSettings;
3445
3437
  if (!appendTo || appendTo === 'root') {
@@ -3657,7 +3649,6 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
3657
3649
  this.createValueStream();
3658
3650
  this.subscribeTouchEvents();
3659
3651
  this.attachSelectClickHandler();
3660
- this.setMessages();
3661
3652
  this.setComponentClasses();
3662
3653
  }
3663
3654
  createValueStream() {
@@ -3764,7 +3755,7 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
3764
3755
  this.subs.add(this.localization
3765
3756
  .changes.subscribe(({ rtl }) => {
3766
3757
  this.direction = rtl ? 'rtl' : 'ltr';
3767
- this.setMessages();
3758
+ this.cdr.detectChanges();
3768
3759
  }));
3769
3760
  this.subs.add(merge(this.navigationService.up, this.navigationService.down, this.navigationService.home, this.navigationService.end)
3770
3761
  .pipe(filter((event) => isPresent(event.index)))
@@ -3797,7 +3788,6 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
3797
3788
  }
3798
3789
  ngOnDestroy() {
3799
3790
  this.destroyPopup();
3800
- clearTimeout(this.messagesTimeout);
3801
3791
  this.subs.unsubscribe();
3802
3792
  if (isPresent(this.valueSubscription)) {
3803
3793
  this.valueSubscription.unsubscribe();
@@ -3894,6 +3884,12 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
3894
3884
  const valueEmpty = !isPresent(this.value) || isEmptyString(this.value);
3895
3885
  return textEmpty && valueEmpty;
3896
3886
  }
3887
+ /**
3888
+ * @hidden
3889
+ */
3890
+ messageFor(key) {
3891
+ return this.localization.get(key);
3892
+ }
3897
3893
  /**
3898
3894
  * @hidden
3899
3895
  */
@@ -4376,15 +4372,6 @@ let ComboBoxComponent = ComboBoxComponent_1 = class ComboBoxComponent {
4376
4372
  this.filterText = '';
4377
4373
  this.filterChange.emit(this.filterText);
4378
4374
  }
4379
- setMessages() {
4380
- this.zone.runOutsideAngular(() => {
4381
- clearTimeout(this.messagesTimeout);
4382
- this.messagesTimeout = setTimeout(() => {
4383
- this.noDataText = this.localization.get('noDataText');
4384
- this.cdr.detectChanges();
4385
- });
4386
- });
4387
- }
4388
4375
  subscribeTouchEvents() {
4389
4376
  if (!isDocumentAvailable() || !this.touchEnabled) {
4390
4377
  return;
@@ -4660,6 +4647,9 @@ ComboBoxComponent = ComboBoxComponent_1 = __decorate([
4660
4647
 
4661
4648
  i18n-clearTitle="kendo.combobox.clearTitle|The title of the clear button"
4662
4649
  clearTitle="clear"
4650
+
4651
+ i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
4652
+ selectButtonText="Select"
4663
4653
  >
4664
4654
  </ng-container>
4665
4655
  <kendo-searchbar #searchbar
@@ -4685,7 +4675,7 @@ ComboBoxComponent = ComboBoxComponent_1 = __decorate([
4685
4675
  class="k-clear-value"
4686
4676
  [style.visibility]="clearButtonVisiblity"
4687
4677
  aria-hidden="true"
4688
- [attr.title]="clearTitle"
4678
+ [attr.title]="messageFor('clearTitle')"
4689
4679
  (click)="clearValue($event)"
4690
4680
  [kendoEventsOutsideAngular]="{
4691
4681
  mousedown: preventEventDefault
@@ -4695,11 +4685,11 @@ ComboBoxComponent = ComboBoxComponent_1 = __decorate([
4695
4685
  </span>
4696
4686
  <button
4697
4687
  #select
4698
- aria-hidden="true"
4699
4688
  unselectable="on"
4700
4689
  type="button"
4701
4690
  class="k-input-button k-button k-icon-button"
4702
4691
  [ngClass]="selectButtonClasses"
4692
+ [attr.aria-label]="messageFor('selectButtonText')"
4703
4693
  [kendoEventsOutsideAngular]="{
4704
4694
  mousedown: preventEventDefault
4705
4695
  }"
@@ -4740,7 +4730,7 @@ ComboBoxComponent = ComboBoxComponent_1 = __decorate([
4740
4730
  }">
4741
4731
  </ng-template>
4742
4732
  <ng-template [ngIf]="!noDataTemplate">
4743
- <div>{{ noDataText }}</div>
4733
+ <div>{{ messageFor('noDataText') }}</div>
4744
4734
  </ng-template>
4745
4735
  </div>
4746
4736
  <!--footer template-->
@@ -4989,14 +4979,14 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
4989
4979
  return this.listBoxId;
4990
4980
  }
4991
4981
  get ariaActivedescendant() {
4992
- if (!isPresent(this.dataItem)) {
4982
+ if (!isPresent(this.dataItem) || !this.isOpen) {
4993
4983
  return;
4994
4984
  }
4995
4985
  return this.optionPrefix + "-" + getter$1(this.dataItem, this.valueField);
4996
4986
  }
4997
4987
  get noDataLabel() {
4998
4988
  if (this.dataService.itemsCount === 0) {
4999
- return this.noDataText;
4989
+ return this.messageFor('noDataText');
5000
4990
  }
5001
4991
  }
5002
4992
  get appendTo() {
@@ -5310,9 +5300,8 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
5310
5300
  this.localizationChangesSubscription = this.localization
5311
5301
  .changes.subscribe(({ rtl }) => {
5312
5302
  this.direction = rtl ? 'rtl' : 'ltr';
5313
- this.setMessages();
5303
+ this.cdr.detectChanges();
5314
5304
  });
5315
- this.setMessages();
5316
5305
  this.assignAriaDescribedBy();
5317
5306
  this.setComponentClasses();
5318
5307
  }
@@ -5336,7 +5325,6 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
5336
5325
  ngOnDestroy() {
5337
5326
  this.destroyPopup();
5338
5327
  this.unsubscribeEvents();
5339
- clearTimeout(this.messagesTimeout);
5340
5328
  if (this.localizationChangesSubscription) {
5341
5329
  this.localizationChangesSubscription.unsubscribe();
5342
5330
  }
@@ -5457,6 +5445,12 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
5457
5445
  reset() {
5458
5446
  this.value = undefined;
5459
5447
  }
5448
+ /**
5449
+ * @hidden
5450
+ */
5451
+ messageFor(key) {
5452
+ return this.localization.get(key);
5453
+ }
5460
5454
  /**
5461
5455
  * @hidden
5462
5456
  */
@@ -5951,15 +5945,6 @@ let DropDownListComponent = DropDownListComponent_1 = class DropDownListComponen
5951
5945
  const virtual = this.virtual;
5952
5946
  virtual.skip = event.skip;
5953
5947
  }
5954
- setMessages() {
5955
- this._zone.runOutsideAngular(() => {
5956
- clearTimeout(this.messagesTimeout);
5957
- this.messagesTimeout = setTimeout(() => {
5958
- this.noDataText = this.localization.get('noDataText');
5959
- this.cdr.detectChanges();
5960
- });
5961
- });
5962
- }
5963
5948
  assignAriaDescribedBy() {
5964
5949
  const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';
5965
5950
  const trimmed = currentValue.replace(this.valueLabelId, '').trim();
@@ -6261,9 +6246,12 @@ DropDownListComponent = DropDownListComponent_1 = __decorate([
6261
6246
  <ng-container kendoDropDownListLocalizedMessages
6262
6247
  i18n-noDataText="kendo.dropdownlist.noDataText|The text displayed in the popup when there are no items"
6263
6248
  noDataText="NO DATA FOUND"
6249
+
6250
+ i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6251
+ selectButtonText="Select"
6264
6252
  >
6265
6253
  </ng-container>
6266
- <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
6254
+ <span class="k-input-inner" unselectable="on" role="option" [id]="valueLabelId">
6267
6255
  <span class="k-input-value-text">
6268
6256
  <ng-template *ngIf="valueTemplate"
6269
6257
  [templateContext]="{
@@ -6280,6 +6268,7 @@ DropDownListComponent = DropDownListComponent_1 = __decorate([
6280
6268
  type="button"
6281
6269
  class="k-input-button k-button k-icon-button"
6282
6270
  [ngClass]="selectButtonClasses"
6271
+ [attr.aria-label]="messageFor('selectButtonText')"
6283
6272
  [kendoEventsOutsideAngular]="{
6284
6273
  mousedown: onMouseDown
6285
6274
  }"
@@ -6322,7 +6311,7 @@ DropDownListComponent = DropDownListComponent_1 = __decorate([
6322
6311
  class="k-list"
6323
6312
  [ngClass]="optionLabelSizeClass"
6324
6313
  >
6325
- <div class="k-list-optionlabel k-list-item" [ngClass]="{ 'k-disabled': isDisabledDefaultItem }" kendoDropDownsSelectable [index]="-1">
6314
+ <div class="k-list-optionlabel" [ngClass]="{ 'k-disabled': isDisabledDefaultItem }" kendoDropDownsSelectable [index]="-1">
6326
6315
  {{ getDefaultItemText() }}
6327
6316
  </div>
6328
6317
  </div>
@@ -6332,7 +6321,7 @@ DropDownListComponent = DropDownListComponent_1 = __decorate([
6332
6321
  class="k-list"
6333
6322
  [ngClass]="optionLabelSizeClass"
6334
6323
  >
6335
- <div class="k-list-optionlabel k-list-item" [ngClass]="{ 'k-disabled': isDisabledDefaultItem }" kendoDropDownsSelectable [index]="-1">
6324
+ <div class="k-list-optionlabel" [ngClass]="{ 'k-disabled': isDisabledDefaultItem }" kendoDropDownsSelectable [index]="-1">
6336
6325
  <ng-template
6337
6326
  [templateContext]="{
6338
6327
  templateRef: itemTemplate.templateRef,
@@ -6375,7 +6364,7 @@ DropDownListComponent = DropDownListComponent_1 = __decorate([
6375
6364
  }">
6376
6365
  </ng-template>
6377
6366
  <ng-template [ngIf]="!noDataTemplate">
6378
- <div>{{ noDataText }}</div>
6367
+ <div>{{ messageFor('noDataText') }}</div>
6379
6368
  </ng-template>
6380
6369
  </div>
6381
6370
  <!--footer template-->
@@ -6627,7 +6616,8 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
6627
6616
  */
6628
6617
  this.clearButton = true;
6629
6618
  /**
6630
- * A user-defined callback function which receives an array of selected data items and maps them to an array of tags.
6619
+ * A user-defined callback function which receives an array of selected data items and maps them to an array of tags
6620
+ * ([see examples]({% slug summarytagmode_multiselect %}#toc-rendering-of-tags)).
6631
6621
  *
6632
6622
  * @param { Any[] } dataItems - The selected data items from the list.
6633
6623
  * @returns { Any[] } - The tags that will be rendered by the component.
@@ -6742,6 +6732,7 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
6742
6732
  */
6743
6733
  this.removeTag = new EventEmitter();
6744
6734
  this.hostClasses = true;
6735
+ this.role = 'combobox';
6745
6736
  this.initialized = false;
6746
6737
  this._size = 'medium';
6747
6738
  this._rounded = 'medium';
@@ -7051,6 +7042,9 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
7051
7042
  get isLoading() {
7052
7043
  return this.loading;
7053
7044
  }
7045
+ get isAriaExpanded() {
7046
+ return this.isOpen;
7047
+ }
7054
7048
  /**
7055
7049
  * @hidden
7056
7050
  */
@@ -7114,12 +7108,9 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
7114
7108
  }
7115
7109
  get noDataLabel() {
7116
7110
  if (this.dataService.itemsCount === 0) {
7117
- return this.noDataText;
7111
+ return this.messageFor('noDataText');
7118
7112
  }
7119
7113
  }
7120
- get clearTitle() {
7121
- return this.localization.get('clearTitle');
7122
- }
7123
7114
  get clearButtonVisiblity() {
7124
7115
  if (this.touchEnabled) {
7125
7116
  return 'visible';
@@ -7329,9 +7320,8 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
7329
7320
  this.localizationChangeSubscription = this.localization
7330
7321
  .changes.subscribe(({ rtl }) => {
7331
7322
  this.direction = rtl ? 'rtl' : 'ltr';
7332
- this.setMessages();
7323
+ this.cdr.markForCheck();
7333
7324
  });
7334
- this.setMessages();
7335
7325
  this.setState(this.value);
7336
7326
  this.setComponentClasses();
7337
7327
  this.initialized = true;
@@ -7355,7 +7345,6 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
7355
7345
  ngOnDestroy() {
7356
7346
  this._toggle(false);
7357
7347
  this.unsubscribeEvents();
7358
- clearTimeout(this.messagesTimeout);
7359
7348
  }
7360
7349
  /**
7361
7350
  * Toggles the visibility of the popup
@@ -7388,6 +7377,12 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
7388
7377
  this.text = "";
7389
7378
  this.value = [];
7390
7379
  }
7380
+ /**
7381
+ * @hidden
7382
+ */
7383
+ messageFor(key) {
7384
+ return this.localization.get(key);
7385
+ }
7391
7386
  // NG MODEL BINDINGS
7392
7387
  /**
7393
7388
  * @hidden
@@ -7816,15 +7811,6 @@ let MultiSelectComponent = MultiSelectComponent_1 = class MultiSelectComponent {
7816
7811
  setTimeout(() => this._zone.run(f));
7817
7812
  });
7818
7813
  }
7819
- setMessages() {
7820
- this._zone.runOutsideAngular(() => {
7821
- clearTimeout(this.messagesTimeout);
7822
- this.messagesTimeout = setTimeout(() => {
7823
- this.noDataText = this.localization.get('noDataText');
7824
- this.cdr.detectChanges();
7825
- });
7826
- });
7827
- }
7828
7814
  setComponentClasses() {
7829
7815
  if (this.size) {
7830
7816
  this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('input', this.size));
@@ -8061,6 +8047,15 @@ __decorate([
8061
8047
  __metadata("design:type", Boolean),
8062
8048
  __metadata("design:paramtypes", [])
8063
8049
  ], MultiSelectComponent.prototype, "isLoading", null);
8050
+ __decorate([
8051
+ HostBinding('attr.role'),
8052
+ __metadata("design:type", String)
8053
+ ], MultiSelectComponent.prototype, "role", void 0);
8054
+ __decorate([
8055
+ HostBinding('attr.aria-expanded'),
8056
+ __metadata("design:type", Boolean),
8057
+ __metadata("design:paramtypes", [])
8058
+ ], MultiSelectComponent.prototype, "isAriaExpanded", null);
8064
8059
  __decorate([
8065
8060
  HostListener('mousedown', ['$event']),
8066
8061
  __metadata("design:type", Function),
@@ -8094,7 +8089,7 @@ MultiSelectComponent = MultiSelectComponent_1 = __decorate([
8094
8089
  i18n-noDataText="kendo.multiselect.noDataText|The text displayed in the popup when there are no items"
8095
8090
  noDataText="NO DATA FOUND"
8096
8091
 
8097
- i18n-clearTitle="kendo.combobox.clearTitle|The title of the clear button"
8092
+ i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
8098
8093
  clearTitle="clear"
8099
8094
  >
8100
8095
  </ng-container>
@@ -8117,7 +8112,7 @@ MultiSelectComponent = MultiSelectComponent_1 = __decorate([
8117
8112
  <kendo-searchbar
8118
8113
  #searchbar
8119
8114
  [id]="focusableId"
8120
- [role]="'listbox'"
8115
+ [role]="'textbox'"
8121
8116
  [tagListId]="tagListId"
8122
8117
  [activeDescendant]="activeDescendant"
8123
8118
  [noDataLabel]="noDataLabel"
@@ -8139,7 +8134,7 @@ MultiSelectComponent = MultiSelectComponent_1 = __decorate([
8139
8134
  *ngIf="!loading && !readonly && clearButton && (tags?.length || text?.length)"
8140
8135
  class="k-clear-value"
8141
8136
  [style.visibility]="clearButtonVisiblity"
8142
- [attr.title]="clearTitle"
8137
+ [attr.title]="messageFor('clearTitle')"
8143
8138
  role="button"
8144
8139
  tabindex="-1"
8145
8140
  (mousedown)="clearAll($event)"
@@ -8204,7 +8199,7 @@ MultiSelectComponent = MultiSelectComponent_1 = __decorate([
8204
8199
  }">
8205
8200
  </ng-template>
8206
8201
  <ng-template [ngIf]="!noDataTemplate">
8207
- <div>{{ noDataText }}</div>
8202
+ <div>{{ messageFor('noDataText') }}</div>
8208
8203
  </ng-template>
8209
8204
  </div>
8210
8205
  <!--footer template-->
@@ -8602,7 +8597,7 @@ MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = __decorate([
8602
8597
  class="k-clear-value"
8603
8598
  [style.visibility]="clearButtonVisiblity"
8604
8599
  aria-hidden="true"
8605
- [attr.title]="clearTitle"
8600
+ [attr.title]="messageFor('clearTitle')"
8606
8601
  (click)="clearValue($event)"
8607
8602
  [kendoEventsOutsideAngular]="{
8608
8603
  mousedown: preventEventDefault
@@ -8619,6 +8614,7 @@ MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = __decorate([
8619
8614
  type="button"
8620
8615
  class="k-input-button k-button k-icon-button"
8621
8616
  [ngClass]="selectButtonClasses"
8617
+ [attr.aria-label]="messageFor('selectButtonText')"
8622
8618
  [kendoEventsOutsideAngular]="{
8623
8619
  mousedown: preventEventDefault
8624
8620
  }"
@@ -8743,7 +8739,7 @@ MultiColumnComboBoxComponent = MultiColumnComboBoxComponent_1 = __decorate([
8743
8739
  >
8744
8740
  </ng-template>
8745
8741
  <ng-template [ngIf]="!noDataTemplate">
8746
- <div>{{ noDataText }}</div>
8742
+ <div>{{ messageFor('noDataText') }}</div>
8747
8743
  </ng-template>
8748
8744
  </div>
8749
8745
 
@@ -10032,11 +10028,15 @@ DropDownTreeComponent = DropDownTreeComponent_1 = __decorate([
10032
10028
 
10033
10029
  i18n-clearTitle="kendo.dropdowntree.clearTitle|The title of the clear button"
10034
10030
  clearTitle="clear"
10031
+
10032
+ i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
10033
+ selectButtonText="Select"
10035
10034
  >
10036
10035
  </ng-container>
10037
10036
  <span
10038
10037
  [attr.id]="valueLabelId"
10039
10038
  class="k-input-inner"
10039
+ role="option"
10040
10040
  >
10041
10041
  <span class="k-input-value-text">
10042
10042
  <ng-template *ngIf="valueTemplate"
@@ -10064,6 +10064,7 @@ DropDownTreeComponent = DropDownTreeComponent_1 = __decorate([
10064
10064
  aria-hidden="true"
10065
10065
  class="k-input-button k-button k-icon-button"
10066
10066
  [ngClass]="selectButtonClasses"
10067
+ [attr.aria-label]="messageFor('selectButtonText')"
10067
10068
  >
10068
10069
  <span
10069
10070
  class="k-button-icon k-icon"
@@ -10191,7 +10192,7 @@ let MultiSelectTreeComponent = MultiSelectTreeComponent_1 = class MultiSelectTre
10191
10192
  this.cdr = cdr;
10192
10193
  this.touchEnabled = touchEnabled$$1;
10193
10194
  this.hostClasses = true;
10194
- this.role = 'listbox';
10195
+ this.role = 'combobox';
10195
10196
  this.ariaHasPopup = 'tree';
10196
10197
  /**
10197
10198
  * Sets the levels in the data set where the values can be found when `valueField` is an Array.
@@ -10378,6 +10379,9 @@ let MultiSelectTreeComponent = MultiSelectTreeComponent_1 = class MultiSelectTre
10378
10379
  get hostTabIndex() {
10379
10380
  return this.tabindex;
10380
10381
  }
10382
+ get isAriaExpanded() {
10383
+ return this.isOpen;
10384
+ }
10381
10385
  get isReadonly() {
10382
10386
  return this.readonly;
10383
10387
  }
@@ -11345,6 +11349,11 @@ __decorate([
11345
11349
  HostBinding('attr.role'),
11346
11350
  __metadata("design:type", String)
11347
11351
  ], MultiSelectTreeComponent.prototype, "role", void 0);
11352
+ __decorate([
11353
+ HostBinding('attr.aria-expanded'),
11354
+ __metadata("design:type", Boolean),
11355
+ __metadata("design:paramtypes", [])
11356
+ ], MultiSelectTreeComponent.prototype, "isAriaExpanded", null);
11348
11357
  __decorate([
11349
11358
  HostBinding('attr.aria-haspopup'),
11350
11359
  __metadata("design:type", String)
@@ -12082,11 +12091,8 @@ TagListComponent = __decorate([
12082
12091
  template: `
12083
12092
  <div
12084
12093
  *ngFor="let tag of tags; let index = index;"
12085
- role="option"
12086
12094
  [attr.id]="itemId(tag, index)"
12087
12095
  [attr.aria-hidden]="tagAriaHidden(index)"
12088
- aria-selected="true"
12089
- [attr.aria-setsize]="tags?.length"
12090
12096
  class="k-chip"
12091
12097
  [ngClass]="{
12092
12098
  'k-focus': index === focused,
@@ -12160,6 +12166,10 @@ __decorate([
12160
12166
  Input(),
12161
12167
  __metadata("design:type", String)
12162
12168
  ], Messages.prototype, "checkAllText", void 0);
12169
+ __decorate([
12170
+ Input(),
12171
+ __metadata("design:type", String)
12172
+ ], Messages.prototype, "selectButtonText", void 0);
12163
12173
 
12164
12174
  var LocalizedMessagesDirective_1;
12165
12175
  /**
@@ -12528,7 +12538,7 @@ class BaseCheckDirective {
12528
12538
  const level = getHierarchicalItemLevel(item.index);
12529
12539
  const candidate = Object.assign({}, item, { level });
12530
12540
  this.checkedItems.push(candidate);
12531
- this.checkedKeys.add(valueFrom(candidate, this.valueField));
12541
+ this.checkedKeys.add(this.getKey(candidate));
12532
12542
  }
12533
12543
  removeItem(item) {
12534
12544
  if (!this.isItemChecked(item)) {
@@ -12538,14 +12548,28 @@ class BaseCheckDirective {
12538
12548
  const candidate = Object.assign({}, item, { level });
12539
12549
  this.checkedItems = this.checkedItems
12540
12550
  .filter(item => valueFrom(item, this.valueField) !== valueFrom(candidate, this.valueField));
12541
- this.checkedKeys.delete(valueFrom(candidate, this.valueField));
12551
+ this.checkedKeys.delete(this.getKey(candidate));
12542
12552
  }
12543
12553
  isItemChecked(item) {
12544
- return this.checkedKeys.has(valueFrom(item, this.valueField));
12554
+ const level = item.index.split('_').length - 1;
12555
+ item.level = level;
12556
+ return this.checkedKeys.has(this.getKey(item));
12545
12557
  }
12546
12558
  updateItems() {
12547
12559
  this.checkedItems = this.checkedItems || [];
12548
- this.checkedKeys = new Set(this.checkedItems.map(item => valueFrom(item, this.valueField)));
12560
+ this.checkedKeys = new Set(this.checkedItems.map(item => this.getKey(item)));
12561
+ }
12562
+ /**
12563
+ * Adds the item's depth to the item's value to allow duplicate values on different levels.
12564
+ *
12565
+ * @param item - The checked key.
12566
+ * @returns { string } - A string key consisting of the item's `valueField` value and its depth.
12567
+ */
12568
+ getKey(item) {
12569
+ if (isArray(this.valueField)) {
12570
+ return valueFrom(item, this.valueField) + '_' + item.level;
12571
+ }
12572
+ return valueFrom(item, this.valueField);
12549
12573
  }
12550
12574
  }
12551
12575
  __decorate([