@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.
@@ -98,6 +98,7 @@ export class DropDownListComponent {
98
98
  * @hidden
99
99
  */
100
100
  this.caretAltDownIcon = caretAltDownIcon;
101
+ this.listBoxId = `k-${guid()}`;
101
102
  /**
102
103
  * Sets the height of the options list. By default, `listHeight` is 200px.
103
104
  *
@@ -179,9 +180,8 @@ export class DropDownListComponent {
179
180
  this.role = 'combobox';
180
181
  this.haspopup = 'listbox';
181
182
  this.groupIndices = [];
182
- this.listBoxId = guid();
183
- this.optionPrefix = guid();
184
- this.filterText = "";
183
+ this.optionPrefix = `k-${guid()}`;
184
+ this.filterText = '';
185
185
  this.subs = new Subscription();
186
186
  this._isFocused = false;
187
187
  this.onTouchedCallback = (_) => { };
@@ -487,9 +487,6 @@ export class DropDownListComponent {
487
487
  get isAriaExpanded() {
488
488
  return this.ariaExpanded;
489
489
  }
490
- get hostAriaControls() {
491
- return this.ariaControls;
492
- }
493
490
  get hostAriaInvalid() {
494
491
  return this.formControl ? this.formControl?.invalid.toString() : null;
495
492
  }
@@ -830,7 +827,11 @@ export class DropDownListComponent {
830
827
  popupWrapper.style.minWidth = min;
831
828
  popupWrapper.style.width = max;
832
829
  popupWrapper.style.height = this.height;
833
- popupWrapper.setAttribute("dir", this.direction);
830
+ popupWrapper.setAttribute('dir', this.direction);
831
+ if (!this.appendTo) {
832
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
833
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
834
+ }
834
835
  const listBox = popupWrapper.querySelector('ul.k-list-ul');
835
836
  const ariaLabel = this.wrapper.nativeElement.getAttribute('aria-labelledby');
836
837
  if (ariaLabel) {
@@ -1222,7 +1223,7 @@ export class DropDownListComponent {
1222
1223
  const currentValue = this.wrapper.nativeElement.getAttribute('aria-describedby') || '';
1223
1224
  const trimmed = currentValue.replace(this.valueLabelId, '').trim();
1224
1225
  // reset the value label ID to force readers to read the new value
1225
- this.valueLabelId = guid();
1226
+ this.valueLabelId = `k-${guid()}`;
1226
1227
  // add to the current value - don't replace it
1227
1228
  const newValue = `${this.valueLabelId} ${trimmed}`.trim();
1228
1229
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-describedby', newValue);
@@ -1240,7 +1241,7 @@ export class DropDownListComponent {
1240
1241
  }
1241
1242
  }
1242
1243
  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: i3.SelectionService }, { token: i4.NavigationService }, { token: i5.DisabledItemsService }, { token: i6.DataService }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: TOUCH_ENABLED, optional: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
1243
- 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: [
1244
+ 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: [
1244
1245
  DROPDOWNLIST_VALUE_ACCESSOR,
1245
1246
  DataService,
1246
1247
  SelectionService,
@@ -1264,6 +1265,12 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1264
1265
 
1265
1266
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
1266
1267
  selectButtonText="Select"
1268
+
1269
+ i18n-filterInputLabel="kendo.dropdownlist.filterInputLabel|The text set as aria-label on the filter input"
1270
+ filterInputLabel="Filter"
1271
+
1272
+ i18n-popupLabel="kendo.dropdownlist.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1273
+ popupLabel="Options list"
1267
1274
  >
1268
1275
  </ng-container>
1269
1276
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -1299,27 +1306,26 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1299
1306
  </button>
1300
1307
  <ng-template #popupTemplate>
1301
1308
  <!--filterable-->
1302
-
1303
1309
  <ng-template [ngIf]="filterable">
1304
1310
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
1305
1311
  <span
1306
1312
  class="k-searchbox k-input"
1307
- [ngClass]="filterInputClasses"
1308
- >
1313
+ [ngClass]="filterInputClasses">
1309
1314
  <kendo-icon-wrapper
1310
1315
  class="k-icon"
1316
+ innerCssClass="k-input-icon"
1311
1317
  name="search"
1312
- [svgIcon]="searchIcon"
1313
- >
1318
+ [svgIcon]="searchIcon">
1314
1319
  </kendo-icon-wrapper>
1315
1320
  <input
1316
1321
  role="searchbox"
1317
1322
  aria-autocomplete="list"
1318
1323
  aria-haspopup="listbox"
1319
- [attr.aria-controls]="ariaControls"
1324
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
1320
1325
  [attr.aria-activedescendant]="ariaActivedescendant"
1321
1326
  tabindex="-1"
1322
1327
  [filterInput]="isFocused && !touchEnabled"
1328
+ [attr.aria-label]="messageFor('filterInputLabel')"
1323
1329
  [dir]="direction"
1324
1330
  [(ngModel)]="filterText"
1325
1331
  class="k-input-inner"
@@ -1365,9 +1371,9 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1365
1371
  <!--list-->
1366
1372
  <kendo-list
1367
1373
  #optionsList
1374
+ [id]="listBoxId"
1368
1375
  [size]="size"
1369
1376
  [rounded]="rounded"
1370
- [id]="listBoxId"
1371
1377
  [optionPrefix]="optionPrefix"
1372
1378
  [data]="data"
1373
1379
  [textField]="textField"
@@ -1379,8 +1385,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1379
1385
  [show]="isOpen"
1380
1386
  [virtual]="virtual"
1381
1387
  [ariaLive]="ariaLive"
1382
- (pageChange)="pageChange($event)"
1383
- >
1388
+ (pageChange)="pageChange($event)">
1384
1389
  </kendo-list>
1385
1390
  <!--no-data template-->
1386
1391
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -1435,6 +1440,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1435
1440
 
1436
1441
  i18n-selectButtonText="kendo.dropdownlist.selectButtonText|The text set as aria-label on the select button"
1437
1442
  selectButtonText="Select"
1443
+
1444
+ i18n-filterInputLabel="kendo.dropdownlist.filterInputLabel|The text set as aria-label on the filter input"
1445
+ filterInputLabel="Filter"
1446
+
1447
+ i18n-popupLabel="kendo.dropdownlist.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1448
+ popupLabel="Options list"
1438
1449
  >
1439
1450
  </ng-container>
1440
1451
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
@@ -1470,27 +1481,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1470
1481
  </button>
1471
1482
  <ng-template #popupTemplate>
1472
1483
  <!--filterable-->
1473
-
1474
1484
  <ng-template [ngIf]="filterable">
1475
1485
  <div class="k-list-filter" (click)="$event.stopImmediatePropagation()">
1476
1486
  <span
1477
1487
  class="k-searchbox k-input"
1478
- [ngClass]="filterInputClasses"
1479
- >
1488
+ [ngClass]="filterInputClasses">
1480
1489
  <kendo-icon-wrapper
1481
1490
  class="k-icon"
1491
+ innerCssClass="k-input-icon"
1482
1492
  name="search"
1483
- [svgIcon]="searchIcon"
1484
- >
1493
+ [svgIcon]="searchIcon">
1485
1494
  </kendo-icon-wrapper>
1486
1495
  <input
1487
1496
  role="searchbox"
1488
1497
  aria-autocomplete="list"
1489
1498
  aria-haspopup="listbox"
1490
- [attr.aria-controls]="ariaControls"
1499
+ [attr.aria-controls]="isOpen ? ariaControls : undefined"
1491
1500
  [attr.aria-activedescendant]="ariaActivedescendant"
1492
1501
  tabindex="-1"
1493
1502
  [filterInput]="isFocused && !touchEnabled"
1503
+ [attr.aria-label]="messageFor('filterInputLabel')"
1494
1504
  [dir]="direction"
1495
1505
  [(ngModel)]="filterText"
1496
1506
  class="k-input-inner"
@@ -1536,9 +1546,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1536
1546
  <!--list-->
1537
1547
  <kendo-list
1538
1548
  #optionsList
1549
+ [id]="listBoxId"
1539
1550
  [size]="size"
1540
1551
  [rounded]="rounded"
1541
- [id]="listBoxId"
1542
1552
  [optionPrefix]="optionPrefix"
1543
1553
  [data]="data"
1544
1554
  [textField]="textField"
@@ -1550,8 +1560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1550
1560
  [show]="isOpen"
1551
1561
  [virtual]="virtual"
1552
1562
  [ariaLive]="ariaLive"
1553
- (pageChange)="pageChange($event)"
1554
- >
1563
+ (pageChange)="pageChange($event)">
1555
1564
  </kendo-list>
1556
1565
  <!--no-data template-->
1557
1566
  <div class="k-no-data" *ngIf="data.length === 0">
@@ -1582,7 +1591,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1582
1591
  }, {
1583
1592
  type: Inject,
1584
1593
  args: [TOUCH_ENABLED]
1585
- }] }, { type: i0.Injector }]; }, propDecorators: { iconClass: [{
1594
+ }] }, { type: i0.Injector }]; }, propDecorators: { ariaControls: [{
1595
+ type: HostBinding,
1596
+ args: ['attr.aria-controls']
1597
+ }], iconClass: [{
1586
1598
  type: Input
1587
1599
  }], loading: [{
1588
1600
  type: Input
@@ -1722,9 +1734,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1722
1734
  }], isAriaExpanded: [{
1723
1735
  type: HostBinding,
1724
1736
  args: ['attr.aria-expanded']
1725
- }], hostAriaControls: [{
1726
- type: HostBinding,
1727
- args: ['attr.aria-controls']
1728
1737
  }], hostAriaInvalid: [{
1729
1738
  type: HostBinding,
1730
1739
  args: ['attr.aria-invalid']
@@ -205,10 +205,10 @@ export class DropDownTreeComponent {
205
205
  * Used to associate the value label with the wrapper via aria-describedby.
206
206
  */
207
207
  this.valueLabelId = `k-${guid()}`;
208
+ this.treeViewId = `k-${guid()}`;
208
209
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
209
210
  this._tabindex = 0;
210
211
  this._isFocused = false;
211
- this._popupId = guid();
212
212
  this._size = 'medium';
213
213
  this._rounded = 'medium';
214
214
  this._fillMode = 'solid';
@@ -239,7 +239,7 @@ export class DropDownTreeComponent {
239
239
  return this.loading ? 'true' : null;
240
240
  }
241
241
  get hostAriaControls() {
242
- return this.isOpen ? this._popupId : null;
242
+ return this.isOpen ? this.treeViewId : undefined;
243
243
  }
244
244
  get id() {
245
245
  return this.focusableId;
@@ -835,7 +835,7 @@ export class DropDownTreeComponent {
835
835
  onChildrenLoaded() {
836
836
  setTimeout(() => {
837
837
  if (this.popupRef) {
838
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
838
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
839
839
  }
840
840
  });
841
841
  }
@@ -891,11 +891,14 @@ export class DropDownTreeComponent {
891
891
  this.renderer.setStyle(popupWrapper, 'width', max);
892
892
  this.renderer.setStyle(popupWrapper, 'height', this.height);
893
893
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
894
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
894
+ if (!this.appendTo) {
895
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
896
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
897
+ }
895
898
  this.popupRef.popupOpen.subscribe(() => {
896
899
  this.cdr.detectChanges();
897
900
  this.opened.emit();
898
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
901
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
899
902
  });
900
903
  this.popupRef.popupClose.subscribe(() => {
901
904
  this.closed.emit();
@@ -1115,6 +1118,12 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1115
1118
 
1116
1119
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
1117
1120
  selectButtonText="Select"
1121
+
1122
+ i18n-filterInputLabel="kendo.dropdowntree.filterInputLabel|The text set as aria-label on the filter input"
1123
+ filterInputLabel="Filter"
1124
+
1125
+ i18n-popupLabel="kendo.dropdowntree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1126
+ popupLabel="Options list"
1118
1127
  >
1119
1128
  </ng-container>
1120
1129
  <span
@@ -1185,14 +1194,10 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1185
1194
  [filterInput]="filterable && !touchEnabled"
1186
1195
  (keydown.arrowdown)="handleKeydown($event)"
1187
1196
  (keydown.alt.arrowup)="handleKeydown($event)"
1197
+ [attr.aria-label]="messageFor('filterInputLabel')"
1188
1198
  [(ngModel)]="filter"
1189
1199
  class="k-input-inner"
1190
1200
  role="textbox"
1191
- aria-haspopup="true"
1192
- aria-expanded="false"
1193
- tabindex="0"
1194
- aria-disabled="false"
1195
- aria-readonly="false"
1196
1201
  [kendoEventsOutsideAngular]="{
1197
1202
  blur: handleBlur
1198
1203
  }"
@@ -1209,6 +1214,7 @@ DropDownTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
1209
1214
  </ng-template>
1210
1215
  <kendo-treeview
1211
1216
  #treeview
1217
+ [attr.id]="treeViewId"
1212
1218
  *ngIf="data.length !== 0 && !allNodesHidden"
1213
1219
  [size]="size"
1214
1220
  [nodes]="data"
@@ -1298,6 +1304,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1298
1304
 
1299
1305
  i18n-selectButtonText="kendo.dropdowntree.selectButtonText|The text set as aria-label on the select button"
1300
1306
  selectButtonText="Select"
1307
+
1308
+ i18n-filterInputLabel="kendo.dropdowntree.filterInputLabel|The text set as aria-label on the filter input"
1309
+ filterInputLabel="Filter"
1310
+
1311
+ i18n-popupLabel="kendo.dropdowntree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1312
+ popupLabel="Options list"
1301
1313
  >
1302
1314
  </ng-container>
1303
1315
  <span
@@ -1368,14 +1380,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1368
1380
  [filterInput]="filterable && !touchEnabled"
1369
1381
  (keydown.arrowdown)="handleKeydown($event)"
1370
1382
  (keydown.alt.arrowup)="handleKeydown($event)"
1383
+ [attr.aria-label]="messageFor('filterInputLabel')"
1371
1384
  [(ngModel)]="filter"
1372
1385
  class="k-input-inner"
1373
1386
  role="textbox"
1374
- aria-haspopup="true"
1375
- aria-expanded="false"
1376
- tabindex="0"
1377
- aria-disabled="false"
1378
- aria-readonly="false"
1379
1387
  [kendoEventsOutsideAngular]="{
1380
1388
  blur: handleBlur
1381
1389
  }"
@@ -1392,6 +1400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1392
1400
  </ng-template>
1393
1401
  <kendo-treeview
1394
1402
  #treeview
1403
+ [attr.id]="treeViewId"
1395
1404
  *ngIf="data.length !== 0 && !allNodesHidden"
1396
1405
  [size]="size"
1397
1406
  [nodes]="data"
@@ -77,6 +77,7 @@ export class MultiSelectTreeComponent {
77
77
  */
78
78
  this.xIcon = xIcon;
79
79
  this.hostClasses = true;
80
+ this.treeViewId = `k-${guid()}`;
80
81
  this.role = 'combobox';
81
82
  this.ariaHasPopup = 'tree';
82
83
  /**
@@ -229,7 +230,7 @@ export class MultiSelectTreeComponent {
229
230
  * @hidden
230
231
  */
231
232
  this.allNodesHidden = false;
232
- this.tagListId = guid();
233
+ this.tagListId = `k-${guid()}`;
233
234
  this.tagPrefix = "tag-" + guid();
234
235
  this.focusedTagIndex = undefined;
235
236
  this._value = [];
@@ -237,7 +238,6 @@ export class MultiSelectTreeComponent {
237
238
  this._popupSettings = DEFAULT_POPUP_SETTINGS;
238
239
  this._checkableSettings = DEFAULT_CHECKABLE_SETTINGS;
239
240
  this._isFocused = false;
240
- this._popupId = guid();
241
241
  this._size = 'medium';
242
242
  this._rounded = 'medium';
243
243
  this._fillMode = 'solid';
@@ -256,7 +256,7 @@ export class MultiSelectTreeComponent {
256
256
  return this.disabled;
257
257
  }
258
258
  get hostAriaControls() {
259
- return this.isOpen ? this._popupId : null;
259
+ return this.isOpen ? this.treeViewId : null;
260
260
  }
261
261
  get hostAriaAutocomplete() {
262
262
  return this.filterable ? 'list' : null;
@@ -1057,16 +1057,19 @@ export class MultiSelectTreeComponent {
1057
1057
  });
1058
1058
  const popupWrapper = this.popupRef.popupElement;
1059
1059
  const { min, max } = this.width;
1060
+ if (!this.appendTo) {
1061
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
1062
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
1063
+ }
1060
1064
  popupWrapper.style.minWidth = min;
1061
1065
  popupWrapper.style.width = max;
1062
1066
  popupWrapper.style.height = this.height;
1063
1067
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
1064
1068
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
1065
- this.renderer.setAttribute(popupWrapper, 'id', this._popupId);
1066
1069
  this.popupRef.popupOpen.subscribe(() => {
1067
1070
  this.cdr.detectChanges();
1068
1071
  this.opened.emit();
1069
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
1072
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
1070
1073
  });
1071
1074
  this.popupRef.popupClose.subscribe(() => {
1072
1075
  this.closed.emit();
@@ -1295,7 +1298,7 @@ export class MultiSelectTreeComponent {
1295
1298
  onChildrenLoaded() {
1296
1299
  setTimeout(() => {
1297
1300
  if (this.popupRef) {
1298
- this._searchableNodes = getSearchableItems(this._popupId, this.popupRef.popupElement);
1301
+ this._searchableNodes = getSearchableItems(this.treeViewId, this.popupRef.popupElement);
1299
1302
  }
1300
1303
  });
1301
1304
  }
@@ -1401,6 +1404,12 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
1401
1404
 
1402
1405
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
1403
1406
  checkAllText="Check all"
1407
+
1408
+ i18n-filterInputLabel="kendo.multiselecttree.filterInputLabel|The text set as aria-label on the filter input"
1409
+ filterInputLabel="Filter"
1410
+
1411
+ i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1412
+ popupLabel="Options list"
1404
1413
  >
1405
1414
  </ng-container>
1406
1415
  <kendo-taglist
@@ -1467,6 +1476,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
1467
1476
  #filterInput
1468
1477
  (input)="handleFilterInputChange($event.target)"
1469
1478
  [filterInput]="filterable && !touchEnabled"
1479
+ [attr.aria-label]="messageFor('filterInputLabel')"
1470
1480
  (keydown)="handleKeydown($event)"
1471
1481
  [(ngModel)]="filter"
1472
1482
  class="k-input-inner"
@@ -1523,6 +1533,7 @@ MultiSelectTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
1523
1533
  <kendo-treeview
1524
1534
  #treeview
1525
1535
  [size]="size"
1536
+ [attr.id]="treeViewId"
1526
1537
  [nodes]="data"
1527
1538
  [style.maxHeight.px]="listHeight"
1528
1539
  [animate]="false"
@@ -1617,6 +1628,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1617
1628
 
1618
1629
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
1619
1630
  checkAllText="Check all"
1631
+
1632
+ i18n-filterInputLabel="kendo.multiselecttree.filterInputLabel|The text set as aria-label on the filter input"
1633
+ filterInputLabel="Filter"
1634
+
1635
+ i18n-popupLabel="kendo.multiselecttree.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1636
+ popupLabel="Options list"
1620
1637
  >
1621
1638
  </ng-container>
1622
1639
  <kendo-taglist
@@ -1683,6 +1700,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1683
1700
  #filterInput
1684
1701
  (input)="handleFilterInputChange($event.target)"
1685
1702
  [filterInput]="filterable && !touchEnabled"
1703
+ [attr.aria-label]="messageFor('filterInputLabel')"
1686
1704
  (keydown)="handleKeydown($event)"
1687
1705
  [(ngModel)]="filter"
1688
1706
  class="k-input-inner"
@@ -1739,6 +1757,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1739
1757
  <kendo-treeview
1740
1758
  #treeview
1741
1759
  [size]="size"
1760
+ [attr.id]="treeViewId"
1742
1761
  [nodes]="data"
1743
1762
  [style.maxHeight.px]="listHeight"
1744
1763
  [animate]="false"
@@ -100,8 +100,8 @@ export class MultiSelectComponent {
100
100
  * @hidden
101
101
  */
102
102
  this.plusIcon = plusIcon;
103
- this.listBoxId = guid();
104
- this.tagListId = guid();
103
+ this.listBoxId = `k-${guid()}`;
104
+ this.tagListId = `k-${guid()}`;
105
105
  this.tagPrefix = "tag-" + guid();
106
106
  this.optionPrefix = "option-" + guid();
107
107
  this.focusedTagIndex = undefined;
@@ -282,6 +282,12 @@ export class MultiSelectComponent {
282
282
  this.subscribeEvents();
283
283
  this.subscribeTouchEvents();
284
284
  }
285
+ /**
286
+ * @hidden
287
+ */
288
+ get ariaControls() {
289
+ return this.isOpen ? this.listBoxId : undefined;
290
+ }
285
291
  /**
286
292
  * Focuses a specific item of the MultiSelect based on a provided index.
287
293
  * If there is a custom item it is positioned at index -1.
@@ -1406,6 +1412,10 @@ export class MultiSelectComponent {
1406
1412
  });
1407
1413
  const popupWrapper = this.popupRef.popupElement;
1408
1414
  const { min, max } = this.width;
1415
+ if (!this.appendTo) {
1416
+ this.renderer.setAttribute(popupWrapper, 'role', 'region');
1417
+ this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
1418
+ }
1409
1419
  popupWrapper.addEventListener('mousedown', this.popupMouseDownHandler);
1410
1420
  popupWrapper.style.minWidth = min;
1411
1421
  popupWrapper.style.width = max;
@@ -1498,6 +1508,9 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1498
1508
 
1499
1509
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
1500
1510
  clearTitle="clear"
1511
+
1512
+ i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1513
+ popupLabel="Options list"
1501
1514
  >
1502
1515
  </ng-container>
1503
1516
  <kendo-taglist
@@ -1518,10 +1531,11 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1518
1531
  >
1519
1532
  <kendo-searchbar
1520
1533
  #searchbar
1534
+ [ariaExpanded]="isOpen"
1535
+ [ariaControls]="ariaControls"
1521
1536
  [id]="focusableId"
1522
1537
  [role]="'combobox'"
1523
1538
  [tagListId]="tagListId"
1524
- [listId]="listBoxId"
1525
1539
  [isLoading]="loading"
1526
1540
  [isFilterable]="filterable"
1527
1541
  [activeDescendant]="activeDescendant"
@@ -1529,7 +1543,6 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1529
1543
  [disabled]="disabled"
1530
1544
  [readonly]="readonly"
1531
1545
  [tabIndex]="tabIndex"
1532
- [popupOpen]="isOpen"
1533
1546
  [placeholder]="placeholder"
1534
1547
  (onNavigate)="handleNavigate($event)"
1535
1548
  (valueChange)="handleFilter($event)"
@@ -1633,7 +1646,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
1633
1646
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
1634
1647
  </ng-template>
1635
1648
  <ng-container #container></ng-container>
1636
- `, isInline: true, components: [{ type: i7.TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: i8.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: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i10.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: i11.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i12.LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
1649
+ `, isInline: true, components: [{ type: i7.TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { type: i8.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: i9.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass"], exportAs: ["kendoIconWrapper"] }, { type: i10.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: i11.ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], directives: [{ type: i12.LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
1637
1650
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: MultiSelectComponent, decorators: [{
1638
1651
  type: Component,
1639
1652
  args: [{
@@ -1664,6 +1677,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1664
1677
 
1665
1678
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
1666
1679
  clearTitle="clear"
1680
+
1681
+ i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
1682
+ popupLabel="Options list"
1667
1683
  >
1668
1684
  </ng-container>
1669
1685
  <kendo-taglist
@@ -1684,10 +1700,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1684
1700
  >
1685
1701
  <kendo-searchbar
1686
1702
  #searchbar
1703
+ [ariaExpanded]="isOpen"
1704
+ [ariaControls]="ariaControls"
1687
1705
  [id]="focusableId"
1688
1706
  [role]="'combobox'"
1689
1707
  [tagListId]="tagListId"
1690
- [listId]="listBoxId"
1691
1708
  [isLoading]="loading"
1692
1709
  [isFilterable]="filterable"
1693
1710
  [activeDescendant]="activeDescendant"
@@ -1695,7 +1712,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
1695
1712
  [disabled]="disabled"
1696
1713
  [readonly]="readonly"
1697
1714
  [tabIndex]="tabIndex"
1698
- [popupOpen]="isOpen"
1699
1715
  [placeholder]="placeholder"
1700
1716
  (onNavigate)="handleNavigate($event)"
1701
1717
  (valueChange)="handleFilter($event)"
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-dropdowns',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1676453697,
13
- version: '11.2.0',
12
+ publishDate: 1677586118,
13
+ version: '11.3.0-develop.10',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
15
15
  };