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

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 (34) 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/databinding.directive.d.ts +1 -1
  6. package/dragdrop/context-types.d.ts +1 -0
  7. package/esm2020/column-menu/column-menu-autosize-all.component.mjs +1 -1
  8. package/esm2020/column-menu/column-menu-autosize.component.mjs +1 -1
  9. package/esm2020/column-menu/column-menu-chooser.component.mjs +1 -1
  10. package/esm2020/column-menu/column-menu-container.component.mjs +18 -7
  11. package/esm2020/column-menu/column-menu-filter.component.mjs +1 -1
  12. package/esm2020/column-menu/column-menu-item.component.mjs +4 -1
  13. package/esm2020/column-menu/column-menu-item.directive.mjs +13 -3
  14. package/esm2020/column-menu/column-menu-lock.component.mjs +1 -1
  15. package/esm2020/column-menu/column-menu-position.component.mjs +1 -1
  16. package/esm2020/column-menu/column-menu-sort.component.mjs +1 -1
  17. package/esm2020/column-menu/column-menu-stick.component.mjs +1 -1
  18. package/esm2020/column-menu/column-menu.component.mjs +16 -8
  19. package/esm2020/databinding.directive.mjs +1 -1
  20. package/esm2020/filtering/numeric-filter.component.mjs +3 -7
  21. package/esm2020/grid.component.mjs +24 -0
  22. package/esm2020/grouping/group-panel.component.mjs +213 -23
  23. package/esm2020/grouping/group.module.mjs +6 -5
  24. package/esm2020/localization/messages.mjs +5 -1
  25. package/esm2020/package-metadata.mjs +2 -2
  26. package/esm2020/rendering/cell.component.mjs +2 -2
  27. package/fesm2015/progress-kendo-angular-grid.mjs +304 -60
  28. package/fesm2020/progress-kendo-angular-grid.mjs +300 -60
  29. package/filtering/numeric-filter.component.d.ts +1 -5
  30. package/grouping/group-panel.component.d.ts +25 -4
  31. package/grouping/group.module.d.ts +2 -1
  32. package/localization/messages.d.ts +11 -7
  33. package/package.json +16 -16
  34. 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: 1698853403,
4478
- version: '14.1.0-develop.1',
4477
+ publishDate: 1699450724,
4478
+ version: '14.1.0-develop.11',
4479
4479
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
4480
4480
  };
4481
4481
 
@@ -8523,17 +8523,53 @@ const indicatorRules = or(overSameTarget, and(overLastTarget, isLastGroup));
8523
8523
  * @hidden
8524
8524
  */
8525
8525
  class GroupPanelComponent {
8526
- constructor(hint, cue, groupInfoService, ctx, cd) {
8526
+ constructor(hint, cue, groupInfoService, ctx, cd, popupService, ngZone, renderer) {
8527
8527
  this.hint = hint;
8528
8528
  this.cue = cue;
8529
8529
  this.groupInfoService = groupInfoService;
8530
8530
  this.ctx = ctx;
8531
8531
  this.cd = cd;
8532
+ this.popupService = popupService;
8533
+ this.ngZone = ngZone;
8534
+ this.renderer = renderer;
8532
8535
  this.change = new EventEmitter();
8533
8536
  this.groups = [];
8534
8537
  this.dropTargets = new QueryList();
8535
8538
  this.groupTitles = [];
8536
- this.subscription = new Subscription();
8539
+ this.isChipMenuOpen = false;
8540
+ this.rtl = false;
8541
+ this.arrowLeftIcon = arrowLeftIcon;
8542
+ this.arrowRightIcon = arrowRightIcon;
8543
+ this.handleKeyDown = (e) => {
8544
+ if (e.keyCode === Keys.ArrowDown || e.keyCode === Keys.ArrowUp) {
8545
+ e.preventDefault();
8546
+ const relatedItemType = e.target.matches(':first-child') ? 'next' : 'previous';
8547
+ this.activateMenuItem(e.target, relatedItemType);
8548
+ }
8549
+ else if (e.keyCode === Keys.Escape) {
8550
+ this.destroyMenu(true);
8551
+ }
8552
+ else if (e.keyCode === Keys.Tab) {
8553
+ this.destroyMenu(true);
8554
+ }
8555
+ else if (e.keyCode === Keys.Space || e.keyCode === Keys.Enter) {
8556
+ this.handleMenuClick(e);
8557
+ }
8558
+ };
8559
+ this.handleClick = (e) => {
8560
+ e.preventDefault();
8561
+ const menuItemEl = e.target.closest('.k-menu-item');
8562
+ if (!menuItemEl.matches('[aria-disabled="true"]')) {
8563
+ this.handleMenuClick(e);
8564
+ return;
8565
+ }
8566
+ if (menuItemEl.getAttribute('tabindex') === '0') {
8567
+ return;
8568
+ }
8569
+ const activeMenuItem = menuItemEl.closest('.k-menu-group').querySelector('[tabindex="0"]');
8570
+ const relatedItemType = activeMenuItem.matches(':first-child') ? 'next' : 'previous';
8571
+ this.activateMenuItem(activeMenuItem, relatedItemType);
8572
+ };
8537
8573
  }
8538
8574
  get groupHeaderClass() {
8539
8575
  return true;
@@ -8544,13 +8580,18 @@ class GroupPanelComponent {
8544
8580
  get text() {
8545
8581
  return this.emptyText ? this.emptyText : this.ctx.localization.get('groupPanelEmpty');
8546
8582
  }
8583
+ get gridId() {
8584
+ var _a;
8585
+ return (_a = this.ctx.grid) === null || _a === void 0 ? void 0 : _a.ariaRootId;
8586
+ }
8547
8587
  ngAfterViewInit() {
8588
+ this.subscription = this.ctx.localization.changes.subscribe(({ rtl }) => {
8589
+ this.rtl = rtl;
8590
+ this.cd.markForCheck();
8591
+ });
8548
8592
  this.subscription.add(observe(this.dropTargets)
8549
8593
  .subscribe(this.attachTargets.bind(this)));
8550
8594
  }
8551
- ngOnInit() {
8552
- this.subscription.add(this.ctx.localization.changes.subscribe(() => this.cd.markForCheck()));
8553
- }
8554
8595
  ngDoCheck() {
8555
8596
  const currentTitles = this.groups.map(group => this.groupInfoService.groupTitle(group));
8556
8597
  if (currentTitles.length !== this.groupTitles.length || currentTitles.some((current, idx) => current !== this.groupTitles[idx])) {
@@ -8565,6 +8606,7 @@ class GroupPanelComponent {
8565
8606
  if (this.targetSubscription) {
8566
8607
  this.targetSubscription.unsubscribe();
8567
8608
  }
8609
+ this.destroyMenu();
8568
8610
  }
8569
8611
  messageFor(token) {
8570
8612
  return this.ctx.localization.get(token);
@@ -8594,6 +8636,42 @@ class GroupPanelComponent {
8594
8636
  remove(group) {
8595
8637
  this.change.emit(this.groups.filter(x => x.field !== group.field));
8596
8638
  }
8639
+ toggleMenu(chip, first, last, field) {
8640
+ const anchor = chip.element.nativeElement.querySelector('.k-chip-action');
8641
+ if (this.popupRef) {
8642
+ const popupAnchor = this.popupRef.popup.instance.anchor;
8643
+ this.destroyMenu();
8644
+ if (anchor === popupAnchor) {
8645
+ return;
8646
+ }
8647
+ }
8648
+ this.first = first;
8649
+ this.last = last;
8650
+ const direction = this.ctx.localization.rtl ? 'right' : 'left';
8651
+ this.popupRef = this.popupService.open({
8652
+ anchor: anchor,
8653
+ content: this.defaultTemplate,
8654
+ anchorAlign: { vertical: 'bottom', horizontal: direction },
8655
+ popupAlign: { vertical: 'top', horizontal: direction },
8656
+ positionMode: 'absolute'
8657
+ });
8658
+ this.activeItem = this.dropTargets.find(dt => dt.context.field === field);
8659
+ this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.ctx.localization.rtl ? 'rtl' : 'ltr');
8660
+ const menuItems = Array.from(this.popupRef.popupElement.querySelectorAll('.k-menu-item'));
8661
+ this.activateMenuItem(menuItems[1], 'previous');
8662
+ this.popupSubs = this.popupRef.popupAnchorViewportLeave.subscribe(() => {
8663
+ this.destroyMenu(true);
8664
+ });
8665
+ if (isUniversal()) {
8666
+ return;
8667
+ }
8668
+ this.ngZone.runOutsideAngular(() => {
8669
+ this.popupSubs.add(fromEvent(document, 'click')
8670
+ .pipe(filter((event) => !closest(event.target, (node) => node === this.popupRef.popupElement || (node.matches && node.matches('.k-chip-action'))))).subscribe(() => {
8671
+ this.destroyMenu();
8672
+ }));
8673
+ });
8674
+ }
8597
8675
  canDrop(draggable, target) {
8598
8676
  const isIndicator = draggable.type === 'groupIndicator';
8599
8677
  const rules = isIndicator
@@ -8616,7 +8694,10 @@ class GroupPanelComponent {
8616
8694
  .reduce((acc, target) => merge(acc, target.leave), from([]));
8617
8695
  const dropStream = this.dropTargets
8618
8696
  .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)));
8697
+ this.targetSubscription.add(enterStream.pipe(tap(_ => {
8698
+ this.hint.removeLock();
8699
+ this.destroyMenu();
8700
+ }), 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
8701
  }
8621
8702
  enter({ draggable, target }) {
8622
8703
  this.hint.enable();
@@ -8635,9 +8716,47 @@ class GroupPanelComponent {
8635
8716
  const index = this.dropTargets.toArray().indexOf(target);
8636
8717
  this.insert(field, index);
8637
8718
  }
8719
+ destroyMenu(focusAnchor) {
8720
+ if (this.popupRef) {
8721
+ this.popupRef.close();
8722
+ this.popupRef = null;
8723
+ this.popupSubs && this.popupSubs.unsubscribe();
8724
+ focusAnchor && this.activeItem.context.target.focus();
8725
+ }
8726
+ }
8727
+ activateMenuItem(item, relatedItemType) {
8728
+ this.renderer.setAttribute(item, 'tabindex', '-1');
8729
+ this.renderer.removeClass(item, 'k-focus');
8730
+ const relatedItem = item[`${relatedItemType}ElementSibling`];
8731
+ this.renderer.setAttribute(relatedItem, 'tabindex', '0');
8732
+ this.renderer.addClass(relatedItem, 'k-focus');
8733
+ this.ngZone.runOutsideAngular(() => setTimeout(() => relatedItem.focus()));
8734
+ }
8735
+ handleMenuClick(e) {
8736
+ e.preventDefault();
8737
+ if (e.target.getAttribute('aria-disabled') !== 'true') {
8738
+ const chips = this.dropTargets.toArray().slice(0, this.dropTargets.length - 1);
8739
+ let groupChip, groupChipIndex;
8740
+ for (let i = 0; i < chips.length; i++) {
8741
+ if (chips[i].element.nativeElement === this.popupRef.popup.instance.anchor.closest('.k-chip')) {
8742
+ groupChip = chips[i];
8743
+ groupChipIndex = i;
8744
+ break;
8745
+ }
8746
+ }
8747
+ const isPrev = e.target.closest('.k-menu-item').matches(':first-child');
8748
+ if (isPrev && groupChipIndex > 0) {
8749
+ this.insert(groupChip.context.field, groupChipIndex - 1);
8750
+ }
8751
+ else if (!isPrev && groupChipIndex < chips.length - 1) {
8752
+ this.insert(groupChip.context.field, groupChipIndex + 1);
8753
+ }
8754
+ this.destroyMenu(true);
8755
+ }
8756
+ }
8638
8757
  }
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: `
8758
+ 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 });
8759
+ 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
8760
  <div
8642
8761
  *ngIf="groups.length === 0"
8643
8762
  class="k-grouping-drop-container"
@@ -8654,7 +8773,8 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
8654
8773
  [navigable]="navigable"
8655
8774
  role="none">
8656
8775
  <kendo-chip
8657
- *ngFor="let group of groups; let index = index;"
8776
+ *ngFor="let group of groups; let index = index; let first = first; let last = last;"
8777
+ #chip
8658
8778
  kendoDropTarget
8659
8779
  kendoDraggableColumn
8660
8780
  kendoDraggable
@@ -8663,14 +8783,21 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
8663
8783
  [context]="{
8664
8784
  field: group.field,
8665
8785
  type: 'groupIndicator',
8666
- hint: groupTitles[index]
8786
+ hint: groupTitles[index],
8787
+ target: chip
8667
8788
  }"
8668
8789
  [label]="groupTitles[index]"
8669
8790
  [removable]="true"
8791
+ [hasMenu]="true"
8670
8792
  [icon]="getDirectionIcon(group)"
8671
8793
  [svgIcon]="getDirectionSvgIcon(group)"
8794
+ [attr.aria-haspopup]="'menu'"
8795
+ [attr.aria-expanded]="isChipMenuOpen"
8796
+ [attr.aria-controls]="gridId"
8672
8797
  (contentClick)="directionChange(group)"
8673
8798
  (remove)="remove(group)"
8799
+ (menuToggle)="toggleMenu(chip, first, last, group.field)"
8800
+ (keydown.alt.arrowdown)="$event.preventDefault(); toggleMenu(chip, first, last, group.field)"
8674
8801
  >
8675
8802
  </kendo-chip>
8676
8803
  </kendo-chiplist>
@@ -8683,7 +8810,31 @@ GroupPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
8683
8810
  }"
8684
8811
  kendoDropTarget
8685
8812
  >&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 });
8813
+
8814
+ <ng-template #defaultTemplate>
8815
+ <ul unselectable="on" role="menu" class="k-group k-menu-group k-reset k-menu-group-md" [kendoEventsOutsideAngular]="{
8816
+ keydown: handleKeyDown,
8817
+ click: handleClick
8818
+ }">
8819
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
8820
+ <span class="k-link k-menu-link" [class.k-disabled]="first">
8821
+ <kendo-icon-wrapper
8822
+ [name]="rtl ? 'arrow-right' : 'arrow-left'"
8823
+ [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
8824
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
8825
+ </span>
8826
+ </li>
8827
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
8828
+ <span class="k-link k-menu-link" [class.k-disabled]="last">
8829
+ <kendo-icon-wrapper
8830
+ [name]="rtl ? 'arrow-left' : 'arrow-right'"
8831
+ [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
8832
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
8833
+ </span>
8834
+ </li>
8835
+ </ul>
8836
+ </ng-template>
8837
+ `, 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
8838
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupPanelComponent, decorators: [{
8688
8839
  type: Component,
8689
8840
  args: [{
@@ -8706,7 +8857,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8706
8857
  [navigable]="navigable"
8707
8858
  role="none">
8708
8859
  <kendo-chip
8709
- *ngFor="let group of groups; let index = index;"
8860
+ *ngFor="let group of groups; let index = index; let first = first; let last = last;"
8861
+ #chip
8710
8862
  kendoDropTarget
8711
8863
  kendoDraggableColumn
8712
8864
  kendoDraggable
@@ -8715,14 +8867,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8715
8867
  [context]="{
8716
8868
  field: group.field,
8717
8869
  type: 'groupIndicator',
8718
- hint: groupTitles[index]
8870
+ hint: groupTitles[index],
8871
+ target: chip
8719
8872
  }"
8720
8873
  [label]="groupTitles[index]"
8721
8874
  [removable]="true"
8875
+ [hasMenu]="true"
8722
8876
  [icon]="getDirectionIcon(group)"
8723
8877
  [svgIcon]="getDirectionSvgIcon(group)"
8878
+ [attr.aria-haspopup]="'menu'"
8879
+ [attr.aria-expanded]="isChipMenuOpen"
8880
+ [attr.aria-controls]="gridId"
8724
8881
  (contentClick)="directionChange(group)"
8725
8882
  (remove)="remove(group)"
8883
+ (menuToggle)="toggleMenu(chip, first, last, group.field)"
8884
+ (keydown.alt.arrowdown)="$event.preventDefault(); toggleMenu(chip, first, last, group.field)"
8726
8885
  >
8727
8886
  </kendo-chip>
8728
8887
  </kendo-chiplist>
@@ -8735,9 +8894,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8735
8894
  }"
8736
8895
  kendoDropTarget
8737
8896
  >&nbsp;</div>
8897
+
8898
+ <ng-template #defaultTemplate>
8899
+ <ul unselectable="on" role="menu" class="k-group k-menu-group k-reset k-menu-group-md" [kendoEventsOutsideAngular]="{
8900
+ keydown: handleKeyDown,
8901
+ click: handleClick
8902
+ }">
8903
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="first">
8904
+ <span class="k-link k-menu-link" [class.k-disabled]="first">
8905
+ <kendo-icon-wrapper
8906
+ [name]="rtl ? 'arrow-right' : 'arrow-left'"
8907
+ [svgIcon]="rtl ? arrowRightIcon : arrowLeftIcon"></kendo-icon-wrapper>
8908
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuPrevious')}}</span>
8909
+ </span>
8910
+ </li>
8911
+ <li role="menuitem" unselectable="on" class="k-item k-menu-item" [attr.aria-disabled]="last">
8912
+ <span class="k-link k-menu-link" [class.k-disabled]="last">
8913
+ <kendo-icon-wrapper
8914
+ [name]="rtl ? 'arrow-left' : 'arrow-right'"
8915
+ [svgIcon]="rtl ? arrowLeftIcon : arrowRightIcon"></kendo-icon-wrapper>
8916
+ <span class="k-menu-link-text">{{messageFor('groupChipMenuNext')}}</span>
8917
+ </span>
8918
+ </li>
8919
+ </ul>
8920
+ </ng-template>
8738
8921
  `
8739
8922
  }]
8740
- }], ctorParameters: function () { return [{ type: DragHintService }, { type: DropCueService }, { type: GroupInfoService }, { type: ContextService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { change: [{
8923
+ }], 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
8924
  type: Output
8742
8925
  }], groupHeaderClass: [{
8743
8926
  type: HostBinding,
@@ -8751,6 +8934,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
8751
8934
  }], dropTargets: [{
8752
8935
  type: ViewChildren,
8753
8936
  args: [DropTargetDirective]
8937
+ }], defaultTemplate: [{
8938
+ type: ViewChild,
8939
+ args: ['defaultTemplate', { static: true, read: TemplateRef }]
8754
8940
  }] } });
8755
8941
 
8756
8942
  /**
@@ -9911,16 +10097,12 @@ class NumericFilterComponent extends BaseFilterCellComponent {
9911
10097
  * Specifies the number format used when the component is not focused.
9912
10098
  * By default, the `column.format` value is used (if set).
9913
10099
  */
9914
- set format(value) {
9915
- this._format = value;
9916
- }
9917
- /**
9918
- * @readonly
9919
- * @type {string}
9920
- */
9921
10100
  get format() {
9922
10101
  return !isNullOrEmptyString(this._format) ? this._format : this.columnFormat;
9923
10102
  }
10103
+ set format(value) {
10104
+ this._format = value;
10105
+ }
9924
10106
  /**
9925
10107
  * The current filter for the associated column field.
9926
10108
  * @readonly
@@ -11619,7 +11801,7 @@ class ColumnMenuItemComponent {
11619
11801
  }
11620
11802
  }
11621
11803
  ColumnMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11622
- 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: `
11804
+ 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: `
11623
11805
  <div
11624
11806
  class="k-columnmenu-item"
11625
11807
  (click)="onClick($event)"
@@ -11727,6 +11909,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
11727
11909
  type: Input
11728
11910
  }], expanded: [{
11729
11911
  type: Input
11912
+ }], service: [{
11913
+ type: Input
11730
11914
  }], contentTemplate: [{
11731
11915
  type: ContentChild,
11732
11916
  args: [ColumnMenuItemContentTemplateDirective]
@@ -11808,7 +11992,7 @@ ColumnMenuLockComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
11808
11992
  (itemClick)="toggleColumn()"
11809
11993
  [disabled]="disabled">
11810
11994
  </kendo-grid-columnmenu-item>
11811
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
11995
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
11812
11996
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuLockComponent, decorators: [{
11813
11997
  type: Component,
11814
11998
  args: [{
@@ -11903,7 +12087,7 @@ ColumnMenuStickComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
11903
12087
  (itemClick)="toggleColumn()"
11904
12088
  [disabled]="disabled">
11905
12089
  </kendo-grid-columnmenu-item>
11906
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
12090
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
11907
12091
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuStickComponent, decorators: [{
11908
12092
  type: Component,
11909
12093
  args: [{
@@ -12036,7 +12220,7 @@ ColumnMenuPositionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.
12036
12220
  </kendo-grid-columnmenu-stick>
12037
12221
  </ng-template>
12038
12222
  </kendo-grid-columnmenu-item>
12039
- `, 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"] }] });
12223
+ `, 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"] }] });
12040
12224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuPositionComponent, decorators: [{
12041
12225
  type: Component,
12042
12226
  args: [{
@@ -12555,7 +12739,7 @@ ColumnMenuChooserComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
12555
12739
  </kendo-grid-columnlist>
12556
12740
  </ng-template>
12557
12741
  </kendo-grid-columnmenu-item>
12558
- `, 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]" }] });
12742
+ `, 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]" }] });
12559
12743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuChooserComponent, decorators: [{
12560
12744
  type: Component,
12561
12745
  args: [{
@@ -12681,7 +12865,7 @@ ColumnMenuFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.
12681
12865
  </kendo-grid-filter-menu-container>
12682
12866
  </ng-template>
12683
12867
  </kendo-grid-columnmenu-item>
12684
- `, 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]" }] });
12868
+ `, 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]" }] });
12685
12869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuFilterComponent, decorators: [{
12686
12870
  type: Component,
12687
12871
  args: [{
@@ -12719,9 +12903,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12719
12903
  type: Input
12720
12904
  }] } });
12721
12905
 
12722
- /**
12723
- * @hidden
12724
- */
12725
12906
  class ColumnMenuItemDirective {
12726
12907
  constructor(hostElement, renderer, ngZone) {
12727
12908
  this.hostElement = hostElement;
@@ -12748,6 +12929,9 @@ class ColumnMenuItemDirective {
12748
12929
  }
12749
12930
  };
12750
12931
  }
12932
+ /**
12933
+ * @hidden
12934
+ */
12751
12935
  set isFirst(value) {
12752
12936
  if (value) {
12753
12937
  const focusableElement = this.columnMenuItems[0];
@@ -12759,9 +12943,15 @@ class ColumnMenuItemDirective {
12759
12943
  }
12760
12944
  this._isFirst = value;
12761
12945
  }
12946
+ /**
12947
+ * @hidden
12948
+ */
12762
12949
  get isFirst() {
12763
12950
  return this._isFirst;
12764
12951
  }
12952
+ /**
12953
+ * @hidden
12954
+ */
12765
12955
  set isLast(value) {
12766
12956
  if (!this.columnMenuItems) {
12767
12957
  return;
@@ -12779,15 +12969,20 @@ class ColumnMenuItemDirective {
12779
12969
  }
12780
12970
  this._isLast = value;
12781
12971
  }
12972
+ /**
12973
+ * @hidden
12974
+ */
12782
12975
  get isLast() {
12783
12976
  return this._isLast;
12784
12977
  }
12785
12978
  ngAfterViewInit() {
12979
+ var _a;
12786
12980
  this.columnMenuItems = this.hostElement.nativeElement.querySelectorAll('.k-columnmenu-item');
12787
12981
  [].slice.apply(this.columnMenuItems).forEach(el => this.renderer.setAttribute(el, 'tabindex', '0'));
12788
12982
  if (this.menuItemComponent instanceof ColumnMenuFilterComponent) {
12789
12983
  this.menuItemComponent.service.menuTabbingService.isColumnMenu = true;
12790
12984
  }
12985
+ (_a = this.menuItemComponent.service) === null || _a === void 0 ? void 0 : _a.columnMenuContainer.templateMenuItems.push(this);
12791
12986
  }
12792
12987
  ngOnDestroy() {
12793
12988
  if (this.subs) {
@@ -12820,17 +13015,25 @@ class ColumnMenuContainerComponent {
12820
13015
  constructor(service, ngZone) {
12821
13016
  this.service = service;
12822
13017
  this.ngZone = ngZone;
13018
+ this.templateMenuItems = [];
13019
+ service.columnMenuContainer = this;
12823
13020
  }
12824
- ngAfterContentInit() {
12825
- if (!this.columnMenuItems.length) {
13021
+ ngAfterViewInit() {
13022
+ if (this.columnMenuItems.length) {
13023
+ this.columnMenuItems.first.isFirst = true;
13024
+ this.columnMenuItems.last.isLast = true;
13025
+ }
13026
+ else if (this.templateMenuItems.length) {
13027
+ this.templateMenuItems[0].isFirst = true;
13028
+ this.templateMenuItems[this.templateMenuItems.length - 1].isLast = true;
13029
+ }
13030
+ else {
12826
13031
  return;
12827
13032
  }
12828
- this.columnMenuItems.first.isFirst = true;
12829
- this.columnMenuItems.last.isLast = true;
12830
13033
  this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable.focus());
12831
13034
  }
12832
13035
  }
12833
- 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 });
13036
+ 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 });
12834
13037
  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: `
12835
13038
  <ng-content></ng-content>
12836
13039
  `, isInline: true });
@@ -12842,7 +13045,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
12842
13045
  <ng-content></ng-content>
12843
13046
  `
12844
13047
  }]
12845
- }], ctorParameters: function () { return [{ type: ColumnMenuService }, { type: i0.NgZone }]; }, propDecorators: { columnMenuItems: [{
13048
+ }], ctorParameters: function () {
13049
+ return [{ type: ColumnMenuService }, { type: i0.NgZone, decorators: [{
13050
+ type: Inject,
13051
+ args: [NgZone]
13052
+ }] }];
13053
+ }, propDecorators: { columnMenuItems: [{
12846
13054
  type: ContentChildren,
12847
13055
  args: [ColumnMenuItemDirective, { descendants: true }]
12848
13056
  }] } });
@@ -12924,7 +13132,7 @@ ColumnMenuSortComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
12924
13132
  (itemClick)="toggleSort('desc')"
12925
13133
  [selected]="sortedDesc">
12926
13134
  </kendo-grid-columnmenu-item>
12927
- `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
13135
+ `, isInline: true, components: [{ type: ColumnMenuItemComponent, selector: "kendo-grid-columnmenu-item", inputs: ["icon", "svgIcon", "text", "selected", "disabled", "expanded", "service"], outputs: ["itemClick", "expand", "collapse"] }] });
12928
13136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuSortComponent, decorators: [{
12929
13137
  type: Component,
12930
13138
  args: [{
@@ -12996,7 +13204,7 @@ ColumnMenuAutoSizeColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion
12996
13204
  [svgIcon]="maxWidthIcon"
12997
13205
  (itemClick)="autoSizeColumn()"
12998
13206
  ></kendo-grid-columnmenu-item>
12999
- `, 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"] }] });
13207
+ `, 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"] }] });
13000
13208
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuAutoSizeColumnComponent, decorators: [{
13001
13209
  type: Component,
13002
13210
  args: [{
@@ -13062,7 +13270,7 @@ ColumnMenuAutoSizeAllColumnsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVer
13062
13270
  [svgIcon]="displayInlineFlexIcon"
13063
13271
  (itemClick)="autoSizeAllColumns()"
13064
13272
  ></kendo-grid-columnmenu-item>
13065
- `, 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"] }] });
13273
+ `, 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"] }] });
13066
13274
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: ColumnMenuAutoSizeAllColumnsComponent, decorators: [{
13067
13275
  type: Component,
13068
13276
  args: [{
@@ -13357,10 +13565,14 @@ ColumnMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
13357
13565
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
13358
13566
  </a>
13359
13567
  <ng-template #template>
13360
- <ng-container
13361
- [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13362
- [ngTemplateOutletContext]="{ service: service, column: column }">
13363
- </ng-container>
13568
+ <kendo-grid-columnmenu-container
13569
+ (keydown.escape)="close(true)"
13570
+ (keydown.enter)="$event.stopImmediatePropagation()">
13571
+ <ng-container
13572
+ [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13573
+ [ngTemplateOutletContext]="{ service: service, column: column }">
13574
+ </ng-container>
13575
+ </kendo-grid-columnmenu-container>
13364
13576
  </ng-template>
13365
13577
  <ng-template #defaultTemplate>
13366
13578
  <kendo-grid-columnmenu-container
@@ -13528,10 +13740,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
13528
13740
  [svgIcon]="moreVerticalIcon"></kendo-icon-wrapper>
13529
13741
  </a>
13530
13742
  <ng-template #template>
13531
- <ng-container
13532
- [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13533
- [ngTemplateOutletContext]="{ service: service, column: column }">
13534
- </ng-container>
13743
+ <kendo-grid-columnmenu-container
13744
+ (keydown.escape)="close(true)"
13745
+ (keydown.enter)="$event.stopImmediatePropagation()">
13746
+ <ng-container
13747
+ [ngTemplateOutlet]="this.column.columnMenuTemplateRef || this.columnMenuTemplate || (this.settings.view === 'tabbed' ? this.tabbedInterfaceTemplate : this.defaultTemplate)"
13748
+ [ngTemplateOutletContext]="{ service: service, column: column }">
13749
+ </ng-container>
13750
+ </kendo-grid-columnmenu-container>
13535
13751
  </ng-template>
13536
13752
  <ng-template #defaultTemplate>
13537
13753
  <kendo-grid-columnmenu-container
@@ -16768,7 +16984,7 @@ CellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
16768
16984
  <input
16769
16985
  *ngSwitchDefault
16770
16986
  type="text"
16771
- class="k-textbox k-input k-input-solid k-rounded-md"
16987
+ class="k-textbox k-input k-input-md k-input-solid k-rounded-md"
16772
16988
  [formControl]="$any(formGroup.get(column.field))"
16773
16989
  kendoGridFocusable
16774
16990
  />
@@ -16849,7 +17065,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
16849
17065
  <input
16850
17066
  *ngSwitchDefault
16851
17067
  type="text"
16852
- class="k-textbox k-input k-input-solid k-rounded-md"
17068
+ class="k-textbox k-input k-input-md k-input-solid k-rounded-md"
16853
17069
  [formControl]="$any(formGroup.get(column.field))"
16854
17070
  kendoGridFocusable
16855
17071
  />
@@ -19342,7 +19558,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19342
19558
  class GridMessages extends ComponentMessages {
19343
19559
  }
19344
19560
  GridMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
19345
- 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 });
19561
+ 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 });
19346
19562
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GridMessages, decorators: [{
19347
19563
  type: Directive,
19348
19564
  args: [{
@@ -19511,6 +19727,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
19511
19727
  type: Input
19512
19728
  }], columnMenuColumnsTabTitle: [{
19513
19729
  type: Input
19730
+ }], groupChipMenuPrevious: [{
19731
+ type: Input
19732
+ }], groupChipMenuNext: [{
19733
+ type: Input
19514
19734
  }] } });
19515
19735
 
19516
19736
  /**
@@ -21638,6 +21858,12 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
21638
21858
  i18n-sortedDefault="kendo.grid.sortedDefault|The status announcement when a column is no longer sorted"
21639
21859
  sortedDefault="Not Sorted"
21640
21860
 
21861
+ i18n-sortedAscending="kendo.grid.sortedAscending|The title of the Group Chip indicating the ascending sorting order of the groups"
21862
+ sortedAscending="Sorted Ascending"
21863
+
21864
+ i18n-sortedDescending="kendo.grid.sortedDescending|The title of the Group Chip indicating the descending sorting order of the groups"
21865
+ sortedDescending="Sorted Descending"
21866
+
21641
21867
  i18n-columnsApply="kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
21642
21868
  columnsApply="Apply"
21643
21869
 
@@ -21697,6 +21923,12 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
21697
21923
 
21698
21924
  i18n-columnMenuColumnsTabTitle="kendo.grid.columnMenuColumnsTabTitle|The title for the column menu Columns tab"
21699
21925
  columnMenuColumnsTabTitle="Columns"
21926
+
21927
+ i18n-groupChipMenuPrevious="kendo.grid.groupChipMenuPrevious|The text for the Group pane Chip Menu Move as previous item"
21928
+ groupChipMenuPrevious="Move as previous"
21929
+
21930
+ i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
21931
+ groupChipMenuNext="Move as next"
21700
21932
  >
21701
21933
  </ng-container>
21702
21934
  <kendo-grid-toolbar
@@ -22256,6 +22488,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22256
22488
  i18n-sortedDefault="kendo.grid.sortedDefault|The status announcement when a column is no longer sorted"
22257
22489
  sortedDefault="Not Sorted"
22258
22490
 
22491
+ i18n-sortedAscending="kendo.grid.sortedAscending|The title of the Group Chip indicating the ascending sorting order of the groups"
22492
+ sortedAscending="Sorted Ascending"
22493
+
22494
+ i18n-sortedDescending="kendo.grid.sortedDescending|The title of the Group Chip indicating the descending sorting order of the groups"
22495
+ sortedDescending="Sorted Descending"
22496
+
22259
22497
  i18n-columnsApply="kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
22260
22498
  columnsApply="Apply"
22261
22499
 
@@ -22315,6 +22553,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22315
22553
 
22316
22554
  i18n-columnMenuColumnsTabTitle="kendo.grid.columnMenuColumnsTabTitle|The title for the column menu Columns tab"
22317
22555
  columnMenuColumnsTabTitle="Columns"
22556
+
22557
+ i18n-groupChipMenuPrevious="kendo.grid.groupChipMenuPrevious|The text for the Group pane Chip Menu Move as previous item"
22558
+ groupChipMenuPrevious="Move as previous"
22559
+
22560
+ i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
22561
+ groupChipMenuNext="Move as next"
22318
22562
  >
22319
22563
  </ng-container>
22320
22564
  <kendo-grid-toolbar
@@ -22838,7 +23082,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
22838
23082
  * [sorting]({% slug sorting_grid %}), and [grouping]({% slug grouping_grid %})
22839
23083
  * ([more information and examples]({% slug local_data_grid %}#toc-using-the-data-binding-directive)).
22840
23084
  *
22841
- * @example
23085
+ * @example
22842
23086
  * ```html
22843
23087
  * <kendo-grid [kendoGridBinding]="gridData" ...></kendo-grid>
22844
23088
  * ```
@@ -24323,7 +24567,7 @@ const exportedModules$4 = [
24323
24567
  GroupHeaderColumnTemplateDirective,
24324
24568
  GroupFooterTemplateDirective,
24325
24569
  GroupHeaderComponent,
24326
- GroupPanelComponent
24570
+ GroupPanelComponent,
24327
24571
  ];
24328
24572
  /**
24329
24573
  * @hidden
@@ -24342,18 +24586,18 @@ GroupModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
24342
24586
  GroupHeaderColumnTemplateDirective,
24343
24587
  GroupFooterTemplateDirective,
24344
24588
  GroupHeaderComponent,
24345
- GroupPanelComponent], imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule], exports: [GroupHeaderTemplateDirective,
24589
+ GroupPanelComponent], imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule, PopupModule], exports: [GroupHeaderTemplateDirective,
24346
24590
  GroupHeaderColumnTemplateDirective,
24347
24591
  GroupFooterTemplateDirective,
24348
24592
  GroupHeaderComponent,
24349
24593
  GroupPanelComponent] });
24350
- GroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupModule, imports: [[CommonModule, SharedModule, DragAndDropModule, ChipModule]] });
24594
+ GroupModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupModule, imports: [[CommonModule, SharedModule, DragAndDropModule, ChipModule, PopupModule]] });
24351
24595
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GroupModule, decorators: [{
24352
24596
  type: NgModule,
24353
24597
  args: [{
24354
- declarations: [exportedModules$4],
24598
+ declarations: [...exportedModules$4],
24355
24599
  exports: [exportedModules$4],
24356
- imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule]
24600
+ imports: [CommonModule, SharedModule, DragAndDropModule, ChipModule, PopupModule]
24357
24601
  }]
24358
24602
  }] });
24359
24603