@progress/kendo-angular-dropdowns 21.0.0-develop.2 → 21.0.0-develop.21

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.
@@ -37,8 +37,8 @@ const packageMetadata = {
37
37
  productName: 'Kendo UI for Angular',
38
38
  productCode: 'KENDOUIANGULAR',
39
39
  productCodes: ['KENDOUIANGULAR'],
40
- publishDate: 1761752831,
41
- version: '21.0.0-develop.2',
40
+ publishDate: 1762426753,
41
+ version: '21.0.0-develop.21',
42
42
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
43
43
  };
44
44
 
@@ -1771,12 +1771,12 @@ class ListItemDirective {
1771
1771
  this.element = element;
1772
1772
  }
1773
1773
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ListItemDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1774
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ListItemDirective, isStandalone: true, selector: "\"li[role=option], li[role=group]\"", ngImport: i0 });
1774
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ListItemDirective, isStandalone: true, selector: "\"li[role=option], li[role=group], li[role=presentation]\"", ngImport: i0 });
1775
1775
  }
1776
1776
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ListItemDirective, decorators: [{
1777
1777
  type: Directive,
1778
1778
  args: [{
1779
- selector: '"li[role=option], li[role=group]"' // eslint-disable-line
1779
+ selector: '"li[role=option], li[role=group], li[role=presentation]"' // eslint-disable-line
1780
1780
  ,
1781
1781
  standalone: true
1782
1782
  }]
@@ -1938,7 +1938,19 @@ class ListComponent {
1938
1938
  allowCustom;
1939
1939
  defaultItem;
1940
1940
  set data(data) {
1941
- this._data = data[0] && data[0].header ? data.slice(0) : data;
1941
+ this._data = data[0]?.header ? data.slice(0) : data;
1942
+ if (this.dataService.grouped) {
1943
+ if (this.virtual) {
1944
+ const firstGroupItem = this.dataService.data.find(item => item.header && item.groupIndex === this.data[0].groupIndex);
1945
+ if (!this.data[0].header) {
1946
+ this._data = [firstGroupItem, ...this._data.slice(1)];
1947
+ }
1948
+ }
1949
+ this.groupedData = this._data.filter(item => item?.header);
1950
+ this.groupedData.forEach(group => {
1951
+ group.items = this._data.filter(item => !item.header && item.groupIndex === group.groupIndex);
1952
+ });
1953
+ }
1942
1954
  }
1943
1955
  get data() {
1944
1956
  return this._data;
@@ -1955,6 +1967,7 @@ class ListComponent {
1955
1967
  get size() {
1956
1968
  return this._size;
1957
1969
  }
1970
+ groupedData;
1958
1971
  rounded = 'medium';
1959
1972
  onClick = new EventEmitter();
1960
1973
  pageChange = new EventEmitter();
@@ -2034,9 +2047,6 @@ class ListComponent {
2034
2047
  this.scrollToFocused = !changes['data'].isFirstChange();
2035
2048
  }
2036
2049
  this.setOverflow();
2037
- this.zone.onStable.pipe(take(1)).subscribe(() => {
2038
- this.setGroupAttributes();
2039
- });
2040
2050
  }
2041
2051
  if (isChanged('virtual', changes, false)) {
2042
2052
  this.setOverflow();
@@ -2052,31 +2062,8 @@ class ListComponent {
2052
2062
  this.lastScrollTop = this.content.nativeElement.scrollTop;
2053
2063
  });
2054
2064
  });
2055
- this.setGroupAttributes();
2056
2065
  this.setOverflow();
2057
2066
  }
2058
- setGroupAttributes() {
2059
- const liItems = document.querySelectorAll('li');
2060
- let isGroup;
2061
- let childrenliItemsIds = [];
2062
- let firstGroupReached = false;
2063
- let previousGroup;
2064
- liItems.forEach((li, idx) => {
2065
- isGroup = li.getAttribute('role') === 'group';
2066
- if (!isGroup && firstGroupReached) {
2067
- this.renderer.setAttribute(li, 'aria-describedby', previousGroup.getAttribute('id'));
2068
- childrenliItemsIds.push(li.getAttribute('id'));
2069
- if (idx + 1 >= liItems.length || liItems[idx + 1]?.getAttribute('role') === 'group') {
2070
- this.renderer.setAttribute(previousGroup, 'aria-owns', childrenliItemsIds.join(' '));
2071
- childrenliItemsIds = [];
2072
- }
2073
- }
2074
- if (isGroup) {
2075
- firstGroupReached = true;
2076
- previousGroup = li;
2077
- }
2078
- });
2079
- }
2080
2067
  ngAfterViewChecked() {
2081
2068
  if (this.virtual) {
2082
2069
  this.positionItems();
@@ -2151,7 +2138,7 @@ class ListComponent {
2151
2138
  const item = this.firstVisibleItem();
2152
2139
  if (item) {
2153
2140
  let index;
2154
- if (item.getAttribute("role") === "group") {
2141
+ if (item.getAttribute("role") === "presentation") {
2155
2142
  index = parseInt(item.getAttribute("group-index"), 10);
2156
2143
  this.currentGroup = this.dataService.groupAt(index)?.value;
2157
2144
  }
@@ -2197,7 +2184,6 @@ class ListComponent {
2197
2184
  this.lastLoaded = end;
2198
2185
  this.pageChange.emit({ skip: start, take: this.pageSize });
2199
2186
  });
2200
- this.setGroupAttributes();
2201
2187
  }
2202
2188
  index(groupIndex, itemIndex) {
2203
2189
  return groupIndex > 0 ? (this.dataService.groupIndices[groupIndex - 1] + itemIndex) : itemIndex;
@@ -2208,6 +2194,9 @@ class ListComponent {
2208
2194
  getValue(dataItem) {
2209
2195
  return getter(dataItem, this.valueField);
2210
2196
  }
2197
+ generateGroupId(dataItem) {
2198
+ return `${this.optionPrefix}-${dataItem.groupIndex}-${dataItem.value.toString().split(' ').join('')}`;
2199
+ }
2211
2200
  isDisabled(index) {
2212
2201
  if (isPresent(this.virtual) && !this.dataService.grouped) {
2213
2202
  index += this.virtual.skip;
@@ -2318,15 +2307,6 @@ class ListComponent {
2318
2307
  this.renderer.setStyle(item.element.nativeElement, "transform", `translateY(${offsetY}px`);
2319
2308
  });
2320
2309
  }
2321
- /**
2322
- * Indicates whether the first group header from the data set is in the targeted virtual page.
2323
- */
2324
- firstGroupHeaderInTargetedPage(itemIndex) {
2325
- if (!isPresent(this.virtual)) {
2326
- return true;
2327
- }
2328
- return this.virtual.skip === 0 && (this.virtual.pageSize > itemIndex);
2329
- }
2330
2310
  setComponentClasses() {
2331
2311
  if (this.type === 'list') {
2332
2312
  this.renderer.addClass(this.wrapper.nativeElement, 'k-list');
@@ -2342,7 +2322,7 @@ class ListComponent {
2342
2322
  }
2343
2323
  }
2344
2324
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", 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 });
2345
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", 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, static: true }, { propertyName: "virtualContainer", first: true, predicate: ["virtualContainer"], descendants: true }, { propertyName: "items", predicate: ListItemDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
2325
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", 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: `
2346
2326
  <div *ngIf="defaultItem && !template"
2347
2327
  class="k-list-optionlabel"
2348
2328
  [ngClass]="{ 'k-disabled': isDisabledDefaultItem }"
@@ -2396,15 +2376,22 @@ class ListComponent {
2396
2376
  [class]="listContentClass"
2397
2377
  [style.maxHeight.px]="height"
2398
2378
  unselectable="on"
2399
- (scroll)="popupListScroll.emit($event)">
2379
+ (scroll)="popupListScroll.emit($event)"
2380
+ [attr.role]="dataService.grouped ? 'listbox' : null"
2381
+ [attr.id]="dataService.grouped ? id : null"
2382
+ [attr.aria-live]="dataService.grouped ? ariaLive : null"
2383
+ [attr.aria-multiselectable]="dataService.grouped ? isMultiselect : null"
2384
+ [attr.aria-hidden]="dataService.grouped ? !show : null"
2385
+ >
2400
2386
  <ul #list
2401
- role="listbox"
2387
+ *ngIf="!dataService.grouped"
2388
+ [attr.role]="'listbox'"
2402
2389
  [class]="listClass"
2403
2390
  [attr.id]="id"
2404
2391
  [attr.aria-live]="ariaLive"
2405
2392
  [attr.aria-multiselectable]="isMultiselect"
2406
2393
  [attr.aria-hidden]="!show">
2407
- <ng-template *ngIf="!dataService.grouped && show" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2394
+ <ng-container *ngFor="let dataItem of data; let itemIndex = index">
2408
2395
  <li
2409
2396
  role="option"
2410
2397
  kendoDropDownsSelectable
@@ -2440,73 +2427,81 @@ class ListComponent {
2440
2427
  </ng-template>
2441
2428
  <ng-template [ngIf]="!template"><span class="k-list-item-text">{{ getText(dataItem) }}</span></ng-template>
2442
2429
  </li>
2443
- </ng-template>
2444
- <ng-template *ngIf="dataService.grouped" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2445
- <li
2446
- #li
2447
- *ngIf="dataItem.header"
2448
- role="group"
2430
+ </ng-container>
2431
+ <kendo-resize-sensor
2432
+ *ngIf="!virtual"
2433
+ (resize)="listResize.emit()"
2434
+ >
2435
+ </kendo-resize-sensor>
2436
+ </ul>
2437
+
2438
+ <ng-container *ngIf="dataService.grouped" #list>
2439
+ <ul *ngFor="let dataItem of groupedData"
2440
+ #groupUl
2441
+ class="k-list-ul"
2442
+ [attr.role]="'group'"
2443
+ [attr.aria-labelledby]="generateGroupId(dataItem)"
2444
+ >
2445
+ <li *ngIf="dataItem.header"
2446
+ role="presentation"
2449
2447
  [class]="listGroupItemClass"
2450
- [class.k-table-alt-row]="isAltRow(itemIndex - 1)"
2448
+ [class.k-table-alt-row]="isAltRow(dataItem.index - 1)"
2451
2449
  [ngStyle]="{
2452
2450
  'height.px': virtual?.itemHeight,
2453
2451
  'minHeight.px' : virtual?.itemHeight,
2454
2452
  'boxSizing' : virtual ? 'border-box' : 'inherit'}"
2455
2453
  [attr.group-index]="dataItem.index"
2456
- [attr.id]="optionPrefix + '-' + dataItem.groupIndex + '-' + dataItem.value.toString().split(' ').join('')"
2457
- [attr.tabIndex]="-1"
2458
- [style.width.px]="rowWidth ?? null">
2459
- <span [class]="listGroupItemTextClass">
2460
- <ng-template *ngIf="groupTemplate"
2461
- [templateContext]="{
2462
- templateRef: groupTemplate.templateRef,
2463
- $implicit: dataItem.value
2464
- }">
2465
- </ng-template>
2466
- <ng-template [ngIf]="!groupTemplate">{{ dataItem.value }}</ng-template>
2467
- </span>
2454
+ [attr.id]="groupUl.getAttribute('aria-labelledby')"
2455
+ [style.width.px]="rowWidth ?? null"
2456
+ >
2457
+ <span [class]="listGroupItemTextClass">
2458
+ <ng-template *ngIf="groupTemplate"
2459
+ [templateContext]="{
2460
+ templateRef: groupTemplate.templateRef,
2461
+ $implicit: dataItem.value
2462
+ }">
2463
+ </ng-template>
2464
+ <ng-template [ngIf]="!groupTemplate">{{ dataItem.value }}</ng-template>
2465
+ </span>
2468
2466
  </li>
2469
- <li
2470
- #li
2471
- *ngIf="!dataItem.header"
2467
+ <li *ngFor="let item of dataItem.items"
2472
2468
  role="option"
2473
2469
  kendoDropDownsSelectable
2474
2470
  [height]="virtual?.itemHeight"
2475
- [index]="dataItem.offsetIndex"
2471
+ [index]="item.offsetIndex"
2476
2472
  [multipleSelection]="multipleSelection"
2477
- [attr.absolute-index]="dataItem.index"
2478
- [attr.id]="optionPrefix + '-' + (itemIndex - 1 - dataItem.groupIndex)"
2473
+ [attr.absolute-index]="item.index"
2474
+ [attr.id]="optionPrefix + '-' + (item.index - 1 - item.groupIndex)"
2479
2475
  [attr.tabIndex]="-1"
2480
- [attr.aria-selected]="isItemSelected(dataItem.offsetIndex)"
2476
+ [attr.aria-selected]="isItemSelected(item.offsetIndex)"
2481
2477
  [class]="listItemClass"
2482
2478
  [ngClass]="{
2483
- 'k-disabled': isDisabled(dataItem.offsetIndex),
2484
- 'k-table-alt-row': isAltRow(itemIndex - 1)
2479
+ 'k-disabled': isDisabled(item.offsetIndex),
2480
+ 'k-table-alt-row': isAltRow(item.index - 1)
2485
2481
  }"
2486
- [style.width.px]="rowWidth ?? null"
2487
- >
2482
+ [style.width.px]="rowWidth ?? null">
2488
2483
  <ng-template *ngIf="template"
2489
2484
  [templateContext]="{
2490
2485
  templateRef: template.templateRef,
2491
- $implicit: dataItem.value
2486
+ $implicit: item.value
2492
2487
  }">
2493
2488
  </ng-template>
2494
- <ng-template [ngIf]="!template"><span class="k-list-item-text">{{ getText(dataItem.value) }}</span></ng-template>
2489
+ <ng-template [ngIf]="!template"><span class="k-list-item-text">{{ getText(item.value) }}</span></ng-template>
2495
2490
  </li>
2496
- </ng-template>
2497
- <kendo-resize-sensor
2498
- *ngIf="!virtual"
2499
- (resize)="listResize.emit()"
2500
- >
2501
- </kendo-resize-sensor>
2502
- </ul>
2491
+ <kendo-resize-sensor
2492
+ *ngIf="!virtual"
2493
+ (resize)="listResize.emit()"
2494
+ >
2495
+ </kendo-resize-sensor>
2496
+ </ul>
2497
+ </ng-container>
2503
2498
  <div *ngIf="virtual" #virtualContainer class="k-height-container" role="presentation">
2504
2499
  <div [style.height.px]="scrollHeight">
2505
2500
  <kendo-resize-sensor (resize)="listResize.emit()"></kendo-resize-sensor>
2506
2501
  </div>
2507
2502
  </div>
2508
2503
  </div>
2509
- `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ListItemDirective, selector: "\"li[role=option], li[role=group]\"" }, { 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"] }] });
2504
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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"] }] });
2510
2505
  }
2511
2506
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ListComponent, decorators: [{
2512
2507
  type: Component,
@@ -2566,15 +2561,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2566
2561
  [class]="listContentClass"
2567
2562
  [style.maxHeight.px]="height"
2568
2563
  unselectable="on"
2569
- (scroll)="popupListScroll.emit($event)">
2564
+ (scroll)="popupListScroll.emit($event)"
2565
+ [attr.role]="dataService.grouped ? 'listbox' : null"
2566
+ [attr.id]="dataService.grouped ? id : null"
2567
+ [attr.aria-live]="dataService.grouped ? ariaLive : null"
2568
+ [attr.aria-multiselectable]="dataService.grouped ? isMultiselect : null"
2569
+ [attr.aria-hidden]="dataService.grouped ? !show : null"
2570
+ >
2570
2571
  <ul #list
2571
- role="listbox"
2572
+ *ngIf="!dataService.grouped"
2573
+ [attr.role]="'listbox'"
2572
2574
  [class]="listClass"
2573
2575
  [attr.id]="id"
2574
2576
  [attr.aria-live]="ariaLive"
2575
2577
  [attr.aria-multiselectable]="isMultiselect"
2576
2578
  [attr.aria-hidden]="!show">
2577
- <ng-template *ngIf="!dataService.grouped && show" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2579
+ <ng-container *ngFor="let dataItem of data; let itemIndex = index">
2578
2580
  <li
2579
2581
  role="option"
2580
2582
  kendoDropDownsSelectable
@@ -2610,66 +2612,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2610
2612
  </ng-template>
2611
2613
  <ng-template [ngIf]="!template"><span class="k-list-item-text">{{ getText(dataItem) }}</span></ng-template>
2612
2614
  </li>
2613
- </ng-template>
2614
- <ng-template *ngIf="dataService.grouped" ngFor let-dataItem let-itemIndex="index" [ngForOf]="data">
2615
- <li
2616
- #li
2617
- *ngIf="dataItem.header"
2618
- role="group"
2615
+ </ng-container>
2616
+ <kendo-resize-sensor
2617
+ *ngIf="!virtual"
2618
+ (resize)="listResize.emit()"
2619
+ >
2620
+ </kendo-resize-sensor>
2621
+ </ul>
2622
+
2623
+ <ng-container *ngIf="dataService.grouped" #list>
2624
+ <ul *ngFor="let dataItem of groupedData"
2625
+ #groupUl
2626
+ class="k-list-ul"
2627
+ [attr.role]="'group'"
2628
+ [attr.aria-labelledby]="generateGroupId(dataItem)"
2629
+ >
2630
+ <li *ngIf="dataItem.header"
2631
+ role="presentation"
2619
2632
  [class]="listGroupItemClass"
2620
- [class.k-table-alt-row]="isAltRow(itemIndex - 1)"
2633
+ [class.k-table-alt-row]="isAltRow(dataItem.index - 1)"
2621
2634
  [ngStyle]="{
2622
2635
  'height.px': virtual?.itemHeight,
2623
2636
  'minHeight.px' : virtual?.itemHeight,
2624
2637
  'boxSizing' : virtual ? 'border-box' : 'inherit'}"
2625
2638
  [attr.group-index]="dataItem.index"
2626
- [attr.id]="optionPrefix + '-' + dataItem.groupIndex + '-' + dataItem.value.toString().split(' ').join('')"
2627
- [attr.tabIndex]="-1"
2628
- [style.width.px]="rowWidth ?? null">
2629
- <span [class]="listGroupItemTextClass">
2630
- <ng-template *ngIf="groupTemplate"
2631
- [templateContext]="{
2632
- templateRef: groupTemplate.templateRef,
2633
- $implicit: dataItem.value
2634
- }">
2635
- </ng-template>
2636
- <ng-template [ngIf]="!groupTemplate">{{ dataItem.value }}</ng-template>
2637
- </span>
2639
+ [attr.id]="groupUl.getAttribute('aria-labelledby')"
2640
+ [style.width.px]="rowWidth ?? null"
2641
+ >
2642
+ <span [class]="listGroupItemTextClass">
2643
+ <ng-template *ngIf="groupTemplate"
2644
+ [templateContext]="{
2645
+ templateRef: groupTemplate.templateRef,
2646
+ $implicit: dataItem.value
2647
+ }">
2648
+ </ng-template>
2649
+ <ng-template [ngIf]="!groupTemplate">{{ dataItem.value }}</ng-template>
2650
+ </span>
2638
2651
  </li>
2639
- <li
2640
- #li
2641
- *ngIf="!dataItem.header"
2652
+ <li *ngFor="let item of dataItem.items"
2642
2653
  role="option"
2643
2654
  kendoDropDownsSelectable
2644
2655
  [height]="virtual?.itemHeight"
2645
- [index]="dataItem.offsetIndex"
2656
+ [index]="item.offsetIndex"
2646
2657
  [multipleSelection]="multipleSelection"
2647
- [attr.absolute-index]="dataItem.index"
2648
- [attr.id]="optionPrefix + '-' + (itemIndex - 1 - dataItem.groupIndex)"
2658
+ [attr.absolute-index]="item.index"
2659
+ [attr.id]="optionPrefix + '-' + (item.index - 1 - item.groupIndex)"
2649
2660
  [attr.tabIndex]="-1"
2650
- [attr.aria-selected]="isItemSelected(dataItem.offsetIndex)"
2661
+ [attr.aria-selected]="isItemSelected(item.offsetIndex)"
2651
2662
  [class]="listItemClass"
2652
2663
  [ngClass]="{
2653
- 'k-disabled': isDisabled(dataItem.offsetIndex),
2654
- 'k-table-alt-row': isAltRow(itemIndex - 1)
2664
+ 'k-disabled': isDisabled(item.offsetIndex),
2665
+ 'k-table-alt-row': isAltRow(item.index - 1)
2655
2666
  }"
2656
- [style.width.px]="rowWidth ?? null"
2657
- >
2667
+ [style.width.px]="rowWidth ?? null">
2658
2668
  <ng-template *ngIf="template"
2659
2669
  [templateContext]="{
2660
2670
  templateRef: template.templateRef,
2661
- $implicit: dataItem.value
2671
+ $implicit: item.value
2662
2672
  }">
2663
2673
  </ng-template>
2664
- <ng-template [ngIf]="!template"><span class="k-list-item-text">{{ getText(dataItem.value) }}</span></ng-template>
2674
+ <ng-template [ngIf]="!template"><span class="k-list-item-text">{{ getText(item.value) }}</span></ng-template>
2665
2675
  </li>
2666
- </ng-template>
2667
- <kendo-resize-sensor
2668
- *ngIf="!virtual"
2669
- (resize)="listResize.emit()"
2670
- >
2671
- </kendo-resize-sensor>
2672
- </ul>
2676
+ <kendo-resize-sensor
2677
+ *ngIf="!virtual"
2678
+ (resize)="listResize.emit()"
2679
+ >
2680
+ </kendo-resize-sensor>
2681
+ </ul>
2682
+ </ng-container>
2673
2683
  <div *ngIf="virtual" #virtualContainer class="k-height-container" role="presentation">
2674
2684
  <div [style.height.px]="scrollHeight">
2675
2685
  <kendo-resize-sensor (resize)="listResize.emit()"></kendo-resize-sensor>
@@ -2750,10 +2760,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2750
2760
  args: ['content', { static: true }]
2751
2761
  }], list: [{
2752
2762
  type: ViewChild,
2753
- args: ['list', { static: true }]
2763
+ args: ['list']
2754
2764
  }], virtualContainer: [{
2755
2765
  type: ViewChild,
2756
- args: ['virtualContainer', { static: false }]
2766
+ args: ['virtualContainer']
2757
2767
  }] } });
2758
2768
 
2759
2769
  /**
@@ -4225,7 +4235,9 @@ class AutoCompleteComponent {
4225
4235
  }
4226
4236
  this.subs.add(this.popupRef.popupOpen.subscribe(() => {
4227
4237
  this.cdr.detectChanges();
4228
- setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
4238
+ if (!this.dataService.grouped) {
4239
+ setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
4240
+ }
4229
4241
  this.optionsList.scrollToItem(this.selectionService.focused);
4230
4242
  this.selectionService.focus(this.selectionService.focused);
4231
4243
  this.opened.emit();
@@ -4303,7 +4315,9 @@ class AutoCompleteComponent {
4303
4315
  openActionSheet() {
4304
4316
  this.actionSheet.toggle(true);
4305
4317
  this.cdr.detectChanges();
4306
- setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
4318
+ if (!this.dataService.grouped) {
4319
+ setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
4320
+ }
4307
4321
  this.adaptiveTitle = setActionSheetTitle(this.searchbar.input, this.adaptiveTitle);
4308
4322
  this.cdr.detectChanges();
4309
4323
  this.opened.emit();
@@ -6249,7 +6263,9 @@ class ComboBoxComponent extends MultiTabStop {
6249
6263
  }
6250
6264
  this.popupRef.popupOpen.subscribe(() => {
6251
6265
  this.cdr.detectChanges();
6252
- setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
6266
+ if (!this.dataService.grouped) {
6267
+ setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
6268
+ }
6253
6269
  this.optionsList.scrollToItem(this.selectionService.focused);
6254
6270
  this.selectionService.focus(this.selectionService.focused);
6255
6271
  this.opened.emit();
@@ -6337,7 +6353,9 @@ class ComboBoxComponent extends MultiTabStop {
6337
6353
  this.windowSize = this.adaptiveService.size;
6338
6354
  this.actionSheet.toggle(true);
6339
6355
  this.cdr.detectChanges();
6340
- setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
6356
+ if (!this.dataService.grouped) {
6357
+ setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
6358
+ }
6341
6359
  this.adaptiveTitle = setActionSheetTitle(this.searchbar.input, this.adaptiveTitle);
6342
6360
  this.cdr.detectChanges();
6343
6361
  this.opened.emit();
@@ -7918,14 +7936,11 @@ class DropDownListComponent {
7918
7936
  this.renderer.setAttribute(popupWrapper, 'role', 'region');
7919
7937
  this.renderer.setAttribute(popupWrapper, 'aria-label', this.messageFor('popupLabel'));
7920
7938
  }
7921
- const listBox = popupWrapper.querySelector('ul.k-list-ul');
7922
- const ariaLabel = this.wrapper.nativeElement.getAttribute('aria-labelledby');
7923
- if (ariaLabel) {
7924
- listBox.setAttribute('aria-labelledby', ariaLabel);
7925
- }
7926
7939
  this.subs.add(this.popupRef.popupOpen.subscribe(() => {
7927
7940
  this.cdr.detectChanges();
7928
- setListBoxAriaLabelledBy(this.optionsList, this.wrapper, this.renderer);
7941
+ if (!this.dataService.grouped) {
7942
+ setListBoxAriaLabelledBy(this.optionsList, this.wrapper, this.renderer);
7943
+ }
7929
7944
  this.setAriaactivedescendant();
7930
7945
  this.optionsList.scrollToItem(this.selectionService.focused);
7931
7946
  this.selectionService.focus(this.selectionService.focused);
@@ -8384,7 +8399,9 @@ class DropDownListComponent {
8384
8399
  this.cdr.detectChanges();
8385
8400
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-expanded', 'true');
8386
8401
  this.renderer.setAttribute(this.wrapper.nativeElement, 'aria-controls', this.listBoxId);
8387
- setListBoxAriaLabelledBy(this.optionsList, this.wrapper, this.renderer);
8402
+ if (!this.dataService.grouped) {
8403
+ setListBoxAriaLabelledBy(this.optionsList, this.wrapper, this.renderer);
8404
+ }
8388
8405
  this.setAriaactivedescendant();
8389
8406
  this.adaptiveTitle = setActionSheetTitle(this.wrapper, this.adaptiveTitle);
8390
8407
  this.cdr.detectChanges();
@@ -10927,7 +10944,9 @@ class MultiSelectComponent {
10927
10944
  popupWrapper.setAttribute("dir", this.direction);
10928
10945
  this.popupRef.popupOpen.subscribe(() => {
10929
10946
  this.cdr.detectChanges();
10930
- setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
10947
+ if (!this.dataService.grouped) {
10948
+ setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
10949
+ }
10931
10950
  this.optionsList.scrollToItem(this.selectionService.focused);
10932
10951
  this.selectionService.focus(this.selectionService.focused);
10933
10952
  this.opened.emit();
@@ -10988,7 +11007,9 @@ class MultiSelectComponent {
10988
11007
  // Stores the current value state until the user either accepts or cancels it
10989
11008
  this._valueHolder = [...this.value];
10990
11009
  this.cdr.detectChanges();
10991
- setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
11010
+ if (!this.dataService.grouped) {
11011
+ setListBoxAriaLabelledBy(this.optionsList, this.searchbar.input, this.renderer);
11012
+ }
10992
11013
  this.adaptiveTitle = setActionSheetTitle(this.searchbar.input, this.adaptiveTitle);
10993
11014
  this.cdr.detectChanges();
10994
11015
  this.opened.emit();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-dropdowns",
3
- "version": "21.0.0-develop.2",
3
+ "version": "21.0.0-develop.21",
4
4
  "description": "A wide variety of native Angular dropdown components including AutoComplete, ComboBox, DropDownList, DropDownTree, MultiColumnComboBox, MultiSelect, and MultiSelectTree ",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -100,7 +100,7 @@
100
100
  "package": {
101
101
  "productName": "Kendo UI for Angular",
102
102
  "productCode": "KENDOUIANGULAR",
103
- "publishDate": 1761752831,
103
+ "publishDate": 1762426753,
104
104
  "licensingDocsUrl": "https://www.telerik.com/kendo-angular-ui/my-license/"
105
105
  }
106
106
  },
@@ -111,18 +111,18 @@
111
111
  "@angular/forms": "18 - 20",
112
112
  "@angular/platform-browser": "18 - 20",
113
113
  "@progress/kendo-licensing": "^1.7.0",
114
- "@progress/kendo-angular-common": "21.0.0-develop.2",
115
- "@progress/kendo-angular-utils": "21.0.0-develop.2",
116
- "@progress/kendo-angular-l10n": "21.0.0-develop.2",
117
- "@progress/kendo-angular-navigation": "21.0.0-develop.2",
118
- "@progress/kendo-angular-popup": "21.0.0-develop.2",
119
- "@progress/kendo-angular-icons": "21.0.0-develop.2",
120
- "@progress/kendo-angular-treeview": "21.0.0-develop.2",
114
+ "@progress/kendo-angular-common": "21.0.0-develop.21",
115
+ "@progress/kendo-angular-utils": "21.0.0-develop.21",
116
+ "@progress/kendo-angular-l10n": "21.0.0-develop.21",
117
+ "@progress/kendo-angular-navigation": "21.0.0-develop.21",
118
+ "@progress/kendo-angular-popup": "21.0.0-develop.21",
119
+ "@progress/kendo-angular-icons": "21.0.0-develop.21",
120
+ "@progress/kendo-angular-treeview": "21.0.0-develop.21",
121
121
  "rxjs": "^6.5.3 || ^7.0.0"
122
122
  },
123
123
  "dependencies": {
124
124
  "tslib": "^2.3.1",
125
- "@progress/kendo-angular-schematics": "21.0.0-develop.2",
125
+ "@progress/kendo-angular-schematics": "21.0.0-develop.21",
126
126
  "@progress/kendo-common": "^1.0.1",
127
127
  "node-html-parser": "^7.0.1"
128
128
  },
@@ -5,9 +5,9 @@ const schematics_1 = require("@angular-devkit/schematics");
5
5
  function default_1(options) {
6
6
  const finalOptions = Object.assign(Object.assign({}, options), { mainNgModule: 'DropDownsModule', package: 'dropdowns', peerDependencies: {
7
7
  // peers of the treeview
8
- '@progress/kendo-angular-inputs': '21.0.0-develop.2',
8
+ '@progress/kendo-angular-inputs': '21.0.0-develop.21',
9
9
  // peers of inputs
10
- '@progress/kendo-angular-intl': '21.0.0-develop.2',
10
+ '@progress/kendo-angular-intl': '21.0.0-develop.21',
11
11
  '@progress/kendo-drawing': '^1.17.2',
12
12
  // Peer dependency of icons
13
13
  '@progress/kendo-svg-icons': '^4.0.0'