@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: [{
@@ -2130,6 +2128,9 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2130
2128
  *ngIf="checkboxes.enabled"
2131
2129
  type="checkbox"
2132
2130
  class="k-checkbox"
2131
+ role="presentation"
2132
+ tabindex="-1"
2133
+ aria-hidden="true"
2133
2134
  [ngClass]="checkboxClasses"
2134
2135
  (change)="onCheckedChange($event, itemIndex)"
2135
2136
  [checked]="isChecked(itemIndex)"
@@ -2258,6 +2259,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2258
2259
  *ngIf="checkboxes.enabled"
2259
2260
  type="checkbox"
2260
2261
  class="k-checkbox"
2262
+ role="presentation"
2263
+ tabindex="-1"
2264
+ aria-hidden="true"
2261
2265
  [ngClass]="checkboxClasses"
2262
2266
  (change)="onCheckedChange($event, itemIndex)"
2263
2267
  [checked]="isChecked(itemIndex)"
@@ -2426,7 +2430,7 @@ const TOUCH_ENABLED = new InjectionToken('dropdowns-touch-enabled');
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)"
@@ -3942,8 +3965,8 @@ class ComboBoxComponent {
3942
3965
  this.onBlur = new EventEmitter();
3943
3966
  this.widgetClasses = true;
3944
3967
  this._isFocused = false;
3945
- this.listBoxId = guid();
3946
- this.optionPrefix = guid();
3968
+ this.listBoxId = `k-${guid()}`;
3969
+ this.optionPrefix = `k-${guid()}`;
3947
3970
  this.onChangeCallback = (_) => { };
3948
3971
  this.onTouchedCallback = (_) => { };
3949
3972
  /**
@@ -3977,6 +4000,12 @@ class ComboBoxComponent {
3977
4000
  get text() {
3978
4001
  return this._text;
3979
4002
  }
4003
+ /**
4004
+ * @hidden
4005
+ */
4006
+ get ariaControls() {
4007
+ return this.isOpen ? this.listBoxId : undefined;
4008
+ }
3980
4009
  /**
3981
4010
  * @hidden
3982
4011
  */
@@ -4915,7 +4944,11 @@ class ComboBoxComponent {
4915
4944
  popupWrapper.style.minWidth = min;
4916
4945
  popupWrapper.style.width = max;
4917
4946
  popupWrapper.style.height = this.popupHeight;
4918
- popupWrapper.setAttribute("dir", this.direction);
4947
+ popupWrapper.setAttribute('dir', this.direction);
4948
+ if (!this.appendTo) {
4949
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
4950
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
4951
+ }
4919
4952
  const listBox = this.popupRef.popupElement.querySelector('ul');
4920
4953
  const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
4921
4954
  if (ariaLabel) {
@@ -5019,12 +5052,16 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5019
5052
 
5020
5053
  i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
5021
5054
  selectButtonText="Select"
5055
+
5056
+ i18n-popupLabel="kendo.combobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
5057
+ popupLabel="Options list"
5022
5058
  >
5023
5059
  </ng-container>
5024
5060
  <kendo-searchbar #searchbar
5025
5061
  [role]="'combobox'"
5062
+ [ariaExpanded]="isOpen"
5063
+ [ariaControls]="ariaControls"
5026
5064
  [id]="focusableId"
5027
- [listId]="listBoxId"
5028
5065
  [isLoading]="loading"
5029
5066
  [isSuggestable]="suggest"
5030
5067
  [isFilterable]="filterable"
@@ -5034,7 +5071,6 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5034
5071
  [disabled]="disabled"
5035
5072
  [readonly]="readonly"
5036
5073
  [tabIndex]="tabIndex"
5037
- [popupOpen]="isOpen"
5038
5074
  [placeholder]="placeholder"
5039
5075
  (onNavigate)="handleNavigate($event)"
5040
5076
  (valueChange)="searchBarChange($event)"
@@ -5126,7 +5162,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5126
5162
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5127
5163
  </ng-template>
5128
5164
  <ng-container #container></ng-container>
5129
- `, 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"] }] });
5165
+ `, 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"] }] });
5130
5166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, decorators: [{
5131
5167
  type: Component,
5132
5168
  args: [{
@@ -5160,12 +5196,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5160
5196
 
5161
5197
  i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
5162
5198
  selectButtonText="Select"
5199
+
5200
+ i18n-popupLabel="kendo.combobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
5201
+ popupLabel="Options list"
5163
5202
  >
5164
5203
  </ng-container>
5165
5204
  <kendo-searchbar #searchbar
5166
5205
  [role]="'combobox'"
5206
+ [ariaExpanded]="isOpen"
5207
+ [ariaControls]="ariaControls"
5167
5208
  [id]="focusableId"
5168
- [listId]="listBoxId"
5169
5209
  [isLoading]="loading"
5170
5210
  [isSuggestable]="suggest"
5171
5211
  [isFilterable]="filterable"
@@ -5175,7 +5215,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5175
5215
  [disabled]="disabled"
5176
5216
  [readonly]="readonly"
5177
5217
  [tabIndex]="tabIndex"
5178
- [popupOpen]="isOpen"
5179
5218
  [placeholder]="placeholder"
5180
5219
  (onNavigate)="handleNavigate($event)"
5181
5220
  (valueChange)="searchBarChange($event)"
@@ -5517,6 +5556,7 @@ class DropDownListComponent {
5517
5556
  * @hidden
5518
5557
  */
5519
5558
  this.caretAltDownIcon = caretAltDownIcon;
5559
+ this.listBoxId = `k-${guid()}`;
5520
5560
  /**
5521
5561
  * Sets the height of the options list. By default, `listHeight` is 200px.
5522
5562
  *
@@ -5598,9 +5638,8 @@ class DropDownListComponent {
5598
5638
  this.role = 'combobox';
5599
5639
  this.haspopup = 'listbox';
5600
5640
  this.groupIndices = [];
5601
- this.listBoxId = guid();
5602
- this.optionPrefix = guid();
5603
- this.filterText = "";
5641
+ this.optionPrefix = `k-${guid()}`;
5642
+ this.filterText = '';
5604
5643
  this.subs = new Subscription();
5605
5644
  this._isFocused = false;
5606
5645
  this.onTouchedCallback = (_) => { };
@@ -5906,9 +5945,6 @@ class DropDownListComponent {
5906
5945
  get isAriaExpanded() {
5907
5946
  return this.ariaExpanded;
5908
5947
  }
5909
- get hostAriaControls() {
5910
- return this.ariaControls;
5911
- }
5912
5948
  get hostAriaInvalid() {
5913
5949
  return this.formControl ? this.formControl?.invalid.toString() : null;
5914
5950
  }
@@ -6249,7 +6285,11 @@ class DropDownListComponent {
6249
6285
  popupWrapper.style.minWidth = min;
6250
6286
  popupWrapper.style.width = max;
6251
6287
  popupWrapper.style.height = this.height;
6252
- popupWrapper.setAttribute("dir", this.direction);
6288
+ popupWrapper.setAttribute('dir', this.direction);
6289
+ if (!this.appendTo) {
6290
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
6291
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
6292
+ }
6253
6293
  const listBox = popupWrapper.querySelector('ul.k-list-ul');
6254
6294
  const ariaLabel = this.wrapper.nativeElement.getAttribute('aria-labelledby');
6255
6295
  if (ariaLabel) {
@@ -6641,7 +6681,7 @@ class DropDownListComponent {
6641
6681
  const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';
6642
6682
  const trimmed = currentValue.replace(this.valueLabelId, '').trim();
6643
6683
  // reset the value label ID to force readers to read the new value
6644
- this.valueLabelId = guid();
6684
+ this.valueLabelId = `k-${guid()}`;
6645
6685
  // add to the current value - don't replace it
6646
6686
  const newValue = `${this.valueLabelId} ${trimmed}`.trim();
6647
6687
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);
@@ -6659,7 +6699,7 @@ class DropDownListComponent {
6659
6699
  }
6660
6700
  }
6661
6701
  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 });
6662
- 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: [
6702
+ 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: [
6663
6703
  DROPDOWNLIST_VALUE_ACCESSOR,
6664
6704
  DataService,
6665
6705
  SelectionService,
@@ -6683,6 +6723,12 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6683
6723
 
6684
6724
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6685
6725
  selectButtonText="Select"
6726
+
6727
+ i18n-filterInputLabel="kendo.dropdownlist.filterInputLabel|The text set as aria-label on the filter input"
6728
+ filterInputLabel="Filter"
6729
+
6730
+ i18n-popupLabel="kendo.dropdownlist.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
6731
+ popupLabel="Options list"
6686
6732
  >
6687
6733
  </ng-container>
6688
6734
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -6718,27 +6764,26 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6718
6764
  </button>
6719
6765
  <ng-template #popupTemplate>
6720
6766
  <!--filterable-->
6721
-
6722
6767
  <ng-template [ngIf]="filterable">
6723
6768
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6724
6769
  <span
6725
6770
  class="k-searchbox k-input"
6726
- [ngClass]="filterInputClasses"
6727
- >
6771
+ [ngClass]="filterInputClasses">
6728
6772
  <kendo-icon-wrapper
6729
6773
  class="k-icon"
6774
+ innerCssClass="k-input-icon"
6730
6775
  name="search"
6731
- [svgIcon]="searchIcon"
6732
- >
6776
+ [svgIcon]="searchIcon">
6733
6777
  </kendo-icon-wrapper>
6734
6778
  <input
6735
6779
  role="searchbox"
6736
6780
  aria-autocomplete="list"
6737
6781
  aria-haspopup="listbox"
6738
- [attr.aria-controls]="ariaControls"
6782
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
6739
6783
  [attr.aria-activedescendant]="ariaActivedescendant"
6740
6784
  tabindex="-1"
6741
6785
  [filterInput]="isFocused && !touchEnabled"
6786
+ [attr.aria-label]="messageFor('filterInputLabel')"
6742
6787
  [dir]="direction"
6743
6788
  [(ngModel)]="filterText"
6744
6789
  class="k-input-inner"
@@ -6784,9 +6829,9 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6784
6829
  <!--list-->
6785
6830
  <kendo-list
6786
6831
  #optionsList
6832
+ [id]="listBoxId"
6787
6833
  [size]="size"
6788
6834
  [rounded]="rounded"
6789
- [id]="listBoxId"
6790
6835
  [optionPrefix]="optionPrefix"
6791
6836
  [data]="data"
6792
6837
  [textField]="textField"
@@ -6798,8 +6843,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6798
6843
  [show]="isOpen"
6799
6844
  [virtual]="virtual"
6800
6845
  [ariaLive]="ariaLive"
6801
- (pageChange)="pageChange($event)"
6802
- >
6846
+ (pageChange)="pageChange($event)">
6803
6847
  </kendo-list>
6804
6848
  <!--no-data template-->
6805
6849
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -6854,6 +6898,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6854
6898
 
6855
6899
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6856
6900
  selectButtonText="Select"
6901
+
6902
+ i18n-filterInputLabel="kendo.dropdownlist.filterInputLabel|The text set as aria-label on the filter input"
6903
+ filterInputLabel="Filter"
6904
+
6905
+ i18n-popupLabel="kendo.dropdownlist.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
6906
+ popupLabel="Options list"
6857
6907
  >
6858
6908
  </ng-container>
6859
6909
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -6889,27 +6939,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6889
6939
  </button>
6890
6940
  <ng-template #popupTemplate>
6891
6941
  <!--filterable-->
6892
-
6893
6942
  <ng-template [ngIf]="filterable">
6894
6943
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6895
6944
  <span
6896
6945
  class="k-searchbox k-input"
6897
- [ngClass]="filterInputClasses"
6898
- >
6946
+ [ngClass]="filterInputClasses">
6899
6947
  <kendo-icon-wrapper
6900
6948
  class="k-icon"
6949
+ innerCssClass="k-input-icon"
6901
6950
  name="search"
6902
- [svgIcon]="searchIcon"
6903
- >
6951
+ [svgIcon]="searchIcon">
6904
6952
  </kendo-icon-wrapper>
6905
6953
  <input
6906
6954
  role="searchbox"
6907
6955
  aria-autocomplete="list"
6908
6956
  aria-haspopup="listbox"
6909
- [attr.aria-controls]="ariaControls"
6957
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
6910
6958
  [attr.aria-activedescendant]="ariaActivedescendant"
6911
6959
  tabindex="-1"
6912
6960
  [filterInput]="isFocused && !touchEnabled"
6961
+ [attr.aria-label]="messageFor('filterInputLabel')"
6913
6962
  [dir]="direction"
6914
6963
  [(ngModel)]="filterText"
6915
6964
  class="k-input-inner"
@@ -6955,9 +7004,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6955
7004
  <!--list-->
6956
7005
  <kendo-list
6957
7006
  #optionsList
7007
+ [id]="listBoxId"
6958
7008
  [size]="size"
6959
7009
  [rounded]="rounded"
6960
- [id]="listBoxId"
6961
7010
  [optionPrefix]="optionPrefix"
6962
7011
  [data]="data"
6963
7012
  [textField]="textField"
@@ -6969,8 +7018,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6969
7018
  [show]="isOpen"
6970
7019
  [virtual]="virtual"
6971
7020
  [ariaLive]="ariaLive"
6972
- (pageChange)="pageChange($event)"
6973
- >
7021
+ (pageChange)="pageChange($event)">
6974
7022
  </kendo-list>
6975
7023
  <!--no-data template-->
6976
7024
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -7001,7 +7049,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7001
7049
  }, {
7002
7050
  type: Inject,
7003
7051
  args: [TOUCH_ENABLED]
7004
- }] }, { type: i0.Injector }]; }, propDecorators: { iconClass: [{
7052
+ }] }, { type: i0.Injector }]; }, propDecorators: { ariaControls: [{
7053
+ type: HostBinding,
7054
+ args: ['attr.aria-controls']
7055
+ }], iconClass: [{
7005
7056
  type: Input
7006
7057
  }], loading: [{
7007
7058
  type: Input
@@ -7141,9 +7192,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7141
7192
  }], isAriaExpanded: [{
7142
7193
  type: HostBinding,
7143
7194
  args: ['attr.aria-expanded']
7144
- }], hostAriaControls: [{
7145
- type: HostBinding,
7146
- args: ['attr.aria-controls']
7147
7195
  }], hostAriaInvalid: [{
7148
7196
  type: HostBinding,
7149
7197
  args: ['attr.aria-invalid']
@@ -7605,8 +7653,8 @@ class MultiSelectComponent {
7605
7653
  * @hidden
7606
7654
  */
7607
7655
  this.plusIcon = plusIcon;
7608
- this.listBoxId = guid();
7609
- this.tagListId = guid();
7656
+ this.listBoxId = `k-${guid()}`;
7657
+ this.tagListId = `k-${guid()}`;
7610
7658
  this.tagPrefix = "tag-" + guid();
7611
7659
  this.optionPrefix = "option-" + guid();
7612
7660
  this.focusedTagIndex = undefined;
@@ -7787,6 +7835,12 @@ class MultiSelectComponent {
7787
7835
  this.subscribeEvents();
7788
7836
  this.subscribeTouchEvents();
7789
7837
  }
7838
+ /**
7839
+ * @hidden
7840
+ */
7841
+ get ariaControls() {
7842
+ return this.isOpen ? this.listBoxId : undefined;
7843
+ }
7790
7844
  /**
7791
7845
  * Focuses a specific item of the MultiSelect based on a provided index.
7792
7846
  * If there is a custom item it is positioned at index -1.
@@ -8911,6 +8965,10 @@ class MultiSelectComponent {
8911
8965
  });
8912
8966
  const popupWrapper = this.popupRef.popupElement;
8913
8967
  const { min, max } = this.width;
8968
+ if (!this.appendTo) {
8969
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
8970
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
8971
+ }
8914
8972
  popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);
8915
8973
  popupWrapper.style.minWidth = min;
8916
8974
  popupWrapper.style.width = max;
@@ -9003,6 +9061,9 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9003
9061
 
9004
9062
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
9005
9063
  clearTitle="clear"
9064
+
9065
+ i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9066
+ popupLabel="Options list"
9006
9067
  >
9007
9068
  </ng-container>
9008
9069
  <kendo-taglist
@@ -9023,10 +9084,11 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9023
9084
  >
9024
9085
  <kendo-searchbar
9025
9086
  #searchbar
9087
+ [ariaExpanded]="isOpen"
9088
+ [ariaControls]="ariaControls"
9026
9089
  [id]="focusableId"
9027
9090
  [role]="'combobox'"
9028
9091
  [tagListId]="tagListId"
9029
- [listId]="listBoxId"
9030
9092
  [isLoading]="loading"
9031
9093
  [isFilterable]="filterable"
9032
9094
  [activeDescendant]="activeDescendant"
@@ -9034,7 +9096,6 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9034
9096
  [disabled]="disabled"
9035
9097
  [readonly]="readonly"
9036
9098
  [tabIndex]="tabIndex"
9037
- [popupOpen]="isOpen"
9038
9099
  [placeholder]="placeholder"
9039
9100
  (onNavigate)="handleNavigate($event)"
9040
9101
  (valueChange)="handleFilter($event)"
@@ -9138,7 +9199,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9138
9199
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9139
9200
  </ng-template>
9140
9201
  <ng-container #container></ng-container>
9141
- `, 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"] }] });
9202
+ `, 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"] }] });
9142
9203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
9143
9204
  type: Component,
9144
9205
  args: [{
@@ -9169,6 +9230,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9169
9230
 
9170
9231
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
9171
9232
  clearTitle="clear"
9233
+
9234
+ i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9235
+ popupLabel="Options list"
9172
9236
  >
9173
9237
  </ng-container>
9174
9238
  <kendo-taglist
@@ -9189,10 +9253,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9189
9253
  >
9190
9254
  <kendo-searchbar
9191
9255
  #searchbar
9256
+ [ariaExpanded]="isOpen"
9257
+ [ariaControls]="ariaControls"
9192
9258
  [id]="focusableId"
9193
9259
  [role]="'combobox'"
9194
9260
  [tagListId]="tagListId"
9195
- [listId]="listBoxId"
9196
9261
  [isLoading]="loading"
9197
9262
  [isFilterable]="filterable"
9198
9263
  [activeDescendant]="activeDescendant"
@@ -9200,7 +9265,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9200
9265
  [disabled]="disabled"
9201
9266
  [readonly]="readonly"
9202
9267
  [tabIndex]="tabIndex"
9203
- [popupOpen]="isOpen"
9204
9268
  [placeholder]="placeholder"
9205
9269
  (onNavigate)="handleNavigate($event)"
9206
9270
  (valueChange)="handleFilter($event)"
@@ -9744,13 +9808,16 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9744
9808
 
9745
9809
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9746
9810
  selectButtonText="Select"
9747
- >
9748
- </ng-container>
9811
+
9812
+ i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
9813
+ popupLabel="Options list"
9814
+ ></ng-container>
9749
9815
  <kendo-searchbar
9750
9816
  #searchbar
9751
9817
  [role]="'combobox'"
9818
+ [ariaExpanded]="isOpen"
9819
+ [ariaControls]="ariaControls"
9752
9820
  [id]="focusableId"
9753
- [listId]="listBoxId"
9754
9821
  [isLoading]="loading"
9755
9822
  [isSuggestable]="suggest"
9756
9823
  [isFilterable]="filterable"
@@ -9760,7 +9827,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9760
9827
  [disabled]="disabled"
9761
9828
  [readonly]="readonly"
9762
9829
  [tabIndex]="tabIndex"
9763
- [popupOpen]="isOpen"
9764
9830
  [placeholder]="placeholder"
9765
9831
  (onNavigate)="handleNavigate($event)"
9766
9832
  (valueChange)="searchBarChange($event)"
@@ -9896,7 +9962,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9896
9962
  <!--list-->
9897
9963
  <kendo-list
9898
9964
  #optionsList
9899
- [id]="listBoxId"
9900
9965
  [optionPrefix]="optionPrefix"
9901
9966
  [data]="data"
9902
9967
  [textField]="textField"
@@ -9962,7 +10027,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9962
10027
 
9963
10028
  <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
9964
10029
  <ng-container #container></ng-container>
9965
- `, 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"] }] });
10030
+ `, 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"] }] });
9966
10031
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
9967
10032
  type: Component,
9968
10033
  args: [{
@@ -10003,13 +10068,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10003
10068
 
10004
10069
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
10005
10070
  selectButtonText="Select"
10006
- >
10007
- </ng-container>
10071
+
10072
+ i18n-popupLabel="kendo.multicolumncombobox.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
10073
+ popupLabel="Options list"
10074
+ ></ng-container>
10008
10075
  <kendo-searchbar
10009
10076
  #searchbar
10010
10077
  [role]="'combobox'"
10078
+ [ariaExpanded]="isOpen"
10079
+ [ariaControls]="ariaControls"
10011
10080
  [id]="focusableId"
10012
- [listId]="listBoxId"
10013
10081
  [isLoading]="loading"
10014
10082
  [isSuggestable]="suggest"
10015
10083
  [isFilterable]="filterable"
@@ -10019,7 +10087,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10019
10087
  [disabled]="disabled"
10020
10088
  [readonly]="readonly"
10021
10089
  [tabIndex]="tabIndex"
10022
- [popupOpen]="isOpen"
10023
10090
  [placeholder]="placeholder"
10024
10091
  (onNavigate)="handleNavigate($event)"
10025
10092
  (valueChange)="searchBarChange($event)"
@@ -10155,7 +10222,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10155
10222
  <!--list-->
10156
10223
  <kendo-list
10157
10224
  #optionsList
10158
- [id]="listBoxId"
10159
10225
  [optionPrefix]="optionPrefix"
10160
10226
  [data]="data"
10161
10227
  [textField]="textField"
@@ -10431,10 +10497,10 @@ class DropDownTreeComponent {
10431
10497
  * Used to associate the value label with the wrapper via aria-describedby.
10432
10498
  */
10433
10499
  this.valueLabelId = `k-${guid$1()}`;
10500
+ this.treeViewId = `k-${guid$1()}`;
10434
10501
  this._popupSettings = DEFAULT_POPUP_SETTINGS$1;
10435
10502
  this._tabindex = 0;
10436
10503
  this._isFocused = false;
10437
- this._popupId = guid$1();
10438
10504
  this._size = 'medium';
10439
10505
  this._rounded = 'medium';
10440
10506
  this._fillMode = 'solid';
@@ -10465,7 +10531,7 @@ class DropDownTreeComponent {
10465
10531
  return this.loading ? 'true' : null;
10466
10532
  }
10467
10533
  get hostAriaControls() {
10468
- return this.isOpen ? this._popupId : null;
10534
+ return this.isOpen ? this.treeViewId : undefined;
10469
10535
  }
10470
10536
  get id() {
10471
10537
  return this.focusableId;
@@ -11061,7 +11127,7 @@ class DropDownTreeComponent {
11061
11127
  onChildrenLoaded() {
11062
11128
  setTimeout(() => {
11063
11129
  if (this.popupRef) {
11064
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
11130
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11065
11131
  }
11066
11132
  });
11067
11133
  }
@@ -11117,11 +11183,14 @@ class DropDownTreeComponent {
11117
11183
  this.renderer.setStyle(popupWrapper, 'width', max);
11118
11184
  this.renderer.setStyle(popupWrapper, 'height', this.height);
11119
11185
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
11120
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
11186
+ if (!this.appendTo) {
11187
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
11188
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
11189
+ }
11121
11190
  this.popupRef.popupOpen.subscribe(() => {
11122
11191
  this.cdr.detectChanges();
11123
11192
  this.opened.emit();
11124
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
11193
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11125
11194
  });
11126
11195
  this.popupRef.popupClose.subscribe(() => {
11127
11196
  this.closed.emit();
@@ -11341,6 +11410,12 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11341
11410
 
11342
11411
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
11343
11412
  selectButtonText="Select"
11413
+
11414
+ i18n-filterInputLabel="kendo.dropdowntree.filterInputLabel|The text set as aria-label on the filter input"
11415
+ filterInputLabel="Filter"
11416
+
11417
+ i18n-popupLabel="kendo.dropdowntree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11418
+ popupLabel="Options list"
11344
11419
  >
11345
11420
  </ng-container>
11346
11421
  <span
@@ -11411,14 +11486,10 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11411
11486
  [filterInput]="filterable && !touchEnabled"
11412
11487
  (keydown.arrowdown)="handleKeydown($event)"
11413
11488
  (keydown.alt.arrowup)="handleKeydown($event)"
11489
+ [attr.aria-label]="messageFor('filterInputLabel')"
11414
11490
  [(ngModel)]="filter"
11415
11491
  class="k-input-inner"
11416
11492
  role="textbox"
11417
- aria-haspopup="true"
11418
- aria-expanded="false"
11419
- tabindex="0"
11420
- aria-disabled="false"
11421
- aria-readonly="false"
11422
11493
  [kendoEventsOutsideAngular]="{
11423
11494
  blur: handleBlur
11424
11495
  }"
@@ -11435,6 +11506,7 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11435
11506
  </ng-template>
11436
11507
  <kendo-treeview
11437
11508
  #treeview
11509
+ [attr.id]="treeViewId"
11438
11510
  *ngIf="data.length !== 0 && !allNodesHidden"
11439
11511
  [size]="size"
11440
11512
  [nodes]="data"
@@ -11524,6 +11596,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11524
11596
 
11525
11597
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
11526
11598
  selectButtonText="Select"
11599
+
11600
+ i18n-filterInputLabel="kendo.dropdowntree.filterInputLabel|The text set as aria-label on the filter input"
11601
+ filterInputLabel="Filter"
11602
+
11603
+ i18n-popupLabel="kendo.dropdowntree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11604
+ popupLabel="Options list"
11527
11605
  >
11528
11606
  </ng-container>
11529
11607
  <span
@@ -11594,14 +11672,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11594
11672
  [filterInput]="filterable && !touchEnabled"
11595
11673
  (keydown.arrowdown)="handleKeydown($event)"
11596
11674
  (keydown.alt.arrowup)="handleKeydown($event)"
11675
+ [attr.aria-label]="messageFor('filterInputLabel')"
11597
11676
  [(ngModel)]="filter"
11598
11677
  class="k-input-inner"
11599
11678
  role="textbox"
11600
- aria-haspopup="true"
11601
- aria-expanded="false"
11602
- tabindex="0"
11603
- aria-disabled="false"
11604
- aria-readonly="false"
11605
11679
  [kendoEventsOutsideAngular]="{
11606
11680
  blur: handleBlur
11607
11681
  }"
@@ -11618,6 +11692,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11618
11692
  </ng-template>
11619
11693
  <kendo-treeview
11620
11694
  #treeview
11695
+ [attr.id]="treeViewId"
11621
11696
  *ngIf="data.length !== 0 && !allNodesHidden"
11622
11697
  [size]="size"
11623
11698
  [nodes]="data"
@@ -12285,6 +12360,7 @@ class MultiSelectTreeComponent {
12285
12360
  */
12286
12361
  this.xIcon = xIcon;
12287
12362
  this.hostClasses = true;
12363
+ this.treeViewId = `k-${guid$1()}`;
12288
12364
  this.role = 'combobox';
12289
12365
  this.ariaHasPopup = 'tree';
12290
12366
  /**
@@ -12437,7 +12513,7 @@ class MultiSelectTreeComponent {
12437
12513
  * @hidden
12438
12514
  */
12439
12515
  this.allNodesHidden = false;
12440
- this.tagListId = guid$1();
12516
+ this.tagListId = `k-${guid$1()}`;
12441
12517
  this.tagPrefix = "tag-" + guid$1();
12442
12518
  this.focusedTagIndex = undefined;
12443
12519
  this._value = [];
@@ -12445,7 +12521,6 @@ class MultiSelectTreeComponent {
12445
12521
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
12446
12522
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
12447
12523
  this._isFocused = false;
12448
- this._popupId = guid$1();
12449
12524
  this._size = 'medium';
12450
12525
  this._rounded = 'medium';
12451
12526
  this._fillMode = 'solid';
@@ -12464,7 +12539,7 @@ class MultiSelectTreeComponent {
12464
12539
  return this.disabled;
12465
12540
  }
12466
12541
  get hostAriaControls() {
12467
- return this.isOpen ? this._popupId : null;
12542
+ return this.isOpen ? this.treeViewId : null;
12468
12543
  }
12469
12544
  get hostAriaAutocomplete() {
12470
12545
  return this.filterable ? 'list' : null;
@@ -13265,16 +13340,19 @@ class MultiSelectTreeComponent {
13265
13340
  });
13266
13341
  const popupWrapper = this.popupRef.popupElement;
13267
13342
  const { min, max } = this.width;
13343
+ if (!this.appendTo) {
13344
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
13345
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
13346
+ }
13268
13347
  popupWrapper.style.minWidth = min;
13269
13348
  popupWrapper.style.width = max;
13270
13349
  popupWrapper.style.height = this.height;
13271
13350
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
13272
13351
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
13273
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
13274
13352
  this.popupRef.popupOpen.subscribe(() => {
13275
13353
  this.cdr.detectChanges();
13276
13354
  this.opened.emit();
13277
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
13355
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13278
13356
  });
13279
13357
  this.popupRef.popupClose.subscribe(() => {
13280
13358
  this.closed.emit();
@@ -13503,7 +13581,7 @@ class MultiSelectTreeComponent {
13503
13581
  onChildrenLoaded() {
13504
13582
  setTimeout(() => {
13505
13583
  if (this.popupRef) {
13506
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
13584
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13507
13585
  }
13508
13586
  });
13509
13587
  }
@@ -13609,6 +13687,12 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13609
13687
 
13610
13688
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
13611
13689
  checkAllText="Check all"
13690
+
13691
+ i18n-filterInputLabel="kendo.multiselecttree.filterInputLabel|The text set as aria-label on the filter input"
13692
+ filterInputLabel="Filter"
13693
+
13694
+ i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13695
+ popupLabel="Options list"
13612
13696
  >
13613
13697
  </ng-container>
13614
13698
  <kendo-taglist
@@ -13675,6 +13759,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13675
13759
  #filterInput
13676
13760
  (input)="handleFilterInputChange($event.target)"
13677
13761
  [filterInput]="filterable && !touchEnabled"
13762
+ [attr.aria-label]="messageFor('filterInputLabel')"
13678
13763
  (keydown)="handleKeydown($event)"
13679
13764
  [(ngModel)]="filter"
13680
13765
  class="k-input-inner"
@@ -13731,6 +13816,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13731
13816
  <kendo-treeview
13732
13817
  #treeview
13733
13818
  [size]="size"
13819
+ [attr.id]="treeViewId"
13734
13820
  [nodes]="data"
13735
13821
  [style.maxHeight.px]="listHeight"
13736
13822
  [animate]="false"
@@ -13825,6 +13911,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13825
13911
 
13826
13912
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
13827
13913
  checkAllText="Check all"
13914
+
13915
+ i18n-filterInputLabel="kendo.multiselecttree.filterInputLabel|The text set as aria-label on the filter input"
13916
+ filterInputLabel="Filter"
13917
+
13918
+ i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
13919
+ popupLabel="Options list"
13828
13920
  >
13829
13921
  </ng-container>
13830
13922
  <kendo-taglist
@@ -13891,6 +13983,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13891
13983
  #filterInput
13892
13984
  (input)="handleFilterInputChange($event.target)"
13893
13985
  [filterInput]="filterable && !touchEnabled"
13986
+ [attr.aria-label]="messageFor('filterInputLabel')"
13894
13987
  (keydown)="handleKeydown($event)"
13895
13988
  [(ngModel)]="filter"
13896
13989
  class="k-input-inner"
@@ -13947,6 +14040,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13947
14040
  <kendo-treeview
13948
14041
  #treeview
13949
14042
  [size]="size"
14043
+ [attr.id]="treeViewId"
13950
14044
  [nodes]="data"
13951
14045
  [style.maxHeight.px]="listHeight"
13952
14046
  [animate]="false"