@progress/kendo-angular-grid 14.1.0-develop.9 → 14.1.1-develop.1

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.
Files changed (30) hide show
  1. package/column-menu/column-menu-container.component.d.ts +4 -3
  2. package/column-menu/column-menu-item.component.d.ts +7 -1
  3. package/column-menu/column-menu-item.directive.d.ts +15 -3
  4. package/column-menu/column-menu.service.d.ts +5 -0
  5. package/dragdrop/context-types.d.ts +1 -0
  6. package/esm2020/column-menu/column-menu-autosize-all.component.mjs +1 -1
  7. package/esm2020/column-menu/column-menu-autosize.component.mjs +1 -1
  8. package/esm2020/column-menu/column-menu-chooser.component.mjs +1 -1
  9. package/esm2020/column-menu/column-menu-container.component.mjs +18 -7
  10. package/esm2020/column-menu/column-menu-filter.component.mjs +1 -1
  11. package/esm2020/column-menu/column-menu-item.component.mjs +4 -1
  12. package/esm2020/column-menu/column-menu-item.directive.mjs +13 -3
  13. package/esm2020/column-menu/column-menu-lock.component.mjs +1 -1
  14. package/esm2020/column-menu/column-menu-position.component.mjs +1 -1
  15. package/esm2020/column-menu/column-menu-sort.component.mjs +1 -1
  16. package/esm2020/column-menu/column-menu-stick.component.mjs +1 -1
  17. package/esm2020/column-menu/column-menu.component.mjs +16 -8
  18. package/esm2020/grid.component.mjs +24 -0
  19. package/esm2020/grouping/group-panel.component.mjs +213 -23
  20. package/esm2020/grouping/group.module.mjs +6 -5
  21. package/esm2020/localization/messages.mjs +5 -1
  22. package/esm2020/package-metadata.mjs +2 -2
  23. package/esm2020/pager/pager.component.mjs +4 -0
  24. package/fesm2015/progress-kendo-angular-grid.mjs +302 -50
  25. package/fesm2020/progress-kendo-angular-grid.mjs +298 -50
  26. package/grouping/group-panel.component.d.ts +25 -4
  27. package/grouping/group.module.d.ts +2 -1
  28. package/localization/messages.d.ts +11 -7
  29. package/package.json +16 -16
  30. package/schematics/ngAdd/index.js +3 -3
@@ -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 { InjectionToken, Component, HostBinding, Input, EventEmitter, Injectable, Directive, Optional, QueryList, isDevMode, ContentChildren, ContentChild, forwardRef, SkipSelf, Host, Inject, Output, SecurityContext, HostListener, ChangeDetectionStrategy, ElementRef, ViewChild, ViewChildren, Self, TemplateRef, Pipe, ViewEncapsulation, NgModule } from '@angular/core';
6
+ import { InjectionToken, Component, HostBinding, Input, EventEmitter, Injectable, Directive, Optional, QueryList, isDevMode, ContentChildren, ContentChild, forwardRef, SkipSelf, Host, Inject, Output, SecurityContext, HostListener, ChangeDetectionStrategy, ElementRef, ViewChild, TemplateRef, ViewChildren, Self, NgZone, Pipe, ViewEncapsulation, NgModule } from '@angular/core';
7
7
  import * as i1$1 from '@progress/kendo-angular-common';
8
8
  import { isDocumentAvailable, Keys, isPresent as isPresent$1, closest as closest$1, isFocusable as isFocusable$1, anyChanged, isChanged as isChanged$1, KendoInput, guid, hasObservers, ResizeSensorComponent, shouldShowValidationUI, DraggableModule, EventsModule, ResizeSensorModule, WatermarkModule } from '@progress/kendo-angular-common';
9
9
  import { merge, of, Subject, from, Subscription, interval, fromEvent, zip as zip$1, BehaviorSubject, Observable } from 'rxjs';
@@ -18,7 +18,7 @@ import { NG_VALUE_ACCESSOR, FormControl, FormGroup, ReactiveFormsModule, FormsMo
18
18
  import { validatePackage } from '@progress/kendo-licensing';
19
19
  import * as i1$2 from '@progress/kendo-angular-popup';
20
20
  import { PopupModule } from '@progress/kendo-angular-popup';
21
- import { plusIcon, cancelIcon, lockIcon, unlockIcon, insertMiddleIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltRightIcon, caretAltToRightIcon, sortDescSmallIcon, sortAscSmallIcon, filterIcon, stickIcon, unstickIcon, setColumnPositionIcon, columnsIcon, maxWidthIcon, displayInlineFlexIcon, slidersIcon, moreVerticalIcon, filterClearIcon, reorderIcon, caretAltDownIcon, minusIcon } from '@progress/kendo-svg-icons';
21
+ import { plusIcon, cancelIcon, lockIcon, unlockIcon, insertMiddleIcon, caretAltLeftIcon, caretAltToLeftIcon, caretAltRightIcon, caretAltToRightIcon, arrowLeftIcon, arrowRightIcon, sortDescSmallIcon, sortAscSmallIcon, filterIcon, stickIcon, unstickIcon, setColumnPositionIcon, columnsIcon, maxWidthIcon, displayInlineFlexIcon, slidersIcon, moreVerticalIcon, filterClearIcon, reorderIcon, caretAltDownIcon, minusIcon } from '@progress/kendo-svg-icons';
22
22
  import * as i1$3 from '@angular/platform-browser';
23
23
  import * as i3 from '@progress/kendo-angular-icons';
24
24
  import { IconsModule } from '@progress/kendo-angular-icons';
@@ -4474,8 +4474,8 @@ const packageMetadata = {
4474
4474
  name: '@progress/kendo-angular-grid',
4475
4475
  productName: 'Kendo UI for Angular',
4476
4476
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
4477
- publishDate: 1699436265,
4478
- version: '14.1.0-develop.9',
4477
+ publishDate: 1699865049,
4478
+ version: '14.1.1-develop.1',
4479
4479
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4480
4480
  };
4481
4481
 
@@ -8030,21 +8030,25 @@ class PagerComponent {
8030
8030
  }
8031
8031
  }
8032
8032
  navigateToPreviousPage(e) {
8033
+ e.preventDefault();
8033
8034
  if (this.shouldTriggerPageChange(e.target, this.currentPage > 1)) {
8034
8035
  this.pagerContext.prevPage();
8035
8036
  }
8036
8037
  }
8037
8038
  navigateToNextPage(e) {
8039
+ e.preventDefault();
8038
8040
  if (this.shouldTriggerPageChange(e.target, this.currentPage < this.totalPages)) {
8039
8041
  this.pagerContext.nextPage();
8040
8042
  }
8041
8043
  }
8042
8044
  navigateToFirstPage(e) {
8045
+ e.preventDefault();
8043
8046
  if (this.shouldTriggerPageChange(e.target, this.currentPage > 1)) {
8044
8047
  this.pagerContext.changePage(0);
8045
8048
  }
8046
8049
  }
8047
8050
  navigateToLastPage(e) {
8051
+ e.preventDefault();
8048
8052
  if (this.shouldTriggerPageChange(e.target, this.currentPage < this.totalPages)) {
8049
8053
  this.pagerContext.changePage(this.totalPages - 1);
8050
8054
  }
@@ -8523,17 +8527,53 @@ const indicatorRules = or(overSameTarget, and(overLastTarget, isLastGroup));
8523
8527
  * @hidden
8524
8528
  */
8525
8529
  class GroupPanelComponent {
8526
- constructor(hint, cue, groupInfoService, ctx, cd) {
8530
+ constructor(hint, cue, groupInfoService, ctx, cd, popupService, ngZone, renderer) {
8527
8531
  this.hint = hint;
8528
8532
  this.cue = cue;
8529
8533
  this.groupInfoService = groupInfoService;
8530
8534
  this.ctx = ctx;
8531
8535
  this.cd = cd;
8536
+ this.popupService = popupService;
8537
+ this.ngZone = ngZone;
8538
+ this.renderer = renderer;
8532
8539
  this.change = new EventEmitter();
8533
8540
  this.groups = [];
8534
8541
  this.dropTargets = new QueryList();
8535
8542
  this.groupTitles = [];
8536
- this.subscription = new Subscription();
8543
+ this.isChipMenuOpen = false;
8544
+ this.rtl = false;
8545
+ this.arrowLeftIcon = arrowLeftIcon;
8546
+ this.arrowRightIcon = arrowRightIcon;
8547
+ this.handleKeyDown = (e) => {
8548
+ if (e.keyCode === Keys.ArrowDown || e.keyCode === Keys.ArrowUp) {
8549
+ e.preventDefault();
8550
+ const relatedItemType = e.target.matches(':first-child') ? 'next' : 'previous';
8551
+ this.activateMenuItem(e.target, relatedItemType);
8552
+ }
8553
+ else if (e.keyCode === Keys.Escape) {
8554
+ this.destroyMenu(true);
8555
+ }
8556
+ else if (e.keyCode === Keys.Tab) {
8557
+ this.destroyMenu(true);
8558
+ }
8559
+ else if (e.keyCode === Keys.Space || e.keyCode === Keys.Enter) {
8560
+ this.handleMenuClick(e);
8561
+ }
8562
+ };
8563
+ this.handleClick = (e) => {
8564
+ e.preventDefault();
8565
+ const menuItemEl = e.target.closest('.k-menu-item');
8566
+ if (!menuItemEl.matches('[aria-disabled="true"]')) {
8567
+ this.handleMenuClick(e);
8568
+ return;
8569
+ }
8570
+ if (menuItemEl.getAttribute('tabindex') === '0') {
8571
+ return;
8572
+ }
8573
+ const activeMenuItem = menuItemEl.closest('.k-menu-group').querySelector('[tabindex="0"]');
8574
+ const relatedItemType = activeMenuItem.matches(':first-child') ? 'next' : 'previous';
8575
+ this.activateMenuItem(activeMenuItem, relatedItemType);
8576
+ };
8537
8577
  }
8538
8578
  get groupHeaderClass() {
8539
8579
  return true;
@@ -8544,13 +8584,18 @@ class GroupPanelComponent {
8544
8584
  get text() {
8545
8585
  return this.emptyText ? this.emptyText : this.ctx.localization.get('groupPanelEmpty');
8546
8586
  }
8587
+ get gridId() {
8588
+ var _a;
8589
+ return (_a = this.ctx.grid) === null || _a === void 0 ? void 0 : _a.ariaRootId;
8590
+ }
8547
8591
  ngAfterViewInit() {
8592
+ this.subscription = this.ctx.localization.changes.subscribe(({ rtl }) => {
8593
+ this.rtl = rtl;
8594
+ this.cd.markForCheck();
8595
+ });
8548
8596
  this.subscription.add(observe(this.dropTargets)
8549
8597
  .subscribe(this.attachTargets.bind(this)));
8550
8598
  }
8551
- ngOnInit() {
8552
- this.subscription.add(this.ctx.localization.changes.subscribe(() => this.cd.markForCheck()));
8553
- }
8554
8599
  ngDoCheck() {
8555
8600
  const currentTitles = this.groups.map(group => this.groupInfoService.groupTitle(group));
8556
8601
  if (currentTitles.length !== this.groupTitles.length || currentTitles.some((current, idx) => current !== this.groupTitles[idx])) {
@@ -8565,6 +8610,7 @@ class GroupPanelComponent {
8565
8610
  if (this.targetSubscription) {
8566
8611
  this.targetSubscription.unsubscribe();
8567
8612
  }
8613
+ this.destroyMenu();
8568
8614
  }
8569
8615
  messageFor(token) {
8570
8616
  return this.ctx.localization.get(token);
@@ -8594,6 +8640,42 @@ class GroupPanelComponent {
8594
8640
  remove(group) {
8595
8641
  this.change.emit(this.groups.filter(x => x.field !== group.field));
8596
8642
  }
8643
+ toggleMenu(chip, first, last, field) {
8644
+ const anchor = chip.element.nativeElement.querySelector('.k-chip-action');
8645
+ if (this.popupRef) {
8646
+ const popupAnchor = this.popupRef.popup.instance.anchor;
8647
+ this.destroyMenu();
8648
+ if (anchor === popupAnchor) {
8649
+ return;
8650
+ }
8651
+ }
8652
+ this.first = first;
8653
+ this.last = last;
8654
+ const direction = this.ctx.localization.rtl ? 'right' : 'left';
8655
+ this.popupRef = this.popupService.open({
8656
+ anchor: anchor,
8657
+ content: this.defaultTemplate,
8658
+ anchorAlign: { vertical: 'bottom', horizontal: direction },
8659
+ popupAlign: { vertical: 'top', horizontal: direction },
8660
+ positionMode: 'absolute'
8661
+ });
8662
+ this.activeItem = this.dropTargets.find(dt => dt.context.field === field);
8663
+ this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
8664
+ const menuItems = Array.from(this.popupRef.popupElement.querySelectorAll('.k-menu-item'));
8665
+ this.activateMenuItem(menuItems[1], 'previous');
8666
+ this.popupSubs = this.popupRef.popupAnchorViewportLeave.subscribe(() => {
8667
+ this.destroyMenu(true);
8668
+ });
8669
+ if (isUniversal()) {
8670
+ return;
8671
+ }
8672
+ this.ngZone.runOutsideAngular(() => {
8673
+ this.popupSubs.add(fromEvent(document, 'click')
8674
+ .pipe(filter((event) => !closest(event.target, (node) => node === this.popupRef.popupElement || (node.matches && node.matches('.k-chip-action'))))).subscribe(() => {
8675
+ this.destroyMenu();
8676
+ }));
8677
+ });
8678
+ }
8597
8679
  canDrop(draggable, target) {
8598
8680
  const isIndicator = draggable.type === 'groupIndicator';
8599
8681
  const rules = isIndicator
@@ -8616,7 +8698,10 @@ class GroupPanelComponent {
8616
8698
  .reduce((acc, target) => merge(acc, target.leave), from([]));
8617
8699
  const dropStream = this.dropTargets
8618
8700
  .reduce((acc, target) => merge(acc, target.drop), from([]));
8619
- this.targetSubscription.add(enterStream.pipe(tap(_ => this.hint.removeLock()), filter(({ draggable, target }) => this.canDrop(draggable.context, target.context)), tap(this.enter.bind(this)), switchMapTo(dropStream.pipe(takeUntil(leaveStream.pipe(tap(this.leave.bind(this))))))).subscribe(this.drop.bind(this)));
8701
+ this.targetSubscription.add(enterStream.pipe(tap(_ => {
8702
+ this.hint.removeLock();
8703
+ this.destroyMenu();
8704
+ }), filter(({ draggable, target }) => this.canDrop(draggable.context, target.context)), tap(this.enter.bind(this)), switchMapTo(dropStream.pipe(takeUntil(leaveStream.pipe(tap(this.leave.bind(this))))))).subscribe(this.drop.bind(this)));
8620
8705
  }
8621
8706
  enter({ draggable, target }) {
8622
8707
  this.hint.enable();
@@ -8635,9 +8720,47 @@ class GroupPanelComponent {
8635
8720
  const index = this.dropTargets.toArray().indexOf(target);
8636
8721
  this.insert(field, index);
8637
8722
  }
8723
+ destroyMenu(focusAnchor) {
8724
+ if (this.popupRef) {
8725
+ this.popupRef.close();
8726
+ this.popupRef = null;
8727
+ this.popupSubs && this.popupSubs.unsubscribe();
8728
+ focusAnchor && this.activeItem.context.target.focus();
8729
+ }
8730
+ }
8731
+ activateMenuItem(item, relatedItemType) {
8732
+ this.renderer.setAttribute(item, 'tabindex', '-1');
8733
+ this.renderer.removeClass(item, 'k-focus');
8734
+ const relatedItem = item[`${relatedItemType}ElementSibling`];
8735
+ this.renderer.setAttribute(relatedItem, 'tabindex', '0');
8736
+ this.renderer.addClass(relatedItem, 'k-focus');
8737
+ this.ngZone.runOutsideAngular(() => setTimeout(() => relatedItem.focus()));
8738
+ }
8739
+ handleMenuClick(e) {
8740
+ e.preventDefault();
8741
+ if (e.target.getAttribute('aria-disabled') !== 'true') {
8742
+ const chips = this.dropTargets.toArray().slice(0, this.dropTargets.length - 1);
8743
+ let groupChip, groupChipIndex;
8744
+ for (let i = 0; i < chips.length; i++) {
8745
+ if (chips[i].element.nativeElement === this.popupRef.popup.instance.anchor.closest('.k-chip')) {
8746
+ groupChip = chips[i];
8747
+ groupChipIndex = i;
8748
+ break;
8749
+ }
8750
+ }
8751
+ const isPrev = e.target.closest('.k-menu-item').matches(':first-child');
8752
+ if (isPrev && groupChipIndex > 0) {
8753
+ this.insert(groupChip.context.field, groupChipIndex - 1);
8754
+ }
8755
+ else if (!isPrev && groupChipIndex < chips.length - 1) {
8756
+ this.insert(groupChip.context.field, groupChipIndex + 1);
8757
+ }
8758
+ this.destroyMenu(true);
8759
+ }
8760
+ }
8638
8761
  }
8639
- GroupPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupPanelComponent, deps: [{ token: DragHintService }, { token: DropCueService }, { token: GroupInfoService }, { token: ContextService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
8640
- GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: { text: "text", navigable: "navigable", groups: "groups" }, outputs: { change: "change" }, host: { properties: { "class.k-grouping-header": "this.groupHeaderClass" } }, viewQueries: [{ propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], ngImport: i0, template: `
8762
+ GroupPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupPanelComponent, deps: [{ token: DragHintService }, { token: DropCueService }, { token: GroupInfoService }, { token: ContextService }, { token: i0.ChangeDetectorRef }, { token: i1$2.PopupService }, { token: i0.NgZone }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
8763
+ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: { text: "text", navigable: "navigable", groups: "groups" }, outputs: { change: "change" }, host: { properties: { "class.k-grouping-header": "this.groupHeaderClass" } }, viewQueries: [{ propertyName: "defaultTemplate", first: true, predicate: ["defaultTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "dropTargets", predicate: DropTargetDirective, descendants: true }], ngImport: i0, template: `
8641
8764
  <div
8642
8765
  *ngIf="groups.length === 0"
8643
8766
  class="k-grouping-drop-container"
@@ -8654,7 +8777,8 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
8654
8777
  [navigable]="navigable"
8655
8778
  role="none">
8656
8779
  <kendo-chip
8657
- *ngFor="let group of groups; let index = index;"
8780
+ *ngFor="let group of groups; let index = index; let first = first; let last = last;"
8781
+ #chip
8658
8782
  kendoDropTarget
8659
8783
  kendoDraggableColumn
8660
8784
  kendoDraggable
@@ -8663,14 +8787,21 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
8663
8787
  [context]="{
8664
8788
  field: group.field,
8665
8789
  type: 'groupIndicator',
8666
- hint: groupTitles[index]
8790
+ hint: groupTitles[index],
8791
+ target: chip
8667
8792
  }"
8668
8793
  [label]="groupTitles[index]"
8669
8794
  [removable]="true"
8795
+ [hasMenu]="true"
8670
8796
  [icon]="getDirectionIcon(group)"
8671
8797
  [svgIcon]="getDirectionSvgIcon(group)"
8798
+ [attr.aria-haspopup]="'menu'"
8799
+ [attr.aria-expanded]="isChipMenuOpen"
8800
+ [attr.aria-controls]="gridId"
8672
8801
  (contentClick)="directionChange(group)"
8673
8802
  (remove)="remove(group)"
8803
+ (menuToggle)="toggleMenu(chip, first, last, group.field)"
8804
+ (keydown.alt.arrowdown)="$event.preventDefault(); toggleMenu(chip, first, last, group.field)"
8674
8805
  >
8675
8806
  </kendo-chip>
8676
8807
  </kendo-chiplist>
@@ -8683,7 +8814,31 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
8683
8814
  }"
8684
8815
  kendoDropTarget
8685
8816
  >&nbsp;</div>
8686
- `, isInline: true, components: [{ type: i4$1.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size", "role", "navigable"], outputs: ["selectedChange", "remove"] }, { type: i4$1.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "svgIcon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "removeSvgIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i1$1.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8817
+
8818
+ <ng-template #defaultTemplate>
8819
+ <ul unselectable="on" role="menu" class="k-group k-menu-group k-reset k-menu-group-md" [kendoEventsOutsideAngular]="{
8820
+ keydown: handleKeyDown,
8821
+ click: handleClick
8822
+ }">
8823
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
8824
+ <span class="k-link k-menu-link" [class.k-disabled]="first">
8825
+ <kendo-icon-wrapper
8826
+ [name]="rtl ? 'arrow-right' : 'arrow-left'"
8827
+ [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
8828
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
8829
+ </span>
8830
+ </li>
8831
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
8832
+ <span class="k-link k-menu-link" [class.k-disabled]="last">
8833
+ <kendo-icon-wrapper
8834
+ [name]="rtl ? 'arrow-left' : 'arrow-right'"
8835
+ [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
8836
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
8837
+ </span>
8838
+ </li>
8839
+ </ul>
8840
+ </ng-template>
8841
+ `, isInline: true, components: [{ type: i4$1.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size", "role", "navigable"], outputs: ["selectedChange", "remove"] }, { type: i4$1.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "svgIcon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "removeSvgIcon", "hasMenu", "menuIcon", "menuSvgIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "menuToggle", "contentClick"] }, { type: i3.IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i1$1.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i1$1.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
8687
8842
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupPanelComponent, decorators: [{
8688
8843
  type: Component,
8689
8844
  args: [{
@@ -8706,7 +8861,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8706
8861
  [navigable]="navigable"
8707
8862
  role="none">
8708
8863
  <kendo-chip
8709
- *ngFor="let group of groups; let index = index;"
8864
+ *ngFor="let group of groups; let index = index; let first = first; let last = last;"
8865
+ #chip
8710
8866
  kendoDropTarget
8711
8867
  kendoDraggableColumn
8712
8868
  kendoDraggable
@@ -8715,14 +8871,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8715
8871
  [context]="{
8716
8872
  field: group.field,
8717
8873
  type: 'groupIndicator',
8718
- hint: groupTitles[index]
8874
+ hint: groupTitles[index],
8875
+ target: chip
8719
8876
  }"
8720
8877
  [label]="groupTitles[index]"
8721
8878
  [removable]="true"
8879
+ [hasMenu]="true"
8722
8880
  [icon]="getDirectionIcon(group)"
8723
8881
  [svgIcon]="getDirectionSvgIcon(group)"
8882
+ [attr.aria-haspopup]="'menu'"
8883
+ [attr.aria-expanded]="isChipMenuOpen"
8884
+ [attr.aria-controls]="gridId"
8724
8885
  (contentClick)="directionChange(group)"
8725
8886
  (remove)="remove(group)"
8887
+ (menuToggle)="toggleMenu(chip, first, last, group.field)"
8888
+ (keydown.alt.arrowdown)="$event.preventDefault(); toggleMenu(chip, first, last, group.field)"
8726
8889
  >
8727
8890
  </kendo-chip>
8728
8891
  </kendo-chiplist>
@@ -8735,9 +8898,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8735
8898
  }"
8736
8899
  kendoDropTarget
8737
8900
  >&nbsp;</div>
8901
+
8902
+ <ng-template #defaultTemplate>
8903
+ <ul unselectable="on" role="menu" class="k-group k-menu-group k-reset k-menu-group-md" [kendoEventsOutsideAngular]="{
8904
+ keydown: handleKeyDown,
8905
+ click: handleClick
8906
+ }">
8907
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
8908
+ <span class="k-link k-menu-link" [class.k-disabled]="first">
8909
+ <kendo-icon-wrapper
8910
+ [name]="rtl ? 'arrow-right' : 'arrow-left'"
8911
+ [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
8912
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
8913
+ </span>
8914
+ </li>
8915
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
8916
+ <span class="k-link k-menu-link" [class.k-disabled]="last">
8917
+ <kendo-icon-wrapper
8918
+ [name]="rtl ? 'arrow-left' : 'arrow-right'"
8919
+ [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
8920
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
8921
+ </span>
8922
+ </li>
8923
+ </ul>
8924
+ </ng-template>
8738
8925
  `
8739
8926
  }]
8740
- }], ctorParameters: function () { return [{ type: DragHintService }, { type: DropCueService }, { type: GroupInfoService }, { type: ContextService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { change: [{
8927
+ }], ctorParameters: function () { return [{ type: DragHintService }, { type: DropCueService }, { type: GroupInfoService }, { type: ContextService }, { type: i0.ChangeDetectorRef }, { type: i1$2.PopupService }, { type: i0.NgZone }, { type: i0.Renderer2 }]; }, propDecorators: { change: [{
8741
8928
  type: Output
8742
8929
  }], groupHeaderClass: [{
8743
8930
  type: HostBinding,
@@ -8751,6 +8938,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8751
8938
  }], dropTargets: [{
8752
8939
  type: ViewChildren,
8753
8940
  args: [DropTargetDirective]
8941
+ }], defaultTemplate: [{
8942
+ type: ViewChild,
8943
+ args: ['defaultTemplate', { static: true, read: TemplateRef }]
8754
8944
  }] } });
8755
8945
 
8756
8946
  /**
@@ -11615,7 +11805,7 @@ class ColumnMenuItemComponent {
11615
11805
  }
11616
11806
  }
11617
11807
  ColumnMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11618
- ColumnMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: { icon: "icon", svgIcon: "svgIcon", text: "text", selected: "selected", disabled: "disabled", expanded: "expanded" }, outputs: { itemClick: "itemClick", expand: "expand", collapse: "collapse" }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ColumnMenuItemContentTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
11808
+ ColumnMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: { icon: "icon", svgIcon: "svgIcon", text: "text", selected: "selected", disabled: "disabled", expanded: "expanded", service: "service" }, outputs: { itemClick: "itemClick", expand: "expand", collapse: "collapse" }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ColumnMenuItemContentTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
11619
11809
  <div
11620
11810
  class="k-columnmenu-item"
11621
11811
  (click)="onClick($event)"
@@ -11723,6 +11913,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11723
11913
  type: Input
11724
11914
  }], expanded: [{
11725
11915
  type: Input
11916
+ }], service: [{
11917
+ type: Input
11726
11918
  }], contentTemplate: [{
11727
11919
  type: ContentChild,
11728
11920
  args: [ColumnMenuItemContentTemplateDirective]
@@ -11804,7 +11996,7 @@ ColumnMenuLockComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
11804
11996
  (itemClick)="toggleColumn()"
11805
11997
  [disabled]="disabled">
11806
11998
  </kendo-grid-columnmenu-item>
11807
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
11999
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
11808
12000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuLockComponent, decorators: [{
11809
12001
  type: Component,
11810
12002
  args: [{
@@ -11899,7 +12091,7 @@ ColumnMenuStickComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
11899
12091
  (itemClick)="toggleColumn()"
11900
12092
  [disabled]="disabled">
11901
12093
  </kendo-grid-columnmenu-item>
11902
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
12094
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
11903
12095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuStickComponent, decorators: [{
11904
12096
  type: Component,
11905
12097
  args: [{
@@ -12032,7 +12224,7 @@ ColumnMenuPositionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.
12032
12224
  </kendo-grid-columnmenu-stick>
12033
12225
  </ng-template>
12034
12226
  </kendo-grid-columnmenu-item>
12035
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12227
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnMenuLockComponent, selector: "kendo-grid-columnmenu-lock" }, { type: ColumnMenuStickComponent, selector: "kendo-grid-columnmenu-stick" }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12036
12228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuPositionComponent, decorators: [{
12037
12229
  type: Component,
12038
12230
  args: [{
@@ -12551,7 +12743,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12551
12743
  </kendo-grid-columnlist>
12552
12744
  </ng-template>
12553
12745
  </kendo-grid-columnmenu-item>
12554
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12746
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }, { type: ColumnListComponent, selector: "kendo-grid-columnlist", inputs: ["columns", "autoSync", "ariaLabel", "allowHideAll", "applyText", "resetText", "actionsClass", "isLast", "isExpanded", "service"], outputs: ["reset", "apply", "columnChange"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12555
12747
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
12556
12748
  type: Component,
12557
12749
  args: [{
@@ -12677,7 +12869,7 @@ ColumnMenuFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12677
12869
  </kendo-grid-filter-menu-container>
12678
12870
  </ng-template>
12679
12871
  </kendo-grid-columnmenu-item>
12680
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12872
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }, { type: FilterMenuContainerComponent, selector: "kendo-grid-filter-menu-container", inputs: ["column", "isLast", "isExpanded", "menuTabbingService", "filter", "actionsClass"], outputs: ["close"] }], directives: [{ type: ColumnMenuItemContentTemplateDirective, selector: "[kendoGridColumnMenuItemContentTemplate]" }] });
12681
12873
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuFilterComponent, decorators: [{
12682
12874
  type: Component,
12683
12875
  args: [{
@@ -12715,9 +12907,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12715
12907
  type: Input
12716
12908
  }] } });
12717
12909
 
12718
- /**
12719
- * @hidden
12720
- */
12721
12910
  class ColumnMenuItemDirective {
12722
12911
  constructor(hostElement, renderer, ngZone) {
12723
12912
  this.hostElement = hostElement;
@@ -12744,6 +12933,9 @@ class ColumnMenuItemDirective {
12744
12933
  }
12745
12934
  };
12746
12935
  }
12936
+ /**
12937
+ * @hidden
12938
+ */
12747
12939
  set isFirst(value) {
12748
12940
  if (value) {
12749
12941
  const focusableElement = this.columnMenuItems[0];
@@ -12755,9 +12947,15 @@ class ColumnMenuItemDirective {
12755
12947
  }
12756
12948
  this._isFirst = value;
12757
12949
  }
12950
+ /**
12951
+ * @hidden
12952
+ */
12758
12953
  get isFirst() {
12759
12954
  return this._isFirst;
12760
12955
  }
12956
+ /**
12957
+ * @hidden
12958
+ */
12761
12959
  set isLast(value) {
12762
12960
  if (!this.columnMenuItems) {
12763
12961
  return;
@@ -12775,15 +12973,20 @@ class ColumnMenuItemDirective {
12775
12973
  }
12776
12974
  this._isLast = value;
12777
12975
  }
12976
+ /**
12977
+ * @hidden
12978
+ */
12778
12979
  get isLast() {
12779
12980
  return this._isLast;
12780
12981
  }
12781
12982
  ngAfterViewInit() {
12983
+ var _a;
12782
12984
  this.columnMenuItems = this.hostElement.nativeElement.querySelectorAll('.k-columnmenu-item');
12783
12985
  [].slice.apply(this.columnMenuItems).forEach(el => this.renderer.setAttribute(el, 'tabindex', '0'));
12784
12986
  if (this.menuItemComponent instanceof ColumnMenuFilterComponent) {
12785
12987
  this.menuItemComponent.service.menuTabbingService.isColumnMenu = true;
12786
12988
  }
12989
+ (_a = this.menuItemComponent.service) === null || _a === void 0 ? void 0 : _a.columnMenuContainer.templateMenuItems.push(this);
12787
12990
  }
12788
12991
  ngOnDestroy() {
12789
12992
  if (this.subs) {
@@ -12816,17 +13019,25 @@ class ColumnMenuContainerComponent {
12816
13019
  constructor(service, ngZone) {
12817
13020
  this.service = service;
12818
13021
  this.ngZone = ngZone;
13022
+ this.templateMenuItems = [];
13023
+ service.columnMenuContainer = this;
12819
13024
  }
12820
- ngAfterContentInit() {
12821
- if (!this.columnMenuItems.length) {
13025
+ ngAfterViewInit() {
13026
+ if (this.columnMenuItems.length) {
13027
+ this.columnMenuItems.first.isFirst = true;
13028
+ this.columnMenuItems.last.isLast = true;
13029
+ }
13030
+ else if (this.templateMenuItems.length) {
13031
+ this.templateMenuItems[0].isFirst = true;
13032
+ this.templateMenuItems[this.templateMenuItems.length - 1].isLast = true;
13033
+ }
13034
+ else {
12822
13035
  return;
12823
13036
  }
12824
- this.columnMenuItems.first.isFirst = true;
12825
- this.columnMenuItems.last.isLast = true;
12826
13037
  this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable.focus());
12827
13038
  }
12828
13039
  }
12829
- ColumnMenuContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuContainerComponent, deps: [{ token: ColumnMenuService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
13040
+ ColumnMenuContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuContainerComponent, deps: [{ token: ColumnMenuService }, { token: NgZone }], target: i0.ɵɵFactoryTarget.Component });
12830
13041
  ColumnMenuContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: ColumnMenuContainerComponent, selector: "kendo-grid-columnmenu-container", queries: [{ propertyName: "columnMenuItems", predicate: ColumnMenuItemDirective, descendants: true }], ngImport: i0, template: `
12831
13042
  <ng-content></ng-content>
12832
13043
  `, isInline: true });
@@ -12838,7 +13049,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12838
13049
  <ng-content></ng-content>
12839
13050
  `
12840
13051
  }]
12841
- }], ctorParameters: function () { return [{ type: ColumnMenuService }, { type: i0.NgZone }]; }, propDecorators: { columnMenuItems: [{
13052
+ }], ctorParameters: function () {
13053
+ return [{ type: ColumnMenuService }, { type: i0.NgZone, decorators: [{
13054
+ type: Inject,
13055
+ args: [NgZone]
13056
+ }] }];
13057
+ }, propDecorators: { columnMenuItems: [{
12842
13058
  type: ContentChildren,
12843
13059
  args: [ColumnMenuItemDirective, { descendants: true }]
12844
13060
  }] } });
@@ -12920,7 +13136,7 @@ ColumnMenuSortComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
12920
13136
  (itemClick)="toggleSort('desc')"
12921
13137
  [selected]="sortedDesc">
12922
13138
  </kendo-grid-columnmenu-item>
12923
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
13139
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
12924
13140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuSortComponent, decorators: [{
12925
13141
  type: Component,
12926
13142
  args: [{
@@ -12992,7 +13208,7 @@ ColumnMenuAutoSizeColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion
12992
13208
  [svgIcon]="maxWidthIcon"
12993
13209
  (itemClick)="autoSizeColumn()"
12994
13210
  ></kendo-grid-columnmenu-item>
12995
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13211
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12996
13212
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuAutoSizeColumnComponent, decorators: [{
12997
13213
  type: Component,
12998
13214
  args: [{
@@ -13058,7 +13274,7 @@ ColumnMenuAutoSizeAllColumnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVer
13058
13274
  [svgIcon]="displayInlineFlexIcon"
13059
13275
  (itemClick)="autoSizeAllColumns()"
13060
13276
  ></kendo-grid-columnmenu-item>
13061
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13277
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
13062
13278
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuAutoSizeAllColumnsComponent, decorators: [{
13063
13279
  type: Component,
13064
13280
  args: [{
@@ -13353,10 +13569,14 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13353
13569
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
13354
13570
  </a>
13355
13571
  <ng-template #template>
13356
- <ng-container
13357
- [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13358
- [ngTemplateOutletContext]="{ service: service, column: column }">
13359
- </ng-container>
13572
+ <kendo-grid-columnmenu-container
13573
+ (keydown.escape)="close(true)"
13574
+ (keydown.enter)="$event.stopImmediatePropagation()">
13575
+ <ng-container
13576
+ [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13577
+ [ngTemplateOutletContext]="{ service: service, column: column }">
13578
+ </ng-container>
13579
+ </kendo-grid-columnmenu-container>
13360
13580
  </ng-template>
13361
13581
  <ng-template #defaultTemplate>
13362
13582
  <kendo-grid-columnmenu-container
@@ -13524,10 +13744,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13524
13744
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
13525
13745
  </a>
13526
13746
  <ng-template #template>
13527
- <ng-container
13528
- [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13529
- [ngTemplateOutletContext]="{ service: service, column: column }">
13530
- </ng-container>
13747
+ <kendo-grid-columnmenu-container
13748
+ (keydown.escape)="close(true)"
13749
+ (keydown.enter)="$event.stopImmediatePropagation()">
13750
+ <ng-container
13751
+ [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13752
+ [ngTemplateOutletContext]="{ service: service, column: column }">
13753
+ </ng-container>
13754
+ </kendo-grid-columnmenu-container>
13531
13755
  </ng-template>
13532
13756
  <ng-template #defaultTemplate>
13533
13757
  <kendo-grid-columnmenu-container
@@ -19338,7 +19562,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19338
19562
  class GridMessages extends ComponentMessages {
19339
19563
  }
19340
19564
  GridMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
19341
- GridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", selectPage: "selectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterCellOperatorLabel: "filterCellOperatorLabel", booleanFilterCellLabel: "booleanFilterCellLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle" }, usesInheritance: true, ngImport: i0 });
19565
+ GridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: GridMessages, selector: "kendo-grid-messages-base", inputs: { groupPanelEmpty: "groupPanelEmpty", noRecords: "noRecords", pagerLabel: "pagerLabel", pagerFirstPage: "pagerFirstPage", pagerLastPage: "pagerLastPage", pagerPreviousPage: "pagerPreviousPage", pagerNextPage: "pagerNextPage", pagerPage: "pagerPage", pagerItemsPerPage: "pagerItemsPerPage", pagerOf: "pagerOf", pagerItems: "pagerItems", pagerPageNumberInputTitle: "pagerPageNumberInputTitle", selectPage: "selectPage", filter: "filter", filterInputLabel: "filterInputLabel", filterMenuTitle: "filterMenuTitle", filterMenuOperatorsDropDownLabel: "filterMenuOperatorsDropDownLabel", filterMenuLogicDropDownLabel: "filterMenuLogicDropDownLabel", filterCellOperatorLabel: "filterCellOperatorLabel", booleanFilterCellLabel: "booleanFilterCellLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterGteOperator: "filterGteOperator", filterGtOperator: "filterGtOperator", filterLteOperator: "filterLteOperator", filterLtOperator: "filterLtOperator", filterIsTrue: "filterIsTrue", filterIsFalse: "filterIsFalse", filterBooleanAll: "filterBooleanAll", filterAfterOrEqualOperator: "filterAfterOrEqualOperator", filterAfterOperator: "filterAfterOperator", filterBeforeOperator: "filterBeforeOperator", filterBeforeOrEqualOperator: "filterBeforeOrEqualOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", filterAndLogic: "filterAndLogic", filterOrLogic: "filterOrLogic", loading: "loading", gridLabel: "gridLabel", columnMenu: "columnMenu", setColumnPosition: "setColumnPosition", columns: "columns", lock: "lock", unlock: "unlock", stick: "stick", unstick: "unstick", sortable: "sortable", sortAscending: "sortAscending", sortDescending: "sortDescending", autosizeThisColumn: "autosizeThisColumn", autosizeAllColumns: "autosizeAllColumns", sortedAscending: "sortedAscending", sortedDescending: "sortedDescending", sortedDefault: "sortedDefault", columnsApply: "columnsApply", columnsReset: "columnsReset", detailExpand: "detailExpand", detailCollapse: "detailCollapse", filterDateToday: "filterDateToday", filterDateToggle: "filterDateToggle", filterNumericDecrement: "filterNumericDecrement", filterNumericIncrement: "filterNumericIncrement", selectionCheckboxLabel: "selectionCheckboxLabel", selectAllCheckboxLabel: "selectAllCheckboxLabel", groupCollapse: "groupCollapse", groupExpand: "groupExpand", topToolbarLabel: "topToolbarLabel", bottomToolbarLabel: "bottomToolbarLabel", groupPanelLabel: "groupPanelLabel", dragRowHandleLabel: "dragRowHandleLabel", columnMenuFilterTabTitle: "columnMenuFilterTabTitle", columnMenuGeneralTabTitle: "columnMenuGeneralTabTitle", columnMenuColumnsTabTitle: "columnMenuColumnsTabTitle", groupChipMenuPrevious: "groupChipMenuPrevious", groupChipMenuNext: "groupChipMenuNext" }, usesInheritance: true, ngImport: i0 });
19342
19566
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMessages, decorators: [{
19343
19567
  type: Directive,
19344
19568
  args: [{
@@ -19507,6 +19731,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19507
19731
  type: Input
19508
19732
  }], columnMenuColumnsTabTitle: [{
19509
19733
  type: Input
19734
+ }], groupChipMenuPrevious: [{
19735
+ type: Input
19736
+ }], groupChipMenuNext: [{
19737
+ type: Input
19510
19738
  }] } });
19511
19739
 
19512
19740
  /**
@@ -21634,6 +21862,12 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
21634
21862
  i18n-sortedDefault="kendo.grid.sortedDefault|The status announcement when a column is no longer sorted"
21635
21863
  sortedDefault="Not Sorted"
21636
21864
 
21865
+ i18n-sortedAscending="kendo.grid.sortedAscending|The title of the Group Chip indicating the ascending sorting order of the groups"
21866
+ sortedAscending="Sorted Ascending"
21867
+
21868
+ i18n-sortedDescending="kendo.grid.sortedDescending|The title of the Group Chip indicating the descending sorting order of the groups"
21869
+ sortedDescending="Sorted Descending"
21870
+
21637
21871
  i18n-columnsApply="kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
21638
21872
  columnsApply="Apply"
21639
21873
 
@@ -21693,6 +21927,12 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
21693
21927
 
21694
21928
  i18n-columnMenuColumnsTabTitle="kendo.grid.columnMenuColumnsTabTitle|The title for the column menu Columns tab"
21695
21929
  columnMenuColumnsTabTitle="Columns"
21930
+
21931
+ i18n-groupChipMenuPrevious="kendo.grid.groupChipMenuPrevious|The text for the Group pane Chip Menu Move as previous item"
21932
+ groupChipMenuPrevious="Move as previous"
21933
+
21934
+ i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
21935
+ groupChipMenuNext="Move as next"
21696
21936
  >
21697
21937
  </ng-container>
21698
21938
  <kendo-grid-toolbar
@@ -22252,6 +22492,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22252
22492
  i18n-sortedDefault="kendo.grid.sortedDefault|The status announcement when a column is no longer sorted"
22253
22493
  sortedDefault="Not Sorted"
22254
22494
 
22495
+ i18n-sortedAscending="kendo.grid.sortedAscending|The title of the Group Chip indicating the ascending sorting order of the groups"
22496
+ sortedAscending="Sorted Ascending"
22497
+
22498
+ i18n-sortedDescending="kendo.grid.sortedDescending|The title of the Group Chip indicating the descending sorting order of the groups"
22499
+ sortedDescending="Sorted Descending"
22500
+
22255
22501
  i18n-columnsApply="kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
22256
22502
  columnsApply="Apply"
22257
22503
 
@@ -22311,6 +22557,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22311
22557
 
22312
22558
  i18n-columnMenuColumnsTabTitle="kendo.grid.columnMenuColumnsTabTitle|The title for the column menu Columns tab"
22313
22559
  columnMenuColumnsTabTitle="Columns"
22560
+
22561
+ i18n-groupChipMenuPrevious="kendo.grid.groupChipMenuPrevious|The text for the Group pane Chip Menu Move as previous item"
22562
+ groupChipMenuPrevious="Move as previous"
22563
+
22564
+ i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
22565
+ groupChipMenuNext="Move as next"
22314
22566
  >
22315
22567
  </ng-container>
22316
22568
  <kendo-grid-toolbar
@@ -24319,7 +24571,7 @@ const exportedModules$4 = [
24319
24571
  GroupHeaderColumnTemplateDirective,
24320
24572
  GroupFooterTemplateDirective,
24321
24573
  GroupHeaderComponent,
24322
- GroupPanelComponent
24574
+ GroupPanelComponent,
24323
24575
  ];
24324
24576
  /**
24325
24577
  * @hidden
@@ -24338,18 +24590,18 @@ GroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
24338
24590
  GroupHeaderColumnTemplateDirective,
24339
24591
  GroupFooterTemplateDirective,
24340
24592
  GroupHeaderComponent,
24341
- GroupPanelComponent], imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule], exports: [GroupHeaderTemplateDirective,
24593
+ GroupPanelComponent], imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule, PopupModule], exports: [GroupHeaderTemplateDirective,
24342
24594
  GroupHeaderColumnTemplateDirective,
24343
24595
  GroupFooterTemplateDirective,
24344
24596
  GroupHeaderComponent,
24345
24597
  GroupPanelComponent] });
24346
- GroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupModule, imports: [[CommonModule, SharedModule, DragAndDropModule, ChipModule]] });
24598
+ GroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupModule, imports: [[CommonModule, SharedModule, DragAndDropModule, ChipModule, PopupModule]] });
24347
24599
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupModule, decorators: [{
24348
24600
  type: NgModule,
24349
24601
  args: [{
24350
- declarations: [exportedModules$4],
24602
+ declarations: [...exportedModules$4],
24351
24603
  exports: [exportedModules$4],
24352
- imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule]
24604
+ imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule, PopupModule]
24353
24605
  }]
24354
24606
  }] });
24355
24607