@progress/kendo-angular-dropdowns 7.0.4-dev.202208041601 → 7.1.0

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.
@@ -7,12 +7,12 @@ import { EventEmitter, Component, Input, Output, ViewChild, HostBinding, Directi
7
7
  import * as i9 from '@progress/kendo-angular-common';
8
8
  import { isDocumentAvailable, Keys, isChanged, hasObservers, KendoInput, anyChanged, guid as guid$1, ResizeSensorModule, EventsModule } from '@progress/kendo-angular-common';
9
9
  import * as i12 from '@angular/forms';
10
- import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
10
+ import { NgControl, NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
11
11
  import { validatePackage } from '@progress/kendo-licensing';
12
12
  import { getter as getter$1, pointers, touchEnabled } from '@progress/kendo-common';
13
+ import { Subscription, merge, fromEvent, Subject, of, interval } from 'rxjs';
13
14
  import * as i1 from '@progress/kendo-angular-l10n';
14
15
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
15
- import { merge, fromEvent, Subject, Subscription, of, interval } from 'rxjs';
16
16
  import * as i2 from '@progress/kendo-angular-popup';
17
17
  import { PopupModule } from '@progress/kendo-angular-popup';
18
18
  export { PopupComponent } from '@progress/kendo-angular-popup';
@@ -29,7 +29,7 @@ const packageMetadata = {
29
29
  name: '@progress/kendo-angular-dropdowns',
30
30
  productName: 'Kendo UI for Angular',
31
31
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
32
- publishDate: 1659628812,
32
+ publishDate: 1662551028,
33
33
  version: '',
34
34
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
35
35
  };
@@ -359,8 +359,9 @@ const getFillModeClass = (component, fillMode) => {
359
359
  * @hidden
360
360
  */
361
361
  class SearchBarComponent {
362
- constructor(localization, renderer) {
362
+ constructor(localization, renderer, injector) {
363
363
  this.localization = localization;
364
+ this.injector = injector;
364
365
  this.valueChange = new EventEmitter();
365
366
  this.onBlur = new EventEmitter();
366
367
  this.onFocus = new EventEmitter();
@@ -370,9 +371,30 @@ class SearchBarComponent {
370
371
  this._userInput = "";
371
372
  this._previousValue = "";
372
373
  this._placeholder = "";
374
+ this._isSuggestable = false;
375
+ this._isFilterable = false;
376
+ this.subs = new Subscription();
373
377
  this.direction = localization.rtl ? 'rtl' : 'ltr';
374
378
  this.renderer = renderer;
375
379
  }
380
+ set isSuggestable(isSuggestable) {
381
+ this._isSuggestable = isSuggestable;
382
+ this.setAriaAutocomplete();
383
+ }
384
+ ;
385
+ get isSuggestable() {
386
+ return this._isSuggestable;
387
+ }
388
+ ;
389
+ set isFilterable(isFilterable) {
390
+ this._isFilterable = isFilterable;
391
+ this.setAriaAutocomplete();
392
+ }
393
+ ;
394
+ get isFilterable() {
395
+ return this._isFilterable;
396
+ }
397
+ ;
376
398
  get userInput() {
377
399
  return this._userInput;
378
400
  }
@@ -393,8 +415,19 @@ class SearchBarComponent {
393
415
  return this.role === 'combobox' ? this.popupOpen : null;
394
416
  }
395
417
  ngOnInit() {
396
- this.localizationChangeSubscription = this.localization
397
- .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');
418
+ this.subs.add(this.localization
419
+ .changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr'));
420
+ }
421
+ ngAfterContentChecked() {
422
+ var _a;
423
+ const formControl = (_a = this.injector.get(NgControl, null)) === null || _a === void 0 ? void 0 : _a.control;
424
+ this.control = formControl;
425
+ if (formControl) {
426
+ this.subs.add(formControl.valueChanges.subscribe(() => {
427
+ this.control = formControl;
428
+ }));
429
+ }
430
+ this.setAriaInvalid();
398
431
  }
399
432
  ngOnChanges(changes) {
400
433
  let previousUserInput;
@@ -426,9 +459,7 @@ class SearchBarComponent {
426
459
  }
427
460
  }
428
461
  ngOnDestroy() {
429
- if (this.localizationChangeSubscription) {
430
- this.localizationChangeSubscription.unsubscribe();
431
- }
462
+ this.subs.unsubscribe();
432
463
  }
433
464
  writeInputValue(text) {
434
465
  if (isDocumentAvailable()) {
@@ -445,6 +476,33 @@ class SearchBarComponent {
445
476
  }
446
477
  }
447
478
  }
479
+ setAriaInvalid() {
480
+ if (this.control) {
481
+ if (this.control.invalid) {
482
+ this.renderer.setAttribute(this.input.nativeElement, 'aria-invalid', 'true');
483
+ }
484
+ else {
485
+ this.renderer.setAttribute(this.input.nativeElement, 'aria-invalid', 'false');
486
+ }
487
+ }
488
+ else {
489
+ this.renderer.removeAttribute(this.input.nativeElement, 'aria-invalid');
490
+ }
491
+ }
492
+ setAriaAutocomplete() {
493
+ if (this.isFilterable) {
494
+ this.renderer.setAttribute(this.input.nativeElement, 'aria-autocomplete', 'list');
495
+ }
496
+ if (this.isSuggestable) {
497
+ this.renderer.setAttribute(this.input.nativeElement, 'aria-autocomplete', 'inline');
498
+ }
499
+ if (this.isFilterable && this.isSuggestable) {
500
+ this.renderer.setAttribute(this.input.nativeElement, 'aria-autocomplete', 'both');
501
+ }
502
+ if (!this.isFilterable && !this.isSuggestable) {
503
+ this.renderer.removeAttribute(this.input.nativeElement, 'aria-autocomplete');
504
+ }
505
+ }
448
506
  handleInput(event) {
449
507
  const value = event.target.value;
450
508
  if (value !== this.userInput) {
@@ -461,7 +519,7 @@ class SearchBarComponent {
461
519
  handleKeydown(event) {
462
520
  const keyCode = event.keyCode;
463
521
  const keys = [Keys.ArrowUp, Keys.ArrowDown, Keys.ArrowLeft, Keys.ArrowRight, Keys.Enter,
464
- Keys.Escape, Keys.Delete, Keys.Backspace, Keys.Home, Keys.End];
522
+ Keys.Escape, Keys.Delete, Keys.Backspace, Keys.Home, Keys.End, Keys.PageDown, Keys.PageUp];
465
523
  if (keys.indexOf(keyCode) > -1) {
466
524
  this.onNavigate.emit(event);
467
525
  }
@@ -485,8 +543,8 @@ class SearchBarComponent {
485
543
  this.renderer.setAttribute(input, 'size', size.toString());
486
544
  }
487
545
  }
488
- SearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SearchBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
489
- SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SearchBarComponent, selector: "kendo-searchbar", inputs: { id: "id", listId: "listId", tagListId: "tagListId", activeDescendant: "activeDescendant", noDataLabel: "noDataLabel", disabled: "disabled", readonly: "readonly", tabIndex: "tabIndex", popupOpen: "popupOpen", role: "role", 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: `
546
+ SearchBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SearchBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
547
+ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", 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: `
490
548
  <input #input
491
549
  autocomplete="off"
492
550
  [id]="id"
@@ -504,14 +562,12 @@ SearchBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
504
562
  [attr.tabIndex]="tabIndex"
505
563
  [attr.dir]="direction"
506
564
  [attr.role]="role"
507
- [attr.aria-disabled]="disabled"
508
- [attr.aria-readonly]="readonly"
509
565
  aria-haspopup="listbox"
510
566
  [attr.aria-expanded]="ariaExpanded"
511
- [attr.aria-owns]="listId"
567
+ [attr.aria-controls]="listId"
512
568
  [attr.aria-describedby]="tagListId"
513
569
  [attr.aria-activedescendant]="activeDescendant"
514
- [attr.aria-label]="noDataLabel"
570
+ [attr.aria-busy]="isLoading"
515
571
  />
516
572
  `, isInline: true, directives: [{ type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }] });
517
573
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SearchBarComponent, decorators: [{
@@ -536,18 +592,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
536
592
  [attr.tabIndex]="tabIndex"
537
593
  [attr.dir]="direction"
538
594
  [attr.role]="role"
539
- [attr.aria-disabled]="disabled"
540
- [attr.aria-readonly]="readonly"
541
595
  aria-haspopup="listbox"
542
596
  [attr.aria-expanded]="ariaExpanded"
543
- [attr.aria-owns]="listId"
597
+ [attr.aria-controls]="listId"
544
598
  [attr.aria-describedby]="tagListId"
545
599
  [attr.aria-activedescendant]="activeDescendant"
546
- [attr.aria-label]="noDataLabel"
600
+ [attr.aria-busy]="isLoading"
547
601
  />
548
602
  `
549
603
  }]
550
- }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }]; }, propDecorators: { id: [{
604
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i0.Injector }]; }, propDecorators: { id: [{
551
605
  type: Input
552
606
  }], listId: [{
553
607
  type: Input
@@ -555,8 +609,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
555
609
  type: Input
556
610
  }], activeDescendant: [{
557
611
  type: Input
558
- }], noDataLabel: [{
559
- type: Input
560
612
  }], disabled: [{
561
613
  type: Input
562
614
  }], readonly: [{
@@ -567,6 +619,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
567
619
  type: Input
568
620
  }], role: [{
569
621
  type: Input
622
+ }], isLoading: [{
623
+ type: Input
624
+ }], isSuggestable: [{
625
+ type: Input
626
+ }], isFilterable: [{
627
+ type: Input
570
628
  }], userInput: [{
571
629
  type: Input
572
630
  }], suggestedText: [{
@@ -925,6 +983,8 @@ var NavigationAction;
925
983
  NavigationAction[NavigationAction["Down"] = 11] = "Down";
926
984
  NavigationAction[NavigationAction["Left"] = 12] = "Left";
927
985
  NavigationAction[NavigationAction["Right"] = 13] = "Right";
986
+ NavigationAction[NavigationAction["PageDown"] = 14] = "PageDown";
987
+ NavigationAction[NavigationAction["PageUp"] = 15] = "PageUp";
928
988
  })(NavigationAction || (NavigationAction = {}));
929
989
 
930
990
  /**
@@ -1228,6 +1288,8 @@ class NavigationService {
1228
1288
  this.backspace = new EventEmitter();
1229
1289
  this.home = new EventEmitter();
1230
1290
  this.end = new EventEmitter();
1291
+ this.pagedown = new EventEmitter();
1292
+ this.pageup = new EventEmitter();
1231
1293
  }
1232
1294
  process(args) {
1233
1295
  const keyCode = args.originalEvent.keyCode;
@@ -1279,6 +1341,12 @@ class NavigationService {
1279
1341
  else if (keyCode === Keys.Backspace) {
1280
1342
  action = NavigationAction.Backspace;
1281
1343
  }
1344
+ else if (keyCode === Keys.PageDown) {
1345
+ action = NavigationAction.PageDown;
1346
+ }
1347
+ else if (keyCode === Keys.PageUp) {
1348
+ action = NavigationAction.PageUp;
1349
+ }
1282
1350
  const eventData = new NavigationEvent(index, args.originalEvent);
1283
1351
  if (action !== NavigationAction.Undefined) {
1284
1352
  this[NavigationAction[action].toLowerCase()].emit(eventData);
@@ -1802,6 +1870,16 @@ class ListComponent {
1802
1870
  this.scroll(items[flatIndex].element);
1803
1871
  }
1804
1872
  }
1873
+ scrollWithOnePage(action) {
1874
+ let content = this.content.nativeElement;
1875
+ const contentOffsetHeight = content.clientHeight;
1876
+ if (action === NavigationAction.PageDown) {
1877
+ content.scrollTop += contentOffsetHeight;
1878
+ }
1879
+ else if (action === NavigationAction.PageUp) {
1880
+ content.scrollTop -= contentOffsetHeight;
1881
+ }
1882
+ }
1805
1883
  scrollToIndex(index) {
1806
1884
  let content = this.content.nativeElement;
1807
1885
  let contentScrollTop = content.scrollTop;
@@ -1841,6 +1919,9 @@ class ListComponent {
1841
1919
  const hasVirtualScroll = isPresent(this.virtual) && this.hasVirtualScrollbar();
1842
1920
  return hasVirtualScroll || this.list.nativeElement.scrollHeight > this.content.nativeElement.offsetHeight;
1843
1921
  }
1922
+ isItemSelected(index) {
1923
+ return this.selectionService.isSelected(index) || null;
1924
+ }
1844
1925
  /**
1845
1926
  * Sets the list's content overflow (hides/shows scrollbar)
1846
1927
  */
@@ -1886,7 +1967,7 @@ class ListComponent {
1886
1967
  }
1887
1968
  }
1888
1969
  ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ListComponent, deps: [{ token: DataService }, { token: i0.ElementRef }, { token: SelectionService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
1889
- ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ListComponent, selector: "kendo-list", inputs: { selected: "selected", focused: "focused", textField: "textField", valueField: "valueField", height: "height", template: "template", groupTemplate: "groupTemplate", fixedGroupTemplate: "fixedGroupTemplate", show: "show", id: "id", optionPrefix: "optionPrefix", multipleSelection: "multipleSelection", virtual: "virtual", type: "type", checkboxes: "checkboxes", data: "data", size: "size", rounded: "rounded" }, outputs: { onClick: "onClick", pageChange: "pageChange", listResize: "listResize" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
1970
+ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ListComponent, selector: "kendo-list", inputs: { selected: "selected", focused: "focused", textField: "textField", valueField: "valueField", height: "height", template: "template", groupTemplate: "groupTemplate", fixedGroupTemplate: "fixedGroupTemplate", show: "show", id: "id", optionPrefix: "optionPrefix", multipleSelection: "multipleSelection", virtual: "virtual", type: "type", checkboxes: "checkboxes", ariaLive: "ariaLive", isMultiselect: "isMultiselect", data: "data", size: "size", rounded: "rounded" }, outputs: { onClick: "onClick", pageChange: "pageChange", listResize: "listResize" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
1890
1971
  <div *ngIf="dataService.grouped"
1891
1972
  [class]="listGroupStickyHeaderClass"
1892
1973
  [ngStyle]="{
@@ -1911,6 +1992,8 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
1911
1992
  role="listbox"
1912
1993
  [class]="listClass"
1913
1994
  [attr.id]="id"
1995
+ [attr.aria-live]="ariaLive"
1996
+ [attr.aria-multiselectable]="isMultiselect"
1914
1997
  [attr.aria-hidden]="!show">
1915
1998
  <ng-template *ngIf="!dataService.grouped && show" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
1916
1999
  <li
@@ -1922,6 +2005,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
1922
2005
  [multipleSelection]="multipleSelection"
1923
2006
  [attr.id]="optionPrefix + '-' + getValue(dataItem)"
1924
2007
  [attr.tabIndex]="-1"
2008
+ [attr.aria-selected]="isItemSelected(itemIndex)"
1925
2009
  [class]="listItemClass"
1926
2010
  [ngClass]="{
1927
2011
  'k-disabled': isDisabled(itemIndex),
@@ -1978,6 +2062,7 @@ ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
1978
2062
  [attr.absolute-index]="dataItem.index"
1979
2063
  [attr.id]="optionPrefix + '-' + getValue(dataItem.value)"
1980
2064
  [attr.tabIndex]="-1"
2065
+ [attr.aria-selected]="isItemSelected(dataItem.offsetIndex)"
1981
2066
  [class]="listItemClass"
1982
2067
  [ngClass]="{
1983
2068
  'k-disabled': isDisabled(dataItem.offsetIndex),
@@ -2035,6 +2120,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2035
2120
  role="listbox"
2036
2121
  [class]="listClass"
2037
2122
  [attr.id]="id"
2123
+ [attr.aria-live]="ariaLive"
2124
+ [attr.aria-multiselectable]="isMultiselect"
2038
2125
  [attr.aria-hidden]="!show">
2039
2126
  <ng-template *ngIf="!dataService.grouped && show" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2040
2127
  <li
@@ -2046,6 +2133,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2046
2133
  [multipleSelection]="multipleSelection"
2047
2134
  [attr.id]="optionPrefix + '-' + getValue(dataItem)"
2048
2135
  [attr.tabIndex]="-1"
2136
+ [attr.aria-selected]="isItemSelected(itemIndex)"
2049
2137
  [class]="listItemClass"
2050
2138
  [ngClass]="{
2051
2139
  'k-disabled': isDisabled(itemIndex),
@@ -2102,6 +2190,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2102
2190
  [attr.absolute-index]="dataItem.index"
2103
2191
  [attr.id]="optionPrefix + '-' + getValue(dataItem.value)"
2104
2192
  [attr.tabIndex]="-1"
2193
+ [attr.aria-selected]="isItemSelected(dataItem.offsetIndex)"
2105
2194
  [class]="listItemClass"
2106
2195
  [ngClass]="{
2107
2196
  'k-disabled': isDisabled(dataItem.offsetIndex),
@@ -2161,6 +2250,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2161
2250
  type: Input
2162
2251
  }], checkboxes: [{
2163
2252
  type: Input
2253
+ }], ariaLive: [{
2254
+ type: Input
2255
+ }], isMultiselect: [{
2256
+ type: Input
2164
2257
  }], data: [{
2165
2258
  type: Input
2166
2259
  }], size: [{
@@ -2478,11 +2571,6 @@ class AutoCompleteComponent {
2478
2571
  const dataItem = this.dataService.itemAt(this.selectionService.focused);
2479
2572
  return this.optionPrefix + "-" + getter(dataItem, this.valueField);
2480
2573
  }
2481
- get noDataLabel() {
2482
- if (this.data.length === 0) {
2483
- return this.messageFor('noDataText');
2484
- }
2485
- }
2486
2574
  /**
2487
2575
  * Sets the data of the AutoComplete.
2488
2576
  *
@@ -2824,6 +2912,8 @@ class AutoCompleteComponent {
2824
2912
  action !== NavigationAction.End &&
2825
2913
  action !== NavigationAction.Left &&
2826
2914
  action !== NavigationAction.Right &&
2915
+ action !== NavigationAction.PageDown &&
2916
+ action !== NavigationAction.PageUp &&
2827
2917
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
2828
2918
  event.preventDefault();
2829
2919
  }
@@ -2850,7 +2940,12 @@ class AutoCompleteComponent {
2850
2940
  this.change(value);
2851
2941
  }
2852
2942
  handleEscape() {
2853
- this.togglePopup(false);
2943
+ if (this.isOpen) {
2944
+ this.togglePopup(false);
2945
+ }
2946
+ else {
2947
+ this.value = '';
2948
+ }
2854
2949
  this.selectionService.focused = -1;
2855
2950
  this.suggestedText = null;
2856
2951
  }
@@ -2949,8 +3044,14 @@ class AutoCompleteComponent {
2949
3044
  this.focusSubscription = this.selectionService.onFocus.subscribe(this.handleItemFocus.bind(this));
2950
3045
  this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down).subscribe((event) => this.navigate(event.index));
2951
3046
  this.closeSubscription = this.navigationService.close.subscribe(() => this.togglePopup(false));
3047
+ this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));
2952
3048
  this.enterSubscription = this.navigationService.enter.subscribe(this.handleEnter.bind(this));
2953
3049
  this.escSubscription = this.navigationService.esc.subscribe(this.handleEscape.bind(this));
3050
+ this.scrollSubscription = merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
3051
+ if (this.isOpen) {
3052
+ this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
3053
+ }
3054
+ });
2954
3055
  }
2955
3056
  subscribeTouchEvents() {
2956
3057
  if (!isDocumentAvailable() || !this.touchEnabled) {
@@ -2972,8 +3073,10 @@ class AutoCompleteComponent {
2972
3073
  this.changeSubscription.unsubscribe();
2973
3074
  this.navigationSubscription.unsubscribe();
2974
3075
  this.closeSubscription.unsubscribe();
3076
+ this.openSubscription.unsubscribe();
2975
3077
  this.enterSubscription.unsubscribe();
2976
3078
  this.escSubscription.unsubscribe();
3079
+ this.scrollSubscription.unsubscribe();
2977
3080
  this.valueChangeSubscription.unsubscribe();
2978
3081
  this.focusSubscription.unsubscribe();
2979
3082
  if (this.touchstartDisposeHandler) {
@@ -3020,6 +3123,11 @@ class AutoCompleteComponent {
3020
3123
  popupWrapper.style.width = max;
3021
3124
  popupWrapper.style.height = this.height;
3022
3125
  popupWrapper.setAttribute("dir", this.direction);
3126
+ const listBox = popupWrapper.querySelector('ul.k-list-ul');
3127
+ const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
3128
+ if (ariaLabel) {
3129
+ listBox.setAttribute('aria-labelledby', ariaLabel);
3130
+ }
3023
3131
  this.popupRef.popupOpen.subscribe(() => {
3024
3132
  this.cdr.detectChanges();
3025
3133
  this.optionsList.scrollToItem(this.selectionService.focused);
@@ -3123,10 +3231,12 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3123
3231
  </ng-container>
3124
3232
  <kendo-searchbar #searchbar
3125
3233
  [role]="'combobox'"
3234
+ [isSuggestable]="suggest"
3235
+ [isFilterable]="filterable"
3236
+ [isLoading]="isLoading"
3126
3237
  [id]="focusableId"
3127
3238
  [listId]="listBoxId"
3128
3239
  [activeDescendant]="activeDescendant"
3129
- [noDataLabel]="noDataLabel"
3130
3240
  [userInput]="text"
3131
3241
  [suggestedText]="suggestion"
3132
3242
  [disabled]="disabled"
@@ -3200,7 +3310,7 @@ AutoCompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
3200
3310
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
3201
3311
  </ng-template>
3202
3312
  <ng-container #container></ng-container>
3203
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "noDataLabel", "disabled", "readonly", "tabIndex", "popupOpen", "role", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
3313
+ `, 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: 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: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
3204
3314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AutoCompleteComponent, decorators: [{
3205
3315
  type: Component,
3206
3316
  args: [{
@@ -3237,10 +3347,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
3237
3347
  </ng-container>
3238
3348
  <kendo-searchbar #searchbar
3239
3349
  [role]="'combobox'"
3350
+ [isSuggestable]="suggest"
3351
+ [isFilterable]="filterable"
3352
+ [isLoading]="isLoading"
3240
3353
  [id]="focusableId"
3241
3354
  [listId]="listBoxId"
3242
3355
  [activeDescendant]="activeDescendant"
3243
- [noDataLabel]="noDataLabel"
3244
3356
  [userInput]="text"
3245
3357
  [suggestedText]="suggestion"
3246
3358
  [disabled]="disabled"
@@ -3725,11 +3837,6 @@ class ComboBoxComponent {
3725
3837
  const dataItem = this.dataService.itemAt(this.selectionService.focused);
3726
3838
  return this.optionPrefix + "-" + (dataItem ? getter(dataItem, this.valueField) : "");
3727
3839
  }
3728
- get noDataLabel() {
3729
- if (this.data.length === 0) {
3730
- return this.messageFor('noDataText');
3731
- }
3732
- }
3733
3840
  get appendTo() {
3734
3841
  const { appendTo } = this.popupSettings;
3735
3842
  if (!appendTo || appendTo === 'root') {
@@ -4063,6 +4170,11 @@ class ComboBoxComponent {
4063
4170
  .subscribe((event) => this.navigate(event.index)));
4064
4171
  this.subs.add(this.navigationService.open.subscribe(this.handleNavigationOpen.bind(this)));
4065
4172
  this.subs.add(this.navigationService.close.subscribe(() => this.togglePopup(false)));
4173
+ this.subs.add(merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
4174
+ if (this.isOpen) {
4175
+ this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
4176
+ }
4177
+ }));
4066
4178
  this.subs.add(this.navigationService.esc.subscribe(this.handleEscape.bind(this)));
4067
4179
  this.subs.add(this.navigationService.enter.pipe(tap((event) => {
4068
4180
  if (this.isOpen) {
@@ -4195,9 +4307,10 @@ class ComboBoxComponent {
4195
4307
  * @hidden
4196
4308
  */
4197
4309
  clearValue(event) {
4198
- event.stopImmediatePropagation();
4199
- this.focus();
4200
- this._filtering = true;
4310
+ event === null || event === void 0 ? void 0 : event.stopImmediatePropagation();
4311
+ if (event) {
4312
+ this.focus();
4313
+ }
4201
4314
  this._previousDataItem = undefined;
4202
4315
  this.selectionService.resetSelection([]);
4203
4316
  this.clearValueSubject.next();
@@ -4424,6 +4537,8 @@ class ComboBoxComponent {
4424
4537
  action !== NavigationAction.Right &&
4425
4538
  action !== NavigationAction.Backspace &&
4426
4539
  action !== NavigationAction.Delete &&
4540
+ action !== NavigationAction.PageDown &&
4541
+ action !== NavigationAction.PageUp &&
4427
4542
  ((action === NavigationAction.Enter && this.isOpen) || action !== NavigationAction.Enter)) {
4428
4543
  event.preventDefault();
4429
4544
  }
@@ -4490,7 +4605,7 @@ class ComboBoxComponent {
4490
4605
  * @hidden
4491
4606
  */
4492
4607
  handleEscape() {
4493
- this.togglePopup(false);
4608
+ this.isOpen ? this.togglePopup(false) : this.clearValue();
4494
4609
  // clear the focus only if the focused item is not selected
4495
4610
  const hasSelected = this.selectionService.selected.length > 0;
4496
4611
  if (!hasSelected) {
@@ -4639,6 +4754,11 @@ class ComboBoxComponent {
4639
4754
  popupWrapper.style.width = max;
4640
4755
  popupWrapper.style.height = this.popupHeight;
4641
4756
  popupWrapper.setAttribute("dir", this.direction);
4757
+ const listBox = this.popupRef.popupElement.querySelector('ul.k-list-ul');
4758
+ const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
4759
+ if (ariaLabel) {
4760
+ listBox.setAttribute('aria-labelledby', ariaLabel);
4761
+ }
4642
4762
  this.popupRef.popupOpen.subscribe(() => {
4643
4763
  this.cdr.detectChanges();
4644
4764
  this.optionsList.scrollToItem(this.selectionService.focused);
@@ -4743,8 +4863,10 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
4743
4863
  [role]="'combobox'"
4744
4864
  [id]="focusableId"
4745
4865
  [listId]="listBoxId"
4866
+ [isLoading]="loading"
4867
+ [isSuggestable]="suggest"
4868
+ [isFilterable]="filterable"
4746
4869
  [activeDescendant]="activeDescendant"
4747
- [noDataLabel]="noDataLabel"
4748
4870
  [userInput]="text"
4749
4871
  [suggestedText]="getSuggestion()"
4750
4872
  [disabled]="disabled"
@@ -4772,6 +4894,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
4772
4894
  </span>
4773
4895
  <button
4774
4896
  #select
4897
+ tabindex="-1"
4775
4898
  unselectable="on"
4776
4899
  type="button"
4777
4900
  class="k-input-button k-button k-icon-button"
@@ -4831,7 +4954,7 @@ ComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
4831
4954
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
4832
4955
  </ng-template>
4833
4956
  <ng-container #container></ng-container>
4834
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "noDataLabel", "disabled", "readonly", "tabIndex", "popupOpen", "role", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
4957
+ `, 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: 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: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }] });
4835
4958
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ComboBoxComponent, decorators: [{
4836
4959
  type: Component,
4837
4960
  args: [{
@@ -4871,8 +4994,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
4871
4994
  [role]="'combobox'"
4872
4995
  [id]="focusableId"
4873
4996
  [listId]="listBoxId"
4997
+ [isLoading]="loading"
4998
+ [isSuggestable]="suggest"
4999
+ [isFilterable]="filterable"
4874
5000
  [activeDescendant]="activeDescendant"
4875
- [noDataLabel]="noDataLabel"
4876
5001
  [userInput]="text"
4877
5002
  [suggestedText]="getSuggestion()"
4878
5003
  [disabled]="disabled"
@@ -4900,6 +5025,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
4900
5025
  </span>
4901
5026
  <button
4902
5027
  #select
5028
+ tabindex="-1"
4903
5029
  unselectable="on"
4904
5030
  type="button"
4905
5031
  class="k-input-button k-button k-icon-button"
@@ -5188,7 +5314,7 @@ const DEFAULT_FILL_MODE$3 = 'solid';
5188
5314
  * ```
5189
5315
  */
5190
5316
  class DropDownListComponent {
5191
- constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, _zone, renderer, cdr, touchEnabled) {
5317
+ constructor(wrapper, localization, popupService, selectionService, navigationService, disabledItemsService, dataService, _zone, renderer, cdr, touchEnabled, injector) {
5192
5318
  this.wrapper = wrapper;
5193
5319
  this.localization = localization;
5194
5320
  this.popupService = popupService;
@@ -5200,6 +5326,7 @@ class DropDownListComponent {
5200
5326
  this.renderer = renderer;
5201
5327
  this.cdr = cdr;
5202
5328
  this.touchEnabled = touchEnabled;
5329
+ this.injector = injector;
5203
5330
  /**
5204
5331
  * Sets the height of the options list. By default, `listHeight` is 200px.
5205
5332
  *
@@ -5207,10 +5334,6 @@ class DropDownListComponent {
5207
5334
  * > To set the height of the popup container, use `popupSettings.height`.
5208
5335
  */
5209
5336
  this.listHeight = 200;
5210
- /**
5211
- * Sets the disabled state of the component.
5212
- */
5213
- this.disabled = false;
5214
5337
  /**
5215
5338
  * Sets the read-only state of the component.
5216
5339
  */
@@ -5282,11 +5405,13 @@ class DropDownListComponent {
5282
5405
  * @hidden
5283
5406
  */
5284
5407
  this.focusableId = `k-${guid()}`;
5285
- this.role = 'listbox';
5408
+ this.role = 'combobox';
5409
+ this.haspopup = 'listbox';
5286
5410
  this.groupIndices = [];
5287
5411
  this.listBoxId = guid();
5288
5412
  this.optionPrefix = guid();
5289
5413
  this.filterText = "";
5414
+ this.subs = new Subscription();
5290
5415
  this._isFocused = false;
5291
5416
  this.onTouchedCallback = (_) => { };
5292
5417
  this.onChangeCallback = (_) => { };
@@ -5296,7 +5421,6 @@ class DropDownListComponent {
5296
5421
  this.filterBlurred = new EventEmitter();
5297
5422
  this.hostElementFocused = new EventEmitter();
5298
5423
  this.hostElementBlurred = new EventEmitter();
5299
- this.selectionSubscription = new Subscription();
5300
5424
  this._open = false;
5301
5425
  this._popupSettings = { animate: true };
5302
5426
  this._size = 'medium';
@@ -5332,7 +5456,7 @@ class DropDownListComponent {
5332
5456
  get ariaExpanded() {
5333
5457
  return this.isOpen;
5334
5458
  }
5335
- get ariaOwns() {
5459
+ get ariaControls() {
5336
5460
  if (!this.isOpen) {
5337
5461
  return;
5338
5462
  }
@@ -5344,11 +5468,6 @@ class DropDownListComponent {
5344
5468
  }
5345
5469
  return this.optionPrefix + "-" + getter(this.dataItem, this.valueField);
5346
5470
  }
5347
- get noDataLabel() {
5348
- if (this.dataService.itemsCount === 0) {
5349
- return this.messageFor('noDataText');
5350
- }
5351
- }
5352
5471
  get appendTo() {
5353
5472
  const { appendTo } = this.popupSettings;
5354
5473
  if (!appendTo || appendTo === 'root') {
@@ -5356,6 +5475,12 @@ class DropDownListComponent {
5356
5475
  }
5357
5476
  return appendTo === 'component' ? this.container : appendTo;
5358
5477
  }
5478
+ /**
5479
+ * @hidden
5480
+ */
5481
+ get ariaLive() {
5482
+ return this.filterable ? 'polite' : 'off';
5483
+ }
5359
5484
  /**
5360
5485
  * Sets the data of the DropDownList.
5361
5486
  *
@@ -5564,9 +5689,12 @@ class DropDownListComponent {
5564
5689
  popupWrapper.style.width = max;
5565
5690
  }
5566
5691
  }
5567
- get isDisabled() {
5692
+ get isDisabledClass() {
5568
5693
  return this.disabled;
5569
5694
  }
5695
+ get isDisabledAttribute() {
5696
+ return this.disabled ? '' : null;
5697
+ }
5570
5698
  get isLoading() {
5571
5699
  return this.loading;
5572
5700
  }
@@ -5576,21 +5704,28 @@ class DropDownListComponent {
5576
5704
  get hostTabIndex() {
5577
5705
  return this.widgetTabIndex;
5578
5706
  }
5579
- get isReadonly() {
5707
+ get readonlyClass() {
5580
5708
  return this.readonly;
5581
5709
  }
5710
+ get readonlyAttr() {
5711
+ return this.readonly ? '' : null;
5712
+ }
5713
+ get isBusy() {
5714
+ return this.isLoading;
5715
+ }
5582
5716
  get isAriaExpanded() {
5583
5717
  return this.ariaExpanded;
5584
5718
  }
5585
- get hostAriaOwns() {
5586
- return this.ariaOwns;
5719
+ get hostAriaControls() {
5720
+ return this.ariaControls;
5721
+ }
5722
+ get hostAriaInvalid() {
5723
+ var _a;
5724
+ return this.formControl ? (_a = this.formControl) === null || _a === void 0 ? void 0 : _a.invalid.toString() : null;
5587
5725
  }
5588
5726
  get hostAriaActivedescendant() {
5589
5727
  return this.ariaActivedescendant;
5590
5728
  }
5591
- get hostNoDataLabel() {
5592
- return this.noDataLabel;
5593
- }
5594
5729
  /**
5595
5730
  * @hidden
5596
5731
  */
@@ -5628,6 +5763,8 @@ class DropDownListComponent {
5628
5763
  action !== NavigationAction.Tab &&
5629
5764
  action !== NavigationAction.Backspace &&
5630
5765
  action !== NavigationAction.Delete &&
5766
+ action !== NavigationAction.PageDown &&
5767
+ action !== NavigationAction.PageUp &&
5631
5768
  !(leftRightKeys && this.filterable) &&
5632
5769
  action !== NavigationAction.Enter //enter when popup is opened is handled before `handleEnter`
5633
5770
  ) {
@@ -5660,11 +5797,11 @@ class DropDownListComponent {
5660
5797
  }
5661
5798
  ngOnInit() {
5662
5799
  this.renderer.removeAttribute(this.wrapper.nativeElement, "tabindex");
5663
- this.localizationChangesSubscription = this.localization
5800
+ this.subs.add(this.localization
5664
5801
  .changes.subscribe(({ rtl }) => {
5665
5802
  this.direction = rtl ? 'rtl' : 'ltr';
5666
5803
  this.cdr.detectChanges();
5667
- });
5804
+ }));
5668
5805
  this.assignAriaDescribedBy();
5669
5806
  this.setComponentClasses();
5670
5807
  }
@@ -5687,9 +5824,10 @@ class DropDownListComponent {
5687
5824
  */
5688
5825
  ngOnDestroy() {
5689
5826
  this.destroyPopup();
5690
- this.unsubscribeEvents();
5691
- if (this.localizationChangesSubscription) {
5692
- this.localizationChangesSubscription.unsubscribe();
5827
+ this.subs.unsubscribe();
5828
+ this.unSubscribeFocusEvents();
5829
+ if (this.touchstartDisposeHandler) {
5830
+ this.touchstartDisposeHandler();
5693
5831
  }
5694
5832
  }
5695
5833
  /**
@@ -5714,6 +5852,13 @@ class DropDownListComponent {
5714
5852
  ngAfterContentChecked() {
5715
5853
  this.verifySettings();
5716
5854
  }
5855
+ /**
5856
+ * @hidden
5857
+ */
5858
+ get formControl() {
5859
+ const ngControl = this.injector.get(NgControl, null);
5860
+ return (ngControl === null || ngControl === void 0 ? void 0 : ngControl.control) || null;
5861
+ }
5717
5862
  /**
5718
5863
  * Focuses a specific item of the DropDownList based on a provided index.
5719
5864
  * If there is a default item it is positioned at index -1.
@@ -5743,6 +5888,7 @@ class DropDownListComponent {
5743
5888
  blur() {
5744
5889
  if (!this.disabled) {
5745
5890
  this.wrapper.nativeElement.blur();
5891
+ this.cdr.detectChanges();
5746
5892
  }
5747
5893
  }
5748
5894
  /**
@@ -5914,16 +6060,21 @@ class DropDownListComponent {
5914
6060
  popupWrapper.style.width = max;
5915
6061
  popupWrapper.style.height = this.height;
5916
6062
  popupWrapper.setAttribute("dir", this.direction);
5917
- this.popupRef.popupOpen.subscribe(() => {
6063
+ const listBox = popupWrapper.querySelector('ul.k-list-ul');
6064
+ const ariaLabel = this.wrapper.nativeElement.getAttribute('aria-labelledby');
6065
+ if (ariaLabel) {
6066
+ listBox.setAttribute('aria-labelledby', ariaLabel);
6067
+ }
6068
+ this.subs.add(this.popupRef.popupOpen.subscribe(() => {
5918
6069
  this.cdr.detectChanges();
5919
6070
  this.optionsList.scrollToItem(this.selectionService.focused);
5920
6071
  this.opened.emit();
5921
- });
5922
- this.popupRef.popupClose.subscribe(() => {
6072
+ }));
6073
+ this.subs.add(this.popupRef.popupClose.subscribe(() => {
5923
6074
  this.closed.emit();
5924
- });
6075
+ }));
5925
6076
  if (!this.filterable) {
5926
- this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false));
6077
+ this.subs.add(this.popupRef.popupAnchorViewportLeave.subscribe(() => this.togglePopup(false)));
5927
6078
  }
5928
6079
  }
5929
6080
  destroyPopup() {
@@ -5962,10 +6113,10 @@ class DropDownListComponent {
5962
6113
  return;
5963
6114
  }
5964
6115
  // Item selection when the popup is open.
5965
- this.selectionSubscription.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), map(this.itemFromEvent.bind(this)))
6116
+ this.subs.add(this.selectionService.onSelect.pipe(filter(_ => this.isOpen), map(this.itemFromEvent.bind(this)))
5966
6117
  .subscribe(this.onSelectionChange.bind(this)));
5967
6118
  // Item selection when the popup is closed | clicked | enter, and so on.
5968
- this.selectionSubscription.add(merge(this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)), this.selectionService.onChange).pipe(map(this.itemFromEvent.bind(this)), tap(_ => this.togglePopup(false)))
6119
+ this.subs.add(merge(this.selectionService.onSelect.pipe(filter(_ => !this.isOpen)), this.selectionService.onChange).pipe(map(this.itemFromEvent.bind(this)), tap(_ => this.togglePopup(false)))
5969
6120
  .subscribe(({ dataItem, value: newValue, newSelection }) => {
5970
6121
  if (newSelection) {
5971
6122
  this.onSelectionChange({ dataItem });
@@ -5983,27 +6134,31 @@ class DropDownListComponent {
5983
6134
  }
5984
6135
  this.clearFilter();
5985
6136
  }));
5986
- this.navigationSubscription = merge(this.navigationService.up, this.navigationService.down, this.navigationService.left.pipe(skipWhile(() => this.filterable)), this.navigationService.right.pipe(skipWhile(() => this.filterable)), this.navigationService.home, this.navigationService.end)
6137
+ this.subs.add(merge(this.navigationService.up, this.navigationService.down, this.navigationService.left.pipe(skipWhile(() => this.filterable)), this.navigationService.right.pipe(skipWhile(() => this.filterable)), this.navigationService.home, this.navigationService.end)
5987
6138
  .pipe(filter((event) => !isNaN(event.index)))
5988
- .subscribe((event) => this.selectionService.select(event.index));
5989
- this.openSubscription = this.navigationService.open.subscribe(() => this.togglePopup(true));
5990
- this.closeSubscription = this.navigationService.close.subscribe(() => {
6139
+ .subscribe((event) => this.selectionService.select(event.index)));
6140
+ this.subs.add(merge(this.navigationService.pagedown, this.navigationService.pageup).subscribe((event) => {
6141
+ if (this.isOpen) {
6142
+ this.optionsList.scrollWithOnePage(NavigationAction[event.originalEvent.code]);
6143
+ }
6144
+ }));
6145
+ this.subs.add(this.navigationService.open.subscribe(() => this.togglePopup(true)));
6146
+ this.subs.add(this.navigationService.close.subscribe(() => {
5991
6147
  this.togglePopup(false);
5992
6148
  this.focus();
5993
- });
5994
- this.enterSubscription = this.navigationService.enter
6149
+ }));
6150
+ this.subs.add(this.navigationService.enter
5995
6151
  .pipe(tap((event) => event.originalEvent.preventDefault()))
5996
- .subscribe(this.handleEnter.bind(this));
5997
- this.escSubscription = this.navigationService.esc
5998
- .subscribe(this.handleEscape.bind(this));
5999
- this.filterBlurredSubscription = this.filterBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.hostElementFocused))))
6152
+ .subscribe(this.handleEnter.bind(this)));
6153
+ this.subs.add(this.navigationService.esc
6154
+ .subscribe(this.handleEscape.bind(this)));
6155
+ this.subs.add(this.filterBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.hostElementFocused))))
6000
6156
  .subscribe(() => {
6001
6157
  this.hostElementBlurred.emit();
6002
- });
6158
+ }));
6003
6159
  this._zone.runOutsideAngular(() => {
6004
- this.componentBlurredSubscription =
6005
- merge(this.hostElementBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.filterFocused)))), this.navigationService.tab).pipe(tap(event => event instanceof NavigationEvent && this.focus()), filter(() => this.isFocused))
6006
- .subscribe(() => this.componentBlur());
6160
+ this.subs.add(merge(this.hostElementBlurred.pipe(concatMap(() => interval(10).pipe(take(1), takeUntil(this.filterFocused)))), this.navigationService.tab).pipe(tap(event => event instanceof NavigationEvent && this.focus()), filter(() => this.isFocused))
6161
+ .subscribe(() => this.componentBlur()));
6007
6162
  });
6008
6163
  }
6009
6164
  subscribeTouchEvents() {
@@ -6043,25 +6198,6 @@ class DropDownListComponent {
6043
6198
  document.removeEventListener('blur', this.blurComponent, useCapture);
6044
6199
  }
6045
6200
  }
6046
- unsubscribeEvents() {
6047
- if (!isDocumentAvailable()) {
6048
- return;
6049
- }
6050
- this.navigationSubscription.unsubscribe();
6051
- this.openSubscription.unsubscribe();
6052
- this.closeSubscription.unsubscribe();
6053
- this.enterSubscription.unsubscribe();
6054
- this.escSubscription.unsubscribe();
6055
- this.componentBlurredSubscription.unsubscribe();
6056
- this.filterBlurredSubscription.unsubscribe();
6057
- this.unSubscribeFocusEvents();
6058
- if (this.touchstartDisposeHandler) {
6059
- this.touchstartDisposeHandler();
6060
- }
6061
- if (this.selectionSubscription) {
6062
- this.selectionSubscription.unsubscribe();
6063
- }
6064
- }
6065
6201
  itemFromEvent(event) {
6066
6202
  const index = event.indices[0];
6067
6203
  let dataItem = this.dataService.itemAt(index);
@@ -6331,8 +6467,8 @@ class DropDownListComponent {
6331
6467
  }
6332
6468
  }
6333
6469
  }
6334
- DropDownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", 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 }], target: i0.ɵɵFactoryTarget.Component });
6335
- DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", 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.isDisabled", "attr.aria-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.id": "this.focusableId", "attr.dir": "this.dir", "attr.tabindex": "this.hostTabIndex", "attr.readonly": "this.isReadonly", "attr.aria-readonly": "this.isReadonly", "attr.role": "this.role", "attr.aria-haspopup": "this.role", "attr.aria-expanded": "this.isAriaExpanded", "attr.aria-owns": "this.hostAriaOwns", "attr.aria-activedescendant": "this.hostAriaActivedescendant", "attr.aria-label": "this.hostNoDataLabel" } }, providers: [
6470
+ DropDownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", 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 });
6471
+ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", 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: [
6336
6472
  DROPDOWNLIST_VALUE_ACCESSOR,
6337
6473
  DataService,
6338
6474
  SelectionService,
@@ -6358,7 +6494,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6358
6494
  selectButtonText="Select"
6359
6495
  >
6360
6496
  </ng-container>
6361
- <span class="k-input-inner" unselectable="on" role="option" [id]="valueLabelId">
6497
+ <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
6362
6498
  <span class="k-input-value-text">
6363
6499
  <ng-template *ngIf="valueTemplate"
6364
6500
  [templateContext]="{
@@ -6397,9 +6533,11 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6397
6533
  >
6398
6534
  <span class="k-input-icon k-icon k-i-search" unselectable="on"></span>
6399
6535
  <input
6400
- [attr.aria-owns]="ariaOwns"
6536
+ role="searchbox"
6537
+ aria-autocomplete="list"
6538
+ aria-haspopup="listbox"
6539
+ [attr.aria-controls]="ariaControls"
6401
6540
  [attr.aria-activedescendant]="ariaActivedescendant"
6402
- [attr.aria-label]="noDataLabel"
6403
6541
  tabindex="-1"
6404
6542
  [filterInput]="isFocused && !touchEnabled"
6405
6543
  [dir]="direction"
@@ -6460,6 +6598,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6460
6598
  [height]="listHeight"
6461
6599
  [show]="isOpen"
6462
6600
  [virtual]="virtual"
6601
+ [ariaLive]="ariaLive"
6463
6602
  (pageChange)="pageChange($event)"
6464
6603
  >
6465
6604
  </kendo-list>
@@ -6485,7 +6624,7 @@ DropDownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
6485
6624
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
6486
6625
  </ng-template>
6487
6626
  <ng-container #container></ng-container>
6488
- `, isInline: true, components: [{ type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
6627
+ `, isInline: true, components: [{ 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: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i12.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
6489
6628
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropDownListComponent, decorators: [{
6490
6629
  type: Component,
6491
6630
  args: [{
@@ -6518,7 +6657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
6518
6657
  selectButtonText="Select"
6519
6658
  >
6520
6659
  </ng-container>
6521
- <span class="k-input-inner" unselectable="on" role="option" [id]="valueLabelId">
6660
+ <span class="k-input-inner" unselectable="on" [id]="valueLabelId">
6522
6661
  <span class="k-input-value-text">
6523
6662
  <ng-template *ngIf="valueTemplate"
6524
6663
  [templateContext]="{
@@ -6557,9 +6696,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
6557
6696
  >
6558
6697
  <span class="k-input-icon k-icon k-i-search" unselectable="on"></span>
6559
6698
  <input
6560
- [attr.aria-owns]="ariaOwns"
6699
+ role="searchbox"
6700
+ aria-autocomplete="list"
6701
+ aria-haspopup="listbox"
6702
+ [attr.aria-controls]="ariaControls"
6561
6703
  [attr.aria-activedescendant]="ariaActivedescendant"
6562
- [attr.aria-label]="noDataLabel"
6563
6704
  tabindex="-1"
6564
6705
  [filterInput]="isFocused && !touchEnabled"
6565
6706
  [dir]="direction"
@@ -6620,6 +6761,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
6620
6761
  [height]="listHeight"
6621
6762
  [show]="isOpen"
6622
6763
  [virtual]="virtual"
6764
+ [ariaLive]="ariaLive"
6623
6765
  (pageChange)="pageChange($event)"
6624
6766
  >
6625
6767
  </kendo-list>
@@ -6652,7 +6794,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
6652
6794
  }, {
6653
6795
  type: Inject,
6654
6796
  args: [TOUCH_ENABLED]
6655
- }] }]; }, propDecorators: { iconClass: [{
6797
+ }] }, { type: i0.Injector }]; }, propDecorators: { iconClass: [{
6656
6798
  type: Input
6657
6799
  }], loading: [{
6658
6800
  type: Input
@@ -6753,12 +6895,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
6753
6895
  }, {
6754
6896
  type: HostBinding,
6755
6897
  args: ['class.k-picker']
6756
- }], isDisabled: [{
6898
+ }], isDisabledClass: [{
6757
6899
  type: HostBinding,
6758
6900
  args: ['class.k-disabled']
6759
- }, {
6901
+ }], isDisabledAttribute: [{
6760
6902
  type: HostBinding,
6761
- args: ['attr.aria-disabled']
6903
+ args: ['attr.disabled']
6762
6904
  }], isLoading: [{
6763
6905
  type: HostBinding,
6764
6906
  args: ['class.k-loading']
@@ -6774,30 +6916,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
6774
6916
  }], hostTabIndex: [{
6775
6917
  type: HostBinding,
6776
6918
  args: ['attr.tabindex']
6777
- }], isReadonly: [{
6919
+ }], readonlyClass: [{
6778
6920
  type: HostBinding,
6779
6921
  args: ['attr.readonly']
6780
- }, {
6922
+ }], readonlyAttr: [{
6781
6923
  type: HostBinding,
6782
- args: ['attr.aria-readonly']
6924
+ args: ['attr.readonly']
6925
+ }], isBusy: [{
6926
+ type: HostBinding,
6927
+ args: ['attr.aria-busy']
6783
6928
  }], role: [{
6784
6929
  type: HostBinding,
6785
6930
  args: ['attr.role']
6786
- }, {
6931
+ }], haspopup: [{
6787
6932
  type: HostBinding,
6788
6933
  args: ['attr.aria-haspopup']
6789
6934
  }], isAriaExpanded: [{
6790
6935
  type: HostBinding,
6791
6936
  args: ['attr.aria-expanded']
6792
- }], hostAriaOwns: [{
6937
+ }], hostAriaControls: [{
6793
6938
  type: HostBinding,
6794
- args: ['attr.aria-owns']
6939
+ args: ['attr.aria-controls']
6940
+ }], hostAriaInvalid: [{
6941
+ type: HostBinding,
6942
+ args: ['attr.aria-invalid']
6795
6943
  }], hostAriaActivedescendant: [{
6796
6944
  type: HostBinding,
6797
6945
  args: ['attr.aria-activedescendant']
6798
- }], hostNoDataLabel: [{
6799
- type: HostBinding,
6800
- args: ['attr.aria-label']
6801
6946
  }], keydown: [{
6802
6947
  type: HostListener,
6803
6948
  args: ['keydown', ['$event']]
@@ -7395,7 +7540,6 @@ class MultiSelectComponent {
7395
7540
  */
7396
7541
  this.removeTag = new EventEmitter();
7397
7542
  this.hostClasses = true;
7398
- this.role = 'combobox';
7399
7543
  this.initialized = false;
7400
7544
  this._size = 'medium';
7401
7545
  this._rounded = 'medium';
@@ -7708,9 +7852,6 @@ class MultiSelectComponent {
7708
7852
  get isLoading() {
7709
7853
  return this.loading;
7710
7854
  }
7711
- get isAriaExpanded() {
7712
- return this.isOpen;
7713
- }
7714
7855
  /**
7715
7856
  * @hidden
7716
7857
  */
@@ -7772,11 +7913,6 @@ class MultiSelectComponent {
7772
7913
  }
7773
7914
  return prefix + "-" + getter(item, this.valueField);
7774
7915
  }
7775
- get noDataLabel() {
7776
- if (this.dataService.itemsCount === 0) {
7777
- return this.messageFor('noDataText');
7778
- }
7779
- }
7780
7916
  get clearButtonVisiblity() {
7781
7917
  if (this.touchEnabled) {
7782
7918
  return 'visible';
@@ -8432,6 +8568,11 @@ class MultiSelectComponent {
8432
8568
  popupWrapper.style.width = max;
8433
8569
  popupWrapper.style.height = this.height;
8434
8570
  popupWrapper.setAttribute("dir", this.direction);
8571
+ const listBox = popupWrapper.querySelector('ul.k-list-ul');
8572
+ const ariaLabel = this.searchbar.input.nativeElement.getAttribute('aria-labelledby');
8573
+ if (ariaLabel) {
8574
+ listBox.setAttribute('aria-labelledby', ariaLabel);
8575
+ }
8435
8576
  this.popupRef.popupOpen.subscribe(() => {
8436
8577
  this.cdr.detectChanges();
8437
8578
  this.optionsList.scrollToItem(this.selectionService.focused);
@@ -8490,7 +8631,7 @@ class MultiSelectComponent {
8490
8631
  }
8491
8632
  }
8492
8633
  MultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MultiSelectComponent, deps: [{ token: i0.ElementRef }, { token: i1.LocalizationService }, { token: i2.PopupService }, { token: DataService }, { token: SelectionService }, { token: NavigationService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: TOUCH_ENABLED, optional: true }], target: i0.ɵɵFactoryTarget.Component });
8493
- MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { focusableId: "focusableId", autoClose: "autoClose", loading: "loading", data: "data", value: "value", valueField: "valueField", textField: "textField", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", placeholder: "placeholder", disabled: "disabled", itemDisabled: "itemDisabled", checkboxes: "checkboxes", readonly: "readonly", filterable: "filterable", virtual: "virtual", popupSettings: "popupSettings", listHeight: "listHeight", valuePrimitive: "valuePrimitive", clearButton: "clearButton", tagMapper: "tagMapper", allowCustom: "allowCustom", valueNormalizer: "valueNormalizer" }, outputs: { filterChange: "filterChange", valueChange: "valueChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur", removeTag: "removeTag" }, host: { listeners: { "mousedown": "hostMousedown($event)" }, properties: { "class.k-multiselect": "this.hostClasses", "class.k-input": "this.hostClasses", "attr.dir": "this.dir", "class.k-disabled": "this.disabledClass", "class.k-loading": "this.isLoading", "attr.role": "this.role", "attr.aria-expanded": "this.isAriaExpanded" } }, providers: [
8634
+ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: MultiSelectComponent, selector: "kendo-multiselect", inputs: { focusableId: "focusableId", autoClose: "autoClose", loading: "loading", data: "data", value: "value", valueField: "valueField", textField: "textField", tabindex: "tabindex", tabIndex: "tabIndex", size: "size", rounded: "rounded", fillMode: "fillMode", placeholder: "placeholder", disabled: "disabled", itemDisabled: "itemDisabled", checkboxes: "checkboxes", readonly: "readonly", filterable: "filterable", virtual: "virtual", popupSettings: "popupSettings", listHeight: "listHeight", valuePrimitive: "valuePrimitive", clearButton: "clearButton", tagMapper: "tagMapper", allowCustom: "allowCustom", valueNormalizer: "valueNormalizer" }, outputs: { filterChange: "filterChange", valueChange: "valueChange", open: "open", opened: "opened", close: "close", closed: "closed", onFocus: "focus", onBlur: "blur", removeTag: "removeTag" }, host: { listeners: { "mousedown": "hostMousedown($event)" }, properties: { "class.k-multiselect": "this.hostClasses", "class.k-input": "this.hostClasses", "attr.dir": "this.dir", "class.k-disabled": "this.disabledClass", "class.k-loading": "this.isLoading" } }, providers: [
8494
8635
  MULTISELECT_VALUE_ACCESSOR,
8495
8636
  DataService,
8496
8637
  SelectionService,
@@ -8535,10 +8676,12 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
8535
8676
  <kendo-searchbar
8536
8677
  #searchbar
8537
8678
  [id]="focusableId"
8538
- [role]="'textbox'"
8679
+ [role]="'combobox'"
8539
8680
  [tagListId]="tagListId"
8681
+ [listId]="listBoxId"
8682
+ [isLoading]="loading"
8683
+ [isFilterable]="filterable"
8540
8684
  [activeDescendant]="activeDescendant"
8541
- [noDataLabel]="noDataLabel"
8542
8685
  [userInput]="text"
8543
8686
  [disabled]="disabled"
8544
8687
  [readonly]="readonly"
@@ -8612,6 +8755,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
8612
8755
  [virtual]="virtual"
8613
8756
  (pageChange)="pageChange($event)"
8614
8757
  [checkboxes]="checkboxes"
8758
+ [isMultiselect]="true"
8615
8759
  >
8616
8760
  </kendo-list>
8617
8761
  <!--no data template-->
@@ -8636,7 +8780,7 @@ MultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
8636
8780
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
8637
8781
  </ng-template>
8638
8782
  <ng-container #container></ng-container>
8639
- `, 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", "noDataLabel", "disabled", "readonly", "tabIndex", "popupOpen", "role", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
8783
+ `, 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: 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: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "multipleSelection"] }] });
8640
8784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MultiSelectComponent, decorators: [{
8641
8785
  type: Component,
8642
8786
  args: [{
@@ -8688,10 +8832,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
8688
8832
  <kendo-searchbar
8689
8833
  #searchbar
8690
8834
  [id]="focusableId"
8691
- [role]="'textbox'"
8835
+ [role]="'combobox'"
8692
8836
  [tagListId]="tagListId"
8837
+ [listId]="listBoxId"
8838
+ [isLoading]="loading"
8839
+ [isFilterable]="filterable"
8693
8840
  [activeDescendant]="activeDescendant"
8694
- [noDataLabel]="noDataLabel"
8695
8841
  [userInput]="text"
8696
8842
  [disabled]="disabled"
8697
8843
  [readonly]="readonly"
@@ -8765,6 +8911,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
8765
8911
  [virtual]="virtual"
8766
8912
  (pageChange)="pageChange($event)"
8767
8913
  [checkboxes]="checkboxes"
8914
+ [isMultiselect]="true"
8768
8915
  >
8769
8916
  </kendo-list>
8770
8917
  <!--no data template-->
@@ -8923,12 +9070,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
8923
9070
  }], isLoading: [{
8924
9071
  type: HostBinding,
8925
9072
  args: ['class.k-loading']
8926
- }], role: [{
8927
- type: HostBinding,
8928
- args: ['attr.role']
8929
- }], isAriaExpanded: [{
8930
- type: HostBinding,
8931
- args: ['attr.aria-expanded']
8932
9073
  }], hostMousedown: [{
8933
9074
  type: HostListener,
8934
9075
  args: ['mousedown', ['$event']]
@@ -9235,6 +9376,9 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9235
9376
 
9236
9377
  i18n-clearTitle="kendo.multicolumncombobox.clearTitle|The title of the clear button"
9237
9378
  clearTitle="clear"
9379
+
9380
+ i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9381
+ selectButtonText="Select"
9238
9382
  >
9239
9383
  </ng-container>
9240
9384
  <kendo-searchbar
@@ -9242,8 +9386,10 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9242
9386
  [role]="'combobox'"
9243
9387
  [id]="focusableId"
9244
9388
  [listId]="listBoxId"
9389
+ [isLoading]="loading"
9390
+ [isSuggestable]="suggest"
9391
+ [isFilterable]="filterable"
9245
9392
  [activeDescendant]="activeDescendant"
9246
- [noDataLabel]="noDataLabel"
9247
9393
  [userInput]="text"
9248
9394
  [suggestedText]="getSuggestion()"
9249
9395
  [disabled]="disabled"
@@ -9441,7 +9587,7 @@ MultiColumnComboBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12
9441
9587
 
9442
9588
  <!-- when the popupSettings.appendTo value is set to 'component', this container is used -->
9443
9589
  <ng-container #container></ng-container>
9444
- `, isInline: true, components: [{ type: SearchBarComponent, selector: "kendo-searchbar", inputs: ["id", "listId", "tagListId", "activeDescendant", "noDataLabel", "disabled", "readonly", "tabIndex", "popupOpen", "role", "userInput", "suggestedText", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize"] }, { type: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
9590
+ `, 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: 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: i9.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: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
9445
9591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
9446
9592
  type: Component,
9447
9593
  args: [{
@@ -9479,6 +9625,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
9479
9625
 
9480
9626
  i18n-clearTitle="kendo.multicolumncombobox.clearTitle|The title of the clear button"
9481
9627
  clearTitle="clear"
9628
+
9629
+ i18n-selectButtonText="kendo.multicolumncombobox.selectButtonText|The title of the select button"
9630
+ selectButtonText="Select"
9482
9631
  >
9483
9632
  </ng-container>
9484
9633
  <kendo-searchbar
@@ -9486,8 +9635,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
9486
9635
  [role]="'combobox'"
9487
9636
  [id]="focusableId"
9488
9637
  [listId]="listBoxId"
9638
+ [isLoading]="loading"
9639
+ [isSuggestable]="suggest"
9640
+ [isFilterable]="filterable"
9489
9641
  [activeDescendant]="activeDescendant"
9490
- [noDataLabel]="noDataLabel"
9491
9642
  [userInput]="text"
9492
9643
  [suggestedText]="getSuggestion()"
9493
9644
  [disabled]="disabled"
@@ -13808,21 +13959,21 @@ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
13808
13959
  TemplateContextDirective,
13809
13960
  TagListComponent,
13810
13961
  CheckDirective,
13811
- CheckAllDirective], imports: [CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], exports: [ListComponent,
13962
+ CheckAllDirective], imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], exports: [ListComponent,
13812
13963
  ListItemDirective,
13813
13964
  SelectableDirective,
13814
13965
  SearchBarComponent,
13815
13966
  TemplateContextDirective,
13816
13967
  TagListComponent,
13817
13968
  CheckDirective,
13818
- CheckAllDirective, CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });
13819
- SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, imports: [[CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });
13969
+ CheckAllDirective, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });
13970
+ SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, imports: [[CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule], CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule] });
13820
13971
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, decorators: [{
13821
13972
  type: NgModule,
13822
13973
  args: [{
13823
13974
  declarations: [INTERNAL_DIRECTIVES],
13824
- exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule],
13825
- imports: [CommonModule, FormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule]
13975
+ exports: [INTERNAL_DIRECTIVES, CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule],
13976
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, PopupModule, ResizeSensorModule, SharedDirectivesModule, EventsModule]
13826
13977
  }]
13827
13978
  }] });
13828
13979