@progress/kendo-angular-dropdowns 11.3.0-develop.8 → 11.3.0-develop.9

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.
@@ -32,8 +32,8 @@ const packageMetadata = {
32
32
  name: '@progress/kendo-angular-dropdowns',
33
33
  productName: 'Kendo UI for Angular',
34
34
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
35
- publishDate: 1677079930,
36
- version: '11.3.0-develop.8',
35
+ publishDate: 1677099903,
36
+ version: '11.3.0-develop.9',
37
37
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
38
38
  };
39
39
 
@@ -389,8 +389,8 @@ const getTextField = (field, level) => {
389
389
  /**
390
390
  * @hidden
391
391
  */
392
- const getSearchableItems = (popupId, popupElement) => {
393
- const nodeSeletor = `kendo-popup[id='${popupId}'] li.k-treeview-item`;
392
+ const getSearchableItems = (treeViewId, popupElement) => {
393
+ const nodeSeletor = `kendo-treeview[id='${treeViewId}'] li.k-treeview-item`;
394
394
  const liElements = Array.from(popupElement.querySelectorAll(nodeSeletor));
395
395
  return liElements.map((liElement) => {
396
396
  return { text: liElement.innerText, index: liElement.getAttribute('data-treeindex') };
@@ -404,6 +404,7 @@ class SearchBarComponent {
404
404
  constructor(localization, renderer, injector) {
405
405
  this.localization = localization;
406
406
  this.injector = injector;
407
+ this.ariaExpanded = null;
407
408
  this.valueChange = new EventEmitter();
408
409
  this.onBlur = new EventEmitter();
409
410
  this.onFocus = new EventEmitter();
@@ -460,9 +461,6 @@ class SearchBarComponent {
460
461
  get placeholder() {
461
462
  return this._placeholder;
462
463
  }
463
- get ariaExpanded() {
464
- return this.role === 'combobox' ? this.popupOpen : null;
465
- }
466
464
  ngOnInit() {
467
465
  this.subs.add(this.localization
468
466
  .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr'));
@@ -577,14 +575,14 @@ class SearchBarComponent {
577
575
  }
578
576
  }
579
577
  SearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: SearchBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
580
- SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SearchBarComponent, selector: "kendo-searchbar", inputs: { id: "id", listId: "listId", tagListId: "tagListId", activeDescendant: "activeDescendant", disabled: "disabled", readonly: "readonly", tabIndex: "tabIndex", popupOpen: "popupOpen", role: "role", isLoading: "isLoading", isSuggestable: "isSuggestable", isFilterable: "isFilterable", userInput: "userInput", suggestedText: "suggestedText", placeholder: "placeholder" }, outputs: { valueChange: "valueChange", onBlur: "onBlur", onFocus: "onFocus", onClick: "onClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-searchbar": "this.searchBarClass" } }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
578
+ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: SearchBarComponent, selector: "kendo-searchbar", inputs: { id: "id", tagListId: "tagListId", activeDescendant: "activeDescendant", disabled: "disabled", readonly: "readonly", tabIndex: "tabIndex", role: "role", isLoading: "isLoading", ariaControls: "ariaControls", ariaExpanded: "ariaExpanded", isSuggestable: "isSuggestable", isFilterable: "isFilterable", userInput: "userInput", suggestedText: "suggestedText", placeholder: "placeholder" }, outputs: { valueChange: "valueChange", onBlur: "onBlur", onFocus: "onFocus", onClick: "onClick", onNavigate: "onNavigate" }, host: { properties: { "class.k-searchbar": "this.searchBarClass" } }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
581
579
  <input #input
582
580
  autocomplete="off"
583
581
  [id]="id"
584
582
  [disabled]="disabled"
585
583
  [readonly]="readonly"
586
584
  [placeholder]="placeholder"
587
- [class]="'k-input-inner'"
585
+ class="k-input-inner"
588
586
  (input)="handleInput($event)"
589
587
  (keydown)="handleKeydown($event)"
590
588
  [kendoEventsOutsideAngular]="{
@@ -597,7 +595,7 @@ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
597
595
  [attr.role]="role"
598
596
  aria-haspopup="listbox"
599
597
  [attr.aria-expanded]="ariaExpanded"
600
- [attr.aria-controls]="listId"
598
+ [attr.aria-controls]="ariaControls"
601
599
  [attr.aria-describedby]="tagListId"
602
600
  [attr.aria-activedescendant]="activeDescendant"
603
601
  [attr.aria-busy]="isLoading"
@@ -615,7 +613,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
615
613
  [disabled]="disabled"
616
614
  [readonly]="readonly"
617
615
  [placeholder]="placeholder"
618
- [class]="'k-input-inner'"
616
+ class="k-input-inner"
619
617
  (input)="handleInput($event)"
620
618
  (keydown)="handleKeydown($event)"
621
619
  [kendoEventsOutsideAngular]="{
@@ -628,7 +626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
628
626
  [attr.role]="role"
629
627
  aria-haspopup="listbox"
630
628
  [attr.aria-expanded]="ariaExpanded"
631
- [attr.aria-controls]="listId"
629
+ [attr.aria-controls]="ariaControls"
632
630
  [attr.aria-describedby]="tagListId"
633
631
  [attr.aria-activedescendant]="activeDescendant"
634
632
  [attr.aria-busy]="isLoading"
@@ -638,8 +636,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
638
636
  }]
639
637
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { id: [{
640
638
  type: Input
641
- }], listId: [{
642
- type: Input
643
639
  }], tagListId: [{
644
640
  type: Input
645
641
  }], activeDescendant: [{
@@ -650,12 +646,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
650
646
  type: Input
651
647
  }], tabIndex: [{
652
648
  type: Input
653
- }], popupOpen: [{
654
- type: Input
655
649
  }], role: [{
656
650
  type: Input
657
651
  }], isLoading: [{
658
652
  type: Input
653
+ }], ariaControls: [{
654
+ type: Input
655
+ }], ariaExpanded: [{
656
+ type: Input
659
657
  }], isSuggestable: [{
660
658
  type: Input
661
659
  }], isFilterable: [{
@@ -2156,6 +2154,9 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2156
2154
  *ngIf="checkboxes.enabled"
2157
2155
  type="checkbox"
2158
2156
  class="k-checkbox"
2157
+ role="presentation"
2158
+ tabindex="-1"
2159
+ aria-hidden="true"
2159
2160
  [ngClass]="checkboxClasses"
2160
2161
  (change)="onCheckedChange($event, itemIndex)"
2161
2162
  [checked]="isChecked(itemIndex)"
@@ -2284,6 +2285,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2284
2285
  *ngIf="checkboxes.enabled"
2285
2286
  type="checkbox"
2286
2287
  class="k-checkbox"
2288
+ role="presentation"
2289
+ tabindex="-1"
2290
+ aria-hidden="true"
2287
2291
  [ngClass]="checkboxClasses"
2288
2292
  (change)="onCheckedChange($event, itemIndex)"
2289
2293
  [checked]="isChecked(itemIndex)"
@@ -2426,7 +2430,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2426
2430
  class Messages extends ComponentMessages {
2427
2431
  }
2428
2432
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2429
- Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { noDataText: "noDataText", clearTitle: "clearTitle", checkAllText: "checkAllText", selectButtonText: "selectButtonText" }, usesInheritance: true, ngImport: i0 });
2433
+ Messages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: Messages, inputs: { noDataText: "noDataText", clearTitle: "clearTitle", checkAllText: "checkAllText", selectButtonText: "selectButtonText", filterInputLabel: "filterInputLabel", popupLabel: "popupLabel" }, usesInheritance: true, ngImport: i0 });
2430
2434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
2431
2435
  type: Directive
2432
2436
  }], propDecorators: { noDataText: [{
@@ -2437,6 +2441,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2437
2441
  type: Input
2438
2442
  }], selectButtonText: [{
2439
2443
  type: Input
2444
+ }], filterInputLabel: [{
2445
+ type: Input
2446
+ }], popupLabel: [{
2447
+ type: Input
2440
2448
  }] } });
2441
2449
 
2442
2450
  /**
@@ -2611,8 +2619,8 @@ class AutoCompleteComponent {
2611
2619
  */
2612
2620
  this.onBlur = new EventEmitter();
2613
2621
  this.widgetClasses = true;
2614
- this.listBoxId = guid();
2615
- this.optionPrefix = guid();
2622
+ this.listBoxId = `k-${guid()}`;
2623
+ this.optionPrefix = `k-${guid()}`;
2616
2624
  this.onChangeCallback = noop;
2617
2625
  this.onTouchedCallback = noop;
2618
2626
  this.popupMouseDownHandler = (event) => event.preventDefault();
@@ -2676,6 +2684,9 @@ class AutoCompleteComponent {
2676
2684
  return 'visible';
2677
2685
  }
2678
2686
  }
2687
+ get ariaControls() {
2688
+ return this.isOpen ? this.listBoxId : undefined;
2689
+ }
2679
2690
  /**
2680
2691
  * Toggles the visibility of the popup.
2681
2692
  * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
@@ -3248,9 +3259,9 @@ class AutoCompleteComponent {
3248
3259
  if (this.virtual) {
3249
3260
  this.virtual.skip = 0;
3250
3261
  }
3251
- const horizontalAlign = this.direction === "rtl" ? "right" : "left";
3252
- const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
3253
- const popupPosition = { horizontal: horizontalAlign, vertical: "top" };
3262
+ const horizontalAlign = this.direction === 'rtl' ? 'right' : 'left';
3263
+ const anchorPosition = { horizontal: horizontalAlign, vertical: 'bottom' };
3264
+ const popupPosition = { horizontal: horizontalAlign, vertical: 'top' };
3254
3265
  this.popupRef = this.popupService.open({
3255
3266
  anchor: this.wrapper,
3256
3267
  animate: this.popupSettings.animate,
@@ -3267,7 +3278,11 @@ class AutoCompleteComponent {
3267
3278
  popupWrapper.style.minWidth = min;
3268
3279
  popupWrapper.style.width = max;
3269
3280
  popupWrapper.style.height = this.height;
3270
- popupWrapper.setAttribute("dir", this.direction);
3281
+ popupWrapper.setAttribute('dir', this.direction);
3282
+ if (!this.appendTo) {
3283
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
3284
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
3285
+ }
3271
3286
  const listBox = popupWrapper.querySelector('ul.k-list-ul');
3272
3287
  const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
3273
3288
  if (ariaLabel) {
@@ -3372,22 +3387,26 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3372
3387
 
3373
3388
  i18n-clearTitle="kendo.autocomplete.clearTitle|The title of the clear button"
3374
3389
  clearTitle="clear"
3390
+
3391
+ i18n-popupLabel="kendo.autocomplete.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
3392
+ popupLabel="Options list"
3375
3393
  >
3376
3394
  </ng-container>
3377
3395
  <kendo-searchbar #searchbar
3378
3396
  [role]="'combobox'"
3397
+ [ariaExpanded]="isOpen"
3398
+ [ariaControls]="ariaControls"
3379
3399
  [isSuggestable]="suggest"
3380
3400
  [isFilterable]="filterable"
3381
3401
  [isLoading]="isLoading"
3402
+ [ariaControls]="ariaControls"
3382
3403
  [id]="focusableId"
3383
- [listId]="listBoxId"
3384
3404
  [activeDescendant]="activeDescendant"
3385
3405
  [userInput]="text"
3386
3406
  [suggestedText]="suggestion"
3387
3407
  [disabled]="disabled"
3388
3408
  [readonly]="readonly"
3389
3409
  [tabIndex]="tabIndex"
3390
- [popupOpen]="isOpen"
3391
3410
  [placeholder]="placeholder"
3392
3411
  (onNavigate)="handleNavigate($event)"
3393
3412
  (valueChange)="searchBarChange($event)"
@@ -3459,7 +3478,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3459
3478
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
3460
3479
  </ng-template>
3461
3480
  <ng-container #container></ng-container>
3462
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "popupOpen", "role", "isLoading", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
3481
+ `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
3463
3482
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, decorators: [{
3464
3483
  type: Component,
3465
3484
  args: [{
@@ -3492,22 +3511,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3492
3511
 
3493
3512
  i18n-clearTitle="kendo.autocomplete.clearTitle|The title of the clear button"
3494
3513
  clearTitle="clear"
3514
+
3515
+ i18n-popupLabel="kendo.autocomplete.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
3516
+ popupLabel="Options list"
3495
3517
  >
3496
3518
  </ng-container>
3497
3519
  <kendo-searchbar #searchbar
3498
3520
  [role]="'combobox'"
3521
+ [ariaExpanded]="isOpen"
3522
+ [ariaControls]="ariaControls"
3499
3523
  [isSuggestable]="suggest"
3500
3524
  [isFilterable]="filterable"
3501
3525
  [isLoading]="isLoading"
3526
+ [ariaControls]="ariaControls"
3502
3527
  [id]="focusableId"
3503
- [listId]="listBoxId"
3504
3528
  [activeDescendant]="activeDescendant"
3505
3529
  [userInput]="text"
3506
3530
  [suggestedText]="suggestion"
3507
3531
  [disabled]="disabled"
3508
3532
  [readonly]="readonly"
3509
3533
  [tabIndex]="tabIndex"
3510
- [popupOpen]="isOpen"
3511
3534
  [placeholder]="placeholder"
3512
3535
  (onNavigate)="handleNavigate($event)"
3513
3536
  (valueChange)="searchBarChange($event)"
@@ -3944,8 +3967,8 @@ class ComboBoxComponent {
3944
3967
  this.onBlur = new EventEmitter();
3945
3968
  this.widgetClasses = true;
3946
3969
  this._isFocused = false;
3947
- this.listBoxId = guid();
3948
- this.optionPrefix = guid();
3970
+ this.listBoxId = `k-${guid()}`;
3971
+ this.optionPrefix = `k-${guid()}`;
3949
3972
  this.onChangeCallback = (_) => { };
3950
3973
  this.onTouchedCallback = (_) => { };
3951
3974
  /**
@@ -3979,6 +4002,12 @@ class ComboBoxComponent {
3979
4002
  get text() {
3980
4003
  return this._text;
3981
4004
  }
4005
+ /**
4006
+ * @hidden
4007
+ */
4008
+ get ariaControls() {
4009
+ return this.isOpen ? this.listBoxId : undefined;
4010
+ }
3982
4011
  /**
3983
4012
  * @hidden
3984
4013
  */
@@ -4917,7 +4946,11 @@ class ComboBoxComponent {
4917
4946
  popupWrapper.style.minWidth = min;
4918
4947
  popupWrapper.style.width = max;
4919
4948
  popupWrapper.style.height = this.popupHeight;
4920
- popupWrapper.setAttribute("dir", this.direction);
4949
+ popupWrapper.setAttribute('dir', this.direction);
4950
+ if (!this.appendTo) {
4951
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
4952
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
4953
+ }
4921
4954
  const listBox = this.popupRef.popupElement.querySelector('ul');
4922
4955
  const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
4923
4956
  if (ariaLabel) {
@@ -5021,12 +5054,16 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5021
5054
 
5022
5055
  i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
5023
5056
  selectButtonText="Select"
5057
+
5058
+ i18n-popupLabel="kendo.combobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
5059
+ popupLabel="Options list"
5024
5060
  >
5025
5061
  </ng-container>
5026
5062
  <kendo-searchbar #searchbar
5027
5063
  [role]="'combobox'"
5064
+ [ariaExpanded]="isOpen"
5065
+ [ariaControls]="ariaControls"
5028
5066
  [id]="focusableId"
5029
- [listId]="listBoxId"
5030
5067
  [isLoading]="loading"
5031
5068
  [isSuggestable]="suggest"
5032
5069
  [isFilterable]="filterable"
@@ -5036,7 +5073,6 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5036
5073
  [disabled]="disabled"
5037
5074
  [readonly]="readonly"
5038
5075
  [tabIndex]="tabIndex"
5039
- [popupOpen]="isOpen"
5040
5076
  [placeholder]="placeholder"
5041
5077
  (onNavigate)="handleNavigate($event)"
5042
5078
  (valueChange)="searchBarChange($event)"
@@ -5128,7 +5164,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5128
5164
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5129
5165
  </ng-template>
5130
5166
  <ng-container #container></ng-container>
5131
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "popupOpen", "role", "isLoading", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
5167
+ `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
5132
5168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, decorators: [{
5133
5169
  type: Component,
5134
5170
  args: [{
@@ -5162,12 +5198,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5162
5198
 
5163
5199
  i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
5164
5200
  selectButtonText="Select"
5201
+
5202
+ i18n-popupLabel="kendo.combobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
5203
+ popupLabel="Options list"
5165
5204
  >
5166
5205
  </ng-container>
5167
5206
  <kendo-searchbar #searchbar
5168
5207
  [role]="'combobox'"
5208
+ [ariaExpanded]="isOpen"
5209
+ [ariaControls]="ariaControls"
5169
5210
  [id]="focusableId"
5170
- [listId]="listBoxId"
5171
5211
  [isLoading]="loading"
5172
5212
  [isSuggestable]="suggest"
5173
5213
  [isFilterable]="filterable"
@@ -5177,7 +5217,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5177
5217
  [disabled]="disabled"
5178
5218
  [readonly]="readonly"
5179
5219
  [tabIndex]="tabIndex"
5180
- [popupOpen]="isOpen"
5181
5220
  [placeholder]="placeholder"
5182
5221
  (onNavigate)="handleNavigate($event)"
5183
5222
  (valueChange)="searchBarChange($event)"
@@ -5521,6 +5560,7 @@ class DropDownListComponent {
5521
5560
  * @hidden
5522
5561
  */
5523
5562
  this.caretAltDownIcon = caretAltDownIcon;
5563
+ this.listBoxId = `k-${guid()}`;
5524
5564
  /**
5525
5565
  * Sets the height of the options list. By default, `listHeight` is 200px.
5526
5566
  *
@@ -5602,9 +5642,8 @@ class DropDownListComponent {
5602
5642
  this.role = 'combobox';
5603
5643
  this.haspopup = 'listbox';
5604
5644
  this.groupIndices = [];
5605
- this.listBoxId = guid();
5606
- this.optionPrefix = guid();
5607
- this.filterText = "";
5645
+ this.optionPrefix = `k-${guid()}`;
5646
+ this.filterText = '';
5608
5647
  this.subs = new Subscription();
5609
5648
  this._isFocused = false;
5610
5649
  this.onTouchedCallback = (_) => { };
@@ -5910,9 +5949,6 @@ class DropDownListComponent {
5910
5949
  get isAriaExpanded() {
5911
5950
  return this.ariaExpanded;
5912
5951
  }
5913
- get hostAriaControls() {
5914
- return this.ariaControls;
5915
- }
5916
5952
  get hostAriaInvalid() {
5917
5953
  var _a;
5918
5954
  return this.formControl ? (_a = this.formControl) === null || _a === void 0 ? void 0 : _a.invalid.toString() : null;
@@ -6254,7 +6290,11 @@ class DropDownListComponent {
6254
6290
  popupWrapper.style.minWidth = min;
6255
6291
  popupWrapper.style.width = max;
6256
6292
  popupWrapper.style.height = this.height;
6257
- popupWrapper.setAttribute("dir", this.direction);
6293
+ popupWrapper.setAttribute('dir', this.direction);
6294
+ if (!this.appendTo) {
6295
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
6296
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
6297
+ }
6258
6298
  const listBox = popupWrapper.querySelector('ul.k-list-ul');
6259
6299
  const ariaLabel = this.wrapper.nativeElement.getAttribute('aria-labelledby');
6260
6300
  if (ariaLabel) {
@@ -6646,7 +6686,7 @@ class DropDownListComponent {
6646
6686
  const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';
6647
6687
  const trimmed = currentValue.replace(this.valueLabelId, '').trim();
6648
6688
  // reset the value label ID to force readers to read the new value
6649
- this.valueLabelId = guid();
6689
+ this.valueLabelId = `k-${guid()}`;
6650
6690
  // add to the current value - don't replace it
6651
6691
  const newValue = `${this.valueLabelId} ${trimmed}`.trim();
6652
6692
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);
@@ -6664,7 +6704,7 @@ class DropDownListComponent {
6664
6704
  }
6665
6705
  }
6666
6706
  DropDownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropDownListComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: DataService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
6667
- DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: { iconClass: "iconClass", loading: "loading", data: "data", value: "value", textField: "textField", valueField: "valueField", popupSettings: "popupSettings", listHeight: "listHeight", defaultItem: "defaultItem", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", filterable: "filterable", virtual: "virtual", ignoreCase: "ignoreCase", delay: "delay", valuePrimitive: "valuePrimitive", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", focusableId: ["id", "focusableId"] }, outputs: { valueChange: "valueChange", filterChange: "filterChange", selectionChange: "selectionChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { listeners: { "keydown": "keydown($event)", "keypress": "keypress($event)", "click": "click($event)" }, properties: { "class.k-dropdownlist": "this.hostClasses", "class.k-picker": "this.hostClasses", "class.k-disabled": "this.isDisabledClass", "attr.disabled": "this.isDisabledAttribute", "class.k-loading": "this.isLoading", "attr.id": "this.focusableId", "attr.dir": "this.dir", "attr.tabindex": "this.hostTabIndex", "attr.readonly": "this.readonlyAttr", "attr.aria-busy": "this.isBusy", "attr.role": "this.role", "attr.aria-haspopup": "this.haspopup", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-controls": "this.hostAriaControls", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-activedescendant": "this.hostAriaActivedescendant" } }, providers: [
6707
+ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: { iconClass: "iconClass", loading: "loading", data: "data", value: "value", textField: "textField", valueField: "valueField", popupSettings: "popupSettings", listHeight: "listHeight", defaultItem: "defaultItem", disabled: "disabled", itemDisabled: "itemDisabled", readonly: "readonly", filterable: "filterable", virtual: "virtual", ignoreCase: "ignoreCase", delay: "delay", valuePrimitive: "valuePrimitive", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", focusableId: ["id", "focusableId"] }, outputs: { valueChange: "valueChange", filterChange: "filterChange", selectionChange: "selectionChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur" }, host: { listeners: { "keydown": "keydown($event)", "keypress": "keypress($event)", "click": "click($event)" }, properties: { "attr.aria-controls": "this.ariaControls", "class.k-dropdownlist": "this.hostClasses", "class.k-picker": "this.hostClasses", "class.k-disabled": "this.isDisabledClass", "attr.disabled": "this.isDisabledAttribute", "class.k-loading": "this.isLoading", "attr.id": "this.focusableId", "attr.dir": "this.dir", "attr.tabindex": "this.hostTabIndex", "attr.readonly": "this.readonlyAttr", "attr.aria-busy": "this.isBusy", "attr.role": "this.role", "attr.aria-haspopup": "this.haspopup", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-activedescendant": "this.hostAriaActivedescendant" } }, providers: [
6668
6708
  DROPDOWNLIST_VALUE_ACCESSOR,
6669
6709
  DataService,
6670
6710
  SelectionService,
@@ -6688,6 +6728,12 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6688
6728
 
6689
6729
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6690
6730
  selectButtonText="Select"
6731
+
6732
+ i18n-filterInputLabel="kendo.dropdownlist.filterInputLabel|The text set as aria-label on the filter input"
6733
+ filterInputLabel="Filter"
6734
+
6735
+ i18n-popupLabel="kendo.dropdownlist.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
6736
+ popupLabel="Options list"
6691
6737
  >
6692
6738
  </ng-container>
6693
6739
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -6723,27 +6769,26 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6723
6769
  </button>
6724
6770
  <ng-template #popupTemplate>
6725
6771
  <!--filterable-->
6726
-
6727
6772
  <ng-template [ngIf]="filterable">
6728
6773
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6729
6774
  <span
6730
6775
  class="k-searchbox k-input"
6731
- [ngClass]="filterInputClasses"
6732
- >
6776
+ [ngClass]="filterInputClasses">
6733
6777
  <kendo-icon-wrapper
6734
6778
  class="k-icon"
6779
+ innerCssClass="k-input-icon"
6735
6780
  name="search"
6736
- [svgIcon]="searchIcon"
6737
- >
6781
+ [svgIcon]="searchIcon">
6738
6782
  </kendo-icon-wrapper>
6739
6783
  <input
6740
6784
  role="searchbox"
6741
6785
  aria-autocomplete="list"
6742
6786
  aria-haspopup="listbox"
6743
- [attr.aria-controls]="ariaControls"
6787
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
6744
6788
  [attr.aria-activedescendant]="ariaActivedescendant"
6745
6789
  tabindex="-1"
6746
6790
  [filterInput]="isFocused && !touchEnabled"
6791
+ [attr.aria-label]="messageFor('filterInputLabel')"
6747
6792
  [dir]="direction"
6748
6793
  [(ngModel)]="filterText"
6749
6794
  class="k-input-inner"
@@ -6789,9 +6834,9 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6789
6834
  <!--list-->
6790
6835
  <kendo-list
6791
6836
  #optionsList
6837
+ [id]="listBoxId"
6792
6838
  [size]="size"
6793
6839
  [rounded]="rounded"
6794
- [id]="listBoxId"
6795
6840
  [optionPrefix]="optionPrefix"
6796
6841
  [data]="data"
6797
6842
  [textField]="textField"
@@ -6803,8 +6848,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6803
6848
  [show]="isOpen"
6804
6849
  [virtual]="virtual"
6805
6850
  [ariaLive]="ariaLive"
6806
- (pageChange)="pageChange($event)"
6807
- >
6851
+ (pageChange)="pageChange($event)">
6808
6852
  </kendo-list>
6809
6853
  <!--no-data template-->
6810
6854
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -6859,6 +6903,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6859
6903
 
6860
6904
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6861
6905
  selectButtonText="Select"
6906
+
6907
+ i18n-filterInputLabel="kendo.dropdownlist.filterInputLabel|The text set as aria-label on the filter input"
6908
+ filterInputLabel="Filter"
6909
+
6910
+ i18n-popupLabel="kendo.dropdownlist.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
6911
+ popupLabel="Options list"
6862
6912
  >
6863
6913
  </ng-container>
6864
6914
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -6894,27 +6944,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6894
6944
  </button>
6895
6945
  <ng-template #popupTemplate>
6896
6946
  <!--filterable-->
6897
-
6898
6947
  <ng-template [ngIf]="filterable">
6899
6948
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6900
6949
  <span
6901
6950
  class="k-searchbox k-input"
6902
- [ngClass]="filterInputClasses"
6903
- >
6951
+ [ngClass]="filterInputClasses">
6904
6952
  <kendo-icon-wrapper
6905
6953
  class="k-icon"
6954
+ innerCssClass="k-input-icon"
6906
6955
  name="search"
6907
- [svgIcon]="searchIcon"
6908
- >
6956
+ [svgIcon]="searchIcon">
6909
6957
  </kendo-icon-wrapper>
6910
6958
  <input
6911
6959
  role="searchbox"
6912
6960
  aria-autocomplete="list"
6913
6961
  aria-haspopup="listbox"
6914
- [attr.aria-controls]="ariaControls"
6962
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
6915
6963
  [attr.aria-activedescendant]="ariaActivedescendant"
6916
6964
  tabindex="-1"
6917
6965
  [filterInput]="isFocused && !touchEnabled"
6966
+ [attr.aria-label]="messageFor('filterInputLabel')"
6918
6967
  [dir]="direction"
6919
6968
  [(ngModel)]="filterText"
6920
6969
  class="k-input-inner"
@@ -6960,9 +7009,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6960
7009
  <!--list-->
6961
7010
  <kendo-list
6962
7011
  #optionsList
7012
+ [id]="listBoxId"
6963
7013
  [size]="size"
6964
7014
  [rounded]="rounded"
6965
- [id]="listBoxId"
6966
7015
  [optionPrefix]="optionPrefix"
6967
7016
  [data]="data"
6968
7017
  [textField]="textField"
@@ -6974,8 +7023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6974
7023
  [show]="isOpen"
6975
7024
  [virtual]="virtual"
6976
7025
  [ariaLive]="ariaLive"
6977
- (pageChange)="pageChange($event)"
6978
- >
7026
+ (pageChange)="pageChange($event)">
6979
7027
  </kendo-list>
6980
7028
  <!--no-data template-->
6981
7029
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -7008,7 +7056,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7008
7056
  type: Inject,
7009
7057
  args: [TOUCH_ENABLED]
7010
7058
  }] }, { type: i0.Injector }];
7011
- }, propDecorators: { iconClass: [{
7059
+ }, propDecorators: { ariaControls: [{
7060
+ type: HostBinding,
7061
+ args: ['attr.aria-controls']
7062
+ }], iconClass: [{
7012
7063
  type: Input
7013
7064
  }], loading: [{
7014
7065
  type: Input
@@ -7148,9 +7199,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7148
7199
  }], isAriaExpanded: [{
7149
7200
  type: HostBinding,
7150
7201
  args: ['attr.aria-expanded']
7151
- }], hostAriaControls: [{
7152
- type: HostBinding,
7153
- args: ['attr.aria-controls']
7154
7202
  }], hostAriaInvalid: [{
7155
7203
  type: HostBinding,
7156
7204
  args: ['attr.aria-invalid']
@@ -7612,8 +7660,8 @@ class MultiSelectComponent {
7612
7660
  * @hidden
7613
7661
  */
7614
7662
  this.plusIcon = plusIcon;
7615
- this.listBoxId = guid();
7616
- this.tagListId = guid();
7663
+ this.listBoxId = `k-${guid()}`;
7664
+ this.tagListId = `k-${guid()}`;
7617
7665
  this.tagPrefix = "tag-" + guid();
7618
7666
  this.optionPrefix = "option-" + guid();
7619
7667
  this.focusedTagIndex = undefined;
@@ -7794,6 +7842,12 @@ class MultiSelectComponent {
7794
7842
  this.subscribeEvents();
7795
7843
  this.subscribeTouchEvents();
7796
7844
  }
7845
+ /**
7846
+ * @hidden
7847
+ */
7848
+ get ariaControls() {
7849
+ return this.isOpen ? this.listBoxId : undefined;
7850
+ }
7797
7851
  /**
7798
7852
  * Focuses a specific item of the MultiSelect based on a provided index.
7799
7853
  * If there is a custom item it is positioned at index -1.
@@ -8918,6 +8972,10 @@ class MultiSelectComponent {
8918
8972
  });
8919
8973
  const popupWrapper = this.popupRef.popupElement;
8920
8974
  const { min, max } = this.width;
8975
+ if (!this.appendTo) {
8976
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
8977
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
8978
+ }
8921
8979
  popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);
8922
8980
  popupWrapper.style.minWidth = min;
8923
8981
  popupWrapper.style.width = max;
@@ -9010,6 +9068,9 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9010
9068
 
9011
9069
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
9012
9070
  clearTitle="clear"
9071
+
9072
+ i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9073
+ popupLabel="Options list"
9013
9074
  >
9014
9075
  </ng-container>
9015
9076
  <kendo-taglist
@@ -9030,10 +9091,11 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9030
9091
  >
9031
9092
  <kendo-searchbar
9032
9093
  #searchbar
9094
+ [ariaExpanded]="isOpen"
9095
+ [ariaControls]="ariaControls"
9033
9096
  [id]="focusableId"
9034
9097
  [role]="'combobox'"
9035
9098
  [tagListId]="tagListId"
9036
- [listId]="listBoxId"
9037
9099
  [isLoading]="loading"
9038
9100
  [isFilterable]="filterable"
9039
9101
  [activeDescendant]="activeDescendant"
@@ -9041,7 +9103,6 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9041
9103
  [disabled]="disabled"
9042
9104
  [readonly]="readonly"
9043
9105
  [tabIndex]="tabIndex"
9044
- [popupOpen]="isOpen"
9045
9106
  [placeholder]="placeholder"
9046
9107
  (onNavigate)="handleNavigate($event)"
9047
9108
  (valueChange)="handleFilter($event)"
@@ -9145,7 +9206,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9145
9206
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9146
9207
  </ng-template>
9147
9208
  <ng-container #container></ng-container>
9148
- `, isInline: true, components: [{ type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "popupOpen", "role", "isLoading", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
9209
+ `, isInline: true, components: [{ type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
9149
9210
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
9150
9211
  type: Component,
9151
9212
  args: [{
@@ -9176,6 +9237,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9176
9237
 
9177
9238
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
9178
9239
  clearTitle="clear"
9240
+
9241
+ i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9242
+ popupLabel="Options list"
9179
9243
  >
9180
9244
  </ng-container>
9181
9245
  <kendo-taglist
@@ -9196,10 +9260,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9196
9260
  >
9197
9261
  <kendo-searchbar
9198
9262
  #searchbar
9263
+ [ariaExpanded]="isOpen"
9264
+ [ariaControls]="ariaControls"
9199
9265
  [id]="focusableId"
9200
9266
  [role]="'combobox'"
9201
9267
  [tagListId]="tagListId"
9202
- [listId]="listBoxId"
9203
9268
  [isLoading]="loading"
9204
9269
  [isFilterable]="filterable"
9205
9270
  [activeDescendant]="activeDescendant"
@@ -9207,7 +9272,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9207
9272
  [disabled]="disabled"
9208
9273
  [readonly]="readonly"
9209
9274
  [tabIndex]="tabIndex"
9210
- [popupOpen]="isOpen"
9211
9275
  [placeholder]="placeholder"
9212
9276
  (onNavigate)="handleNavigate($event)"
9213
9277
  (valueChange)="handleFilter($event)"
@@ -9753,13 +9817,16 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9753
9817
 
9754
9818
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9755
9819
  selectButtonText="Select"
9756
- >
9757
- </ng-container>
9820
+
9821
+ i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9822
+ popupLabel="Options list"
9823
+ ></ng-container>
9758
9824
  <kendo-searchbar
9759
9825
  #searchbar
9760
9826
  [role]="'combobox'"
9827
+ [ariaExpanded]="isOpen"
9828
+ [ariaControls]="ariaControls"
9761
9829
  [id]="focusableId"
9762
- [listId]="listBoxId"
9763
9830
  [isLoading]="loading"
9764
9831
  [isSuggestable]="suggest"
9765
9832
  [isFilterable]="filterable"
@@ -9769,7 +9836,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9769
9836
  [disabled]="disabled"
9770
9837
  [readonly]="readonly"
9771
9838
  [tabIndex]="tabIndex"
9772
- [popupOpen]="isOpen"
9773
9839
  [placeholder]="placeholder"
9774
9840
  (onNavigate)="handleNavigate($event)"
9775
9841
  (valueChange)="searchBarChange($event)"
@@ -9905,7 +9971,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9905
9971
  <!--list-->
9906
9972
  <kendo-list
9907
9973
  #optionsList
9908
- [id]="listBoxId"
9909
9974
  [optionPrefix]="optionPrefix"
9910
9975
  [data]="data"
9911
9976
  [textField]="textField"
@@ -9971,7 +10036,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9971
10036
 
9972
10037
  <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
9973
10038
  <ng-container #container></ng-container>
9974
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "popupOpen", "role", "isLoading", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
10039
+ `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "tagListId", "activeDescendant", "disabled", "readonly", "tabIndex", "role", "isLoading", "ariaControls", "ariaExpanded", "isSuggestable", "isFilterable", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: i8.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i10.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
9975
10040
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
9976
10041
  type: Component,
9977
10042
  args: [{
@@ -10012,13 +10077,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10012
10077
 
10013
10078
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
10014
10079
  selectButtonText="Select"
10015
- >
10016
- </ng-container>
10080
+
10081
+ i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
10082
+ popupLabel="Options list"
10083
+ ></ng-container>
10017
10084
  <kendo-searchbar
10018
10085
  #searchbar
10019
10086
  [role]="'combobox'"
10087
+ [ariaExpanded]="isOpen"
10088
+ [ariaControls]="ariaControls"
10020
10089
  [id]="focusableId"
10021
- [listId]="listBoxId"
10022
10090
  [isLoading]="loading"
10023
10091
  [isSuggestable]="suggest"
10024
10092
  [isFilterable]="filterable"
@@ -10028,7 +10096,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10028
10096
  [disabled]="disabled"
10029
10097
  [readonly]="readonly"
10030
10098
  [tabIndex]="tabIndex"
10031
- [popupOpen]="isOpen"
10032
10099
  [placeholder]="placeholder"
10033
10100
  (onNavigate)="handleNavigate($event)"
10034
10101
  (valueChange)="searchBarChange($event)"
@@ -10164,7 +10231,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10164
10231
  <!--list-->
10165
10232
  <kendo-list
10166
10233
  #optionsList
10167
- [id]="listBoxId"
10168
10234
  [optionPrefix]="optionPrefix"
10169
10235
  [data]="data"
10170
10236
  [textField]="textField"
@@ -10442,10 +10508,10 @@ class DropDownTreeComponent {
10442
10508
  * Used to associate the value label with the wrapper via aria-describedby.
10443
10509
  */
10444
10510
  this.valueLabelId = `k-${guid$1()}`;
10511
+ this.treeViewId = `k-${guid$1()}`;
10445
10512
  this._popupSettings = DEFAULT_POPUP_SETTINGS$1;
10446
10513
  this._tabindex = 0;
10447
10514
  this._isFocused = false;
10448
- this._popupId = guid$1();
10449
10515
  this._size = 'medium';
10450
10516
  this._rounded = 'medium';
10451
10517
  this._fillMode = 'solid';
@@ -10476,7 +10542,7 @@ class DropDownTreeComponent {
10476
10542
  return this.loading ? 'true' : null;
10477
10543
  }
10478
10544
  get hostAriaControls() {
10479
- return this.isOpen ? this._popupId : null;
10545
+ return this.isOpen ? this.treeViewId : undefined;
10480
10546
  }
10481
10547
  get id() {
10482
10548
  return this.focusableId;
@@ -11072,7 +11138,7 @@ class DropDownTreeComponent {
11072
11138
  onChildrenLoaded() {
11073
11139
  setTimeout(() => {
11074
11140
  if (this.popupRef) {
11075
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
11141
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11076
11142
  }
11077
11143
  });
11078
11144
  }
@@ -11128,11 +11194,14 @@ class DropDownTreeComponent {
11128
11194
  this.renderer.setStyle(popupWrapper, 'width', max);
11129
11195
  this.renderer.setStyle(popupWrapper, 'height', this.height);
11130
11196
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
11131
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
11197
+ if (!this.appendTo) {
11198
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
11199
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
11200
+ }
11132
11201
  this.popupRef.popupOpen.subscribe(() => {
11133
11202
  this.cdr.detectChanges();
11134
11203
  this.opened.emit();
11135
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
11204
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11136
11205
  });
11137
11206
  this.popupRef.popupClose.subscribe(() => {
11138
11207
  this.closed.emit();
@@ -11352,6 +11421,12 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11352
11421
 
11353
11422
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
11354
11423
  selectButtonText="Select"
11424
+
11425
+ i18n-filterInputLabel="kendo.dropdowntree.filterInputLabel|The text set as aria-label on the filter input"
11426
+ filterInputLabel="Filter"
11427
+
11428
+ i18n-popupLabel="kendo.dropdowntree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11429
+ popupLabel="Options list"
11355
11430
  >
11356
11431
  </ng-container>
11357
11432
  <span
@@ -11422,14 +11497,10 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11422
11497
  [filterInput]="filterable && !touchEnabled"
11423
11498
  (keydown.arrowdown)="handleKeydown($event)"
11424
11499
  (keydown.alt.arrowup)="handleKeydown($event)"
11500
+ [attr.aria-label]="messageFor('filterInputLabel')"
11425
11501
  [(ngModel)]="filter"
11426
11502
  class="k-input-inner"
11427
11503
  role="textbox"
11428
- aria-haspopup="true"
11429
- aria-expanded="false"
11430
- tabindex="0"
11431
- aria-disabled="false"
11432
- aria-readonly="false"
11433
11504
  [kendoEventsOutsideAngular]="{
11434
11505
  blur: handleBlur
11435
11506
  }"
@@ -11446,6 +11517,7 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11446
11517
  </ng-template>
11447
11518
  <kendo-treeview
11448
11519
  #treeview
11520
+ [attr.id]="treeViewId"
11449
11521
  *ngIf="data.length !== 0 && !allNodesHidden"
11450
11522
  [size]="size"
11451
11523
  [nodes]="data"
@@ -11535,6 +11607,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11535
11607
 
11536
11608
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
11537
11609
  selectButtonText="Select"
11610
+
11611
+ i18n-filterInputLabel="kendo.dropdowntree.filterInputLabel|The text set as aria-label on the filter input"
11612
+ filterInputLabel="Filter"
11613
+
11614
+ i18n-popupLabel="kendo.dropdowntree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11615
+ popupLabel="Options list"
11538
11616
  >
11539
11617
  </ng-container>
11540
11618
  <span
@@ -11605,14 +11683,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11605
11683
  [filterInput]="filterable && !touchEnabled"
11606
11684
  (keydown.arrowdown)="handleKeydown($event)"
11607
11685
  (keydown.alt.arrowup)="handleKeydown($event)"
11686
+ [attr.aria-label]="messageFor('filterInputLabel')"
11608
11687
  [(ngModel)]="filter"
11609
11688
  class="k-input-inner"
11610
11689
  role="textbox"
11611
- aria-haspopup="true"
11612
- aria-expanded="false"
11613
- tabindex="0"
11614
- aria-disabled="false"
11615
- aria-readonly="false"
11616
11690
  [kendoEventsOutsideAngular]="{
11617
11691
  blur: handleBlur
11618
11692
  }"
@@ -11629,6 +11703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11629
11703
  </ng-template>
11630
11704
  <kendo-treeview
11631
11705
  #treeview
11706
+ [attr.id]="treeViewId"
11632
11707
  *ngIf="data.length !== 0 && !allNodesHidden"
11633
11708
  [size]="size"
11634
11709
  [nodes]="data"
@@ -12298,6 +12373,7 @@ class MultiSelectTreeComponent {
12298
12373
  */
12299
12374
  this.xIcon = xIcon;
12300
12375
  this.hostClasses = true;
12376
+ this.treeViewId = `k-${guid$1()}`;
12301
12377
  this.role = 'combobox';
12302
12378
  this.ariaHasPopup = 'tree';
12303
12379
  /**
@@ -12450,7 +12526,7 @@ class MultiSelectTreeComponent {
12450
12526
  * @hidden
12451
12527
  */
12452
12528
  this.allNodesHidden = false;
12453
- this.tagListId = guid$1();
12529
+ this.tagListId = `k-${guid$1()}`;
12454
12530
  this.tagPrefix = "tag-" + guid$1();
12455
12531
  this.focusedTagIndex = undefined;
12456
12532
  this._value = [];
@@ -12458,7 +12534,6 @@ class MultiSelectTreeComponent {
12458
12534
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
12459
12535
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
12460
12536
  this._isFocused = false;
12461
- this._popupId = guid$1();
12462
12537
  this._size = 'medium';
12463
12538
  this._rounded = 'medium';
12464
12539
  this._fillMode = 'solid';
@@ -12477,7 +12552,7 @@ class MultiSelectTreeComponent {
12477
12552
  return this.disabled;
12478
12553
  }
12479
12554
  get hostAriaControls() {
12480
- return this.isOpen ? this._popupId : null;
12555
+ return this.isOpen ? this.treeViewId : null;
12481
12556
  }
12482
12557
  get hostAriaAutocomplete() {
12483
12558
  return this.filterable ? 'list' : null;
@@ -13275,16 +13350,19 @@ class MultiSelectTreeComponent {
13275
13350
  });
13276
13351
  const popupWrapper = this.popupRef.popupElement;
13277
13352
  const { min, max } = this.width;
13353
+ if (!this.appendTo) {
13354
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
13355
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
13356
+ }
13278
13357
  popupWrapper.style.minWidth = min;
13279
13358
  popupWrapper.style.width = max;
13280
13359
  popupWrapper.style.height = this.height;
13281
13360
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
13282
13361
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
13283
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
13284
13362
  this.popupRef.popupOpen.subscribe(() => {
13285
13363
  this.cdr.detectChanges();
13286
13364
  this.opened.emit();
13287
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
13365
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13288
13366
  });
13289
13367
  this.popupRef.popupClose.subscribe(() => {
13290
13368
  this.closed.emit();
@@ -13513,7 +13591,7 @@ class MultiSelectTreeComponent {
13513
13591
  onChildrenLoaded() {
13514
13592
  setTimeout(() => {
13515
13593
  if (this.popupRef) {
13516
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
13594
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13517
13595
  }
13518
13596
  });
13519
13597
  }
@@ -13619,6 +13697,12 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13619
13697
 
13620
13698
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
13621
13699
  checkAllText="Check all"
13700
+
13701
+ i18n-filterInputLabel="kendo.multiselecttree.filterInputLabel|The text set as aria-label on the filter input"
13702
+ filterInputLabel="Filter"
13703
+
13704
+ i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13705
+ popupLabel="Options list"
13622
13706
  >
13623
13707
  </ng-container>
13624
13708
  <kendo-taglist
@@ -13685,6 +13769,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13685
13769
  #filterInput
13686
13770
  (input)="handleFilterInputChange($event.target)"
13687
13771
  [filterInput]="filterable && !touchEnabled"
13772
+ [attr.aria-label]="messageFor('filterInputLabel')"
13688
13773
  (keydown)="handleKeydown($event)"
13689
13774
  [(ngModel)]="filter"
13690
13775
  class="k-input-inner"
@@ -13741,6 +13826,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13741
13826
  <kendo-treeview
13742
13827
  #treeview
13743
13828
  [size]="size"
13829
+ [attr.id]="treeViewId"
13744
13830
  [nodes]="data"
13745
13831
  [style.maxHeight.px]="listHeight"
13746
13832
  [animate]="false"
@@ -13835,6 +13921,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13835
13921
 
13836
13922
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
13837
13923
  checkAllText="Check all"
13924
+
13925
+ i18n-filterInputLabel="kendo.multiselecttree.filterInputLabel|The text set as aria-label on the filter input"
13926
+ filterInputLabel="Filter"
13927
+
13928
+ i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13929
+ popupLabel="Options list"
13838
13930
  >
13839
13931
  </ng-container>
13840
13932
  <kendo-taglist
@@ -13901,6 +13993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13901
13993
  #filterInput
13902
13994
  (input)="handleFilterInputChange($event.target)"
13903
13995
  [filterInput]="filterable && !touchEnabled"
13996
+ [attr.aria-label]="messageFor('filterInputLabel')"
13904
13997
  (keydown)="handleKeydown($event)"
13905
13998
  [(ngModel)]="filter"
13906
13999
  class="k-input-inner"
@@ -13957,6 +14050,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13957
14050
  <kendo-treeview
13958
14051
  #treeview
13959
14052
  [size]="size"
14053
+ [attr.id]="treeViewId"
13960
14054
  [nodes]="data"
13961
14055
  [style.maxHeight.px]="listHeight"
13962
14056
  [animate]="false"