@progress/kendo-angular-dropdowns 11.2.0 → 11.3.0-develop.10

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.
@@ -5,11 +5,11 @@
5
5
  import * as i0 from '@angular/core';
6
6
  import { EventEmitter, Component, Input, Output, ViewChild, HostBinding, Directive, Injectable, InjectionToken, HostListener, ViewChildren, forwardRef, isDevMode, ViewContainerRef, Optional, Inject, ContentChild, ContentChildren, ChangeDetectionStrategy, NgModule } from '@angular/core';
7
7
  import * as i10 from '@progress/kendo-angular-common';
8
- import { isDocumentAvailable, Keys, isChanged, hasObservers, KendoInput, anyChanged, guid as guid$1, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';
8
+ import { isDocumentAvailable, isSafari, Keys, isChanged, hasObservers, KendoInput, anyChanged, guid as guid$1, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';
9
9
  import * as i13 from '@angular/forms';
10
10
  import { NgControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
11
11
  import { validatePackage } from '@progress/kendo-licensing';
12
- import { getter as getter$1, detectDesktopBrowser, detectMobileOS, pointers, touchEnabled } from '@progress/kendo-common';
12
+ import { getter as getter$1, pointers, touchEnabled } from '@progress/kendo-common';
13
13
  import { Subscription, merge, fromEvent, Subject, of, interval } from 'rxjs';
14
14
  import * as i1 from '@progress/kendo-angular-l10n';
15
15
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
@@ -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: 1676453697,
36
- version: '11.2.0',
35
+ publishDate: 1677586118,
36
+ version: '11.3.0-develop.10',
37
37
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
38
38
  };
39
39
 
@@ -361,15 +361,6 @@ const getFillModeClass = (component, fillMode) => {
361
361
  * @hidden
362
362
  */
363
363
  const filterAndMap = (arr, predicate, mapper) => arr.reduce((acc, curr) => predicate(curr) ? [...acc, mapper(curr)] : acc, []);
364
- /**
365
- * @hidden
366
- *
367
- * Returns true if the used browser is Safari.
368
- */
369
- const isSafari = (userAgent) => {
370
- return detectDesktopBrowser(userAgent).safari ||
371
- (detectMobileOS(userAgent) && detectMobileOS(userAgent).browser === 'mobilesafari');
372
- };
373
364
  /**
374
365
  * @hidden
375
366
  *
@@ -398,8 +389,8 @@ const getTextField = (field, level) => {
398
389
  /**
399
390
  * @hidden
400
391
  */
401
- const getSearchableItems = (popupId, popupElement) => {
402
- 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`;
403
394
  const liElements = Array.from(popupElement.querySelectorAll(nodeSeletor));
404
395
  return liElements.map((liElement) => {
405
396
  return { text: liElement.innerText, index: liElement.getAttribute('data-treeindex') };
@@ -413,6 +404,7 @@ class SearchBarComponent {
413
404
  constructor(localization, renderer, injector) {
414
405
  this.localization = localization;
415
406
  this.injector = injector;
407
+ this.ariaExpanded = null;
416
408
  this.valueChange = new EventEmitter();
417
409
  this.onBlur = new EventEmitter();
418
410
  this.onFocus = new EventEmitter();
@@ -469,9 +461,6 @@ class SearchBarComponent {
469
461
  get placeholder() {
470
462
  return this._placeholder;
471
463
  }
472
- get ariaExpanded() {
473
- return this.role === 'combobox' ? this.popupOpen : null;
474
- }
475
464
  ngOnInit() {
476
465
  this.subs.add(this.localization
477
466
  .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr'));
@@ -586,14 +575,14 @@ class SearchBarComponent {
586
575
  }
587
576
  }
588
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 });
589
- 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: `
590
579
  <input #input
591
580
  autocomplete="off"
592
581
  [id]="id"
593
582
  [disabled]="disabled"
594
583
  [readonly]="readonly"
595
584
  [placeholder]="placeholder"
596
- [class]="'k-input-inner'"
585
+ class="k-input-inner"
597
586
  (input)="handleInput($event)"
598
587
  (keydown)="handleKeydown($event)"
599
588
  [kendoEventsOutsideAngular]="{
@@ -606,7 +595,7 @@ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
606
595
  [attr.role]="role"
607
596
  aria-haspopup="listbox"
608
597
  [attr.aria-expanded]="ariaExpanded"
609
- [attr.aria-controls]="listId"
598
+ [attr.aria-controls]="ariaControls"
610
599
  [attr.aria-describedby]="tagListId"
611
600
  [attr.aria-activedescendant]="activeDescendant"
612
601
  [attr.aria-busy]="isLoading"
@@ -624,7 +613,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
624
613
  [disabled]="disabled"
625
614
  [readonly]="readonly"
626
615
  [placeholder]="placeholder"
627
- [class]="'k-input-inner'"
616
+ class="k-input-inner"
628
617
  (input)="handleInput($event)"
629
618
  (keydown)="handleKeydown($event)"
630
619
  [kendoEventsOutsideAngular]="{
@@ -637,7 +626,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
637
626
  [attr.role]="role"
638
627
  aria-haspopup="listbox"
639
628
  [attr.aria-expanded]="ariaExpanded"
640
- [attr.aria-controls]="listId"
629
+ [attr.aria-controls]="ariaControls"
641
630
  [attr.aria-describedby]="tagListId"
642
631
  [attr.aria-activedescendant]="activeDescendant"
643
632
  [attr.aria-busy]="isLoading"
@@ -647,8 +636,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
647
636
  }]
648
637
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { id: [{
649
638
  type: Input
650
- }], listId: [{
651
- type: Input
652
639
  }], tagListId: [{
653
640
  type: Input
654
641
  }], activeDescendant: [{
@@ -659,12 +646,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
659
646
  type: Input
660
647
  }], tabIndex: [{
661
648
  type: Input
662
- }], popupOpen: [{
663
- type: Input
664
649
  }], role: [{
665
650
  type: Input
666
651
  }], isLoading: [{
667
652
  type: Input
653
+ }], ariaControls: [{
654
+ type: Input
655
+ }], ariaExpanded: [{
656
+ type: Input
668
657
  }], isSuggestable: [{
669
658
  type: Input
670
659
  }], isFilterable: [{
@@ -2165,6 +2154,9 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
2165
2154
  *ngIf="checkboxes.enabled"
2166
2155
  type="checkbox"
2167
2156
  class="k-checkbox"
2157
+ role="presentation"
2158
+ tabindex="-1"
2159
+ aria-hidden="true"
2168
2160
  [ngClass]="checkboxClasses"
2169
2161
  (change)="onCheckedChange($event, itemIndex)"
2170
2162
  [checked]="isChecked(itemIndex)"
@@ -2293,6 +2285,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2293
2285
  *ngIf="checkboxes.enabled"
2294
2286
  type="checkbox"
2295
2287
  class="k-checkbox"
2288
+ role="presentation"
2289
+ tabindex="-1"
2290
+ aria-hidden="true"
2296
2291
  [ngClass]="checkboxClasses"
2297
2292
  (change)="onCheckedChange($event, itemIndex)"
2298
2293
  [checked]="isChecked(itemIndex)"
@@ -2435,7 +2430,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2435
2430
  class Messages extends ComponentMessages {
2436
2431
  }
2437
2432
  Messages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
2438
- 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 });
2439
2434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: Messages, decorators: [{
2440
2435
  type: Directive
2441
2436
  }], propDecorators: { noDataText: [{
@@ -2446,6 +2441,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
2446
2441
  type: Input
2447
2442
  }], selectButtonText: [{
2448
2443
  type: Input
2444
+ }], filterInputLabel: [{
2445
+ type: Input
2446
+ }], popupLabel: [{
2447
+ type: Input
2449
2448
  }] } });
2450
2449
 
2451
2450
  /**
@@ -2620,8 +2619,8 @@ class AutoCompleteComponent {
2620
2619
  */
2621
2620
  this.onBlur = new EventEmitter();
2622
2621
  this.widgetClasses = true;
2623
- this.listBoxId = guid();
2624
- this.optionPrefix = guid();
2622
+ this.listBoxId = `k-${guid()}`;
2623
+ this.optionPrefix = `k-${guid()}`;
2625
2624
  this.onChangeCallback = noop;
2626
2625
  this.onTouchedCallback = noop;
2627
2626
  this.popupMouseDownHandler = (event) => event.preventDefault();
@@ -2685,6 +2684,9 @@ class AutoCompleteComponent {
2685
2684
  return 'visible';
2686
2685
  }
2687
2686
  }
2687
+ get ariaControls() {
2688
+ return this.isOpen ? this.listBoxId : undefined;
2689
+ }
2688
2690
  /**
2689
2691
  * Toggles the visibility of the popup.
2690
2692
  * If you use the `toggle` method to open or close the popup, the `open` and `close` events will not be fired.
@@ -3257,9 +3259,9 @@ class AutoCompleteComponent {
3257
3259
  if (this.virtual) {
3258
3260
  this.virtual.skip = 0;
3259
3261
  }
3260
- const horizontalAlign = this.direction === "rtl" ? "right" : "left";
3261
- const anchorPosition = { horizontal: horizontalAlign, vertical: "bottom" };
3262
- 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' };
3263
3265
  this.popupRef = this.popupService.open({
3264
3266
  anchor: this.wrapper,
3265
3267
  animate: this.popupSettings.animate,
@@ -3276,7 +3278,11 @@ class AutoCompleteComponent {
3276
3278
  popupWrapper.style.minWidth = min;
3277
3279
  popupWrapper.style.width = max;
3278
3280
  popupWrapper.style.height = this.height;
3279
- 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
+ }
3280
3286
  const listBox = popupWrapper.querySelector('ul.k-list-ul');
3281
3287
  const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
3282
3288
  if (ariaLabel) {
@@ -3381,22 +3387,26 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3381
3387
 
3382
3388
  i18n-clearTitle="kendo.autocomplete.clearTitle|The title of the clear button"
3383
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"
3384
3393
  >
3385
3394
  </ng-container>
3386
3395
  <kendo-searchbar #searchbar
3387
3396
  [role]="'combobox'"
3397
+ [ariaExpanded]="isOpen"
3398
+ [ariaControls]="ariaControls"
3388
3399
  [isSuggestable]="suggest"
3389
3400
  [isFilterable]="filterable"
3390
3401
  [isLoading]="isLoading"
3402
+ [ariaControls]="ariaControls"
3391
3403
  [id]="focusableId"
3392
- [listId]="listBoxId"
3393
3404
  [activeDescendant]="activeDescendant"
3394
3405
  [userInput]="text"
3395
3406
  [suggestedText]="suggestion"
3396
3407
  [disabled]="disabled"
3397
3408
  [readonly]="readonly"
3398
3409
  [tabIndex]="tabIndex"
3399
- [popupOpen]="isOpen"
3400
3410
  [placeholder]="placeholder"
3401
3411
  (onNavigate)="handleNavigate($event)"
3402
3412
  (valueChange)="searchBarChange($event)"
@@ -3468,7 +3478,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3468
3478
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
3469
3479
  </ng-template>
3470
3480
  <ng-container #container></ng-container>
3471
- `, 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"] }] });
3472
3482
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AutoCompleteComponent, decorators: [{
3473
3483
  type: Component,
3474
3484
  args: [{
@@ -3501,22 +3511,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
3501
3511
 
3502
3512
  i18n-clearTitle="kendo.autocomplete.clearTitle|The title of the clear button"
3503
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"
3504
3517
  >
3505
3518
  </ng-container>
3506
3519
  <kendo-searchbar #searchbar
3507
3520
  [role]="'combobox'"
3521
+ [ariaExpanded]="isOpen"
3522
+ [ariaControls]="ariaControls"
3508
3523
  [isSuggestable]="suggest"
3509
3524
  [isFilterable]="filterable"
3510
3525
  [isLoading]="isLoading"
3526
+ [ariaControls]="ariaControls"
3511
3527
  [id]="focusableId"
3512
- [listId]="listBoxId"
3513
3528
  [activeDescendant]="activeDescendant"
3514
3529
  [userInput]="text"
3515
3530
  [suggestedText]="suggestion"
3516
3531
  [disabled]="disabled"
3517
3532
  [readonly]="readonly"
3518
3533
  [tabIndex]="tabIndex"
3519
- [popupOpen]="isOpen"
3520
3534
  [placeholder]="placeholder"
3521
3535
  (onNavigate)="handleNavigate($event)"
3522
3536
  (valueChange)="searchBarChange($event)"
@@ -3953,8 +3967,8 @@ class ComboBoxComponent {
3953
3967
  this.onBlur = new EventEmitter();
3954
3968
  this.widgetClasses = true;
3955
3969
  this._isFocused = false;
3956
- this.listBoxId = guid();
3957
- this.optionPrefix = guid();
3970
+ this.listBoxId = `k-${guid()}`;
3971
+ this.optionPrefix = `k-${guid()}`;
3958
3972
  this.onChangeCallback = (_) => { };
3959
3973
  this.onTouchedCallback = (_) => { };
3960
3974
  /**
@@ -3988,6 +4002,12 @@ class ComboBoxComponent {
3988
4002
  get text() {
3989
4003
  return this._text;
3990
4004
  }
4005
+ /**
4006
+ * @hidden
4007
+ */
4008
+ get ariaControls() {
4009
+ return this.isOpen ? this.listBoxId : undefined;
4010
+ }
3991
4011
  /**
3992
4012
  * @hidden
3993
4013
  */
@@ -4926,7 +4946,11 @@ class ComboBoxComponent {
4926
4946
  popupWrapper.style.minWidth = min;
4927
4947
  popupWrapper.style.width = max;
4928
4948
  popupWrapper.style.height = this.popupHeight;
4929
- 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
+ }
4930
4954
  const listBox = this.popupRef.popupElement.querySelector('ul');
4931
4955
  const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
4932
4956
  if (ariaLabel) {
@@ -5030,12 +5054,16 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5030
5054
 
5031
5055
  i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
5032
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"
5033
5060
  >
5034
5061
  </ng-container>
5035
5062
  <kendo-searchbar #searchbar
5036
5063
  [role]="'combobox'"
5064
+ [ariaExpanded]="isOpen"
5065
+ [ariaControls]="ariaControls"
5037
5066
  [id]="focusableId"
5038
- [listId]="listBoxId"
5039
5067
  [isLoading]="loading"
5040
5068
  [isSuggestable]="suggest"
5041
5069
  [isFilterable]="filterable"
@@ -5045,7 +5073,6 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5045
5073
  [disabled]="disabled"
5046
5074
  [readonly]="readonly"
5047
5075
  [tabIndex]="tabIndex"
5048
- [popupOpen]="isOpen"
5049
5076
  [placeholder]="placeholder"
5050
5077
  (onNavigate)="handleNavigate($event)"
5051
5078
  (valueChange)="searchBarChange($event)"
@@ -5137,7 +5164,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
5137
5164
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
5138
5165
  </ng-template>
5139
5166
  <ng-container #container></ng-container>
5140
- `, 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"] }] });
5141
5168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ComboBoxComponent, decorators: [{
5142
5169
  type: Component,
5143
5170
  args: [{
@@ -5171,12 +5198,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5171
5198
 
5172
5199
  i18n-selectButtonText="kendo.combobox.selectButtonText|The text set as aria-label on the select button"
5173
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"
5174
5204
  >
5175
5205
  </ng-container>
5176
5206
  <kendo-searchbar #searchbar
5177
5207
  [role]="'combobox'"
5208
+ [ariaExpanded]="isOpen"
5209
+ [ariaControls]="ariaControls"
5178
5210
  [id]="focusableId"
5179
- [listId]="listBoxId"
5180
5211
  [isLoading]="loading"
5181
5212
  [isSuggestable]="suggest"
5182
5213
  [isFilterable]="filterable"
@@ -5186,7 +5217,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
5186
5217
  [disabled]="disabled"
5187
5218
  [readonly]="readonly"
5188
5219
  [tabIndex]="tabIndex"
5189
- [popupOpen]="isOpen"
5190
5220
  [placeholder]="placeholder"
5191
5221
  (onNavigate)="handleNavigate($event)"
5192
5222
  (valueChange)="searchBarChange($event)"
@@ -5530,6 +5560,7 @@ class DropDownListComponent {
5530
5560
  * @hidden
5531
5561
  */
5532
5562
  this.caretAltDownIcon = caretAltDownIcon;
5563
+ this.listBoxId = `k-${guid()}`;
5533
5564
  /**
5534
5565
  * Sets the height of the options list. By default, `listHeight` is 200px.
5535
5566
  *
@@ -5611,9 +5642,8 @@ class DropDownListComponent {
5611
5642
  this.role = 'combobox';
5612
5643
  this.haspopup = 'listbox';
5613
5644
  this.groupIndices = [];
5614
- this.listBoxId = guid();
5615
- this.optionPrefix = guid();
5616
- this.filterText = "";
5645
+ this.optionPrefix = `k-${guid()}`;
5646
+ this.filterText = '';
5617
5647
  this.subs = new Subscription();
5618
5648
  this._isFocused = false;
5619
5649
  this.onTouchedCallback = (_) => { };
@@ -5919,9 +5949,6 @@ class DropDownListComponent {
5919
5949
  get isAriaExpanded() {
5920
5950
  return this.ariaExpanded;
5921
5951
  }
5922
- get hostAriaControls() {
5923
- return this.ariaControls;
5924
- }
5925
5952
  get hostAriaInvalid() {
5926
5953
  var _a;
5927
5954
  return this.formControl ? (_a = this.formControl) === null || _a === void 0 ? void 0 : _a.invalid.toString() : null;
@@ -6263,7 +6290,11 @@ class DropDownListComponent {
6263
6290
  popupWrapper.style.minWidth = min;
6264
6291
  popupWrapper.style.width = max;
6265
6292
  popupWrapper.style.height = this.height;
6266
- 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
+ }
6267
6298
  const listBox = popupWrapper.querySelector('ul.k-list-ul');
6268
6299
  const ariaLabel = this.wrapper.nativeElement.getAttribute('aria-labelledby');
6269
6300
  if (ariaLabel) {
@@ -6655,7 +6686,7 @@ class DropDownListComponent {
6655
6686
  const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';
6656
6687
  const trimmed = currentValue.replace(this.valueLabelId, '').trim();
6657
6688
  // reset the value label ID to force readers to read the new value
6658
- this.valueLabelId = guid();
6689
+ this.valueLabelId = `k-${guid()}`;
6659
6690
  // add to the current value - don't replace it
6660
6691
  const newValue = `${this.valueLabelId} ${trimmed}`.trim();
6661
6692
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);
@@ -6673,7 +6704,7 @@ class DropDownListComponent {
6673
6704
  }
6674
6705
  }
6675
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 });
6676
- 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: [
6677
6708
  DROPDOWNLIST_VALUE_ACCESSOR,
6678
6709
  DataService,
6679
6710
  SelectionService,
@@ -6697,6 +6728,12 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6697
6728
 
6698
6729
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6699
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"
6700
6737
  >
6701
6738
  </ng-container>
6702
6739
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -6732,27 +6769,26 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6732
6769
  </button>
6733
6770
  <ng-template #popupTemplate>
6734
6771
  <!--filterable-->
6735
-
6736
6772
  <ng-template [ngIf]="filterable">
6737
6773
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6738
6774
  <span
6739
6775
  class="k-searchbox k-input"
6740
- [ngClass]="filterInputClasses"
6741
- >
6776
+ [ngClass]="filterInputClasses">
6742
6777
  <kendo-icon-wrapper
6743
6778
  class="k-icon"
6779
+ innerCssClass="k-input-icon"
6744
6780
  name="search"
6745
- [svgIcon]="searchIcon"
6746
- >
6781
+ [svgIcon]="searchIcon">
6747
6782
  </kendo-icon-wrapper>
6748
6783
  <input
6749
6784
  role="searchbox"
6750
6785
  aria-autocomplete="list"
6751
6786
  aria-haspopup="listbox"
6752
- [attr.aria-controls]="ariaControls"
6787
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
6753
6788
  [attr.aria-activedescendant]="ariaActivedescendant"
6754
6789
  tabindex="-1"
6755
6790
  [filterInput]="isFocused && !touchEnabled"
6791
+ [attr.aria-label]="messageFor('filterInputLabel')"
6756
6792
  [dir]="direction"
6757
6793
  [(ngModel)]="filterText"
6758
6794
  class="k-input-inner"
@@ -6798,9 +6834,9 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6798
6834
  <!--list-->
6799
6835
  <kendo-list
6800
6836
  #optionsList
6837
+ [id]="listBoxId"
6801
6838
  [size]="size"
6802
6839
  [rounded]="rounded"
6803
- [id]="listBoxId"
6804
6840
  [optionPrefix]="optionPrefix"
6805
6841
  [data]="data"
6806
6842
  [textField]="textField"
@@ -6812,8 +6848,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6812
6848
  [show]="isOpen"
6813
6849
  [virtual]="virtual"
6814
6850
  [ariaLive]="ariaLive"
6815
- (pageChange)="pageChange($event)"
6816
- >
6851
+ (pageChange)="pageChange($event)">
6817
6852
  </kendo-list>
6818
6853
  <!--no-data template-->
6819
6854
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -6868,6 +6903,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6868
6903
 
6869
6904
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
6870
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"
6871
6912
  >
6872
6913
  </ng-container>
6873
6914
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -6903,27 +6944,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6903
6944
  </button>
6904
6945
  <ng-template #popupTemplate>
6905
6946
  <!--filterable-->
6906
-
6907
6947
  <ng-template [ngIf]="filterable">
6908
6948
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
6909
6949
  <span
6910
6950
  class="k-searchbox k-input"
6911
- [ngClass]="filterInputClasses"
6912
- >
6951
+ [ngClass]="filterInputClasses">
6913
6952
  <kendo-icon-wrapper
6914
6953
  class="k-icon"
6954
+ innerCssClass="k-input-icon"
6915
6955
  name="search"
6916
- [svgIcon]="searchIcon"
6917
- >
6956
+ [svgIcon]="searchIcon">
6918
6957
  </kendo-icon-wrapper>
6919
6958
  <input
6920
6959
  role="searchbox"
6921
6960
  aria-autocomplete="list"
6922
6961
  aria-haspopup="listbox"
6923
- [attr.aria-controls]="ariaControls"
6962
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
6924
6963
  [attr.aria-activedescendant]="ariaActivedescendant"
6925
6964
  tabindex="-1"
6926
6965
  [filterInput]="isFocused && !touchEnabled"
6966
+ [attr.aria-label]="messageFor('filterInputLabel')"
6927
6967
  [dir]="direction"
6928
6968
  [(ngModel)]="filterText"
6929
6969
  class="k-input-inner"
@@ -6969,9 +7009,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6969
7009
  <!--list-->
6970
7010
  <kendo-list
6971
7011
  #optionsList
7012
+ [id]="listBoxId"
6972
7013
  [size]="size"
6973
7014
  [rounded]="rounded"
6974
- [id]="listBoxId"
6975
7015
  [optionPrefix]="optionPrefix"
6976
7016
  [data]="data"
6977
7017
  [textField]="textField"
@@ -6983,8 +7023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
6983
7023
  [show]="isOpen"
6984
7024
  [virtual]="virtual"
6985
7025
  [ariaLive]="ariaLive"
6986
- (pageChange)="pageChange($event)"
6987
- >
7026
+ (pageChange)="pageChange($event)">
6988
7027
  </kendo-list>
6989
7028
  <!--no-data template-->
6990
7029
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -7017,7 +7056,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7017
7056
  type: Inject,
7018
7057
  args: [TOUCH_ENABLED]
7019
7058
  }] }, { type: i0.Injector }];
7020
- }, propDecorators: { iconClass: [{
7059
+ }, propDecorators: { ariaControls: [{
7060
+ type: HostBinding,
7061
+ args: ['attr.aria-controls']
7062
+ }], iconClass: [{
7021
7063
  type: Input
7022
7064
  }], loading: [{
7023
7065
  type: Input
@@ -7157,9 +7199,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
7157
7199
  }], isAriaExpanded: [{
7158
7200
  type: HostBinding,
7159
7201
  args: ['attr.aria-expanded']
7160
- }], hostAriaControls: [{
7161
- type: HostBinding,
7162
- args: ['attr.aria-controls']
7163
7202
  }], hostAriaInvalid: [{
7164
7203
  type: HostBinding,
7165
7204
  args: ['attr.aria-invalid']
@@ -7621,8 +7660,8 @@ class MultiSelectComponent {
7621
7660
  * @hidden
7622
7661
  */
7623
7662
  this.plusIcon = plusIcon;
7624
- this.listBoxId = guid();
7625
- this.tagListId = guid();
7663
+ this.listBoxId = `k-${guid()}`;
7664
+ this.tagListId = `k-${guid()}`;
7626
7665
  this.tagPrefix = "tag-" + guid();
7627
7666
  this.optionPrefix = "option-" + guid();
7628
7667
  this.focusedTagIndex = undefined;
@@ -7803,6 +7842,12 @@ class MultiSelectComponent {
7803
7842
  this.subscribeEvents();
7804
7843
  this.subscribeTouchEvents();
7805
7844
  }
7845
+ /**
7846
+ * @hidden
7847
+ */
7848
+ get ariaControls() {
7849
+ return this.isOpen ? this.listBoxId : undefined;
7850
+ }
7806
7851
  /**
7807
7852
  * Focuses a specific item of the MultiSelect based on a provided index.
7808
7853
  * If there is a custom item it is positioned at index -1.
@@ -8927,6 +8972,10 @@ class MultiSelectComponent {
8927
8972
  });
8928
8973
  const popupWrapper = this.popupRef.popupElement;
8929
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
+ }
8930
8979
  popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);
8931
8980
  popupWrapper.style.minWidth = min;
8932
8981
  popupWrapper.style.width = max;
@@ -9019,6 +9068,9 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9019
9068
 
9020
9069
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
9021
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"
9022
9074
  >
9023
9075
  </ng-container>
9024
9076
  <kendo-taglist
@@ -9039,10 +9091,11 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9039
9091
  >
9040
9092
  <kendo-searchbar
9041
9093
  #searchbar
9094
+ [ariaExpanded]="isOpen"
9095
+ [ariaControls]="ariaControls"
9042
9096
  [id]="focusableId"
9043
9097
  [role]="'combobox'"
9044
9098
  [tagListId]="tagListId"
9045
- [listId]="listBoxId"
9046
9099
  [isLoading]="loading"
9047
9100
  [isFilterable]="filterable"
9048
9101
  [activeDescendant]="activeDescendant"
@@ -9050,7 +9103,6 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9050
9103
  [disabled]="disabled"
9051
9104
  [readonly]="readonly"
9052
9105
  [tabIndex]="tabIndex"
9053
- [popupOpen]="isOpen"
9054
9106
  [placeholder]="placeholder"
9055
9107
  (onNavigate)="handleNavigate($event)"
9056
9108
  (valueChange)="handleFilter($event)"
@@ -9154,7 +9206,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
9154
9206
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
9155
9207
  </ng-template>
9156
9208
  <ng-container #container></ng-container>
9157
- `, 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"] }] });
9158
9210
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
9159
9211
  type: Component,
9160
9212
  args: [{
@@ -9185,6 +9237,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9185
9237
 
9186
9238
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
9187
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"
9188
9243
  >
9189
9244
  </ng-container>
9190
9245
  <kendo-taglist
@@ -9205,10 +9260,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9205
9260
  >
9206
9261
  <kendo-searchbar
9207
9262
  #searchbar
9263
+ [ariaExpanded]="isOpen"
9264
+ [ariaControls]="ariaControls"
9208
9265
  [id]="focusableId"
9209
9266
  [role]="'combobox'"
9210
9267
  [tagListId]="tagListId"
9211
- [listId]="listBoxId"
9212
9268
  [isLoading]="loading"
9213
9269
  [isFilterable]="filterable"
9214
9270
  [activeDescendant]="activeDescendant"
@@ -9216,7 +9272,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
9216
9272
  [disabled]="disabled"
9217
9273
  [readonly]="readonly"
9218
9274
  [tabIndex]="tabIndex"
9219
- [popupOpen]="isOpen"
9220
9275
  [placeholder]="placeholder"
9221
9276
  (onNavigate)="handleNavigate($event)"
9222
9277
  (valueChange)="handleFilter($event)"
@@ -9762,13 +9817,16 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9762
9817
 
9763
9818
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9764
9819
  selectButtonText="Select"
9765
- >
9766
- </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>
9767
9824
  <kendo-searchbar
9768
9825
  #searchbar
9769
9826
  [role]="'combobox'"
9827
+ [ariaExpanded]="isOpen"
9828
+ [ariaControls]="ariaControls"
9770
9829
  [id]="focusableId"
9771
- [listId]="listBoxId"
9772
9830
  [isLoading]="loading"
9773
9831
  [isSuggestable]="suggest"
9774
9832
  [isFilterable]="filterable"
@@ -9778,7 +9836,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9778
9836
  [disabled]="disabled"
9779
9837
  [readonly]="readonly"
9780
9838
  [tabIndex]="tabIndex"
9781
- [popupOpen]="isOpen"
9782
9839
  [placeholder]="placeholder"
9783
9840
  (onNavigate)="handleNavigate($event)"
9784
9841
  (valueChange)="searchBarChange($event)"
@@ -9914,7 +9971,6 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9914
9971
  <!--list-->
9915
9972
  <kendo-list
9916
9973
  #optionsList
9917
- [id]="listBoxId"
9918
9974
  [optionPrefix]="optionPrefix"
9919
9975
  [data]="data"
9920
9976
  [textField]="textField"
@@ -9980,7 +10036,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9980
10036
 
9981
10037
  <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
9982
10038
  <ng-container #container></ng-container>
9983
- `, 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"] }] });
9984
10040
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
9985
10041
  type: Component,
9986
10042
  args: [{
@@ -10021,13 +10077,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10021
10077
 
10022
10078
  i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
10023
10079
  selectButtonText="Select"
10024
- >
10025
- </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>
10026
10084
  <kendo-searchbar
10027
10085
  #searchbar
10028
10086
  [role]="'combobox'"
10087
+ [ariaExpanded]="isOpen"
10088
+ [ariaControls]="ariaControls"
10029
10089
  [id]="focusableId"
10030
- [listId]="listBoxId"
10031
10090
  [isLoading]="loading"
10032
10091
  [isSuggestable]="suggest"
10033
10092
  [isFilterable]="filterable"
@@ -10037,7 +10096,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10037
10096
  [disabled]="disabled"
10038
10097
  [readonly]="readonly"
10039
10098
  [tabIndex]="tabIndex"
10040
- [popupOpen]="isOpen"
10041
10099
  [placeholder]="placeholder"
10042
10100
  (onNavigate)="handleNavigate($event)"
10043
10101
  (valueChange)="searchBarChange($event)"
@@ -10173,7 +10231,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
10173
10231
  <!--list-->
10174
10232
  <kendo-list
10175
10233
  #optionsList
10176
- [id]="listBoxId"
10177
10234
  [optionPrefix]="optionPrefix"
10178
10235
  [data]="data"
10179
10236
  [textField]="textField"
@@ -10451,10 +10508,10 @@ class DropDownTreeComponent {
10451
10508
  * Used to associate the value label with the wrapper via aria-describedby.
10452
10509
  */
10453
10510
  this.valueLabelId = `k-${guid$1()}`;
10511
+ this.treeViewId = `k-${guid$1()}`;
10454
10512
  this._popupSettings = DEFAULT_POPUP_SETTINGS$1;
10455
10513
  this._tabindex = 0;
10456
10514
  this._isFocused = false;
10457
- this._popupId = guid$1();
10458
10515
  this._size = 'medium';
10459
10516
  this._rounded = 'medium';
10460
10517
  this._fillMode = 'solid';
@@ -10485,7 +10542,7 @@ class DropDownTreeComponent {
10485
10542
  return this.loading ? 'true' : null;
10486
10543
  }
10487
10544
  get hostAriaControls() {
10488
- return this.isOpen ? this._popupId : null;
10545
+ return this.isOpen ? this.treeViewId : undefined;
10489
10546
  }
10490
10547
  get id() {
10491
10548
  return this.focusableId;
@@ -11081,7 +11138,7 @@ class DropDownTreeComponent {
11081
11138
  onChildrenLoaded() {
11082
11139
  setTimeout(() => {
11083
11140
  if (this.popupRef) {
11084
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
11141
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11085
11142
  }
11086
11143
  });
11087
11144
  }
@@ -11137,11 +11194,14 @@ class DropDownTreeComponent {
11137
11194
  this.renderer.setStyle(popupWrapper, 'width', max);
11138
11195
  this.renderer.setStyle(popupWrapper, 'height', this.height);
11139
11196
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
11140
- 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
+ }
11141
11201
  this.popupRef.popupOpen.subscribe(() => {
11142
11202
  this.cdr.detectChanges();
11143
11203
  this.opened.emit();
11144
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
11204
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
11145
11205
  });
11146
11206
  this.popupRef.popupClose.subscribe(() => {
11147
11207
  this.closed.emit();
@@ -11361,6 +11421,12 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11361
11421
 
11362
11422
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
11363
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"
11364
11430
  >
11365
11431
  </ng-container>
11366
11432
  <span
@@ -11431,14 +11497,10 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11431
11497
  [filterInput]="filterable && !touchEnabled"
11432
11498
  (keydown.arrowdown)="handleKeydown($event)"
11433
11499
  (keydown.alt.arrowup)="handleKeydown($event)"
11500
+ [attr.aria-label]="messageFor('filterInputLabel')"
11434
11501
  [(ngModel)]="filter"
11435
11502
  class="k-input-inner"
11436
11503
  role="textbox"
11437
- aria-haspopup="true"
11438
- aria-expanded="false"
11439
- tabindex="0"
11440
- aria-disabled="false"
11441
- aria-readonly="false"
11442
11504
  [kendoEventsOutsideAngular]="{
11443
11505
  blur: handleBlur
11444
11506
  }"
@@ -11455,6 +11517,7 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
11455
11517
  </ng-template>
11456
11518
  <kendo-treeview
11457
11519
  #treeview
11520
+ [attr.id]="treeViewId"
11458
11521
  *ngIf="data.length !== 0 && !allNodesHidden"
11459
11522
  [size]="size"
11460
11523
  [nodes]="data"
@@ -11544,6 +11607,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11544
11607
 
11545
11608
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
11546
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"
11547
11616
  >
11548
11617
  </ng-container>
11549
11618
  <span
@@ -11614,14 +11683,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11614
11683
  [filterInput]="filterable && !touchEnabled"
11615
11684
  (keydown.arrowdown)="handleKeydown($event)"
11616
11685
  (keydown.alt.arrowup)="handleKeydown($event)"
11686
+ [attr.aria-label]="messageFor('filterInputLabel')"
11617
11687
  [(ngModel)]="filter"
11618
11688
  class="k-input-inner"
11619
11689
  role="textbox"
11620
- aria-haspopup="true"
11621
- aria-expanded="false"
11622
- tabindex="0"
11623
- aria-disabled="false"
11624
- aria-readonly="false"
11625
11690
  [kendoEventsOutsideAngular]="{
11626
11691
  blur: handleBlur
11627
11692
  }"
@@ -11638,6 +11703,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11638
11703
  </ng-template>
11639
11704
  <kendo-treeview
11640
11705
  #treeview
11706
+ [attr.id]="treeViewId"
11641
11707
  *ngIf="data.length !== 0 && !allNodesHidden"
11642
11708
  [size]="size"
11643
11709
  [nodes]="data"
@@ -12307,6 +12373,7 @@ class MultiSelectTreeComponent {
12307
12373
  */
12308
12374
  this.xIcon = xIcon;
12309
12375
  this.hostClasses = true;
12376
+ this.treeViewId = `k-${guid$1()}`;
12310
12377
  this.role = 'combobox';
12311
12378
  this.ariaHasPopup = 'tree';
12312
12379
  /**
@@ -12459,7 +12526,7 @@ class MultiSelectTreeComponent {
12459
12526
  * @hidden
12460
12527
  */
12461
12528
  this.allNodesHidden = false;
12462
- this.tagListId = guid$1();
12529
+ this.tagListId = `k-${guid$1()}`;
12463
12530
  this.tagPrefix = "tag-" + guid$1();
12464
12531
  this.focusedTagIndex = undefined;
12465
12532
  this._value = [];
@@ -12467,7 +12534,6 @@ class MultiSelectTreeComponent {
12467
12534
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
12468
12535
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
12469
12536
  this._isFocused = false;
12470
- this._popupId = guid$1();
12471
12537
  this._size = 'medium';
12472
12538
  this._rounded = 'medium';
12473
12539
  this._fillMode = 'solid';
@@ -12486,7 +12552,7 @@ class MultiSelectTreeComponent {
12486
12552
  return this.disabled;
12487
12553
  }
12488
12554
  get hostAriaControls() {
12489
- return this.isOpen ? this._popupId : null;
12555
+ return this.isOpen ? this.treeViewId : null;
12490
12556
  }
12491
12557
  get hostAriaAutocomplete() {
12492
12558
  return this.filterable ? 'list' : null;
@@ -13284,16 +13350,19 @@ class MultiSelectTreeComponent {
13284
13350
  });
13285
13351
  const popupWrapper = this.popupRef.popupElement;
13286
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
+ }
13287
13357
  popupWrapper.style.minWidth = min;
13288
13358
  popupWrapper.style.width = max;
13289
13359
  popupWrapper.style.height = this.height;
13290
13360
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
13291
13361
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
13292
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
13293
13362
  this.popupRef.popupOpen.subscribe(() => {
13294
13363
  this.cdr.detectChanges();
13295
13364
  this.opened.emit();
13296
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
13365
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13297
13366
  });
13298
13367
  this.popupRef.popupClose.subscribe(() => {
13299
13368
  this.closed.emit();
@@ -13522,7 +13591,7 @@ class MultiSelectTreeComponent {
13522
13591
  onChildrenLoaded() {
13523
13592
  setTimeout(() => {
13524
13593
  if (this.popupRef) {
13525
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
13594
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
13526
13595
  }
13527
13596
  });
13528
13597
  }
@@ -13628,6 +13697,12 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13628
13697
 
13629
13698
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
13630
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"
13631
13706
  >
13632
13707
  </ng-container>
13633
13708
  <kendo-taglist
@@ -13694,6 +13769,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13694
13769
  #filterInput
13695
13770
  (input)="handleFilterInputChange($event.target)"
13696
13771
  [filterInput]="filterable && !touchEnabled"
13772
+ [attr.aria-label]="messageFor('filterInputLabel')"
13697
13773
  (keydown)="handleKeydown($event)"
13698
13774
  [(ngModel)]="filter"
13699
13775
  class="k-input-inner"
@@ -13750,6 +13826,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
13750
13826
  <kendo-treeview
13751
13827
  #treeview
13752
13828
  [size]="size"
13829
+ [attr.id]="treeViewId"
13753
13830
  [nodes]="data"
13754
13831
  [style.maxHeight.px]="listHeight"
13755
13832
  [animate]="false"
@@ -13844,6 +13921,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13844
13921
 
13845
13922
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
13846
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"
13847
13930
  >
13848
13931
  </ng-container>
13849
13932
  <kendo-taglist
@@ -13910,6 +13993,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13910
13993
  #filterInput
13911
13994
  (input)="handleFilterInputChange($event.target)"
13912
13995
  [filterInput]="filterable && !touchEnabled"
13996
+ [attr.aria-label]="messageFor('filterInputLabel')"
13913
13997
  (keydown)="handleKeydown($event)"
13914
13998
  [(ngModel)]="filter"
13915
13999
  class="k-input-inner"
@@ -13966,6 +14050,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13966
14050
  <kendo-treeview
13967
14051
  #treeview
13968
14052
  [size]="size"
14053
+ [attr.id]="treeViewId"
13969
14054
  [nodes]="data"
13970
14055
  [style.maxHeight.px]="listHeight"
13971
14056
  [animate]="false"