@progress/kendo-angular-dropdowns 25.0.0-develop.6 → 25.0.0-develop.8

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.
@@ -3,7 +3,7 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { EventEmitter, Output, HostBinding, Input, Component, Directive, Injectable, HostListener, ViewChild, ViewChildren, forwardRef, isDevMode, ViewContainerRef, ContentChild, ContentChildren, signal, ChangeDetectionStrategy, NgModule } from '@angular/core';
6
+ import { EventEmitter, Output, HostBinding, Input, Component, Directive, Injectable, HostListener, afterNextRender, ViewChild, ViewChildren, forwardRef, isDevMode, ViewContainerRef, ContentChild, ContentChildren, signal, ChangeDetectionStrategy, NgModule } from '@angular/core';
7
7
  import * as i10 from '@progress/kendo-angular-common';
8
8
  import { isDocumentAvailable, isObjectPresent, removeHTMLAttributes, parseAttributes, isSafari, normalizeKeys, Keys, setHTMLAttributes, replaceMessagePlaceholder, isChanged, TemplateContextDirective, ResizeSensorComponent, closest as closest$1, hasFocusableParent, parseCSSClassNames, isControlRequired, guid, hasObservers, SeparatorComponent, SuffixTemplateDirective, PrefixTemplateDirective, KendoInput, KENDO_WEBMCP_HOST, MultiTabStop, anyChanged, EventsOutsideAngularDirective, scrollbarWidth, ToggleButtonTabStopDirective, ResizeBatchService, KENDO_ADORNMENTS, KENDO_TOGGLEBUTTONTABSTOP } from '@progress/kendo-angular-common';
9
9
  export { PrefixTemplateDirective, SeparatorComponent, SuffixTemplateDirective, ToggleButtonTabStopDirective } from '@progress/kendo-angular-common';
@@ -20,8 +20,8 @@ import { map, switchMap, take, auditTime, tap, filter, partition, throttleTime,
20
20
  import * as i2 from '@progress/kendo-angular-popup';
21
21
  import { PopupService } from '@progress/kendo-angular-popup';
22
22
  import { NgStyle, NgClass, NgTemplateOutlet } from '@angular/common';
23
- import { checkIcon, xIcon, chevronDownIcon, searchIcon, xCircleIcon } from '@progress/kendo-svg-icons';
24
- import { IconComponent, IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';
23
+ import { checkIcon, searchIcon, xIcon, chevronDownIcon, xCircleIcon } from '@progress/kendo-svg-icons';
24
+ import { IconWrapperComponent, IconsService } from '@progress/kendo-angular-icons';
25
25
  import { ActionSheetComponent, ActionSheetTemplateDirective } from '@progress/kendo-angular-navigation';
26
26
  import { TextBoxComponent, TextBoxPrefixTemplateDirective } from '@progress/kendo-angular-inputs';
27
27
  import { ButtonComponent } from '@progress/kendo-angular-buttons';
@@ -37,8 +37,8 @@ const packageMetadata = {
37
37
  productName: 'Kendo UI for Angular',
38
38
  productCode: 'KENDOUIANGULAR',
39
39
  productCodes: ['KENDOUIANGULAR'],
40
- publishDate: 1784041117,
41
- version: '25.0.0-develop.6',
40
+ publishDate: 1784795912,
41
+ version: '25.0.0-develop.8',
42
42
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
43
43
  };
44
44
 
@@ -477,12 +477,12 @@ class SearchBarComponent {
477
477
  get isSuggestable() {
478
478
  return this._isSuggestable;
479
479
  }
480
- set isFilterable(isFilterable) {
481
- this._isFilterable = isFilterable;
480
+ set hasListAutocomplete(hasListAutocomplete) {
481
+ this._hasListAutocomplete = hasListAutocomplete;
482
482
  this.setAriaAutocomplete();
483
483
  }
484
- get isFilterable() {
485
- return this._isFilterable;
484
+ get hasListAutocomplete() {
485
+ return this._hasListAutocomplete;
486
486
  }
487
487
  get userInput() {
488
488
  return this._userInput;
@@ -521,7 +521,7 @@ class SearchBarComponent {
521
521
  ariaControls;
522
522
  ariaExpanded = null;
523
523
  get attrAriaInvalid() {
524
- return this.formControl?.invalid ? true : null;
524
+ return (this.formControl?.invalid && (this.formControl?.touched || this.formControl?.dirty)) ? true : null;
525
525
  }
526
526
  set placeholder(text) {
527
527
  this._placeholder = text || '';
@@ -549,7 +549,7 @@ class SearchBarComponent {
549
549
  _previousValue = "";
550
550
  _placeholder = "";
551
551
  _isSuggestable = false;
552
- _isFilterable = false;
552
+ _hasListAutocomplete = false;
553
553
  renderer;
554
554
  subs = new Subscription();
555
555
  _inputAttributes;
@@ -569,7 +569,7 @@ class SearchBarComponent {
569
569
  'aria-controls': this.ariaControls,
570
570
  'aria-activedescendant': this.activeDescendant,
571
571
  'aria-busy': this.isLoading,
572
- 'aria-invalid': this.formControl?.invalid
572
+ 'aria-invalid': this.formControl?.invalid && (this.formControl?.touched || this.formControl?.dirty)
573
573
  };
574
574
  }
575
575
  get mutableAttributes() {
@@ -654,16 +654,16 @@ class SearchBarComponent {
654
654
  }
655
655
  }
656
656
  setAriaAutocomplete() {
657
- if (this.isFilterable) {
657
+ if (this.hasListAutocomplete) {
658
658
  this.renderer.setAttribute(this.input.nativeElement, 'aria-autocomplete', 'list');
659
659
  }
660
660
  if (this.isSuggestable) {
661
661
  this.renderer.setAttribute(this.input.nativeElement, 'aria-autocomplete', 'inline');
662
662
  }
663
- if (this.isFilterable && this.isSuggestable) {
663
+ if (this.hasListAutocomplete && this.isSuggestable) {
664
664
  this.renderer.setAttribute(this.input.nativeElement, 'aria-autocomplete', 'both');
665
665
  }
666
- if (!this.isFilterable && !this.isSuggestable) {
666
+ if (!this.hasListAutocomplete && !this.isSuggestable) {
667
667
  this.renderer.removeAttribute(this.input.nativeElement, 'aria-autocomplete');
668
668
  }
669
669
  }
@@ -716,7 +716,7 @@ class SearchBarComponent {
716
716
  setHTMLAttributes(attributesToRender, this.renderer, this.input.nativeElement, this.injector);
717
717
  }
718
718
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SearchBarComponent, deps: [{ token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
719
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: SearchBarComponent, isStandalone: true, selector: "input[kendoSearchbar]", inputs: { tagListId: "tagListId", readonly: "readonly", disabled: "disabled", isRequired: "isRequired", isSuggestable: "isSuggestable", isFilterable: "isFilterable", userInput: "userInput", suggestedText: "suggestedText", inputAttributes: "inputAttributes", id: "id", activeDescendant: "activeDescendant", tabIndex: "tabIndex", isLoading: "isLoading", ariaControls: "ariaControls", ariaExpanded: "ariaExpanded", placeholder: "placeholder" }, outputs: { valueChange: "valueChange", onBlur: "onBlur", onFocus: "onFocus", onClick: "onClick", onNavigate: "onNavigate" }, host: { properties: { "attr.id": "this.id", "attr.aria-activedescendant": "this.activeDescendant", "attr.tabindex": "this.tabIndex", "attr.aria-busy": "this.isLoading", "attr.aria-controls": "this.ariaControls", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-invalid": "this.attrAriaInvalid", "attr.placeholder": "this.placeholder", "attr.role": "this.role", "attr.dir": "this.dir" } }, usesOnChanges: true, ngImport: i0, template: ``, isInline: true });
719
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: SearchBarComponent, isStandalone: true, selector: "input[kendoSearchbar]", inputs: { tagListId: "tagListId", readonly: "readonly", disabled: "disabled", isRequired: "isRequired", isSuggestable: "isSuggestable", hasListAutocomplete: "hasListAutocomplete", userInput: "userInput", suggestedText: "suggestedText", inputAttributes: "inputAttributes", id: "id", activeDescendant: "activeDescendant", tabIndex: "tabIndex", isLoading: "isLoading", ariaControls: "ariaControls", ariaExpanded: "ariaExpanded", placeholder: "placeholder" }, outputs: { valueChange: "valueChange", onBlur: "onBlur", onFocus: "onFocus", onClick: "onClick", onNavigate: "onNavigate" }, host: { properties: { "attr.id": "this.id", "attr.aria-activedescendant": "this.activeDescendant", "attr.tabindex": "this.tabIndex", "attr.aria-busy": "this.isLoading", "attr.aria-controls": "this.ariaControls", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-invalid": "this.attrAriaInvalid", "attr.placeholder": "this.placeholder", "attr.role": "this.role", "attr.dir": "this.dir" } }, usesOnChanges: true, ngImport: i0, template: ``, isInline: true });
720
720
  }
721
721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: SearchBarComponent, decorators: [{
722
722
  type: Component,
@@ -735,7 +735,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
735
735
  type: Input
736
736
  }], isSuggestable: [{
737
737
  type: Input
738
- }], isFilterable: [{
738
+ }], hasListAutocomplete: [{
739
739
  type: Input
740
740
  }], userInput: [{
741
741
  type: Input
@@ -1920,6 +1920,7 @@ class ListComponent {
1920
1920
  zone;
1921
1921
  renderer;
1922
1922
  localization;
1923
+ injector;
1923
1924
  selected = [];
1924
1925
  focused = -1;
1925
1926
  textField;
@@ -1936,10 +1937,12 @@ class ListComponent {
1936
1937
  type = 'list';
1937
1938
  checkboxes = { enabled: false };
1938
1939
  ariaLive;
1940
+ ariaLabel;
1939
1941
  isMultiselect;
1940
1942
  isActionSheetExpanded;
1941
1943
  showStickyHeader;
1942
1944
  rowWidth;
1945
+ columnsWidths;
1943
1946
  customItemTemplate;
1944
1947
  text;
1945
1948
  allowCustom;
@@ -1964,12 +1967,12 @@ class ListComponent {
1964
1967
  }
1965
1968
  set size(size) {
1966
1969
  if (this.type === 'list') {
1967
- this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('list', this.size));
1970
+ this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('list', this._size));
1968
1971
  if (size) {
1969
1972
  this.renderer.addClass(this.wrapper.nativeElement, getSizeClass('list', size));
1970
1973
  }
1971
- this._size = size;
1972
1974
  }
1975
+ this._size = size;
1973
1976
  }
1974
1977
  get size() {
1975
1978
  return this._size;
@@ -2031,7 +2034,7 @@ class ListComponent {
2031
2034
  return `${this.size ? getSizeClass('checkbox', this.size) : ''} ${this.rounded ? getRoundedClass(this.rounded) : ''}`;
2032
2035
  }
2033
2036
  /* tslint:disable:member-ordering */
2034
- constructor(dataService, wrapper, selectionService, disabledItemsService, cdr, zone, renderer, localization) {
2037
+ constructor(dataService, wrapper, selectionService, disabledItemsService, cdr, zone, renderer, localization, injector) {
2035
2038
  this.dataService = dataService;
2036
2039
  this.wrapper = wrapper;
2037
2040
  this.selectionService = selectionService;
@@ -2040,6 +2043,7 @@ class ListComponent {
2040
2043
  this.zone = zone;
2041
2044
  this.renderer = renderer;
2042
2045
  this.localization = localization;
2046
+ this.injector = injector;
2043
2047
  this.selectSubscription = merge(this.selectionService.onSelect.pipe(map((args) => args.indices[0])), this.selectionService.onFocus)
2044
2048
  .pipe(
2045
2049
  // handle only the very last onSelect/onFocus emission
@@ -2282,6 +2286,10 @@ class ListComponent {
2282
2286
  isItemSelected(index) {
2283
2287
  return this.selectionService.isSelected(index) || null;
2284
2288
  }
2289
+ itemAriaSelected(index) {
2290
+ const selected = this.isItemSelected(index);
2291
+ return this.type === 'list' ? (selected ?? false) : selected;
2292
+ }
2285
2293
  get isDisabledDefaultItem() {
2286
2294
  return this.disabledItemsService.isItemDisabled(this.defaultItem);
2287
2295
  }
@@ -2293,8 +2301,10 @@ class ListComponent {
2293
2301
  */
2294
2302
  setOverflow() {
2295
2303
  if (this.virtual) {
2296
- const overflow = this.hasVirtualScrollbar() ? 'scroll' : 'hidden';
2297
- this.renderer.setStyle(this.content.nativeElement, 'overflow-y', overflow);
2304
+ afterNextRender(() => {
2305
+ const overflow = this.hasVirtualScrollbar() ? 'scroll' : 'hidden';
2306
+ this.renderer.setStyle(this.content.nativeElement, 'overflow-y', overflow);
2307
+ }, { injector: this.injector });
2298
2308
  }
2299
2309
  }
2300
2310
  /**
@@ -2308,7 +2318,7 @@ class ListComponent {
2308
2318
  positionItems() {
2309
2319
  this.items.forEach((item, index) => {
2310
2320
  const offsetY = (index + this.startFrom) * this.virtual.itemHeight;
2311
- this.renderer.setStyle(item.element.nativeElement, "transform", `translateY(${offsetY}px`);
2321
+ this.renderer.setStyle(item.element.nativeElement, "transform", `translateY(${offsetY}px)`);
2312
2322
  });
2313
2323
  }
2314
2324
  setComponentClasses() {
@@ -2320,13 +2330,16 @@ class ListComponent {
2320
2330
  }
2321
2331
  if (this.type === 'dropdowngrid') {
2322
2332
  this.renderer.setStyle(this.wrapper.nativeElement, 'overflow-y', 'scroll');
2333
+ if (this.size) {
2334
+ this.renderer.removeClass(this.wrapper.nativeElement, getSizeClass('list', this.size));
2335
+ }
2323
2336
  }
2324
2337
  if (isPresent(this.virtual)) {
2325
2338
  this.renderer.addClass(this.wrapper.nativeElement, this.listVirtualClass);
2326
2339
  }
2327
2340
  }
2328
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ListComponent, deps: [{ token: DataService }, { token: i0.ElementRef }, { token: SelectionService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
2329
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ListComponent, isStandalone: true, 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", isActionSheetExpanded: "isActionSheetExpanded", showStickyHeader: "showStickyHeader", rowWidth: "rowWidth", customItemTemplate: "customItemTemplate", text: "text", allowCustom: "allowCustom", defaultItem: "defaultItem", data: "data", size: "size", rounded: "rounded" }, outputs: { onClick: "onClick", pageChange: "pageChange", listResize: "listResize", popupListScroll: "popupListScroll" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2341
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ListComponent, deps: [{ token: DataService }, { token: i0.ElementRef }, { token: SelectionService }, { token: DisabledItemsService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
2342
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: ListComponent, isStandalone: true, 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", ariaLabel: "ariaLabel", isMultiselect: "isMultiselect", isActionSheetExpanded: "isActionSheetExpanded", showStickyHeader: "showStickyHeader", rowWidth: "rowWidth", columnsWidths: "columnsWidths", customItemTemplate: "customItemTemplate", text: "text", allowCustom: "allowCustom", defaultItem: "defaultItem", data: "data", size: "size", rounded: "rounded" }, outputs: { onClick: "onClick", pageChange: "pageChange", listResize: "listResize", popupListScroll: "popupListScroll" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true, static: true }, { propertyName: "list", first: true, predicate: ["list"], descendants: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2330
2343
  @if (defaultItem && !template) {
2331
2344
  <div
2332
2345
  class="k-list-optionlabel"
@@ -2396,11 +2409,12 @@ class ListComponent {
2396
2409
  [style.maxHeight.px]="height"
2397
2410
  unselectable="on"
2398
2411
  (scroll)="popupListScroll.emit($event)"
2399
- [attr.role]="dataService.grouped ? 'listbox' : null"
2400
- [attr.id]="dataService.grouped ? id : null"
2401
- [attr.aria-live]="dataService.grouped ? ariaLive : null"
2402
- [attr.aria-multiselectable]="dataService.grouped ? isMultiselect : null"
2403
- [attr.aria-hidden]="dataService.grouped ? !show : null"
2412
+ [attr.role]="(dataService.grouped && type === 'list') ? 'listbox' : null"
2413
+ [attr.id]="(dataService.grouped && type === 'list') ? id : null"
2414
+ [attr.aria-live]="(dataService.grouped && type === 'list') ? ariaLive : null"
2415
+ [attr.aria-multiselectable]="(dataService.grouped && type === 'list') ? isMultiselect : null"
2416
+ [attr.aria-hidden]="(dataService.grouped && type === 'list') ? (!show ? true : null) : null"
2417
+ [attr.aria-label]="(dataService.grouped && type === 'list') ? (ariaLabel || null) : null"
2404
2418
  >
2405
2419
  @if (!dataService.grouped) {
2406
2420
  <ul #list
@@ -2409,7 +2423,8 @@ class ListComponent {
2409
2423
  [attr.id]="id"
2410
2424
  [attr.aria-live]="ariaLive"
2411
2425
  [attr.aria-multiselectable]="isMultiselect"
2412
- [attr.aria-hidden]="!show">
2426
+ [attr.aria-hidden]="!show ? true : null"
2427
+ [attr.aria-label]="ariaLabel || null">
2413
2428
  @for (dataItem of data; track $index; let itemIndex = $index) {
2414
2429
  <li
2415
2430
  role="option"
@@ -2420,7 +2435,7 @@ class ListComponent {
2420
2435
  [multipleSelection]="multipleSelection"
2421
2436
  [attr.id]="optionPrefix + '-' + itemIndex"
2422
2437
  [attr.tabIndex]="-1"
2423
- [attr.aria-selected]="isItemSelected(itemIndex)"
2438
+ [attr.aria-selected]="itemAriaSelected(itemIndex)"
2424
2439
  [class]="listItemClass"
2425
2440
  [ngClass]="{
2426
2441
  'k-disabled': isDisabled(itemIndex),
@@ -2461,7 +2476,7 @@ class ListComponent {
2461
2476
  </ul>
2462
2477
  }
2463
2478
 
2464
- @if (dataService.grouped) {
2479
+ @if (dataService.grouped && type === 'list') {
2465
2480
  <ng-container #list>
2466
2481
  @for (dataItem of groupedData; track dataItem.groupIndex) {
2467
2482
  <ul
@@ -2508,7 +2523,7 @@ class ListComponent {
2508
2523
  [attr.absolute-index]="item.index"
2509
2524
  [attr.id]="optionPrefix + '-' + (item.index - 1 - item.groupIndex)"
2510
2525
  [attr.tabIndex]="-1"
2511
- [attr.aria-selected]="isItemSelected(item.offsetIndex)"
2526
+ [attr.aria-selected]="itemAriaSelected(item.offsetIndex)"
2512
2527
  [class]="listItemClass"
2513
2528
  [ngClass]="{
2514
2529
  'k-disabled': isDisabled(item.offsetIndex),
@@ -2538,14 +2553,96 @@ class ListComponent {
2538
2553
  }
2539
2554
  </ng-container>
2540
2555
  }
2556
+
2557
+ @if (dataService.grouped && type === 'dropdowngrid') {
2558
+ <ul #list
2559
+ [attr.role]="'listbox'"
2560
+ [class]="listClass"
2561
+ [attr.id]="id"
2562
+ [attr.aria-live]="ariaLive"
2563
+ [attr.aria-label]="ariaLabel || null">
2564
+ @if (columnsWidths?.length) {
2565
+ <div
2566
+ role="presentation"
2567
+ aria-hidden="true"
2568
+ [style.display]="'table-column-group'"
2569
+ >
2570
+ @for (columnWidth of columnsWidths; track $index) {
2571
+ <div [style.display]="'table-column'" [style.width.px]="columnWidth ?? null"></div>
2572
+ }
2573
+ </div>
2574
+ }
2575
+ @for (dataItem of groupedData; track dataItem.groupIndex) {
2576
+ @if (dataItem.header) {
2577
+ <li
2578
+ role="presentation"
2579
+ [class]="listGroupItemClass"
2580
+ [attr.group-index]="dataItem.index"
2581
+ [style.width.px]="rowWidth ?? null"
2582
+ >
2583
+ <span [class]="listGroupItemTextClass">
2584
+ @if (groupTemplate) {
2585
+ <ng-template
2586
+ [templateContext]="{
2587
+ templateRef: groupTemplate.templateRef,
2588
+ $implicit: dataItem.value
2589
+ }">
2590
+ </ng-template>
2591
+ }
2592
+ @if (!groupTemplate) {
2593
+ {{ dataItem.value }}
2594
+ }
2595
+ </span>
2596
+ </li>
2597
+ }
2598
+ @for (item of dataItem.items; track item.offsetIndex) {
2599
+ <li
2600
+ role="option"
2601
+ kendoDropDownsSelectable
2602
+ [height]="virtual?.itemHeight"
2603
+ [index]="item.offsetIndex"
2604
+ [multipleSelection]="multipleSelection"
2605
+ [attr.absolute-index]="item.index"
2606
+ [attr.id]="optionPrefix + '-' + (item.index - 1 - item.groupIndex)"
2607
+ [attr.tabIndex]="-1"
2608
+ [attr.aria-selected]="itemAriaSelected(item.offsetIndex)"
2609
+ [class]="listItemClass"
2610
+ [ngClass]="{
2611
+ 'k-disabled': isDisabled(item.offsetIndex),
2612
+ 'k-table-alt-row': isAltRow(item.index - 1)
2613
+ }"
2614
+ [style.width.px]="rowWidth ?? null">
2615
+ @if (template) {
2616
+ <ng-template
2617
+ [templateContext]="{
2618
+ templateRef: template.templateRef,
2619
+ $implicit: item.value
2620
+ }">
2621
+ </ng-template>
2622
+ }
2623
+ @if (!template) {
2624
+ <span class="k-list-item-text">{{ getText(item.value) }}</span>
2625
+ }
2626
+ </li>
2627
+ }
2628
+ }
2629
+ @if (!virtual) {
2630
+ <kendo-resize-sensor
2631
+ (resize)="listResize.emit()"
2632
+ >
2633
+ </kendo-resize-sensor>
2634
+ }
2635
+ </ul>
2636
+ }
2541
2637
  @if (virtual) {
2542
- <div #virtualContainer class="k-height-container" role="presentation">
2638
+ <div #virtualContainer class="k-height-container">
2543
2639
  <div [style.height.px]="scrollHeight">
2544
2640
  <kendo-resize-sensor (resize)="listResize.emit()"></kendo-resize-sensor>
2545
2641
  </div>
2546
2642
  </div>
2547
2643
  }
2548
2644
  </div>
2645
+ <ng-content select=".k-no-data"></ng-content>
2549
2646
  `, isInline: true, dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: ListItemDirective, selector: "\"li[role=option], li[role=group], li[role=presentation]\"" }, { kind: "directive", type: SelectableDirective, selector: "[kendoDropDownsSelectable]", inputs: ["index", "checkboxes", "height", "isMultiselect", "multipleSelection"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }] });
2550
2647
  }
2551
2648
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ListComponent, decorators: [{
@@ -2622,11 +2719,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2622
2719
  [style.maxHeight.px]="height"
2623
2720
  unselectable="on"
2624
2721
  (scroll)="popupListScroll.emit($event)"
2625
- [attr.role]="dataService.grouped ? 'listbox' : null"
2626
- [attr.id]="dataService.grouped ? id : null"
2627
- [attr.aria-live]="dataService.grouped ? ariaLive : null"
2628
- [attr.aria-multiselectable]="dataService.grouped ? isMultiselect : null"
2629
- [attr.aria-hidden]="dataService.grouped ? !show : null"
2722
+ [attr.role]="(dataService.grouped && type === 'list') ? 'listbox' : null"
2723
+ [attr.id]="(dataService.grouped && type === 'list') ? id : null"
2724
+ [attr.aria-live]="(dataService.grouped && type === 'list') ? ariaLive : null"
2725
+ [attr.aria-multiselectable]="(dataService.grouped && type === 'list') ? isMultiselect : null"
2726
+ [attr.aria-hidden]="(dataService.grouped && type === 'list') ? (!show ? true : null) : null"
2727
+ [attr.aria-label]="(dataService.grouped && type === 'list') ? (ariaLabel || null) : null"
2630
2728
  >
2631
2729
  @if (!dataService.grouped) {
2632
2730
  <ul #list
@@ -2635,7 +2733,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2635
2733
  [attr.id]="id"
2636
2734
  [attr.aria-live]="ariaLive"
2637
2735
  [attr.aria-multiselectable]="isMultiselect"
2638
- [attr.aria-hidden]="!show">
2736
+ [attr.aria-hidden]="!show ? true : null"
2737
+ [attr.aria-label]="ariaLabel || null">
2639
2738
  @for (dataItem of data; track $index; let itemIndex = $index) {
2640
2739
  <li
2641
2740
  role="option"
@@ -2646,7 +2745,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2646
2745
  [multipleSelection]="multipleSelection"
2647
2746
  [attr.id]="optionPrefix + '-' + itemIndex"
2648
2747
  [attr.tabIndex]="-1"
2649
- [attr.aria-selected]="isItemSelected(itemIndex)"
2748
+ [attr.aria-selected]="itemAriaSelected(itemIndex)"
2650
2749
  [class]="listItemClass"
2651
2750
  [ngClass]="{
2652
2751
  'k-disabled': isDisabled(itemIndex),
@@ -2687,7 +2786,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2687
2786
  </ul>
2688
2787
  }
2689
2788
 
2690
- @if (dataService.grouped) {
2789
+ @if (dataService.grouped && type === 'list') {
2691
2790
  <ng-container #list>
2692
2791
  @for (dataItem of groupedData; track dataItem.groupIndex) {
2693
2792
  <ul
@@ -2734,7 +2833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2734
2833
  [attr.absolute-index]="item.index"
2735
2834
  [attr.id]="optionPrefix + '-' + (item.index - 1 - item.groupIndex)"
2736
2835
  [attr.tabIndex]="-1"
2737
- [attr.aria-selected]="isItemSelected(item.offsetIndex)"
2836
+ [attr.aria-selected]="itemAriaSelected(item.offsetIndex)"
2738
2837
  [class]="listItemClass"
2739
2838
  [ngClass]="{
2740
2839
  'k-disabled': isDisabled(item.offsetIndex),
@@ -2764,19 +2863,101 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2764
2863
  }
2765
2864
  </ng-container>
2766
2865
  }
2866
+
2867
+ @if (dataService.grouped && type === 'dropdowngrid') {
2868
+ <ul #list
2869
+ [attr.role]="'listbox'"
2870
+ [class]="listClass"
2871
+ [attr.id]="id"
2872
+ [attr.aria-live]="ariaLive"
2873
+ [attr.aria-label]="ariaLabel || null">
2874
+ @if (columnsWidths?.length) {
2875
+ <div
2876
+ role="presentation"
2877
+ aria-hidden="true"
2878
+ [style.display]="'table-column-group'"
2879
+ >
2880
+ @for (columnWidth of columnsWidths; track $index) {
2881
+ <div [style.display]="'table-column'" [style.width.px]="columnWidth ?? null"></div>
2882
+ }
2883
+ </div>
2884
+ }
2885
+ @for (dataItem of groupedData; track dataItem.groupIndex) {
2886
+ @if (dataItem.header) {
2887
+ <li
2888
+ role="presentation"
2889
+ [class]="listGroupItemClass"
2890
+ [attr.group-index]="dataItem.index"
2891
+ [style.width.px]="rowWidth ?? null"
2892
+ >
2893
+ <span [class]="listGroupItemTextClass">
2894
+ @if (groupTemplate) {
2895
+ <ng-template
2896
+ [templateContext]="{
2897
+ templateRef: groupTemplate.templateRef,
2898
+ $implicit: dataItem.value
2899
+ }">
2900
+ </ng-template>
2901
+ }
2902
+ @if (!groupTemplate) {
2903
+ {{ dataItem.value }}
2904
+ }
2905
+ </span>
2906
+ </li>
2907
+ }
2908
+ @for (item of dataItem.items; track item.offsetIndex) {
2909
+ <li
2910
+ role="option"
2911
+ kendoDropDownsSelectable
2912
+ [height]="virtual?.itemHeight"
2913
+ [index]="item.offsetIndex"
2914
+ [multipleSelection]="multipleSelection"
2915
+ [attr.absolute-index]="item.index"
2916
+ [attr.id]="optionPrefix + '-' + (item.index - 1 - item.groupIndex)"
2917
+ [attr.tabIndex]="-1"
2918
+ [attr.aria-selected]="itemAriaSelected(item.offsetIndex)"
2919
+ [class]="listItemClass"
2920
+ [ngClass]="{
2921
+ 'k-disabled': isDisabled(item.offsetIndex),
2922
+ 'k-table-alt-row': isAltRow(item.index - 1)
2923
+ }"
2924
+ [style.width.px]="rowWidth ?? null">
2925
+ @if (template) {
2926
+ <ng-template
2927
+ [templateContext]="{
2928
+ templateRef: template.templateRef,
2929
+ $implicit: item.value
2930
+ }">
2931
+ </ng-template>
2932
+ }
2933
+ @if (!template) {
2934
+ <span class="k-list-item-text">{{ getText(item.value) }}</span>
2935
+ }
2936
+ </li>
2937
+ }
2938
+ }
2939
+ @if (!virtual) {
2940
+ <kendo-resize-sensor
2941
+ (resize)="listResize.emit()"
2942
+ >
2943
+ </kendo-resize-sensor>
2944
+ }
2945
+ </ul>
2946
+ }
2767
2947
  @if (virtual) {
2768
- <div #virtualContainer class="k-height-container" role="presentation">
2948
+ <div #virtualContainer class="k-height-container">
2769
2949
  <div [style.height.px]="scrollHeight">
2770
2950
  <kendo-resize-sensor (resize)="listResize.emit()"></kendo-resize-sensor>
2771
2951
  </div>
2772
2952
  </div>
2773
2953
  }
2774
2954
  </div>
2955
+ <ng-content select=".k-no-data"></ng-content>
2775
2956
  `,
2776
2957
  standalone: true,
2777
2958
  imports: [NgStyle, TemplateContextDirective, ListItemDirective, SelectableDirective, NgClass, ResizeSensorComponent]
2778
2959
  }]
2779
- }], ctorParameters: () => [{ type: DataService }, { type: i0.ElementRef }, { type: SelectionService }, { type: DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }], propDecorators: { selected: [{
2960
+ }], ctorParameters: () => [{ type: DataService }, { type: i0.ElementRef }, { type: SelectionService }, { type: DisabledItemsService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.Injector }], propDecorators: { selected: [{
2780
2961
  type: Input
2781
2962
  }], focused: [{
2782
2963
  type: Input
@@ -2808,6 +2989,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2808
2989
  type: Input
2809
2990
  }], ariaLive: [{
2810
2991
  type: Input
2992
+ }], ariaLabel: [{
2993
+ type: Input
2811
2994
  }], isMultiselect: [{
2812
2995
  type: Input
2813
2996
  }], isActionSheetExpanded: [{
@@ -2816,6 +2999,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
2816
2999
  type: Input
2817
3000
  }], rowWidth: [{
2818
3001
  type: Input
3002
+ }], columnsWidths: [{
3003
+ type: Input
2819
3004
  }], customItemTemplate: [{
2820
3005
  type: Input
2821
3006
  }], text: [{
@@ -2887,6 +3072,7 @@ class AdaptiveRendererComponent {
2887
3072
  placeholder;
2888
3073
  searchBarValue;
2889
3074
  filterable;
3075
+ showListContainer = true;
2890
3076
  closePopup = new EventEmitter();
2891
3077
  textInputChange = new EventEmitter();
2892
3078
  navigate = new EventEmitter();
@@ -2899,6 +3085,7 @@ class AdaptiveRendererComponent {
2899
3085
  }
2900
3086
  animationDuration = animationDuration;
2901
3087
  checkIcon = checkIcon;
3088
+ searchIcon = searchIcon;
2902
3089
  expanded = false;
2903
3090
  messageFor(key) {
2904
3091
  return this.localization.get(key);
@@ -2924,7 +3111,7 @@ class AdaptiveRendererComponent {
2924
3111
  return this.adaptiveService.size;
2925
3112
  }
2926
3113
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdaptiveRendererComponent, deps: [{ token: i1.LocalizationService }, { token: i7.AdaptiveService }], target: i0.ɵɵFactoryTarget.Component });
2927
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: AdaptiveRendererComponent, isStandalone: true, selector: "kendo-adaptive-renderer", inputs: { title: "title", subtitle: "subtitle", showTextInput: "showTextInput", sharedPopupActionSheetTemplate: "sharedPopupActionSheetTemplate", text: "text", placeholder: "placeholder", searchBarValue: "searchBarValue", filterable: "filterable" }, outputs: { closePopup: "closePopup", textInputChange: "textInputChange", navigate: "navigate", onExpand: "onExpand" }, viewQueries: [{ propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }, { propertyName: "actionSheetSearchBar", first: true, predicate: ["actionSheetSearchBar"], descendants: true }], ngImport: i0, template: `
3114
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: AdaptiveRendererComponent, isStandalone: true, selector: "kendo-adaptive-renderer", inputs: { title: "title", subtitle: "subtitle", showTextInput: "showTextInput", sharedPopupActionSheetTemplate: "sharedPopupActionSheetTemplate", text: "text", placeholder: "placeholder", searchBarValue: "searchBarValue", filterable: "filterable", showListContainer: "showListContainer" }, outputs: { closePopup: "closePopup", textInputChange: "textInputChange", navigate: "navigate", onExpand: "onExpand" }, viewQueries: [{ propertyName: "actionSheet", first: true, predicate: ActionSheetComponent, descendants: true }, { propertyName: "actionSheetSearchBar", first: true, predicate: ["actionSheetSearchBar"], descendants: true }], ngImport: i0, template: `
2928
3115
  <kendo-actionsheet
2929
3116
  #actionSheet
2930
3117
  [animation]="{ duration: animationDuration }"
@@ -2943,7 +3130,7 @@ class AdaptiveRendererComponent {
2943
3130
  (collapse)="closePopup.emit()"
2944
3131
  >
2945
3132
  <ng-template kendoActionSheetTemplate>
2946
- <div class="k-text-center k-actionsheet-titlebar">
3133
+ <div class="k-actionsheet-titlebar">
2947
3134
  <div class="k-actionsheet-titlebar-group">
2948
3135
  <div class="k-actionsheet-title">
2949
3136
  @if (title) {
@@ -2959,6 +3146,7 @@ class AdaptiveRendererComponent {
2959
3146
  icon="check"
2960
3147
  type="button"
2961
3148
  [attr.title]="messageFor('adaptiveCloseButtonTitle')"
3149
+ [attr.aria-label]="messageFor('adaptiveCloseButtonTitle')"
2962
3150
  [svgIcon]="checkIcon"
2963
3151
  fillMode="flat"
2964
3152
  themeColor="primary"
@@ -2976,13 +3164,13 @@ class AdaptiveRendererComponent {
2976
3164
  [value]="searchBarValue || ''"
2977
3165
  size="large"
2978
3166
  [placeholder]="filterable ? messageFor('filterInputPlaceholder') : placeholder"
2979
- class="k-searchbox"
3167
+ [inputAttributes]="{'aria-label': title}"
2980
3168
  autocomplete="off"
2981
3169
  (valueChange)="onValueChange($event)"
2982
3170
  >
2983
3171
  @if (filterable) {
2984
3172
  <ng-template kendoTextBoxPrefixTemplate>
2985
- <kendo-icon name="search"></kendo-icon>
3173
+ <kendo-icon-wrapper name="search" [svgIcon]="searchIcon"></kendo-icon-wrapper>
2986
3174
  </ng-template>
2987
3175
  }
2988
3176
  </kendo-textbox>
@@ -2990,13 +3178,17 @@ class AdaptiveRendererComponent {
2990
3178
  }
2991
3179
  </div>
2992
3180
  <div class="k-actionsheet-content">
3181
+ @if (showListContainer) {
2993
3182
  <div class="k-list-container">
2994
3183
  <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
2995
3184
  </div>
3185
+ } @else {
3186
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
3187
+ }
2996
3188
  </div>
2997
3189
  </ng-template>
2998
3190
  </kendo-actionsheet>
2999
- `, isInline: true, dependencies: [{ kind: "component", type: ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["actions", "actionsLayout", "overlayClickClose", "title", "subtitle", "items", "cssClass", "cssStyle", "animation", "expanded", "titleId", "initialFocus"], outputs: ["expandedChange", "action", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: TextBoxPrefixTemplateDirective, selector: "[kendoTextBoxPrefixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: IconComponent, selector: "kendo-icon", inputs: ["name"], exportAs: ["kendoIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
3191
+ `, isInline: true, dependencies: [{ kind: "component", type: ActionSheetComponent, selector: "kendo-actionsheet", inputs: ["actions", "actionsLayout", "overlayClickClose", "title", "subtitle", "items", "cssClass", "cssStyle", "animation", "expanded", "titleId", "initialFocus"], outputs: ["expandedChange", "action", "expand", "collapse", "itemClick", "overlayClick"], exportAs: ["kendoActionSheet"] }, { kind: "directive", type: ActionSheetTemplateDirective, selector: "[kendoActionSheetTemplate]" }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconPosition", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "component", type: TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: TextBoxPrefixTemplateDirective, selector: "[kendoTextBoxPrefixTemplate]", inputs: ["showSeparator"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
3000
3192
  }
3001
3193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdaptiveRendererComponent, decorators: [{
3002
3194
  type: Component,
@@ -3021,7 +3213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
3021
3213
  (collapse)="closePopup.emit()"
3022
3214
  >
3023
3215
  <ng-template kendoActionSheetTemplate>
3024
- <div class="k-text-center k-actionsheet-titlebar">
3216
+ <div class="k-actionsheet-titlebar">
3025
3217
  <div class="k-actionsheet-titlebar-group">
3026
3218
  <div class="k-actionsheet-title">
3027
3219
  @if (title) {
@@ -3037,6 +3229,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
3037
3229
  icon="check"
3038
3230
  type="button"
3039
3231
  [attr.title]="messageFor('adaptiveCloseButtonTitle')"
3232
+ [attr.aria-label]="messageFor('adaptiveCloseButtonTitle')"
3040
3233
  [svgIcon]="checkIcon"
3041
3234
  fillMode="flat"
3042
3235
  themeColor="primary"
@@ -3054,13 +3247,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
3054
3247
  [value]="searchBarValue || ''"
3055
3248
  size="large"
3056
3249
  [placeholder]="filterable ? messageFor('filterInputPlaceholder') : placeholder"
3057
- class="k-searchbox"
3250
+ [inputAttributes]="{'aria-label': title}"
3058
3251
  autocomplete="off"
3059
3252
  (valueChange)="onValueChange($event)"
3060
3253
  >
3061
3254
  @if (filterable) {
3062
3255
  <ng-template kendoTextBoxPrefixTemplate>
3063
- <kendo-icon name="search"></kendo-icon>
3256
+ <kendo-icon-wrapper name="search" [svgIcon]="searchIcon"></kendo-icon-wrapper>
3064
3257
  </ng-template>
3065
3258
  }
3066
3259
  </kendo-textbox>
@@ -3068,15 +3261,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
3068
3261
  }
3069
3262
  </div>
3070
3263
  <div class="k-actionsheet-content">
3264
+ @if (showListContainer) {
3071
3265
  <div class="k-list-container">
3072
3266
  <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
3073
3267
  </div>
3268
+ } @else {
3269
+ <ng-container *ngTemplateOutlet="sharedPopupActionSheetTemplate"></ng-container>
3270
+ }
3074
3271
  </div>
3075
3272
  </ng-template>
3076
3273
  </kendo-actionsheet>
3077
3274
  `,
3078
3275
  standalone: true,
3079
- imports: [ActionSheetComponent, ActionSheetTemplateDirective, ButtonComponent, TextBoxComponent, TextBoxPrefixTemplateDirective, IconComponent, NgTemplateOutlet]
3276
+ imports: [ActionSheetComponent, ActionSheetTemplateDirective, ButtonComponent, TextBoxComponent, TextBoxPrefixTemplateDirective, IconWrapperComponent, NgTemplateOutlet]
3080
3277
  }]
3081
3278
  }], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i7.AdaptiveService }], propDecorators: { title: [{
3082
3279
  type: Input
@@ -3094,6 +3291,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
3094
3291
  type: Input
3095
3292
  }], filterable: [{
3096
3293
  type: Input
3294
+ }], showListContainer: [{
3295
+ type: Input
3097
3296
  }], closePopup: [{
3098
3297
  type: Output
3099
3298
  }], textInputChange: [{
@@ -3228,15 +3427,15 @@ class Messages extends ComponentMessages {
3228
3427
  */
3229
3428
  clearTitle;
3230
3429
  /**
3231
- * The text displayed for the check-all checkbox.
3430
+ * The text displayed for the check-all checkbox. Available for MultiSelectTree.
3232
3431
  */
3233
3432
  checkAllText;
3234
3433
  /**
3235
- * The text set as aria-label on the select button.
3434
+ * The text set as aria-label on the select button. Available for DropDownList, ComboBox, MultiColumnComboBox, and DropDownTree.
3236
3435
  */
3237
3436
  selectButtonText;
3238
3437
  /**
3239
- * The text set as aria-label on the list filter input.
3438
+ * The text set as aria-label on the list filter input. Available for DropDownList, DropDownTree, and MultiSelectTree.
3240
3439
  */
3241
3440
  filterInputLabel;
3242
3441
  /**
@@ -3248,11 +3447,15 @@ class Messages extends ComponentMessages {
3248
3447
  */
3249
3448
  adaptiveCloseButtonTitle;
3250
3449
  /**
3251
- * The text for the input's placeholder when filtering is enabled.
3450
+ * The text for the input's placeholder when filtering is enabled. Available for DropDownTree and MultiSelectTree.
3252
3451
  */
3253
3452
  filterInputPlaceholder;
3254
3453
  /**
3255
- * The text displayed when the user types a custom value that is not in the list of options.
3454
+ * The accessible label of the tag list element that contains the selected items. Available for MultiSelect and MultiSelectTree.
3455
+ */
3456
+ chipListLabel;
3457
+ /**
3458
+ * The text displayed when the user types a custom value that is not in the list of options. Available for ComboBox and MultiSelect.
3256
3459
  *
3257
3460
  * The text includes a localizable string and the custom value.
3258
3461
  * For example, when adding a custom value **Test**, the default text is **Use "Test"**.
@@ -3261,8 +3464,16 @@ class Messages extends ComponentMessages {
3261
3464
  * Use `{customValue}` to insert the value, for example, **Add: {customValue}**.
3262
3465
  */
3263
3466
  useCustomValueText;
3467
+ /**
3468
+ * The accessible label of the listbox that contains the list of options. Available for DropDownList, ComboBox, MultiColumnComboBox, AutoComplete, and MultiSelect.
3469
+ */
3470
+ listboxLabel;
3471
+ /**
3472
+ * The accessible label of the input element. Available for MultiSelectTree.
3473
+ */
3474
+ inputLabel;
3264
3475
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: Messages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
3265
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: Messages, isStandalone: true, inputs: { noDataText: "noDataText", clearTitle: "clearTitle", checkAllText: "checkAllText", selectButtonText: "selectButtonText", filterInputLabel: "filterInputLabel", popupLabel: "popupLabel", adaptiveCloseButtonTitle: "adaptiveCloseButtonTitle", filterInputPlaceholder: "filterInputPlaceholder", useCustomValueText: "useCustomValueText" }, usesInheritance: true, ngImport: i0 });
3476
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.25", type: Messages, isStandalone: true, inputs: { noDataText: "noDataText", clearTitle: "clearTitle", checkAllText: "checkAllText", selectButtonText: "selectButtonText", filterInputLabel: "filterInputLabel", popupLabel: "popupLabel", adaptiveCloseButtonTitle: "adaptiveCloseButtonTitle", filterInputPlaceholder: "filterInputPlaceholder", chipListLabel: "chipListLabel", useCustomValueText: "useCustomValueText", listboxLabel: "listboxLabel", inputLabel: "inputLabel" }, usesInheritance: true, ngImport: i0 });
3266
3477
  }
3267
3478
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: Messages, decorators: [{
3268
3479
  type: Directive
@@ -3282,8 +3493,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
3282
3493
  type: Input
3283
3494
  }], filterInputPlaceholder: [{
3284
3495
  type: Input
3496
+ }], chipListLabel: [{
3497
+ type: Input
3285
3498
  }], useCustomValueText: [{
3286
3499
  type: Input
3500
+ }], listboxLabel: [{
3501
+ type: Input
3502
+ }], inputLabel: [{
3503
+ type: Input
3287
3504
  }] } });
3288
3505
 
3289
3506
  /**
@@ -3440,7 +3657,7 @@ class AutoCompleteComponent {
3440
3657
  * @hidden
3441
3658
  */
3442
3659
  get ariaControls() {
3443
- return this.isOpen ? this.listBoxId : undefined;
3660
+ return (!this.isAdaptive && this.isOpen) ? this.listBoxId : undefined;
3444
3661
  }
3445
3662
  /**
3446
3663
  * @hidden
@@ -4494,6 +4711,9 @@ class AutoCompleteComponent {
4494
4711
 
4495
4712
  i18n-adaptiveCloseButtonTitle="kendo.autocomplete.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
4496
4713
  adaptiveCloseButtonTitle="Close"
4714
+
4715
+ i18n-listboxLabel="kendo.autocomplete.listboxLabel|The accessible label of the list of suggestions"
4716
+ listboxLabel="Suggestions"
4497
4717
  >
4498
4718
  </ng-container>
4499
4719
 
@@ -4515,9 +4735,9 @@ class AutoCompleteComponent {
4515
4735
  }
4516
4736
  <input
4517
4737
  kendoSearchbar
4518
- [ariaExpanded]="isOpen"
4738
+ [ariaExpanded]="isAdaptive ? false : isOpen"
4519
4739
  [isSuggestable]="suggest"
4520
- [isFilterable]="filterable"
4740
+ [hasListAutocomplete]="filterable"
4521
4741
  [isLoading]="isLoading"
4522
4742
  [ariaControls]="ariaControls"
4523
4743
  [id]="focusableId"
@@ -4613,24 +4833,25 @@ class AutoCompleteComponent {
4613
4833
  [show]="isOpen"
4614
4834
  [virtual]="virtual"
4615
4835
  [showStickyHeader]="showStickyHeader"
4836
+ [ariaLabel]="messageFor('listboxLabel')"
4616
4837
  (pageChange)="pageChange($event)"
4617
4838
  >
4839
+ <!--no-data template-->
4840
+ @if (data.length === 0) {
4841
+ <div class="k-no-data" [attr.aria-live]="'polite'">
4842
+ @if (noDataTemplate) {
4843
+ <ng-template
4844
+ [templateContext]="{
4845
+ templateRef: noDataTemplate?.templateRef
4846
+ }">
4847
+ </ng-template>
4848
+ }
4849
+ @if (!noDataTemplate) {
4850
+ <div>{{ messageFor('noDataText') }}</div>
4851
+ }
4852
+ </div>
4853
+ }
4618
4854
  </kendo-list>
4619
- <!--no-data template-->
4620
- @if (data.length === 0) {
4621
- <div class="k-no-data" [attr.aria-live]="'polite'">
4622
- @if (noDataTemplate) {
4623
- <ng-template
4624
- [templateContext]="{
4625
- templateRef: noDataTemplate?.templateRef
4626
- }">
4627
- </ng-template>
4628
- }
4629
- @if (!noDataTemplate) {
4630
- <div>{{ messageFor('noDataText') }}</div>
4631
- }
4632
- </div>
4633
- }
4634
4855
  <!--footer template-->
4635
4856
  @if (footerTemplate) {
4636
4857
  <ng-template
@@ -4640,7 +4861,7 @@ class AutoCompleteComponent {
4640
4861
  </ng-template>
4641
4862
  }
4642
4863
  </ng-template>
4643
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "isFilterable", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
4864
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "hasListAutocomplete", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "ariaLabel", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "columnsWidths", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
4644
4865
  }
4645
4866
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AutoCompleteComponent, decorators: [{
4646
4867
  type: Component,
@@ -4681,6 +4902,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4681
4902
 
4682
4903
  i18n-adaptiveCloseButtonTitle="kendo.autocomplete.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
4683
4904
  adaptiveCloseButtonTitle="Close"
4905
+
4906
+ i18n-listboxLabel="kendo.autocomplete.listboxLabel|The accessible label of the list of suggestions"
4907
+ listboxLabel="Suggestions"
4684
4908
  >
4685
4909
  </ng-container>
4686
4910
 
@@ -4702,9 +4926,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4702
4926
  }
4703
4927
  <input
4704
4928
  kendoSearchbar
4705
- [ariaExpanded]="isOpen"
4929
+ [ariaExpanded]="isAdaptive ? false : isOpen"
4706
4930
  [isSuggestable]="suggest"
4707
- [isFilterable]="filterable"
4931
+ [hasListAutocomplete]="filterable"
4708
4932
  [isLoading]="isLoading"
4709
4933
  [ariaControls]="ariaControls"
4710
4934
  [id]="focusableId"
@@ -4800,24 +5024,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
4800
5024
  [show]="isOpen"
4801
5025
  [virtual]="virtual"
4802
5026
  [showStickyHeader]="showStickyHeader"
5027
+ [ariaLabel]="messageFor('listboxLabel')"
4803
5028
  (pageChange)="pageChange($event)"
4804
5029
  >
5030
+ <!--no-data template-->
5031
+ @if (data.length === 0) {
5032
+ <div class="k-no-data" [attr.aria-live]="'polite'">
5033
+ @if (noDataTemplate) {
5034
+ <ng-template
5035
+ [templateContext]="{
5036
+ templateRef: noDataTemplate?.templateRef
5037
+ }">
5038
+ </ng-template>
5039
+ }
5040
+ @if (!noDataTemplate) {
5041
+ <div>{{ messageFor('noDataText') }}</div>
5042
+ }
5043
+ </div>
5044
+ }
4805
5045
  </kendo-list>
4806
- <!--no-data template-->
4807
- @if (data.length === 0) {
4808
- <div class="k-no-data" [attr.aria-live]="'polite'">
4809
- @if (noDataTemplate) {
4810
- <ng-template
4811
- [templateContext]="{
4812
- templateRef: noDataTemplate?.templateRef
4813
- }">
4814
- </ng-template>
4815
- }
4816
- @if (!noDataTemplate) {
4817
- <div>{{ messageFor('noDataText') }}</div>
4818
- }
4819
- </div>
4820
- }
4821
5046
  <!--footer template-->
4822
5047
  @if (footerTemplate) {
4823
5048
  <ng-template
@@ -5101,7 +5326,7 @@ class ComboBoxComponent extends MultiTabStop {
5101
5326
  * @hidden
5102
5327
  */
5103
5328
  get ariaControls() {
5104
- return this.isOpen ? this.listBoxId : undefined;
5329
+ return (!this.isAdaptive && this.isOpen) ? this.listBoxId : undefined;
5105
5330
  }
5106
5331
  /**
5107
5332
  * @hidden
@@ -5924,7 +6149,7 @@ class ComboBoxComponent extends MultiTabStop {
5924
6149
  * @hidden
5925
6150
  */
5926
6151
  get selectButtonClasses() {
5927
- return `${this.size ? getSizeClass('button', this.size) : ''} ${this.fillMode ? 'k-button-' + this.fillMode : ''}`;
6152
+ return `${this.size ? getSizeClass('button', this.size) : ''} ${this.fillMode ? 'k-button-' + this.fillMode : ''} ${this.disabled ? 'k-disabled' : ''}`;
5928
6153
  }
5929
6154
  /**
5930
6155
  * @hidden
@@ -6191,7 +6416,7 @@ class ComboBoxComponent extends MultiTabStop {
6191
6416
  this.zone.run(() => {
6192
6417
  if (valueHasChanged) {
6193
6418
  const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();
6194
- if (lowerCaseMatch || unresolvedSelection) {
6419
+ if ((lowerCaseMatch && this.shouldResolveSuggestedItem(currentText)) || unresolvedSelection) {
6195
6420
  this.selectionService.change(this.selectionService.focused);
6196
6421
  }
6197
6422
  else {
@@ -6324,6 +6549,9 @@ class ComboBoxComponent extends MultiTabStop {
6324
6549
  const itemText = getter(this.dataService.itemAt(focused), this.textField);
6325
6550
  return !isPresent(itemText) ? "" : itemText.toString();
6326
6551
  }
6552
+ shouldResolveSuggestedItem(currentText) {
6553
+ return !(this.allowCustom && this.suggest && this.focusedItemText !== currentText);
6554
+ }
6327
6555
  /**
6328
6556
  * Focuses the first match when there's text in the input field, but no focused item.
6329
6557
  */
@@ -6512,7 +6740,7 @@ class ComboBoxComponent extends MultiTabStop {
6512
6740
  this.zone.run(() => {
6513
6741
  if (valueHasChanged) {
6514
6742
  const lowerCaseMatch = isPresent(this.focusedItemText) && this.focusedItemText.toLowerCase() === currentText.toLowerCase();
6515
- if (lowerCaseMatch || unresolvedSelection) {
6743
+ if ((lowerCaseMatch && this.shouldResolveSuggestedItem(currentText)) || unresolvedSelection) {
6516
6744
  this.selectionService.change(this.selectionService.focused);
6517
6745
  }
6518
6746
  else {
@@ -6566,6 +6794,12 @@ class ComboBoxComponent extends MultiTabStop {
6566
6794
 
6567
6795
  i18n-adaptiveCloseButtonTitle="kendo.combobox.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
6568
6796
  adaptiveCloseButtonTitle="Close"
6797
+
6798
+ i18n-listboxLabel="kendo.combobox.listboxLabel|The accessible label of the listbox that contains the list of options"
6799
+ listboxLabel="Options"
6800
+
6801
+ i18n-useCustomValueText="kendo.combobox.useCustomValueText|The text displayed when the user types a custom value that is not in the list of options."
6802
+ useCustomValueText="{{ 'Use &quot;{customValue}&quot;' }}"
6569
6803
  >
6570
6804
  </ng-container>
6571
6805
 
@@ -6587,12 +6821,12 @@ class ComboBoxComponent extends MultiTabStop {
6587
6821
  }
6588
6822
  <input
6589
6823
  kendoSearchbar
6590
- [ariaExpanded]="isOpen"
6824
+ [ariaExpanded]="isAdaptive ? false : isOpen"
6591
6825
  [ariaControls]="ariaControls"
6592
6826
  [id]="focusableId"
6593
6827
  [isLoading]="loading"
6594
6828
  [isSuggestable]="suggest"
6595
- [isFilterable]="filterable"
6829
+ [hasListAutocomplete]="filterable"
6596
6830
  [activeDescendant]="activeDescendant"
6597
6831
  [userInput]="text"
6598
6832
  [suggestedText]="getSuggestion()"
@@ -6612,7 +6846,6 @@ class ComboBoxComponent extends MultiTabStop {
6612
6846
  <span
6613
6847
  class="k-clear-value"
6614
6848
  [style.visibility]="clearButtonVisibility"
6615
- aria-hidden="true"
6616
6849
  [attr.title]="messageFor('clearTitle')"
6617
6850
  (click)="clearValue($event)"
6618
6851
  [kendoEventsOutsideAngular]="{
@@ -6707,24 +6940,27 @@ class ComboBoxComponent extends MultiTabStop {
6707
6940
  [show]="isOpen"
6708
6941
  [virtual]="virtual"
6709
6942
  [showStickyHeader]="showStickyHeader"
6943
+ [ariaLabel]="messageFor('listboxLabel')"
6944
+ [text]="text"
6945
+ [allowCustom]="allowCustom"
6710
6946
  (pageChange)="pageChange($event)"
6711
6947
  >
6948
+ <!--no-data template-->
6949
+ @if (data.length === 0) {
6950
+ <div class="k-no-data" [attr.aria-live]="'polite'">
6951
+ @if (noDataTemplate) {
6952
+ <ng-template
6953
+ [templateContext]="{
6954
+ templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
6955
+ }">
6956
+ </ng-template>
6957
+ }
6958
+ @if (!noDataTemplate) {
6959
+ <div>{{ messageFor('noDataText') }}</div>
6960
+ }
6961
+ </div>
6962
+ }
6712
6963
  </kendo-list>
6713
- <!--no-data template-->
6714
- @if (data.length === 0) {
6715
- <div class="k-no-data" [attr.aria-live]="'polite'">
6716
- @if (noDataTemplate) {
6717
- <ng-template
6718
- [templateContext]="{
6719
- templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
6720
- }">
6721
- </ng-template>
6722
- }
6723
- @if (!noDataTemplate) {
6724
- <div>{{ messageFor('noDataText') }}</div>
6725
- }
6726
- </div>
6727
- }
6728
6964
  <!--footer template-->
6729
6965
  @if (footerTemplate) {
6730
6966
  <ng-template
@@ -6734,7 +6970,7 @@ class ComboBoxComponent extends MultiTabStop {
6734
6970
  </ng-template>
6735
6971
  }
6736
6972
  </ng-template>
6737
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "isFilterable", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
6973
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "hasListAutocomplete", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "ariaLabel", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "columnsWidths", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
6738
6974
  }
6739
6975
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ComboBoxComponent, decorators: [{
6740
6976
  type: Component,
@@ -6779,6 +7015,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6779
7015
 
6780
7016
  i18n-adaptiveCloseButtonTitle="kendo.combobox.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
6781
7017
  adaptiveCloseButtonTitle="Close"
7018
+
7019
+ i18n-listboxLabel="kendo.combobox.listboxLabel|The accessible label of the listbox that contains the list of options"
7020
+ listboxLabel="Options"
7021
+
7022
+ i18n-useCustomValueText="kendo.combobox.useCustomValueText|The text displayed when the user types a custom value that is not in the list of options."
7023
+ useCustomValueText="{{ 'Use &quot;{customValue}&quot;' }}"
6782
7024
  >
6783
7025
  </ng-container>
6784
7026
 
@@ -6800,12 +7042,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6800
7042
  }
6801
7043
  <input
6802
7044
  kendoSearchbar
6803
- [ariaExpanded]="isOpen"
7045
+ [ariaExpanded]="isAdaptive ? false : isOpen"
6804
7046
  [ariaControls]="ariaControls"
6805
7047
  [id]="focusableId"
6806
7048
  [isLoading]="loading"
6807
7049
  [isSuggestable]="suggest"
6808
- [isFilterable]="filterable"
7050
+ [hasListAutocomplete]="filterable"
6809
7051
  [activeDescendant]="activeDescendant"
6810
7052
  [userInput]="text"
6811
7053
  [suggestedText]="getSuggestion()"
@@ -6825,7 +7067,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6825
7067
  <span
6826
7068
  class="k-clear-value"
6827
7069
  [style.visibility]="clearButtonVisibility"
6828
- aria-hidden="true"
6829
7070
  [attr.title]="messageFor('clearTitle')"
6830
7071
  (click)="clearValue($event)"
6831
7072
  [kendoEventsOutsideAngular]="{
@@ -6920,24 +7161,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
6920
7161
  [show]="isOpen"
6921
7162
  [virtual]="virtual"
6922
7163
  [showStickyHeader]="showStickyHeader"
7164
+ [ariaLabel]="messageFor('listboxLabel')"
7165
+ [text]="text"
7166
+ [allowCustom]="allowCustom"
6923
7167
  (pageChange)="pageChange($event)"
6924
7168
  >
7169
+ <!--no-data template-->
7170
+ @if (data.length === 0) {
7171
+ <div class="k-no-data" [attr.aria-live]="'polite'">
7172
+ @if (noDataTemplate) {
7173
+ <ng-template
7174
+ [templateContext]="{
7175
+ templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
7176
+ }">
7177
+ </ng-template>
7178
+ }
7179
+ @if (!noDataTemplate) {
7180
+ <div>{{ messageFor('noDataText') }}</div>
7181
+ }
7182
+ </div>
7183
+ }
6925
7184
  </kendo-list>
6926
- <!--no-data template-->
6927
- @if (data.length === 0) {
6928
- <div class="k-no-data" [attr.aria-live]="'polite'">
6929
- @if (noDataTemplate) {
6930
- <ng-template
6931
- [templateContext]="{
6932
- templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
6933
- }">
6934
- </ng-template>
6935
- }
6936
- @if (!noDataTemplate) {
6937
- <div>{{ messageFor('noDataText') }}</div>
6938
- }
6939
- </div>
6940
- }
6941
7185
  <!--footer template-->
6942
7186
  @if (footerTemplate) {
6943
7187
  <ng-template
@@ -7296,7 +7540,7 @@ class DropDownListComponent {
7296
7540
  * @hidden
7297
7541
  */
7298
7542
  get ariaLive() {
7299
- return this.filterable ? 'polite' : 'off';
7543
+ return this.filterable ? 'polite' : null;
7300
7544
  }
7301
7545
  /**
7302
7546
  * Shows or hides the current group sticky header when using grouped data.
@@ -7685,7 +7929,7 @@ class DropDownListComponent {
7685
7929
  role = 'combobox';
7686
7930
  haspopup = 'listbox';
7687
7931
  get hostAriaInvalid() {
7688
- return this.formControl?.invalid ? true : null;
7932
+ return (this.formControl?.invalid && (this.formControl?.touched || this.formControl?.dirty)) ? true : null;
7689
7933
  }
7690
7934
  /**
7691
7935
  * @hidden
@@ -8534,8 +8778,6 @@ class DropDownListComponent {
8534
8778
  }
8535
8779
  closeActionSheet() {
8536
8780
  this.actionSheet.toggle(false);
8537
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'false');
8538
- this.renderer.removeAttribute(this.wrapper.nativeElement, 'aria-controls');
8539
8781
  if (this.filterable) {
8540
8782
  this.adaptiveRenderer.searchBarValue = '';
8541
8783
  this.filterChange.emit('');
@@ -8545,8 +8787,6 @@ class DropDownListComponent {
8545
8787
  openActionSheet() {
8546
8788
  this.actionSheet.toggle(true);
8547
8789
  this.cdr.detectChanges();
8548
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
8549
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-controls', this.listBoxId);
8550
8790
  if (!this.dataService.grouped) {
8551
8791
  setListBoxAriaLabelledBy(this.optionsList, this.wrapper, this.renderer);
8552
8792
  }
@@ -8598,6 +8838,9 @@ class DropDownListComponent {
8598
8838
 
8599
8839
  i18n-filterPlaceholder="kendo.dropdownlist.filterPlaceholder|The text for the input's placeholder when filtering is enabled"
8600
8840
  filterInputPlaceholder="Filter"
8841
+
8842
+ i18n-listboxLabel="kendo.dropdownlist.listboxLabel|The accessible label of the listbox that contains the list of options"
8843
+ listboxLabel="Options"
8601
8844
  >
8602
8845
  </ng-container>
8603
8846
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId" (click)="$event.preventDefault()">
@@ -8662,7 +8905,6 @@ class DropDownListComponent {
8662
8905
  class="k-searchbox k-input"
8663
8906
  [ngClass]="filterInputClasses">
8664
8907
  <kendo-icon-wrapper
8665
- class="k-icon"
8666
8908
  innerCssClass="k-input-icon"
8667
8909
  name="search"
8668
8910
  [svgIcon]="searchIcon">
@@ -8713,24 +8955,25 @@ class DropDownListComponent {
8713
8955
  [virtual]="virtual"
8714
8956
  [ariaLive]="ariaLive"
8715
8957
  [showStickyHeader]="showStickyHeader"
8958
+ [ariaLabel]="messageFor('listboxLabel')"
8716
8959
  (pageChange)="pageChange($event)"
8717
8960
  [defaultItem]="defaultItem">
8961
+ <!--no-data template-->
8962
+ @if (data.length === 0) {
8963
+ <div class="k-no-data" [attr.aria-live]="'polite'">
8964
+ @if (noDataTemplate) {
8965
+ <ng-template
8966
+ [templateContext]="{
8967
+ templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
8968
+ }">
8969
+ </ng-template>
8970
+ }
8971
+ @if (!noDataTemplate) {
8972
+ <div>{{ messageFor('noDataText') }}</div>
8973
+ }
8974
+ </div>
8975
+ }
8718
8976
  </kendo-list>
8719
- <!--no-data template-->
8720
- @if (data.length === 0) {
8721
- <div class="k-no-data" [attr.aria-live]="'polite'">
8722
- @if (noDataTemplate) {
8723
- <ng-template
8724
- [templateContext]="{
8725
- templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
8726
- }">
8727
- </ng-template>
8728
- }
8729
- @if (!noDataTemplate) {
8730
- <div>{{ messageFor('noDataText') }}</div>
8731
- }
8732
- </div>
8733
- }
8734
8977
  <!--footer template-->
8735
8978
  @if (footerTemplate) {
8736
8979
  <ng-template
@@ -8740,7 +8983,7 @@ class DropDownListComponent {
8740
8983
  </ng-template>
8741
8984
  }
8742
8985
  </ng-template>
8743
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
8986
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "ariaLabel", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "columnsWidths", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
8744
8987
  }
8745
8988
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DropDownListComponent, decorators: [{
8746
8989
  type: Component,
@@ -8785,6 +9028,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8785
9028
 
8786
9029
  i18n-filterPlaceholder="kendo.dropdownlist.filterPlaceholder|The text for the input's placeholder when filtering is enabled"
8787
9030
  filterInputPlaceholder="Filter"
9031
+
9032
+ i18n-listboxLabel="kendo.dropdownlist.listboxLabel|The accessible label of the listbox that contains the list of options"
9033
+ listboxLabel="Options"
8788
9034
  >
8789
9035
  </ng-container>
8790
9036
  <span class="k-input-inner" unselectable="on" [id]="valueLabelId" (click)="$event.preventDefault()">
@@ -8849,7 +9095,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8849
9095
  class="k-searchbox k-input"
8850
9096
  [ngClass]="filterInputClasses">
8851
9097
  <kendo-icon-wrapper
8852
- class="k-icon"
8853
9098
  innerCssClass="k-input-icon"
8854
9099
  name="search"
8855
9100
  [svgIcon]="searchIcon">
@@ -8900,24 +9145,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
8900
9145
  [virtual]="virtual"
8901
9146
  [ariaLive]="ariaLive"
8902
9147
  [showStickyHeader]="showStickyHeader"
9148
+ [ariaLabel]="messageFor('listboxLabel')"
8903
9149
  (pageChange)="pageChange($event)"
8904
9150
  [defaultItem]="defaultItem">
9151
+ <!--no-data template-->
9152
+ @if (data.length === 0) {
9153
+ <div class="k-no-data" [attr.aria-live]="'polite'">
9154
+ @if (noDataTemplate) {
9155
+ <ng-template
9156
+ [templateContext]="{
9157
+ templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
9158
+ }">
9159
+ </ng-template>
9160
+ }
9161
+ @if (!noDataTemplate) {
9162
+ <div>{{ messageFor('noDataText') }}</div>
9163
+ }
9164
+ </div>
9165
+ }
8905
9166
  </kendo-list>
8906
- <!--no-data template-->
8907
- @if (data.length === 0) {
8908
- <div class="k-no-data" [attr.aria-live]="'polite'">
8909
- @if (noDataTemplate) {
8910
- <ng-template
8911
- [templateContext]="{
8912
- templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
8913
- }">
8914
- </ng-template>
8915
- }
8916
- @if (!noDataTemplate) {
8917
- <div>{{ messageFor('noDataText') }}</div>
8918
- }
8919
- </div>
8920
- }
8921
9167
  <!--footer template-->
8922
9168
  @if (footerTemplate) {
8923
9169
  <ng-template
@@ -9238,6 +9484,7 @@ class TagListComponent {
9238
9484
  disabled;
9239
9485
  tagPrefix;
9240
9486
  id;
9487
+ ariaLabel;
9241
9488
  set size(size) {
9242
9489
  this.renderer.removeClass(this.hostElement.nativeElement, getSizeClass('chip-list', this.size));
9243
9490
  if (size) {
@@ -9260,7 +9507,11 @@ class TagListComponent {
9260
9507
  return this.id;
9261
9508
  }
9262
9509
  taglistRole = 'listbox';
9510
+ get hostAriaLabel() {
9511
+ return this.ariaLabel || null;
9512
+ }
9263
9513
  multiselectable = true;
9514
+ ariaOrientation = 'horizontal';
9264
9515
  _size;
9265
9516
  constructor(renderer, hostElement) {
9266
9517
  this.renderer = renderer;
@@ -9315,7 +9566,7 @@ class TagListComponent {
9315
9566
  }
9316
9567
  }
9317
9568
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: TagListComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
9318
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TagListComponent, isStandalone: true, selector: "kendo-taglist", inputs: { tags: "tags", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", focused: "focused", template: "template", groupTemplate: "groupTemplate", disabled: "disabled", tagPrefix: "tagPrefix", id: "id", size: "size", rounded: "rounded", fillMode: "fillMode", disabledIndices: "disabledIndices" }, outputs: { removeTag: "removeTag" }, host: { properties: { "class.k-chip-list": "this.hostClass", "attr.id": "this.hostId", "attr.role": "this.taglistRole", "attr.aria-multiselectable": "this.multiselectable" } }, ngImport: i0, template: `
9569
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: TagListComponent, isStandalone: true, selector: "kendo-taglist", inputs: { tags: "tags", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", focused: "focused", template: "template", groupTemplate: "groupTemplate", disabled: "disabled", tagPrefix: "tagPrefix", id: "id", ariaLabel: "ariaLabel", size: "size", rounded: "rounded", fillMode: "fillMode", disabledIndices: "disabledIndices" }, outputs: { removeTag: "removeTag" }, host: { properties: { "class.k-chip-list": "this.hostClass", "attr.id": "this.hostId", "attr.role": "this.taglistRole", "attr.aria-label": "this.hostAriaLabel", "attr.aria-multiselectable": "this.multiselectable", "attr.aria-orientation": "this.ariaOrientation" } }, ngImport: i0, template: `
9319
9570
  @for (tag of tags; track $index; let index = $index) {
9320
9571
  <div
9321
9572
  [attr.id]="itemId(tag, index)"
@@ -9341,7 +9592,7 @@ class TagListComponent {
9341
9592
  >
9342
9593
  <span class="k-chip-content">
9343
9594
  @if (isGroupTag(tag)) {
9344
- <span class="k-chip-label k-text-ellipsis">
9595
+ <span class="k-chip-label">
9345
9596
  @if (groupTemplate) {
9346
9597
  <ng-template
9347
9598
  [templateContext]="{
@@ -9355,7 +9606,7 @@ class TagListComponent {
9355
9606
  }
9356
9607
  </span>
9357
9608
  } @else {
9358
- <span class="k-chip-label k-text-ellipsis">
9609
+ <span class="k-chip-label">
9359
9610
  @if (template) {
9360
9611
  <ng-template
9361
9612
  [templateContext]="{
@@ -9371,11 +9622,13 @@ class TagListComponent {
9371
9622
  }
9372
9623
  </span>
9373
9624
  <span class="k-chip-actions">
9374
- <span aria-label="delete" [attr.aria-hidden]="index !== focused" class="k-chip-action k-chip-remove-action">
9625
+ <span class="k-chip-action k-chip-remove-action">
9375
9626
  <kendo-icon-wrapper
9627
+ [attr.aria-hidden]="index !== focused"
9376
9628
  (mousedown)="deleteTag($event, tag, index)"
9377
9629
  name="x-circle"
9378
9630
  [svgIcon]="xCircleIcon"
9631
+ size="small"
9379
9632
  >
9380
9633
  </kendo-icon-wrapper>
9381
9634
  </span>
@@ -9415,7 +9668,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9415
9668
  >
9416
9669
  <span class="k-chip-content">
9417
9670
  @if (isGroupTag(tag)) {
9418
- <span class="k-chip-label k-text-ellipsis">
9671
+ <span class="k-chip-label">
9419
9672
  @if (groupTemplate) {
9420
9673
  <ng-template
9421
9674
  [templateContext]="{
@@ -9429,7 +9682,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9429
9682
  }
9430
9683
  </span>
9431
9684
  } @else {
9432
- <span class="k-chip-label k-text-ellipsis">
9685
+ <span class="k-chip-label">
9433
9686
  @if (template) {
9434
9687
  <ng-template
9435
9688
  [templateContext]="{
@@ -9445,11 +9698,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9445
9698
  }
9446
9699
  </span>
9447
9700
  <span class="k-chip-actions">
9448
- <span aria-label="delete" [attr.aria-hidden]="index !== focused" class="k-chip-action k-chip-remove-action">
9701
+ <span class="k-chip-action k-chip-remove-action">
9449
9702
  <kendo-icon-wrapper
9703
+ [attr.aria-hidden]="index !== focused"
9450
9704
  (mousedown)="deleteTag($event, tag, index)"
9451
9705
  name="x-circle"
9452
9706
  [svgIcon]="xCircleIcon"
9707
+ size="small"
9453
9708
  >
9454
9709
  </kendo-icon-wrapper>
9455
9710
  </span>
@@ -9481,6 +9736,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9481
9736
  type: Input
9482
9737
  }], id: [{
9483
9738
  type: Input
9739
+ }], ariaLabel: [{
9740
+ type: Input
9484
9741
  }], size: [{
9485
9742
  type: Input
9486
9743
  }], rounded: [{
@@ -9500,9 +9757,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
9500
9757
  }], taglistRole: [{
9501
9758
  type: HostBinding,
9502
9759
  args: ['attr.role']
9760
+ }], hostAriaLabel: [{
9761
+ type: HostBinding,
9762
+ args: ['attr.aria-label']
9503
9763
  }], multiselectable: [{
9504
9764
  type: HostBinding,
9505
9765
  args: ['attr.aria-multiselectable']
9766
+ }], ariaOrientation: [{
9767
+ type: HostBinding,
9768
+ args: ['attr.aria-orientation']
9506
9769
  }] } });
9507
9770
 
9508
9771
  const MULTISELECT_VALUE_ACCESSOR = {
@@ -9590,7 +9853,7 @@ class MultiSelectComponent {
9590
9853
  * @hidden
9591
9854
  */
9592
9855
  get ariaControls() {
9593
- return this.isOpen ? this.listBoxId : undefined;
9856
+ return (!this.isAdaptive && this.isOpen) ? this.listBoxId : undefined;
9594
9857
  }
9595
9858
  /**
9596
9859
  * @hidden
@@ -11274,6 +11537,9 @@ class MultiSelectComponent {
11274
11537
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
11275
11538
  clearTitle="clear"
11276
11539
 
11540
+ i18n-chipListLabel="kendo.multiselect.chipListLabel|The accessible label of the tag list element that contains the selected items"
11541
+ chipListLabel="chip list"
11542
+
11277
11543
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11278
11544
  popupLabel="Options list"
11279
11545
 
@@ -11281,7 +11547,10 @@ class MultiSelectComponent {
11281
11547
  adaptiveCloseButtonTitle="Close"
11282
11548
 
11283
11549
  i18n-useCustomValueText="kendo.multiselect.useCustomValueText|The text displayed when the user types a custom value that is not in the list of options."
11284
- useCustomValueText="{{ 'Use &quot;{customValue}&quot;' }}"
11550
+ useCustomValueText="Use &quot;[[customValue]]&quot;"
11551
+
11552
+ i18n-listboxLabel="kendo.multiselect.listboxLabel|The accessible label of the listbox that contains the list of options"
11553
+ listboxLabel="Options"
11285
11554
  >
11286
11555
  </ng-container>
11287
11556
 
@@ -11316,17 +11585,18 @@ class MultiSelectComponent {
11316
11585
  [groupTemplate]="groupTagTemplate"
11317
11586
  [tagPrefix]="tagPrefix"
11318
11587
  [disabledIndices]="disabledIndices"
11588
+ [ariaLabel]="messageFor('chipListLabel')"
11319
11589
  (removeTag)="handleRemoveTag($event)"
11320
11590
  >
11321
11591
  </kendo-taglist>
11322
11592
  <input
11323
11593
  kendoSearchbar
11324
11594
  [ariaControls]="ariaControls"
11325
- [ariaExpanded]="isOpen"
11595
+ [ariaExpanded]="isAdaptive ? false : isOpen"
11326
11596
  [id]="focusableId"
11327
11597
  [tagListId]="tagListId"
11328
11598
  [isLoading]="loading"
11329
- [isFilterable]="filterable"
11599
+ [hasListAutocomplete]="filterable"
11330
11600
  [activeDescendant]="activeDescendant"
11331
11601
  [userInput]="text"
11332
11602
  [disabled]="disabled"
@@ -11353,7 +11623,6 @@ class MultiSelectComponent {
11353
11623
  (mousedown)="clearAll($event)"
11354
11624
  >
11355
11625
  <kendo-icon-wrapper
11356
- class="k-icon"
11357
11626
  name="x"
11358
11627
  [svgIcon]="xIcon"
11359
11628
  >
@@ -11431,23 +11700,24 @@ class MultiSelectComponent {
11431
11700
  [customItemTemplate]="customItemTemplate"
11432
11701
  [text]="text"
11433
11702
  [allowCustom]="allowCustom"
11703
+ [ariaLabel]="messageFor('listboxLabel')"
11434
11704
  >
11705
+ <!--no data template-->
11706
+ @if (data.length === 0) {
11707
+ <div class="k-no-data" [attr.aria-live]="'polite'">
11708
+ @if (noDataTemplate) {
11709
+ <ng-template
11710
+ [templateContext]="{
11711
+ templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
11712
+ }">
11713
+ </ng-template>
11714
+ }
11715
+ @if (!noDataTemplate) {
11716
+ <div>{{ messageFor('noDataText') }}</div>
11717
+ }
11718
+ </div>
11719
+ }
11435
11720
  </kendo-list>
11436
- <!--no data template-->
11437
- @if (data.length === 0) {
11438
- <div class="k-no-data" [attr.aria-live]="'polite'">
11439
- @if (noDataTemplate) {
11440
- <ng-template
11441
- [templateContext]="{
11442
- templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
11443
- }">
11444
- </ng-template>
11445
- }
11446
- @if (!noDataTemplate) {
11447
- <div>{{ messageFor('noDataText') }}</div>
11448
- }
11449
- </div>
11450
- }
11451
11721
  <!--footer template-->
11452
11722
  @if (footerTemplate) {
11453
11723
  <ng-template
@@ -11457,7 +11727,7 @@ class MultiSelectComponent {
11457
11727
  </ng-template>
11458
11728
  }
11459
11729
  </ng-template>
11460
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "isFilterable", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
11730
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "ariaLabel", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "hasListAutocomplete", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "ariaLabel", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "columnsWidths", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
11461
11731
  }
11462
11732
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: MultiSelectComponent, decorators: [{
11463
11733
  type: Component,
@@ -11493,6 +11763,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
11493
11763
  i18n-clearTitle="kendo.multiselect.clearTitle|The title of the clear button"
11494
11764
  clearTitle="clear"
11495
11765
 
11766
+ i18n-chipListLabel="kendo.multiselect.chipListLabel|The accessible label of the tag list element that contains the selected items"
11767
+ chipListLabel="chip list"
11768
+
11496
11769
  i18n-popupLabel="kendo.multiselect.popupLabel|The label of the popup element that contains the list of options when its role is 'region'"
11497
11770
  popupLabel="Options list"
11498
11771
 
@@ -11500,7 +11773,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
11500
11773
  adaptiveCloseButtonTitle="Close"
11501
11774
 
11502
11775
  i18n-useCustomValueText="kendo.multiselect.useCustomValueText|The text displayed when the user types a custom value that is not in the list of options."
11503
- useCustomValueText="{{ 'Use &quot;{customValue}&quot;' }}"
11776
+ useCustomValueText="Use &quot;[[customValue]]&quot;"
11777
+
11778
+ i18n-listboxLabel="kendo.multiselect.listboxLabel|The accessible label of the listbox that contains the list of options"
11779
+ listboxLabel="Options"
11504
11780
  >
11505
11781
  </ng-container>
11506
11782
 
@@ -11535,17 +11811,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
11535
11811
  [groupTemplate]="groupTagTemplate"
11536
11812
  [tagPrefix]="tagPrefix"
11537
11813
  [disabledIndices]="disabledIndices"
11814
+ [ariaLabel]="messageFor('chipListLabel')"
11538
11815
  (removeTag)="handleRemoveTag($event)"
11539
11816
  >
11540
11817
  </kendo-taglist>
11541
11818
  <input
11542
11819
  kendoSearchbar
11543
11820
  [ariaControls]="ariaControls"
11544
- [ariaExpanded]="isOpen"
11821
+ [ariaExpanded]="isAdaptive ? false : isOpen"
11545
11822
  [id]="focusableId"
11546
11823
  [tagListId]="tagListId"
11547
11824
  [isLoading]="loading"
11548
- [isFilterable]="filterable"
11825
+ [hasListAutocomplete]="filterable"
11549
11826
  [activeDescendant]="activeDescendant"
11550
11827
  [userInput]="text"
11551
11828
  [disabled]="disabled"
@@ -11572,7 +11849,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
11572
11849
  (mousedown)="clearAll($event)"
11573
11850
  >
11574
11851
  <kendo-icon-wrapper
11575
- class="k-icon"
11576
11852
  name="x"
11577
11853
  [svgIcon]="xIcon"
11578
11854
  >
@@ -11650,23 +11926,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
11650
11926
  [customItemTemplate]="customItemTemplate"
11651
11927
  [text]="text"
11652
11928
  [allowCustom]="allowCustom"
11929
+ [ariaLabel]="messageFor('listboxLabel')"
11653
11930
  >
11931
+ <!--no data template-->
11932
+ @if (data.length === 0) {
11933
+ <div class="k-no-data" [attr.aria-live]="'polite'">
11934
+ @if (noDataTemplate) {
11935
+ <ng-template
11936
+ [templateContext]="{
11937
+ templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
11938
+ }">
11939
+ </ng-template>
11940
+ }
11941
+ @if (!noDataTemplate) {
11942
+ <div>{{ messageFor('noDataText') }}</div>
11943
+ }
11944
+ </div>
11945
+ }
11654
11946
  </kendo-list>
11655
- <!--no data template-->
11656
- @if (data.length === 0) {
11657
- <div class="k-no-data" [attr.aria-live]="'polite'">
11658
- @if (noDataTemplate) {
11659
- <ng-template
11660
- [templateContext]="{
11661
- templateRef: noDataTemplate ? noDataTemplate.templateRef : undefined
11662
- }">
11663
- </ng-template>
11664
- }
11665
- @if (!noDataTemplate) {
11666
- <div>{{ messageFor('noDataText') }}</div>
11667
- }
11668
- </div>
11669
- }
11670
11947
  <!--footer template-->
11671
11948
  @if (footerTemplate) {
11672
11949
  <ng-template
@@ -12122,6 +12399,17 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12122
12399
  * @hidden
12123
12400
  */
12124
12401
  totalColumnsWidth;
12402
+ /**
12403
+ * @hidden
12404
+ */
12405
+ get visibleColumnsWidths() {
12406
+ return this.columns.reduce((widths, column, index) => {
12407
+ if (!column.hidden && column.matchesMedia) {
12408
+ widths.push(this.getColumnWidth(index));
12409
+ }
12410
+ return widths;
12411
+ }, []);
12412
+ }
12125
12413
  get popupWidth() {
12126
12414
  const wrapperOffsetWidth = this.wrapper.nativeElement.offsetWidth;
12127
12415
  const min = `${wrapperOffsetWidth}px`;
@@ -12136,7 +12424,8 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12136
12424
  * @hidden
12137
12425
  */
12138
12426
  get tableSizeClass() {
12139
- return `${this.size ? getSizeClass('table', this.size) : ''}`;
12427
+ const effectiveSize = this.isAdaptive ? 'large' : this.size;
12428
+ return `${effectiveSize ? getSizeClass('table', effectiveSize) : ''}`;
12140
12429
  }
12141
12430
  /**
12142
12431
  * @hidden
@@ -12305,6 +12594,8 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12305
12594
  popupLabel="Options list"
12306
12595
  i18n-adaptiveCloseButtonTitle="kendo.multicolumncombobox.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
12307
12596
  adaptiveCloseButtonTitle="Close"
12597
+ i18n-listboxLabel="kendo.multicolumncombobox.listboxLabel|The accessible label of the listbox that contains the list of options"
12598
+ listboxLabel="Options"
12308
12599
  ></ng-container>
12309
12600
 
12310
12601
  <ng-container
@@ -12326,11 +12617,11 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12326
12617
  <input
12327
12618
  kendoSearchbar
12328
12619
  [ariaControls]="ariaControls"
12329
- [ariaExpanded]="isOpen"
12620
+ [ariaExpanded]="isAdaptive ? false : isOpen"
12330
12621
  [id]="focusableId"
12331
12622
  [isLoading]="loading"
12332
12623
  [isSuggestable]="suggest"
12333
- [isFilterable]="filterable"
12624
+ [hasListAutocomplete]="filterable"
12334
12625
  [activeDescendant]="activeDescendant"
12335
12626
  [userInput]="text"
12336
12627
  [suggestedText]="getSuggestion()"
@@ -12434,7 +12725,7 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12434
12725
  <!--grid header-->
12435
12726
  <div #header class="k-table-header">
12436
12727
  <div #headerWrap class="k-table-header-wrap">
12437
- <table #headerTable class="k-table" role="presentation">
12728
+ <table #headerTable class="k-table">
12438
12729
  <colgroup>
12439
12730
  @for (column of columns; track column) {
12440
12731
  @if (!column.hidden && column.matchesMedia) {
@@ -12518,7 +12809,9 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12518
12809
  [virtual]="virtual"
12519
12810
  [type]="'dropdowngrid'"
12520
12811
  [rowWidth]="rowWidth"
12812
+ [columnsWidths]="visibleColumnsWidths"
12521
12813
  [showStickyHeader]="showStickyHeader"
12814
+ [ariaLabel]="messageFor('listboxLabel')"
12522
12815
  (pageChange)="pageChange($event)"
12523
12816
  (listResize)="updateHeaderPadding(header)"
12524
12817
  (popupListScroll)="headerWrap.scrollLeft = $event.target.scrollLeft;"
@@ -12545,25 +12838,19 @@ class MultiColumnComboBoxComponent extends ComboBoxComponent {
12545
12838
  <!--user-defined footer template-->
12546
12839
  @if (footerTemplate) {
12547
12840
  <div class="k-table-footer">
12548
- <table class="k-table">
12549
- <tfoot class="k-table-tfoot">
12550
- <tr class="k-table-row">
12551
- <td class="k-table-td">
12552
- <ng-template
12841
+ <span class="k-table-td">
12842
+ <ng-template
12553
12843
  [templateContext]="{
12554
12844
  templateRef: footerTemplate.templateRef
12555
12845
  }"
12556
- >
12557
- </ng-template>
12558
- </td>
12559
- </tr>
12560
- </tfoot>
12561
- </table>
12846
+ >
12847
+ </ng-template>
12848
+ </span>
12562
12849
  </div>
12563
12850
  }
12564
12851
  </div>
12565
12852
  </ng-template>
12566
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "isFilterable", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
12853
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: SharedDropDownEventsDirective, selector: "[kendoDropDownSharedEvents]", inputs: ["hostElement", "clearButtonClicked", "isFocused"], outputs: ["isFocusedChange", "onFocus", "handleBlur"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }, { kind: "component", type: SearchBarComponent, selector: "input[kendoSearchbar]", inputs: ["tagListId", "readonly", "disabled", "isRequired", "isSuggestable", "hasListAutocomplete", "userInput", "suggestedText", "inputAttributes", "id", "activeDescendant", "tabIndex", "isLoading", "ariaControls", "ariaExpanded", "placeholder"], outputs: ["valueChange", "onBlur", "onFocus", "onClick", "onNavigate"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ListComponent, selector: "kendo-list", inputs: ["selected", "focused", "textField", "valueField", "height", "template", "groupTemplate", "fixedGroupTemplate", "show", "id", "optionPrefix", "multipleSelection", "virtual", "type", "checkboxes", "ariaLive", "ariaLabel", "isMultiselect", "isActionSheetExpanded", "showStickyHeader", "rowWidth", "columnsWidths", "customItemTemplate", "text", "allowCustom", "defaultItem", "data", "size", "rounded"], outputs: ["onClick", "pageChange", "listResize", "popupListScroll"] }] });
12567
12854
  }
12568
12855
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: MultiColumnComboBoxComponent, decorators: [{
12569
12856
  type: Component,
@@ -12619,6 +12906,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
12619
12906
  popupLabel="Options list"
12620
12907
  i18n-adaptiveCloseButtonTitle="kendo.multicolumncombobox.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
12621
12908
  adaptiveCloseButtonTitle="Close"
12909
+ i18n-listboxLabel="kendo.multicolumncombobox.listboxLabel|The accessible label of the listbox that contains the list of options"
12910
+ listboxLabel="Options"
12622
12911
  ></ng-container>
12623
12912
 
12624
12913
  <ng-container
@@ -12640,11 +12929,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
12640
12929
  <input
12641
12930
  kendoSearchbar
12642
12931
  [ariaControls]="ariaControls"
12643
- [ariaExpanded]="isOpen"
12932
+ [ariaExpanded]="isAdaptive ? false : isOpen"
12644
12933
  [id]="focusableId"
12645
12934
  [isLoading]="loading"
12646
12935
  [isSuggestable]="suggest"
12647
- [isFilterable]="filterable"
12936
+ [hasListAutocomplete]="filterable"
12648
12937
  [activeDescendant]="activeDescendant"
12649
12938
  [userInput]="text"
12650
12939
  [suggestedText]="getSuggestion()"
@@ -12748,7 +13037,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
12748
13037
  <!--grid header-->
12749
13038
  <div #header class="k-table-header">
12750
13039
  <div #headerWrap class="k-table-header-wrap">
12751
- <table #headerTable class="k-table" role="presentation">
13040
+ <table #headerTable class="k-table">
12752
13041
  <colgroup>
12753
13042
  @for (column of columns; track column) {
12754
13043
  @if (!column.hidden && column.matchesMedia) {
@@ -12832,7 +13121,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
12832
13121
  [virtual]="virtual"
12833
13122
  [type]="'dropdowngrid'"
12834
13123
  [rowWidth]="rowWidth"
13124
+ [columnsWidths]="visibleColumnsWidths"
12835
13125
  [showStickyHeader]="showStickyHeader"
13126
+ [ariaLabel]="messageFor('listboxLabel')"
12836
13127
  (pageChange)="pageChange($event)"
12837
13128
  (listResize)="updateHeaderPadding(header)"
12838
13129
  (popupListScroll)="headerWrap.scrollLeft = $event.target.scrollLeft;"
@@ -12859,20 +13150,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
12859
13150
  <!--user-defined footer template-->
12860
13151
  @if (footerTemplate) {
12861
13152
  <div class="k-table-footer">
12862
- <table class="k-table">
12863
- <tfoot class="k-table-tfoot">
12864
- <tr class="k-table-row">
12865
- <td class="k-table-td">
12866
- <ng-template
13153
+ <span class="k-table-td">
13154
+ <ng-template
12867
13155
  [templateContext]="{
12868
13156
  templateRef: footerTemplate.templateRef
12869
13157
  }"
12870
- >
12871
- </ng-template>
12872
- </td>
12873
- </tr>
12874
- </tfoot>
12875
- </table>
13158
+ >
13159
+ </ng-template>
13160
+ </span>
12876
13161
  </div>
12877
13162
  }
12878
13163
  </div>
@@ -13002,7 +13287,7 @@ class DropDownTreeComponent {
13002
13287
  return this.readonly ? '' : null;
13003
13288
  }
13004
13289
  get hostAriaInvalid() {
13005
- return this.formControl?.invalid ? true : null;
13290
+ return (this.formControl?.invalid && (this.formControl?.touched || this.formControl?.dirty)) ? true : null;
13006
13291
  }
13007
13292
  get isDisabled() {
13008
13293
  return this.disabled || null;
@@ -13014,7 +13299,7 @@ class DropDownTreeComponent {
13014
13299
  return this.loading ? 'true' : null;
13015
13300
  }
13016
13301
  get hostAriaControls() {
13017
- return this.isOpen ? this.treeViewId : null;
13302
+ return (!this.isAdaptive && this.isOpen) ? this.treeViewId : null;
13018
13303
  }
13019
13304
  get id() {
13020
13305
  return this.focusableId;
@@ -13026,7 +13311,7 @@ class DropDownTreeComponent {
13026
13311
  role = 'combobox';
13027
13312
  ariaHasPopup = 'tree';
13028
13313
  get isAriaExpanded() {
13029
- return this.isOpen;
13314
+ return this.isAdaptive ? false : this.isOpen;
13030
13315
  }
13031
13316
  get hostAriaAutocomplete() {
13032
13317
  return this.filterable ? 'list' : null;
@@ -13046,6 +13331,7 @@ class DropDownTreeComponent {
13046
13331
  // the treeview animations are initially disabled (we don't want expand animations during popup opening)
13047
13332
  // re-enables the animations for user interaction
13048
13333
  treeview.animate = true;
13334
+ treeview.loadMoreButtonRole = 'treeitem';
13049
13335
  this._treeview = treeview;
13050
13336
  }
13051
13337
  }
@@ -13751,7 +14037,7 @@ class DropDownTreeComponent {
13751
14037
  * @hidden
13752
14038
  */
13753
14039
  get popupContainerClasses() {
13754
- const containerClasses = ['k-dropdowntree-popup'];
14040
+ const containerClasses = ['k-list-container', 'k-dropdowntree-popup'];
13755
14041
  if (!this.popupSettings.popupClass) {
13756
14042
  return containerClasses;
13757
14043
  }
@@ -14329,6 +14615,7 @@ class DropDownTreeComponent {
14329
14615
  [title]="adaptiveTitle"
14330
14616
  [showTextInput]="filterable"
14331
14617
  [subtitle]="adaptiveSubtitle"
14618
+ [showListContainer]="false"
14332
14619
  (closePopup)="togglePopup(false)"
14333
14620
  (textInputChange)="handleFilterInputChange($event)"
14334
14621
  [placeholder]="placeholder"
@@ -14345,14 +14632,14 @@ class DropDownTreeComponent {
14345
14632
  class="k-textbox k-input"
14346
14633
  [ngClass]="filterInputClasses"
14347
14634
  >
14348
- <span class="k-input-prefix">
14635
+ <span class="k-input-prefix k-input-prefix-horizontal">
14349
14636
  <kendo-icon-wrapper
14350
- class="k-icon"
14351
14637
  name="search"
14352
14638
  [svgIcon]="searchIcon"
14353
14639
  >
14354
14640
  </kendo-icon-wrapper>
14355
14641
  </span>
14642
+ <kendo-separator></kendo-separator>
14356
14643
  <input
14357
14644
  #filterInput
14358
14645
  (input)="handleFilterInputChange($event.target)"
@@ -14384,7 +14671,7 @@ class DropDownTreeComponent {
14384
14671
  <kendo-treeview
14385
14672
  #treeview
14386
14673
  [attr.id]="treeViewId"
14387
- [size]="windowSize !== 'large' ? 'large' : size"
14674
+ [size]="isAdaptive ? 'large' : size"
14388
14675
  [nodes]="data"
14389
14676
  [style.maxHeight.px]="listHeight"
14390
14677
  [animate]="false"
@@ -14437,7 +14724,7 @@ class DropDownTreeComponent {
14437
14724
  @if (isOpen || isAdaptiveModeEnabled) {
14438
14725
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
14439
14726
  }
14440
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "hasCheckbox", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { kind: "directive", type: SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14727
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "component", type: TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "loadMoreButtonRole", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "hasCheckbox", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { kind: "directive", type: SelectDirective, selector: "[kendoTreeViewSelectable]", inputs: ["isSelected", "selectBy", "kendoTreeViewSelectable", "selectedKeys"], outputs: ["selectedKeysChange"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
14441
14728
  }
14442
14729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: DropDownTreeComponent, decorators: [{
14443
14730
  type: Component,
@@ -14564,6 +14851,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
14564
14851
  [title]="adaptiveTitle"
14565
14852
  [showTextInput]="filterable"
14566
14853
  [subtitle]="adaptiveSubtitle"
14854
+ [showListContainer]="false"
14567
14855
  (closePopup)="togglePopup(false)"
14568
14856
  (textInputChange)="handleFilterInputChange($event)"
14569
14857
  [placeholder]="placeholder"
@@ -14580,14 +14868,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
14580
14868
  class="k-textbox k-input"
14581
14869
  [ngClass]="filterInputClasses"
14582
14870
  >
14583
- <span class="k-input-prefix">
14871
+ <span class="k-input-prefix k-input-prefix-horizontal">
14584
14872
  <kendo-icon-wrapper
14585
- class="k-icon"
14586
14873
  name="search"
14587
14874
  [svgIcon]="searchIcon"
14588
14875
  >
14589
14876
  </kendo-icon-wrapper>
14590
14877
  </span>
14878
+ <kendo-separator></kendo-separator>
14591
14879
  <input
14592
14880
  #filterInput
14593
14881
  (input)="handleFilterInputChange($event.target)"
@@ -14619,7 +14907,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
14619
14907
  <kendo-treeview
14620
14908
  #treeview
14621
14909
  [attr.id]="treeViewId"
14622
- [size]="windowSize !== 'large' ? 'large' : size"
14910
+ [size]="isAdaptive ? 'large' : size"
14623
14911
  [nodes]="data"
14624
14912
  [style.maxHeight.px]="listHeight"
14625
14913
  [animate]="false"
@@ -14675,7 +14963,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
14675
14963
  `,
14676
14964
  changeDetection: ChangeDetectionStrategy.OnPush,
14677
14965
  standalone: true,
14678
- imports: [LocalizedMessagesDirective, TemplateContextDirective, IconWrapperComponent, NgClass, NgTemplateOutlet, AdaptiveRendererComponent, FilterInputDirective, EventsOutsideAngularDirective, TreeViewComponent, SelectDirective, ResizeSensorComponent]
14966
+ imports: [LocalizedMessagesDirective, TemplateContextDirective, IconWrapperComponent, NgClass, NgTemplateOutlet, AdaptiveRendererComponent, FilterInputDirective, EventsOutsideAngularDirective, TreeViewComponent, SelectDirective, ResizeSensorComponent, SeparatorComponent]
14679
14967
  }]
14680
14968
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i2.PopupService }, { type: NavigationService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.LocalizationService }, { type: i7.AdaptiveService }], propDecorators: { icon: [{
14681
14969
  type: Input
@@ -15379,14 +15667,11 @@ class MultiSelectTreeComponent {
15379
15667
  return this.disabled || null;
15380
15668
  }
15381
15669
  treeViewId = `k-${guid()}`;
15382
- get hostAriaAutocomplete() {
15383
- return this.filterable ? 'list' : null;
15384
- }
15385
15670
  get isLoading() {
15386
15671
  return this.loading;
15387
15672
  }
15388
15673
  get hostAriaInvalid() {
15389
- return this.formControl?.invalid ? true : null;
15674
+ return (this.formControl?.invalid && (this.formControl?.touched || this.formControl?.dirty)) ? true : null;
15390
15675
  }
15391
15676
  get isBusy() {
15392
15677
  return this.loading ? 'true' : null;
@@ -15398,14 +15683,9 @@ class MultiSelectTreeComponent {
15398
15683
  get hostTabIndex() {
15399
15684
  return this.tabindex;
15400
15685
  }
15401
- role = 'combobox';
15402
- ariaHasPopup = 'tree';
15403
15686
  get isReadonly() {
15404
15687
  return this.readonly ? '' : null;
15405
15688
  }
15406
- get ariaDescribedBy() {
15407
- return this.tagListId;
15408
- }
15409
15689
  get ariaActiveDescendant() {
15410
15690
  return this.focusedTagId;
15411
15691
  }
@@ -16100,7 +16380,6 @@ class MultiSelectTreeComponent {
16100
16380
  this._typedValue = '';
16101
16381
  }));
16102
16382
  this.renderer.removeAttribute(this.wrapper.nativeElement, 'tabindex');
16103
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', String(this.isOpen));
16104
16383
  this.subs.add(this.localization
16105
16384
  .changes.subscribe(({ rtl }) => {
16106
16385
  this.direction = rtl ? 'rtl' : 'ltr';
@@ -16554,9 +16833,7 @@ class MultiSelectTreeComponent {
16554
16833
  popupWrapper.style.minWidth = min;
16555
16834
  popupWrapper.style.width = max;
16556
16835
  popupWrapper.style.height = this.height;
16557
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-controls', this.treeViewId);
16558
16836
  this.renderer.setAttribute(popupWrapper, 'dir', this.direction);
16559
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
16560
16837
  this.popupRef.popupOpen.subscribe(() => {
16561
16838
  this.cdr.detectChanges();
16562
16839
  this.opened.emit();
@@ -16577,8 +16854,6 @@ class MultiSelectTreeComponent {
16577
16854
  if (this.popupRef) {
16578
16855
  this.popupRef.close();
16579
16856
  this.popupRef = null;
16580
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'false');
16581
- this.renderer.removeAttribute(this.wrapper.nativeElement, 'aria-controls');
16582
16857
  this.clearFilter();
16583
16858
  }
16584
16859
  }
@@ -16892,8 +17167,6 @@ class MultiSelectTreeComponent {
16892
17167
  closeActionSheet() {
16893
17168
  this.wrapper.nativeElement.focus();
16894
17169
  this.actionSheet.toggle(false);
16895
- this.renderer.removeAttribute(this.wrapper.nativeElement, 'aria-controls');
16896
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'false');
16897
17170
  this.clearFilter();
16898
17171
  this.closed.emit();
16899
17172
  }
@@ -16901,13 +17174,11 @@ class MultiSelectTreeComponent {
16901
17174
  this.actionSheet.toggle(true);
16902
17175
  this.adaptiveTitle = setActionSheetTitle(this.wrapper, this.adaptiveTitle);
16903
17176
  this.cdr.detectChanges();
16904
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-controls', this.treeViewId);
16905
- this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
16906
17177
  this.cdr.detectChanges();
16907
17178
  this.opened.emit();
16908
17179
  }
16909
17180
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: MultiSelectTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i2.PopupService }, { token: i0.Renderer2 }, { token: NavigationService }, { token: i0.NgZone }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: MultiSelectTreeLookupService }, { token: i7.AdaptiveService }], target: i0.ɵɵFactoryTarget.Component });
16910
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: MultiSelectTreeComponent, isStandalone: true, selector: "kendo-multiselecttree", inputs: { adaptiveMode: "adaptiveMode", adaptiveTitle: "adaptiveTitle", adaptiveSubtitle: "adaptiveSubtitle", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", popupSettings: "popupSettings", checkableSettings: "checkableSettings", data: "data", value: "value", dataItems: "dataItems", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", loading: "loading", placeholder: "placeholder", listHeight: "listHeight", disabled: "disabled", readonly: "readonly", valuePrimitive: "valuePrimitive", loadOnDemand: "loadOnDemand", focusableId: "focusableId", clearButton: "clearButton", filterable: "filterable", checkAll: "checkAll", hasChildren: "hasChildren", fetchChildren: "fetchChildren", isNodeExpanded: "isNodeExpanded", isNodeVisible: "isNodeVisible", itemDisabled: "itemDisabled", tagMapper: "tagMapper" }, outputs: { onFocus: "focus", onBlur: "blur", open: "open", opened: "opened", close: "close", closed: "closed", nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", valueChange: "valueChange", removeTag: "removeTag", filterChange: "filterChange" }, host: { properties: { "class.k-disabled": "this.isDisabled", "attr.aria-disabled": "this.isDisabled", "attr.aria-autocomplete": "this.hostAriaAutocomplete", "class.k-loading": "this.isLoading", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-busy": "this.isBusy", "attr.id": "this.id", "attr.dir": "this.direction", "attr.tabindex": "this.hostTabIndex", "attr.role": "this.role", "attr.aria-haspopup": "this.ariaHasPopup", "attr.readonly": "this.isReadonly", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-activedescendant": "this.ariaActiveDescendant", "class.k-readonly": "this.readonly" } }, providers: [
17181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: MultiSelectTreeComponent, isStandalone: true, selector: "kendo-multiselecttree", inputs: { adaptiveMode: "adaptiveMode", adaptiveTitle: "adaptiveTitle", adaptiveSubtitle: "adaptiveSubtitle", tabindex: "tabindex", size: "size", rounded: "rounded", fillMode: "fillMode", popupSettings: "popupSettings", checkableSettings: "checkableSettings", data: "data", value: "value", dataItems: "dataItems", textField: "textField", valueField: "valueField", valueDepth: "valueDepth", loading: "loading", placeholder: "placeholder", listHeight: "listHeight", disabled: "disabled", readonly: "readonly", valuePrimitive: "valuePrimitive", loadOnDemand: "loadOnDemand", focusableId: "focusableId", clearButton: "clearButton", filterable: "filterable", checkAll: "checkAll", hasChildren: "hasChildren", fetchChildren: "fetchChildren", isNodeExpanded: "isNodeExpanded", isNodeVisible: "isNodeVisible", itemDisabled: "itemDisabled", tagMapper: "tagMapper" }, outputs: { onFocus: "focus", onBlur: "blur", open: "open", opened: "opened", close: "close", closed: "closed", nodeExpand: "nodeExpand", nodeCollapse: "nodeCollapse", valueChange: "valueChange", removeTag: "removeTag", filterChange: "filterChange" }, host: { properties: { "class.k-disabled": "this.isDisabled", "class.k-loading": "this.isLoading", "attr.aria-invalid": "this.hostAriaInvalid", "attr.aria-busy": "this.isBusy", "attr.id": "this.id", "attr.dir": "this.direction", "attr.tabindex": "this.hostTabIndex", "attr.readonly": "this.isReadonly", "attr.aria-activedescendant": "this.ariaActiveDescendant", "class.k-readonly": "this.readonly" } }, providers: [
16911
17182
  LocalizationService,
16912
17183
  NavigationService,
16913
17184
  DataService,
@@ -16943,6 +17214,9 @@ class MultiSelectTreeComponent {
16943
17214
  i18n-clearTitle="kendo.multiselecttree.clearTitle|The title of the clear button"
16944
17215
  clearTitle="clear"
16945
17216
 
17217
+ i18n-chipListLabel="kendo.multiselecttree.chipListLabel|The accessible label of the tag list element that contains the selected items"
17218
+ chipListLabel="chip list"
17219
+
16946
17220
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
16947
17221
  checkAllText="Check all"
16948
17222
 
@@ -16957,6 +17231,9 @@ class MultiSelectTreeComponent {
16957
17231
 
16958
17232
  i18n-filterInputPlaceholder="kendo.multiselecttree.filterInputPlaceholder|The text for the input's placeholder when filtering is enabled"
16959
17233
  filterInputPlaceholder="Filter"
17234
+
17235
+ i18n-inputLabel="kendo.multiselecttree.inputLabel|The text set as aria-label on the combobox input element"
17236
+ inputLabel="Select items"
16960
17237
  >
16961
17238
  </ng-container>
16962
17239
  <kendo-taglist
@@ -16975,10 +17252,19 @@ class MultiSelectTreeComponent {
16975
17252
  [template]="tagTemplate"
16976
17253
  [groupTemplate]="groupTagTemplate"
16977
17254
  [disabledIndices]="disabledIndices"
17255
+ [ariaLabel]="messageFor('chipListLabel')"
16978
17256
  (removeTag)="handleRemoveTag($event)"
16979
17257
  >
16980
17258
  </kendo-taglist>
16981
- <span class="k-input-inner">
17259
+ <span class="k-input-inner"
17260
+ role="combobox"
17261
+ aria-haspopup="tree"
17262
+ [attr.aria-expanded]="isOpen"
17263
+ [attr.aria-autocomplete]="filterable ? 'list' : null"
17264
+ [attr.aria-controls]="isOpen ? treeViewId : null"
17265
+ [attr.aria-describedby]="tags?.length ? tagListId : null"
17266
+ [attr.aria-disabled]="disabled || null"
17267
+ [attr.aria-label]="messageFor('inputLabel')">
16982
17268
  @if (!tags || !tags.length) {
16983
17269
  <span
16984
17270
  class="k-input-value-text"
@@ -16996,7 +17282,6 @@ class MultiSelectTreeComponent {
16996
17282
  (click)="clearAll($event)"
16997
17283
  >
16998
17284
  <kendo-icon-wrapper
16999
- class="k-icon"
17000
17285
  name="x"
17001
17286
  [svgIcon]="xIcon"
17002
17287
  >
@@ -17019,6 +17304,7 @@ class MultiSelectTreeComponent {
17019
17304
  [title]="adaptiveTitle"
17020
17305
  [showTextInput]="filterable"
17021
17306
  [subtitle]="adaptiveSubtitle"
17307
+ [showListContainer]="false"
17022
17308
  (closePopup)="togglePopup(false)"
17023
17309
  (textInputChange)="onFilterChange($event)"
17024
17310
  [searchBarValue]="filter"
@@ -17035,7 +17321,7 @@ class MultiSelectTreeComponent {
17035
17321
  class="k-textbox k-input"
17036
17322
  [ngClass]="filterInputClasses"
17037
17323
  >
17038
- <span class="k-input-prefix">
17324
+ <span class="k-input-prefix k-input-prefix-horizontal">
17039
17325
  <kendo-icon-wrapper
17040
17326
  class="k-icon"
17041
17327
  name="search"
@@ -17043,6 +17329,7 @@ class MultiSelectTreeComponent {
17043
17329
  >
17044
17330
  </kendo-icon-wrapper>
17045
17331
  </span>
17332
+ <kendo-separator></kendo-separator>
17046
17333
  <input
17047
17334
  #filterInput
17048
17335
  (input)="handleFilterInputChange($event.target)"
@@ -17166,7 +17453,7 @@ class MultiSelectTreeComponent {
17166
17453
  @if (isOpen || isAdaptiveModeEnabled) {
17167
17454
  <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
17168
17455
  }
17169
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "component", type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: CheckAllDirective, selector: "[checkAll]", inputs: ["lastAction", "treeview", "checkedItems", "valueField", "checkAll"], outputs: ["checkedItemsChange"] }, { kind: "component", type: TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "hasCheckbox", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { kind: "directive", type: CheckDirective, selector: "[kendoMultiSelectTreeCheckable]", inputs: ["checkable", "valueField", "checkedItems"], outputs: ["checkedItemsChange"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }] });
17456
+ `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "\n [kendoDropDownListLocalizedMessages],\n [kendoDropDownTreeLocalizedMessages],\n [kendoComboBoxLocalizedMessages],\n [kendoMultiColumnComboBoxLocalizedMessages],\n [kendoAutoCompleteLocalizedMessages],\n [kendoMultiSelectLocalizedMessages],\n [kendoMultiSelectTreeLocalizedMessages]\n " }, { kind: "component", type: TagListComponent, selector: "kendo-taglist", inputs: ["tags", "textField", "valueField", "valueDepth", "focused", "template", "groupTemplate", "disabled", "tagPrefix", "id", "ariaLabel", "size", "rounded", "fillMode", "disabledIndices"], outputs: ["removeTag"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-adaptive-renderer", inputs: ["title", "subtitle", "showTextInput", "sharedPopupActionSheetTemplate", "text", "placeholder", "searchBarValue", "filterable", "showListContainer"], outputs: ["closePopup", "textInputChange", "navigate", "onExpand"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: FilterInputDirective, selector: "[filterInput]", inputs: ["filterInput"] }, { kind: "directive", type: EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: CheckAllDirective, selector: "[checkAll]", inputs: ["lastAction", "treeview", "checkedItems", "valueField", "checkAll"], outputs: ["checkedItemsChange"] }, { kind: "component", type: TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "loadMoreButtonRole", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "hasCheckbox", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { kind: "directive", type: CheckDirective, selector: "[kendoMultiSelectTreeCheckable]", inputs: ["checkable", "valueField", "checkedItems"], outputs: ["checkedItemsChange"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: SeparatorComponent, selector: "kendo-separator", inputs: ["orientation"] }] });
17170
17457
  }
17171
17458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: MultiSelectTreeComponent, decorators: [{
17172
17459
  type: Component,
@@ -17210,6 +17497,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17210
17497
  i18n-clearTitle="kendo.multiselecttree.clearTitle|The title of the clear button"
17211
17498
  clearTitle="clear"
17212
17499
 
17500
+ i18n-chipListLabel="kendo.multiselecttree.chipListLabel|The accessible label of the tag list element that contains the selected items"
17501
+ chipListLabel="chip list"
17502
+
17213
17503
  i18n-checkAllText="kendo.multiselecttree.checkAllText|The text displayed for the check-all checkbox"
17214
17504
  checkAllText="Check all"
17215
17505
 
@@ -17224,6 +17514,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17224
17514
 
17225
17515
  i18n-filterInputPlaceholder="kendo.multiselecttree.filterInputPlaceholder|The text for the input's placeholder when filtering is enabled"
17226
17516
  filterInputPlaceholder="Filter"
17517
+
17518
+ i18n-inputLabel="kendo.multiselecttree.inputLabel|The text set as aria-label on the combobox input element"
17519
+ inputLabel="Select items"
17227
17520
  >
17228
17521
  </ng-container>
17229
17522
  <kendo-taglist
@@ -17242,10 +17535,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17242
17535
  [template]="tagTemplate"
17243
17536
  [groupTemplate]="groupTagTemplate"
17244
17537
  [disabledIndices]="disabledIndices"
17538
+ [ariaLabel]="messageFor('chipListLabel')"
17245
17539
  (removeTag)="handleRemoveTag($event)"
17246
17540
  >
17247
17541
  </kendo-taglist>
17248
- <span class="k-input-inner">
17542
+ <span class="k-input-inner"
17543
+ role="combobox"
17544
+ aria-haspopup="tree"
17545
+ [attr.aria-expanded]="isOpen"
17546
+ [attr.aria-autocomplete]="filterable ? 'list' : null"
17547
+ [attr.aria-controls]="isOpen ? treeViewId : null"
17548
+ [attr.aria-describedby]="tags?.length ? tagListId : null"
17549
+ [attr.aria-disabled]="disabled || null"
17550
+ [attr.aria-label]="messageFor('inputLabel')">
17249
17551
  @if (!tags || !tags.length) {
17250
17552
  <span
17251
17553
  class="k-input-value-text"
@@ -17263,7 +17565,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17263
17565
  (click)="clearAll($event)"
17264
17566
  >
17265
17567
  <kendo-icon-wrapper
17266
- class="k-icon"
17267
17568
  name="x"
17268
17569
  [svgIcon]="xIcon"
17269
17570
  >
@@ -17286,6 +17587,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17286
17587
  [title]="adaptiveTitle"
17287
17588
  [showTextInput]="filterable"
17288
17589
  [subtitle]="adaptiveSubtitle"
17590
+ [showListContainer]="false"
17289
17591
  (closePopup)="togglePopup(false)"
17290
17592
  (textInputChange)="onFilterChange($event)"
17291
17593
  [searchBarValue]="filter"
@@ -17302,7 +17604,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17302
17604
  class="k-textbox k-input"
17303
17605
  [ngClass]="filterInputClasses"
17304
17606
  >
17305
- <span class="k-input-prefix">
17607
+ <span class="k-input-prefix k-input-prefix-horizontal">
17306
17608
  <kendo-icon-wrapper
17307
17609
  class="k-icon"
17308
17610
  name="search"
@@ -17310,6 +17612,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17310
17612
  >
17311
17613
  </kendo-icon-wrapper>
17312
17614
  </span>
17615
+ <kendo-separator></kendo-separator>
17313
17616
  <input
17314
17617
  #filterInput
17315
17618
  (input)="handleFilterInputChange($event.target)"
@@ -17435,17 +17738,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17435
17738
  }
17436
17739
  `,
17437
17740
  standalone: true,
17438
- imports: [LocalizedMessagesDirective, TagListComponent, IconWrapperComponent, NgTemplateOutlet, AdaptiveRendererComponent, NgClass, FilterInputDirective, EventsOutsideAngularDirective, TemplateContextDirective, CheckAllDirective, TreeViewComponent, CheckDirective, ResizeSensorComponent]
17741
+ imports: [LocalizedMessagesDirective, TagListComponent, IconWrapperComponent, NgTemplateOutlet, AdaptiveRendererComponent, NgClass, FilterInputDirective, EventsOutsideAngularDirective, TemplateContextDirective, CheckAllDirective, TreeViewComponent, CheckDirective, ResizeSensorComponent, SeparatorComponent]
17439
17742
  }]
17440
17743
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i2.PopupService }, { type: i0.Renderer2 }, { type: NavigationService }, { type: i0.NgZone }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: MultiSelectTreeLookupService }, { type: i7.AdaptiveService }], propDecorators: { isDisabled: [{
17441
17744
  type: HostBinding,
17442
17745
  args: ['class.k-disabled']
17443
- }, {
17444
- type: HostBinding,
17445
- args: ['attr.aria-disabled']
17446
- }], hostAriaAutocomplete: [{
17447
- type: HostBinding,
17448
- args: ['attr.aria-autocomplete']
17449
17746
  }], isLoading: [{
17450
17747
  type: HostBinding,
17451
17748
  args: ['class.k-loading']
@@ -17464,18 +17761,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
17464
17761
  }], hostTabIndex: [{
17465
17762
  type: HostBinding,
17466
17763
  args: ['attr.tabindex']
17467
- }], role: [{
17468
- type: HostBinding,
17469
- args: ['attr.role']
17470
- }], ariaHasPopup: [{
17471
- type: HostBinding,
17472
- args: ['attr.aria-haspopup']
17473
17764
  }], isReadonly: [{
17474
17765
  type: HostBinding,
17475
17766
  args: ['attr.readonly']
17476
- }], ariaDescribedBy: [{
17477
- type: HostBinding,
17478
- args: ['attr.aria-describedby']
17479
17767
  }], ariaActiveDescendant: [{
17480
17768
  type: HostBinding,
17481
17769
  args: ['attr.aria-activedescendant']
@@ -18039,7 +18327,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
18039
18327
  * <kendo-combobox>
18040
18328
  * <kendo-combobox-messages
18041
18329
  * noDataText="No items found"
18042
- * filterInputPlaceholder="Search items">
18330
+ * filterInputPlaceholder="Search items"
18331
+ * clearTitle="Clear selection">
18043
18332
  * </kendo-combobox-messages>
18044
18333
  * </kendo-combobox>
18045
18334
  *
@@ -18053,7 +18342,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImpo
18053
18342
  * <kendo-autocomplete>
18054
18343
  * <kendo-autocomplete-messages
18055
18344
  * noDataText="No items found"
18056
- * filterInputPlaceholder="Type to search">
18345
+ * filterInputPlaceholder="Type to search"
18346
+ * clearTitle="Clear input">
18057
18347
  * </kendo-autocomplete-messages>
18058
18348
  * </kendo-autocomplete>
18059
18349
  *