@progress/kendo-angular-pivotgrid 0.2.0-dev.202208190706 → 0.2.0-dev.202209020832

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 (58) hide show
  1. package/bundles/kendo-angular-pivotgrid.umd.js +1 -1
  2. package/configurator/chip-menu/chip-menu-container.component.d.ts +21 -0
  3. package/configurator/chip-menu/chip-menu-filter.component.d.ts +44 -0
  4. package/configurator/chip-menu/chip-menu-item-base.d.ts +22 -0
  5. package/configurator/chip-menu/chip-menu-item-content-template.directive.d.ts +18 -0
  6. package/configurator/chip-menu/chip-menu-item.component.d.ts +50 -0
  7. package/configurator/chip-menu/chip-menu-item.directive.d.ts +32 -0
  8. package/configurator/chip-menu/chip-menu-sort.component.d.ts +33 -0
  9. package/configurator/chip-menu/chip-menu.component.d.ts +35 -0
  10. package/configurator/chip-menu/chip-menu.module.d.ts +26 -0
  11. package/configurator/chip-menu/chip-menu.service.d.ts +22 -0
  12. package/configurator/chip-menu/filtering/filter-menu-container.component.d.ts +47 -0
  13. package/configurator/chip-menu/filtering/filter-menu-dropdownlist.directive.d.ts +19 -0
  14. package/configurator/chip-menu/filtering/menu-tabbing.service.d.ts +17 -0
  15. package/configurator/chip-menu/filtering/string-filter-menu.component.d.ts +53 -0
  16. package/configurator/chip-menu/single-popup.service.d.ts +50 -0
  17. package/configurator/configurator.component.d.ts +4 -1
  18. package/data-binding/base-binding-directive.d.ts +16 -1
  19. package/esm2015/configurator/chip-menu/chip-menu-container.component.js +46 -0
  20. package/esm2015/configurator/chip-menu/chip-menu-filter.component.js +112 -0
  21. package/esm2015/configurator/chip-menu/chip-menu-item-base.js +36 -0
  22. package/esm2015/configurator/chip-menu/chip-menu-item-content-template.directive.js +27 -0
  23. package/esm2015/configurator/chip-menu/chip-menu-item.component.js +157 -0
  24. package/esm2015/configurator/chip-menu/chip-menu-item.directive.js +88 -0
  25. package/esm2015/configurator/chip-menu/chip-menu-sort.component.js +89 -0
  26. package/esm2015/configurator/chip-menu/chip-menu.component.js +130 -0
  27. package/esm2015/configurator/chip-menu/chip-menu.module.js +83 -0
  28. package/esm2015/configurator/chip-menu/chip-menu.service.js +28 -0
  29. package/esm2015/configurator/chip-menu/filtering/filter-menu-container.component.js +173 -0
  30. package/esm2015/configurator/chip-menu/filtering/filter-menu-dropdownlist.directive.js +38 -0
  31. package/esm2015/configurator/chip-menu/filtering/menu-tabbing.service.js +20 -0
  32. package/esm2015/configurator/chip-menu/filtering/string-filter-menu.component.js +133 -0
  33. package/esm2015/configurator/chip-menu/single-popup.service.js +121 -0
  34. package/esm2015/configurator/configurator.component.js +56 -33
  35. package/esm2015/configurator/configurator.service.js +2 -2
  36. package/esm2015/data-binding/base-binding-directive.js +30 -4
  37. package/esm2015/data-binding/local-binding.directive.js +3 -3
  38. package/esm2015/data-binding/olap-binding.directive.js +6 -4
  39. package/esm2015/localization/messages.js +3 -1
  40. package/esm2015/localization/pivot-localization.service.js +28 -0
  41. package/esm2015/models/configurator-settings.js +3 -1
  42. package/esm2015/models/data-row-item.js +6 -0
  43. package/esm2015/package-metadata.js +1 -1
  44. package/esm2015/pivotgrid.component.js +72 -13
  45. package/esm2015/pivotgrid.module.js +9 -12
  46. package/esm2015/shared.module.js +40 -0
  47. package/esm2015/util.js +13 -0
  48. package/fesm2015/kendo-angular-pivotgrid.js +1400 -81
  49. package/localization/messages.d.ts +23 -1
  50. package/localization/pivot-localization.service.d.ts +19 -0
  51. package/main.d.ts +1 -0
  52. package/models/configurator-settings.d.ts +4 -1
  53. package/models/data-row-item.d.ts +18 -0
  54. package/package.json +3 -3
  55. package/pivotgrid.component.d.ts +15 -3
  56. package/pivotgrid.module.d.ts +6 -7
  57. package/shared.module.d.ts +17 -0
  58. package/util.d.ts +12 -0
@@ -3,25 +3,31 @@
3
3
  * Licensed under commercial license. See LICENSE.md in the project root for more information
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import * as i0 from '@angular/core';
6
- import { EventEmitter, Injectable, Output, Component, HostBinding, Input, Directive, Optional, forwardRef, ElementRef, ViewChild, NgModule } from '@angular/core';
6
+ import { EventEmitter, Injectable, Output, Component, HostBinding, Input, Directive, ContentChildren, isDevMode, Optional, ContentChild, forwardRef, ViewChild, ElementRef, NgModule } from '@angular/core';
7
7
  import { validatePackage } from '@progress/kendo-licensing';
8
8
  import * as i3 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, PreventableEvent, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
10
- import { toTree, toRows, toColumns, toData, configuratorReducer, PIVOT_CONFIGURATOR_ACTION, HEADERS_ACTION, headersReducer, createFlatSchemaDimensions, createDataTree, createLocalDataState, rootFields, fetchData, createDataState, fetchDiscover, addKPI, buildKPIMeasures } from '@progress/kendo-pivotgrid-common';
9
+ import { isDocumentAvailable, PreventableEvent, Keys, isChanged, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
10
+ import { toTree, toRows, toColumns, toData, configuratorReducer, PIVOT_CONFIGURATOR_ACTION, PivotGridNavigation, HEADERS_ACTION, headersReducer, createFlatSchemaDimensions, createDataTree, createLocalDataState, rootFields, fetchData, createDataState, fetchDiscover, addKPI, buildKPIMeasures } from '@progress/kendo-pivotgrid-common';
11
11
  export { averageAggregate, maxAggregate, minAggregate, sumAggregate } from '@progress/kendo-pivotgrid-common';
12
- import { BehaviorSubject, Subscription, from, of, fromEvent } from 'rxjs';
13
- import { mergeMap, merge } from 'rxjs/operators';
14
- import * as i2 from '@progress/kendo-angular-l10n';
12
+ import { BehaviorSubject, Subscription, Subject, from, of, fromEvent } from 'rxjs';
13
+ import { take, mergeMap, merge } from 'rxjs/operators';
14
+ import * as i1 from '@progress/kendo-angular-l10n';
15
15
  import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
16
- import * as i6 from '@angular/common';
16
+ import * as i7 from '@angular/common';
17
17
  import { CommonModule } from '@angular/common';
18
18
  import * as i5$1 from '@progress/kendo-angular-indicators';
19
19
  import { IndicatorsModule } from '@progress/kendo-angular-indicators';
20
+ import * as i1$1 from '@progress/kendo-angular-popup';
20
21
  import * as i4 from '@progress/kendo-angular-treeview';
21
22
  import { TreeViewModule } from '@progress/kendo-angular-treeview';
22
23
  import * as i5 from '@progress/kendo-angular-buttons';
23
24
  import { ButtonsModule } from '@progress/kendo-angular-buttons';
24
- import * as i7 from '@progress/kendo-angular-inputs';
25
+ import { trigger, state, style, transition, animate } from '@angular/animations';
26
+ import * as i3$1 from '@angular/forms';
27
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';
28
+ import * as i1$2 from '@progress/kendo-angular-dropdowns';
29
+ import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
30
+ import * as i6 from '@progress/kendo-angular-inputs';
25
31
  import { InputsModule } from '@progress/kendo-angular-inputs';
26
32
  import { __awaiter } from 'tslib';
27
33
 
@@ -32,15 +38,24 @@ const packageMetadata = {
32
38
  name: '@progress/kendo-angular-pivotgrid',
33
39
  productName: 'Kendo UI for Angular',
34
40
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
35
- publishDate: 1660892763,
41
+ publishDate: 1662107494,
36
42
  version: '',
37
43
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
38
44
  };
39
45
 
46
+ const EMPTY_REGEX = /^\s*$/;
40
47
  /**
41
48
  * @hidden
42
49
  */
43
50
  const isPresent = (value) => value !== null && value !== undefined;
51
+ /**
52
+ * @hidden
53
+ */
54
+ const isBlank = (value) => value === null || value === undefined;
55
+ /**
56
+ * @hidden
57
+ */
58
+ const isNullOrEmptyString = (value) => isBlank(value) || EMPTY_REGEX.test(value);
44
59
  /**
45
60
  * @hidden
46
61
  * Returns whether two arrays contain the same values.
@@ -185,6 +200,10 @@ const position = (target, before) => {
185
200
  * @hidden
186
201
  */
187
202
  const filterAndMap = (arr, predicate, mapper) => arr.reduce((acc, curr) => predicate(curr) ? [...acc, mapper(curr)] : acc, []);
203
+ /**
204
+ * @hidden
205
+ */
206
+ const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`\{\\s*${name}\\s*\}`, 'g'), value);
188
207
 
189
208
  /**
190
209
  * @hidden
@@ -242,6 +261,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
242
261
  type: Output
243
262
  }] } });
244
263
 
264
+ /**
265
+ * @hidden
266
+ *
267
+ * Needed to keep the Pivot's LocalizationService reference and be able to use it inside the ChipList component.
268
+ */
269
+ class PivotLocalizationService {
270
+ constructor(localization) {
271
+ this.localization = localization;
272
+ }
273
+ get(token) {
274
+ return this.localization.get(token);
275
+ }
276
+ get rtl() {
277
+ return this.localization.rtl;
278
+ }
279
+ }
280
+ PivotLocalizationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotLocalizationService, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
281
+ PivotLocalizationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotLocalizationService });
282
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotLocalizationService, decorators: [{
283
+ type: Injectable
284
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
285
+
245
286
  /**
246
287
  * @hidden
247
288
  */
@@ -295,7 +336,7 @@ PivotGridCellDirective.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
295
336
  [ngClass]="{
296
337
  'k-i-arrow-chevron-up': expanded,
297
338
  'k-i-arrow-chevron-down': !expanded
298
- }"></span>{{ kendoPivotGridCell.data ? kendoPivotGridCell.data.fmtValue : kendoPivotGridCell.caption }}`, isInline: true, directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
339
+ }"></span>{{ kendoPivotGridCell.data ? kendoPivotGridCell.data.fmtValue : kendoPivotGridCell.caption }}`, isInline: true, directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
299
340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridCellDirective, decorators: [{
300
341
  type: Component,
301
342
  args: [{
@@ -384,7 +425,7 @@ PivotGridTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
384
425
  </tr>
385
426
  </tbody>
386
427
  </table>
387
- `, isInline: true, components: [{ type: PivotGridCellDirective, selector: "[kendoPivotGridCell]", inputs: ["kendoPivotGridCell", "tableType", "rowIndex", "colIndex"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
428
+ `, isInline: true, components: [{ type: PivotGridCellDirective, selector: "[kendoPivotGridCell]", inputs: ["kendoPivotGridCell", "tableType", "rowIndex", "colIndex"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
388
429
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridTableComponent, decorators: [{
389
430
  type: Component,
390
431
  args: [{
@@ -441,8 +482,8 @@ class ConfiguratorService {
441
482
  }
442
483
  parseConfiguratorState(action) {
443
484
  const newState = configuratorReducer({
444
- filter: [],
445
- sort: [],
485
+ filter: this.state.filter,
486
+ sort: this.state.sort,
446
487
  rowAxes: this.state.rowAxes,
447
488
  columnAxes: this.state.columnAxes,
448
489
  measureAxes: this.state.measureAxes,
@@ -523,6 +564,1079 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
523
564
  type: Injectable
524
565
  }] });
525
566
 
567
+ const contains = (node, predicate) => {
568
+ while (node) {
569
+ if (predicate(node)) {
570
+ return true;
571
+ }
572
+ node = node.parentNode;
573
+ }
574
+ return false;
575
+ };
576
+ /**
577
+ * @hidden
578
+ * Arguments for the `close` event of the chip-menu popup.
579
+ */
580
+ class PopupCloseEvent extends PreventableEvent {
581
+ constructor(e) {
582
+ super();
583
+ this.originalEvent = e;
584
+ }
585
+ }
586
+ const DEFAULT_POPUP_CLASS = 'k-grid-filter-popup';
587
+ /**
588
+ * @hidden
589
+ * The service that is used for the popups of the chip menus.
590
+ */
591
+ class SinglePopupService {
592
+ constructor(popupService, renderer, ngZone, localization) {
593
+ this.popupService = popupService;
594
+ this.renderer = renderer;
595
+ this.ngZone = ngZone;
596
+ this.localization = localization;
597
+ /**
598
+ * Fires when the chip menus are about to close because the user clicked outside their popups.
599
+ * Used to prevent the popup from closing.
600
+ */
601
+ this.onClose = new Subject();
602
+ this.pointerEventsSub = new Subscription();
603
+ this.scrollSubscription = new Subscription();
604
+ }
605
+ open(anchor, template, popupRef, popupClass = DEFAULT_POPUP_CLASS) {
606
+ var _a;
607
+ const toggle = isPresent(popupRef) && this.popupRef === popupRef;
608
+ this.destroy();
609
+ if (!toggle) {
610
+ const direction = this.localization.rtl ? 'right' : 'left';
611
+ this.popupRef = this.popupService.open({
612
+ anchorAlign: { vertical: 'bottom', horizontal: direction },
613
+ popupAlign: { vertical: 'top', horizontal: direction },
614
+ anchor: anchor,
615
+ popupClass: popupClass,
616
+ content: template,
617
+ positionMode: "absolute"
618
+ });
619
+ this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.localization.rtl ? 'rtl' : 'ltr');
620
+ this.attachClose(anchor);
621
+ }
622
+ const popupEl = (_a = this.popupRef) === null || _a === void 0 ? void 0 : _a.popupElement;
623
+ if (popupEl) {
624
+ this.attachMouseListeners(popupEl);
625
+ }
626
+ return this.popupRef;
627
+ }
628
+ destroy() {
629
+ if (this.popupRef) {
630
+ this.detachClose();
631
+ this.pointerEventsSub.unsubscribe();
632
+ this.pointerEventsSub = null;
633
+ this.popupRef.close();
634
+ this.popupRef = null;
635
+ }
636
+ }
637
+ ngOnDestroy() {
638
+ this.destroy();
639
+ this.scrollSubscription.unsubscribe();
640
+ }
641
+ detachClose() {
642
+ if (this.removeClick) {
643
+ this.removeClick();
644
+ }
645
+ }
646
+ attachClose(skipElement) {
647
+ this.detachClose();
648
+ this.ngZone.runOutsideAngular(() => this.removeClick = this.renderer.listen('document', 'click', (e) => {
649
+ if (!contains(e.target, x => this.popupRef.popupElement === x || x === skipElement)) {
650
+ const args = new PopupCloseEvent(e);
651
+ this.onClose.next(args);
652
+ if (!args.isDefaultPrevented() && this.canClosePopup) {
653
+ this.destroy();
654
+ }
655
+ this.canClosePopup = true;
656
+ }
657
+ }));
658
+ }
659
+ attachMouseListeners(el) {
660
+ this.pointerEventsSub = new Subscription();
661
+ this.ngZone.runOutsideAngular(() => {
662
+ this.pointerEventsSub.add(this.renderer.listen(el, 'pointerdown', (e) => {
663
+ e.stopImmediatePropagation();
664
+ this.canClosePopup = false;
665
+ }));
666
+ this.pointerEventsSub.add(this.renderer.listen(el, 'pointerup', () => {
667
+ this.canClosePopup = true;
668
+ }));
669
+ });
670
+ }
671
+ }
672
+ SinglePopupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SinglePopupService, deps: [{ token: i1$1.PopupService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: PivotLocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
673
+ SinglePopupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SinglePopupService });
674
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SinglePopupService, decorators: [{
675
+ type: Injectable
676
+ }], ctorParameters: function () { return [{ type: i1$1.PopupService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: PivotLocalizationService }]; } });
677
+
678
+ /**
679
+ * @hidden
680
+ */
681
+ class MenuTabbingService {
682
+ constructor() {
683
+ this.isColumnMenu = false;
684
+ this.isPopupOpen = false;
685
+ }
686
+ }
687
+ MenuTabbingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MenuTabbingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
688
+ MenuTabbingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MenuTabbingService });
689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: MenuTabbingService, decorators: [{
690
+ type: Injectable
691
+ }] });
692
+
693
+ /**
694
+ * @hidden
695
+ * Represents the service that is passed to the ChipMenuFilterComponent and ChipMenuSortComponent.
696
+ */
697
+ class ChipMenuService {
698
+ constructor(menuTabbingService) {
699
+ this.closeMenu = new EventEmitter();
700
+ this.menuTabbingService = menuTabbingService;
701
+ }
702
+ /**
703
+ * Closes the chip menu.
704
+ */
705
+ close() {
706
+ this.closeMenu.emit();
707
+ }
708
+ }
709
+ ChipMenuService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuService, deps: [{ token: MenuTabbingService }], target: i0.ɵɵFactoryTarget.Injectable });
710
+ ChipMenuService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuService });
711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuService, decorators: [{
712
+ type: Injectable
713
+ }], ctorParameters: function () { return [{ type: MenuTabbingService }]; } });
714
+
715
+ /**
716
+ * @hidden
717
+ */
718
+ class ChipMenuItemDirective {
719
+ constructor(hostElement, renderer, ngZone) {
720
+ this.hostElement = hostElement;
721
+ this.renderer = renderer;
722
+ this.ngZone = ngZone;
723
+ this._isFirst = false;
724
+ this._isLast = false;
725
+ this.subs = new Subscription();
726
+ this.onTab = (e) => {
727
+ if (e.keyCode !== Keys.Tab) {
728
+ return;
729
+ }
730
+ if (this.isFirst && e.shiftKey && e.target === this.chipMenuItems[0]) {
731
+ e.preventDefault();
732
+ this.menuItemComponent.service.menuTabbingService.lastFocusable.focus();
733
+ }
734
+ if (this.isLast && !e.shiftKey) {
735
+ const lastColumnMenuItem = this.getLastColumnMenuItem();
736
+ const isExpanded = this.menuItemComponent.expanded;
737
+ if (lastColumnMenuItem === e.target && !isExpanded) {
738
+ e.preventDefault();
739
+ this.menuItemComponent.service.menuTabbingService.firstFocusable.focus();
740
+ }
741
+ }
742
+ };
743
+ }
744
+ set isFirst(value) {
745
+ if (value) {
746
+ const focusableElement = this.chipMenuItems[0];
747
+ this.menuItemComponent.service.menuTabbingService.firstFocusable = focusableElement;
748
+ this.ngZone.runOutsideAngular(() => {
749
+ const firstItemKeydownSub = this.renderer.listen(focusableElement, 'keydown', this.onTab);
750
+ this.subs.add(firstItemKeydownSub);
751
+ });
752
+ }
753
+ this._isFirst = value;
754
+ }
755
+ get isFirst() {
756
+ return this._isFirst;
757
+ }
758
+ set isLast(value) {
759
+ if (!this.chipMenuItems) {
760
+ return;
761
+ }
762
+ if (value) {
763
+ const lastFocusableElement = this.getLastColumnMenuItem();
764
+ this.menuItemComponent.service.menuTabbingService.lastFocusable = lastFocusableElement;
765
+ this.ngZone.runOutsideAngular(() => {
766
+ const lastItemKeydownSub = this.renderer.listen(lastFocusableElement, 'keydown', this.onTab);
767
+ this.subs.add(lastItemKeydownSub);
768
+ });
769
+ }
770
+ this._isLast = value;
771
+ }
772
+ get isLast() {
773
+ return this._isLast;
774
+ }
775
+ ngAfterViewInit() {
776
+ this.chipMenuItems = this.hostElement.nativeElement.querySelectorAll('.k-columnmenu-item');
777
+ this.chipMenuItems.forEach(el => this.renderer.setAttribute(el, 'tabindex', '0'));
778
+ }
779
+ ngOnDestroy() {
780
+ this.subs.unsubscribe();
781
+ }
782
+ getLastColumnMenuItem() {
783
+ return (this.chipMenuItems.length === 1 ? this.chipMenuItems[0] : this.chipMenuItems[1]);
784
+ }
785
+ }
786
+ ChipMenuItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
787
+ ChipMenuItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuItemDirective, selector: "[kendoPivotChipMenuItem]", inputs: { menuItemComponent: ["kendoPivotChipMenuItem", "menuItemComponent"] }, ngImport: i0 });
788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemDirective, decorators: [{
789
+ type: Directive,
790
+ args: [{ selector: '[kendoPivotChipMenuItem]' }]
791
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { menuItemComponent: [{
792
+ type: Input,
793
+ args: ['kendoPivotChipMenuItem']
794
+ }] } });
795
+
796
+ /**
797
+ * @hidden
798
+ */
799
+ class ChipMenuContainerComponent {
800
+ constructor(service, ngZone) {
801
+ this.service = service;
802
+ this.ngZone = ngZone;
803
+ this.hostClass = true;
804
+ }
805
+ ngAfterViewInit() {
806
+ if (!this.chipMenuItems.length) {
807
+ return;
808
+ }
809
+ this.chipMenuItems.first.isFirst = true;
810
+ this.chipMenuItems.last.isLast = true;
811
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => this.service.menuTabbingService.firstFocusable.focus());
812
+ }
813
+ }
814
+ ChipMenuContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuContainerComponent, deps: [{ token: ChipMenuService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
815
+ ChipMenuContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuContainerComponent, selector: "kendo-pivot-chipmenu-container", host: { properties: { "class.k-grid-columnmenu-popup": "this.hostClass" } }, queries: [{ propertyName: "chipMenuItems", predicate: ChipMenuItemDirective, descendants: true }], ngImport: i0, template: `
816
+ <ng-content></ng-content>
817
+ `, isInline: true });
818
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuContainerComponent, decorators: [{
819
+ type: Component,
820
+ args: [{
821
+ selector: 'kendo-pivot-chipmenu-container',
822
+ template: `
823
+ <ng-content></ng-content>
824
+ `
825
+ }]
826
+ }], ctorParameters: function () { return [{ type: ChipMenuService }, { type: i0.NgZone }]; }, propDecorators: { chipMenuItems: [{
827
+ type: ContentChildren,
828
+ args: [ChipMenuItemDirective, { descendants: true }]
829
+ }], hostClass: [{
830
+ type: HostBinding,
831
+ args: ['class.k-grid-columnmenu-popup']
832
+ }] } });
833
+
834
+ /**
835
+ * @hidden
836
+ */
837
+ class ChipMenuItemBase {
838
+ constructor() {
839
+ this.hostClass = true;
840
+ }
841
+ ngOnInit() {
842
+ if (isDevMode() && !this.service) {
843
+ throw new Error('The service input of the host chip menu components (e.g. ChipMenuSortComponent) is mandatory.');
844
+ }
845
+ }
846
+ close() {
847
+ this.service.close();
848
+ }
849
+ }
850
+ ChipMenuItemBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
851
+ ChipMenuItemBase.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuItemBase, selector: "kendo-pivot-chip-menu-item-base", inputs: { service: "service" }, host: { properties: { "class.k-columnmenu-item-wrapper": "this.hostClass" } }, ngImport: i0, template: ``, isInline: true });
852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemBase, decorators: [{
853
+ type: Component,
854
+ args: [{
855
+ selector: 'kendo-pivot-chip-menu-item-base',
856
+ template: ``
857
+ }]
858
+ }], propDecorators: { service: [{
859
+ type: Input
860
+ }], hostClass: [{
861
+ type: HostBinding,
862
+ args: ['class.k-columnmenu-item-wrapper']
863
+ }] } });
864
+
865
+ /**
866
+ * @hidden
867
+ *
868
+ * Represents the content template of the ChipMenuItemComponent.
869
+ * Provides an option for specifying the content of a chip menu item..
870
+ */
871
+ class ChipMenuItemContentTemplateDirective {
872
+ constructor(templateRef) {
873
+ this.templateRef = templateRef;
874
+ }
875
+ }
876
+ ChipMenuItemContentTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemContentTemplateDirective, deps: [{ token: i0.TemplateRef, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
877
+ ChipMenuItemContentTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuItemContentTemplateDirective, selector: "[kendoPivotChipMenuItemContentTemplate]", ngImport: i0 });
878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemContentTemplateDirective, decorators: [{
879
+ type: Directive,
880
+ args: [{
881
+ selector: '[kendoPivotChipMenuItemContentTemplate]'
882
+ }]
883
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
884
+ type: Optional
885
+ }] }]; } });
886
+
887
+ /**
888
+ * @hidden
889
+ *
890
+ */
891
+ class ChipMenuItemComponent {
892
+ constructor() {
893
+ /**
894
+ * Fires when the item is clicked.
895
+ */
896
+ this.itemClick = new EventEmitter();
897
+ /**
898
+ * Fires when the content is expanded.
899
+ */
900
+ this.expand = new EventEmitter();
901
+ /**
902
+ * Fires when the content is collapsed.
903
+ */
904
+ this.collapse = new EventEmitter();
905
+ this.contentState = 'collapsed';
906
+ }
907
+ get iconClass() {
908
+ return `k-i-${this.icon}`;
909
+ }
910
+ ngOnChanges(changes) {
911
+ if (changes.expanded) {
912
+ this.updateContentState();
913
+ }
914
+ }
915
+ onClick(e) {
916
+ this.itemClick.emit(e);
917
+ if (this.contentTemplate) {
918
+ this.expanded = !this.expanded;
919
+ this.updateContentState();
920
+ if (this.expanded) {
921
+ this.expand.emit();
922
+ }
923
+ else {
924
+ this.collapse.emit();
925
+ }
926
+ }
927
+ }
928
+ updateContentState() {
929
+ this.contentState = this.expanded ? 'expanded' : 'collapsed';
930
+ }
931
+ }
932
+ ChipMenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
933
+ ChipMenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuItemComponent, selector: "kendo-pivot-chipmenu-item", inputs: { icon: "icon", text: "text", selected: "selected", expanded: "expanded" }, outputs: { itemClick: "itemClick", expand: "expand", collapse: "collapse" }, queries: [{ propertyName: "contentTemplate", first: true, predicate: ChipMenuItemContentTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
934
+ <div
935
+ class="k-columnmenu-item"
936
+ (click)="onClick($event)"
937
+ (keydown.enter)="onClick($event)"
938
+ [class.k-selected]="selected"
939
+ role="button"
940
+ [attr.aria-expanded]="expanded">
941
+ <span *ngIf="icon" class="k-icon" [ngClass]="iconClass">
942
+ </span>
943
+ {{ text }}
944
+ </div>
945
+ <div *ngIf="contentTemplate" [@state]="contentState" style="overflow:hidden;" class="k-columnmenu-item-content">
946
+ <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
947
+ </ng-container>
948
+ <div>
949
+ `, isInline: true, directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [
950
+ trigger('state', [
951
+ state('collapsed', style({ display: 'none' })),
952
+ state('expanded', style({ display: 'block' })),
953
+ transition('collapsed => expanded', [
954
+ style({
955
+ height: '0px',
956
+ display: 'block'
957
+ }),
958
+ animate('100ms ease-in', style({
959
+ height: '*'
960
+ }))
961
+ ]),
962
+ transition('expanded => collapsed', [
963
+ style({
964
+ height: '*'
965
+ }),
966
+ animate('100ms ease-in', style({
967
+ height: '0px'
968
+ }))
969
+ ])
970
+ ])
971
+ ] });
972
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuItemComponent, decorators: [{
973
+ type: Component,
974
+ args: [{
975
+ animations: [
976
+ trigger('state', [
977
+ state('collapsed', style({ display: 'none' })),
978
+ state('expanded', style({ display: 'block' })),
979
+ transition('collapsed => expanded', [
980
+ style({
981
+ height: '0px',
982
+ display: 'block'
983
+ }),
984
+ animate('100ms ease-in', style({
985
+ height: '*'
986
+ }))
987
+ ]),
988
+ transition('expanded => collapsed', [
989
+ style({
990
+ height: '*'
991
+ }),
992
+ animate('100ms ease-in', style({
993
+ height: '0px'
994
+ }))
995
+ ])
996
+ ])
997
+ ],
998
+ selector: 'kendo-pivot-chipmenu-item',
999
+ template: `
1000
+ <div
1001
+ class="k-columnmenu-item"
1002
+ (click)="onClick($event)"
1003
+ (keydown.enter)="onClick($event)"
1004
+ [class.k-selected]="selected"
1005
+ role="button"
1006
+ [attr.aria-expanded]="expanded">
1007
+ <span *ngIf="icon" class="k-icon" [ngClass]="iconClass">
1008
+ </span>
1009
+ {{ text }}
1010
+ </div>
1011
+ <div *ngIf="contentTemplate" [@state]="contentState" style="overflow:hidden;" class="k-columnmenu-item-content">
1012
+ <ng-container [ngTemplateOutlet]="contentTemplate.templateRef">
1013
+ </ng-container>
1014
+ <div>
1015
+ `
1016
+ }]
1017
+ }], propDecorators: { itemClick: [{
1018
+ type: Output
1019
+ }], expand: [{
1020
+ type: Output
1021
+ }], collapse: [{
1022
+ type: Output
1023
+ }], icon: [{
1024
+ type: Input
1025
+ }], text: [{
1026
+ type: Input
1027
+ }], selected: [{
1028
+ type: Input
1029
+ }], expanded: [{
1030
+ type: Input
1031
+ }], contentTemplate: [{
1032
+ type: ContentChild,
1033
+ args: [ChipMenuItemContentTemplateDirective, { static: false }]
1034
+ }] } });
1035
+
1036
+ /**
1037
+ * @hidden
1038
+ *
1039
+ * Represents a chip-menu item for sorting PivotGrid fields.
1040
+ * Allows the user to sort the PivotGrid.
1041
+ */
1042
+ class ChipMenuSortComponent extends ChipMenuItemBase {
1043
+ constructor(localization, renderer, configuratorService) {
1044
+ super();
1045
+ this.localization = localization;
1046
+ this.renderer = renderer;
1047
+ this.configuratorService = configuratorService;
1048
+ }
1049
+ get sortedAsc() {
1050
+ const descriptor = this.descriptor;
1051
+ return descriptor && (!descriptor.dir || descriptor.dir === 'asc');
1052
+ }
1053
+ get sortedDesc() {
1054
+ const descriptor = this.descriptor;
1055
+ return descriptor && descriptor.dir === 'desc';
1056
+ }
1057
+ /**
1058
+ * Returns the localized message for a given token
1059
+ */
1060
+ messageFor(localizationToken) {
1061
+ return this.localization.get(localizationToken);
1062
+ }
1063
+ toggleSort(dir) {
1064
+ const field = this.chip.name.toString();
1065
+ const descriptor = this.descriptor;
1066
+ const sort = this.configuratorService.state.sort.filter(s => s.field !== field);
1067
+ if (!descriptor || descriptor.dir !== dir) {
1068
+ sort.push({ field, dir });
1069
+ }
1070
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setSort, payload: sort });
1071
+ this.close();
1072
+ }
1073
+ get descriptor() {
1074
+ return [].concat(this.configuratorService.state.sort || []).find(s => s.field === this.chip.name.toString());
1075
+ }
1076
+ }
1077
+ ChipMenuSortComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuSortComponent, deps: [{ token: PivotLocalizationService }, { token: i0.Renderer2 }, { token: ConfiguratorService }], target: i0.ɵɵFactoryTarget.Component });
1078
+ ChipMenuSortComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuSortComponent, selector: "kendo-pivot-chipmenu-sort", inputs: { chip: "chip" }, usesInheritance: true, ngImport: i0, template: `
1079
+ <kendo-pivot-chipmenu-item
1080
+ [text]="messageFor('fieldMenuSortAscendingItemLabel')"
1081
+ icon="sort-asc-small"
1082
+ (itemClick)="toggleSort('asc')"
1083
+ [selected]="sortedAsc">
1084
+ </kendo-pivot-chipmenu-item>
1085
+ <kendo-pivot-chipmenu-item
1086
+ [text]="messageFor('fieldMenuSortDescendingItemLabel')"
1087
+ icon="sort-desc-small"
1088
+ (itemClick)="toggleSort('desc')"
1089
+ [selected]="sortedDesc">
1090
+ </kendo-pivot-chipmenu-item>
1091
+ `, isInline: true, components: [{ type: ChipMenuItemComponent, selector: "kendo-pivot-chipmenu-item", inputs: ["icon", "text", "selected", "expanded"], outputs: ["itemClick", "expand", "collapse"] }] });
1092
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuSortComponent, decorators: [{
1093
+ type: Component,
1094
+ args: [{
1095
+ selector: 'kendo-pivot-chipmenu-sort',
1096
+ template: `
1097
+ <kendo-pivot-chipmenu-item
1098
+ [text]="messageFor('fieldMenuSortAscendingItemLabel')"
1099
+ icon="sort-asc-small"
1100
+ (itemClick)="toggleSort('asc')"
1101
+ [selected]="sortedAsc">
1102
+ </kendo-pivot-chipmenu-item>
1103
+ <kendo-pivot-chipmenu-item
1104
+ [text]="messageFor('fieldMenuSortDescendingItemLabel')"
1105
+ icon="sort-desc-small"
1106
+ (itemClick)="toggleSort('desc')"
1107
+ [selected]="sortedDesc">
1108
+ </kendo-pivot-chipmenu-item>
1109
+ `
1110
+ }]
1111
+ }], ctorParameters: function () { return [{ type: PivotLocalizationService }, { type: i0.Renderer2 }, { type: ConfiguratorService }]; }, propDecorators: { chip: [{
1112
+ type: Input
1113
+ }] } });
1114
+
1115
+ /**
1116
+ * @hidden
1117
+ */
1118
+ class FilterMenuDropDownListDirective {
1119
+ constructor(host) {
1120
+ this.host = host;
1121
+ this.keydownHandler = (e) => {
1122
+ if (e.keyCode === Keys.Escape && this.host.isOpen) {
1123
+ e.stopPropagation();
1124
+ this.host.toggle(false);
1125
+ }
1126
+ };
1127
+ }
1128
+ ngAfterViewInit() {
1129
+ const wrapperElement = this.host.wrapper.nativeElement;
1130
+ wrapperElement.setAttribute('aria-label', this.filterMenuDropDownLabel);
1131
+ wrapperElement.addEventListener('keydown', this.keydownHandler, true);
1132
+ }
1133
+ ngOnDestroy() {
1134
+ this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
1135
+ }
1136
+ }
1137
+ FilterMenuDropDownListDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterMenuDropDownListDirective, deps: [{ token: i1$2.DropDownListComponent }], target: i0.ɵɵFactoryTarget.Directive });
1138
+ FilterMenuDropDownListDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: { filterMenuDropDownLabel: "filterMenuDropDownLabel" }, ngImport: i0 });
1139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterMenuDropDownListDirective, decorators: [{
1140
+ type: Directive,
1141
+ args: [{ selector: '[kendoFilterMenuDropDown]' }]
1142
+ }], ctorParameters: function () { return [{ type: i1$2.DropDownListComponent }]; }, propDecorators: { filterMenuDropDownLabel: [{
1143
+ type: Input
1144
+ }] } });
1145
+
1146
+ /**
1147
+ * @hidden
1148
+ */
1149
+ const localizeOperators = operators => localization => Object.keys(operators).map(key => ({
1150
+ text: localization.get(key),
1151
+ value: operators[key]
1152
+ }));
1153
+ const stringOperators = localizeOperators({
1154
+ "filterEqOperator": "eq",
1155
+ "filterNotEqOperator": "neq",
1156
+ "filterContainsOperator": "contains",
1157
+ "filterNotContainsOperator": "doesnotcontain",
1158
+ "filterStartsWithOperator": "startswith",
1159
+ "filterEndsWithOperator": "endswith",
1160
+ "filterIsNullOperator": "isnull",
1161
+ "filterIsNotNullOperator": "isnotnull",
1162
+ "filterIsEmptyOperator": "isempty",
1163
+ "filterIsNotEmptyOperator": "isnotempty"
1164
+ });
1165
+ /**
1166
+ * @hidden
1167
+ *
1168
+ * Represents a string-filter menu component.
1169
+ */
1170
+ class StringFilterMenuComponent {
1171
+ constructor(localization, configuratorService, fb) {
1172
+ this.localization = localization;
1173
+ this.configuratorService = configuratorService;
1174
+ this.fb = fb;
1175
+ this.subscription = new Subscription();
1176
+ this.onTouched = () => { };
1177
+ }
1178
+ get currentFilter() {
1179
+ var _a;
1180
+ const filterValue = (_a = this.configuratorService.state.filter) === null || _a === void 0 ? void 0 : _a.filter(x => x.field === this.chip.name.toString());
1181
+ return filterValue && filterValue[0];
1182
+ }
1183
+ registerOnChange(fn) {
1184
+ this.filterFormGroup.valueChanges.subscribe(fn);
1185
+ }
1186
+ registerOnTouched(fn) {
1187
+ this.onTouched = fn;
1188
+ }
1189
+ writeValue(val) {
1190
+ if (val) {
1191
+ this.filterFormGroup.setValue(val, { emitEvent: false });
1192
+ }
1193
+ }
1194
+ get filterMenuDropDownLabel() {
1195
+ const localizationMsg = this.localization.get('filterOperatorsDropDownLabel') || '';
1196
+ const chipName = this.chip.name.toString();
1197
+ return replaceMessagePlaceholder(localizationMsg, 'fields', chipName);
1198
+ }
1199
+ ngOnInit() {
1200
+ this.filterFormGroup = this.fb.group({
1201
+ operator: [this.currentFilter ? this.currentFilter.operator : ''],
1202
+ value: [this.currentFilter ? this.currentFilter.value : '']
1203
+ });
1204
+ this.operators = stringOperators(this.localization);
1205
+ }
1206
+ ngOnDestroy() {
1207
+ this.subscription.unsubscribe();
1208
+ }
1209
+ }
1210
+ StringFilterMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: StringFilterMenuComponent, deps: [{ token: PivotLocalizationService }, { token: ConfiguratorService }, { token: i3$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
1211
+ StringFilterMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: StringFilterMenuComponent, selector: "kendo-pivot-string-filter-menu", inputs: { chip: "chip", menuTabbingService: "menuTabbingService" }, providers: [{
1212
+ provide: NG_VALUE_ACCESSOR,
1213
+ useExisting: forwardRef(() => StringFilterMenuComponent),
1214
+ multi: true
1215
+ }], ngImport: i0, template: `
1216
+ <ng-container [formGroup]="filterFormGroup">
1217
+ <kendo-dropdownlist
1218
+ kendoFilterMenuDropDown
1219
+ [filterMenuDropDownLabel]="filterMenuDropDownLabel"
1220
+ [data]="operators"
1221
+ formControlName="operator"
1222
+ [valuePrimitive]="true"
1223
+ textField="text"
1224
+ valueField="value">
1225
+ </kendo-dropdownlist>
1226
+ <input
1227
+ kendoTextBox
1228
+ formControlName="value"
1229
+ />
1230
+ </ng-container>
1231
+ `, isInline: true, components: [{ type: i1$2.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }, { type: i3$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }] });
1232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: StringFilterMenuComponent, decorators: [{
1233
+ type: Component,
1234
+ args: [{
1235
+ selector: 'kendo-pivot-string-filter-menu',
1236
+ providers: [{
1237
+ provide: NG_VALUE_ACCESSOR,
1238
+ useExisting: forwardRef(() => StringFilterMenuComponent),
1239
+ multi: true
1240
+ }],
1241
+ template: `
1242
+ <ng-container [formGroup]="filterFormGroup">
1243
+ <kendo-dropdownlist
1244
+ kendoFilterMenuDropDown
1245
+ [filterMenuDropDownLabel]="filterMenuDropDownLabel"
1246
+ [data]="operators"
1247
+ formControlName="operator"
1248
+ [valuePrimitive]="true"
1249
+ textField="text"
1250
+ valueField="value">
1251
+ </kendo-dropdownlist>
1252
+ <input
1253
+ kendoTextBox
1254
+ formControlName="value"
1255
+ />
1256
+ </ng-container>
1257
+ `
1258
+ }]
1259
+ }], ctorParameters: function () { return [{ type: PivotLocalizationService }, { type: ConfiguratorService }, { type: i3$1.FormBuilder }]; }, propDecorators: { chip: [{
1260
+ type: Input
1261
+ }], menuTabbingService: [{
1262
+ type: Input
1263
+ }] } });
1264
+
1265
+ const isNoValueOperator = operator => (operator === "isnull"
1266
+ || operator === "isnotnull"
1267
+ || operator === "isempty"
1268
+ || operator === "isnotempty");
1269
+ const validFilter = ({ value, operator }) => !isNullOrEmptyString(value) || isNoValueOperator(operator);
1270
+ /**
1271
+ * @hidden
1272
+ */
1273
+ class FilterMenuContainerComponent {
1274
+ constructor(localization, cd, menuTabbingService, configuratorService) {
1275
+ this.localization = localization;
1276
+ this.cd = cd;
1277
+ this.configuratorService = configuratorService;
1278
+ this.close = new EventEmitter();
1279
+ this.actionsClass = 'k-action-buttons k-button-group';
1280
+ this.menuTabbingService = menuTabbingService;
1281
+ }
1282
+ ngOnInit() {
1283
+ }
1284
+ ngAfterViewChecked() {
1285
+ if (!this.menuTabbingService.isColumnMenu || (this.isLast && this.isExpanded)) {
1286
+ this.menuTabbingService.lastFocusable = this.disabled ?
1287
+ this.resetButton.nativeElement : this.filterButton.nativeElement;
1288
+ }
1289
+ }
1290
+ ngOnDestroy() {
1291
+ this.menuTabbingService.lastFocusable = null;
1292
+ }
1293
+ get disabled() {
1294
+ return !(this.filterDescriptorValue && validFilter(this.filterDescriptorValue));
1295
+ }
1296
+ submit() {
1297
+ const filterDescriptor = Object.assign({ field: this.chip.name.toString() }, this.filterDescriptorValue);
1298
+ const payload = !this.configuratorService.state.filter ?
1299
+ [filterDescriptor] :
1300
+ [
1301
+ ...this.configuratorService.state.filter.filter(descriptor => descriptor.field !== filterDescriptor.field),
1302
+ filterDescriptor
1303
+ ];
1304
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setFilter, payload: payload });
1305
+ this.close.emit();
1306
+ return false;
1307
+ }
1308
+ reset() {
1309
+ const filters = this.configuratorService.state.filter.filter(descriptor => descriptor.field !== this.chip.name.toString());
1310
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setFilter, payload: filters });
1311
+ this.close.emit();
1312
+ }
1313
+ onTab(e, buttonType) {
1314
+ if (this.menuTabbingService.firstFocusable && (!this.menuTabbingService.isColumnMenu || this.isLast)) {
1315
+ e.preventDefault();
1316
+ if (buttonType === 'reset') {
1317
+ // eslint-disable-next-line no-unused-expressions
1318
+ this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.filterButton.nativeElement.focus();
1319
+ }
1320
+ else {
1321
+ this.menuTabbingService.firstFocusable.focus();
1322
+ }
1323
+ }
1324
+ }
1325
+ /**
1326
+ * Returns the localized message for a given token
1327
+ */
1328
+ messageFor(localizationToken) {
1329
+ return this.localization.get(localizationToken);
1330
+ }
1331
+ }
1332
+ FilterMenuContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterMenuContainerComponent, deps: [{ token: PivotLocalizationService }, { token: i0.ChangeDetectorRef }, { token: MenuTabbingService }, { token: ConfiguratorService }], target: i0.ɵɵFactoryTarget.Component });
1333
+ FilterMenuContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterMenuContainerComponent, selector: "kendo-pivot-filter-menu-container", inputs: { chip: "chip", isLast: "isLast", isExpanded: "isExpanded", menuTabbingService: "menuTabbingService", actionsClass: "actionsClass" }, outputs: { close: "close" }, providers: [
1334
+ MenuTabbingService
1335
+ ], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "filterButton", first: true, predicate: ["filterButton"], descendants: true }], ngImport: i0, template: `
1336
+ <form (submit)="submit()" (reset)="reset()"
1337
+ class="k-filter-menu k-group k-reset k-state-border-up">
1338
+ <div class="k-filter-menu-container">
1339
+ <kendo-pivot-string-filter-menu
1340
+ [(ngModel)]="filterDescriptorValue"
1341
+ name="'filterDescriptorValue'"
1342
+ [chip]="chip"
1343
+ [menuTabbingService]="menuTabbingService">
1344
+ </kendo-pivot-string-filter-menu>
1345
+ <div [ngClass]="actionsClass">
1346
+ <button
1347
+ #resetButton
1348
+ type="reset"
1349
+ kendoButton
1350
+ (keydown.tab)="onTab($event, 'reset')">{{messageFor('filterClearButton')}}</button>
1351
+ <button #filterButton
1352
+ type="submit"
1353
+ [disabled]="disabled"
1354
+ kendoButton
1355
+ themeColor="primary"
1356
+ (keydown.tab)="onTab($event, 'filter')">{{messageFor('filterFilterButton')}}</button>
1357
+ </div>
1358
+ </div>
1359
+ </form>
1360
+ `, isInline: true, styles: ["\n kendo-pivot-string-filter-menu {\n display: flex;\n flex-flow: column nowrap;\n align-items: stretch;\n gap: 8px;\n }\n "], components: [{ type: StringFilterMenuComponent, selector: "kendo-pivot-string-filter-menu", inputs: ["chip", "menuTabbingService"] }], directives: [{ type: i3$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3$1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
1361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterMenuContainerComponent, decorators: [{
1362
+ type: Component,
1363
+ args: [{
1364
+ providers: [
1365
+ MenuTabbingService
1366
+ ],
1367
+ selector: 'kendo-pivot-filter-menu-container',
1368
+ template: `
1369
+ <form (submit)="submit()" (reset)="reset()"
1370
+ class="k-filter-menu k-group k-reset k-state-border-up">
1371
+ <div class="k-filter-menu-container">
1372
+ <kendo-pivot-string-filter-menu
1373
+ [(ngModel)]="filterDescriptorValue"
1374
+ name="'filterDescriptorValue'"
1375
+ [chip]="chip"
1376
+ [menuTabbingService]="menuTabbingService">
1377
+ </kendo-pivot-string-filter-menu>
1378
+ <div [ngClass]="actionsClass">
1379
+ <button
1380
+ #resetButton
1381
+ type="reset"
1382
+ kendoButton
1383
+ (keydown.tab)="onTab($event, 'reset')">{{messageFor('filterClearButton')}}</button>
1384
+ <button #filterButton
1385
+ type="submit"
1386
+ [disabled]="disabled"
1387
+ kendoButton
1388
+ themeColor="primary"
1389
+ (keydown.tab)="onTab($event, 'filter')">{{messageFor('filterFilterButton')}}</button>
1390
+ </div>
1391
+ </div>
1392
+ </form>
1393
+ `,
1394
+ styles: [`
1395
+ kendo-pivot-string-filter-menu {
1396
+ display: flex;
1397
+ flex-flow: column nowrap;
1398
+ align-items: stretch;
1399
+ gap: 8px;
1400
+ }
1401
+ `]
1402
+ }]
1403
+ }], ctorParameters: function () { return [{ type: PivotLocalizationService }, { type: i0.ChangeDetectorRef }, { type: MenuTabbingService }, { type: ConfiguratorService }]; }, propDecorators: { close: [{
1404
+ type: Output
1405
+ }], chip: [{
1406
+ type: Input
1407
+ }], isLast: [{
1408
+ type: Input
1409
+ }], isExpanded: [{
1410
+ type: Input
1411
+ }], menuTabbingService: [{
1412
+ type: Input
1413
+ }], actionsClass: [{
1414
+ type: Input
1415
+ }], resetButton: [{
1416
+ type: ViewChild,
1417
+ args: ['resetButton']
1418
+ }], filterButton: [{
1419
+ type: ViewChild,
1420
+ args: ['filterButton']
1421
+ }] } });
1422
+
1423
+ /**
1424
+ * @hidden
1425
+ * Represents the component for setting field filters in the PivotGrid.
1426
+ */
1427
+ class ChipMenuFilterComponent extends ChipMenuItemBase {
1428
+ constructor(localization, hostElement) {
1429
+ super();
1430
+ this.localization = localization;
1431
+ this.hostElement = hostElement;
1432
+ /**
1433
+ * Fires when the content is expanded.
1434
+ */
1435
+ this.expand = new EventEmitter();
1436
+ /**
1437
+ * Fires when the content is collapsed.
1438
+ */
1439
+ this.collapse = new EventEmitter();
1440
+ /**
1441
+ * Specifies if the content is expanded.
1442
+ */
1443
+ this.expanded = false;
1444
+ this.isLast = false;
1445
+ this.actionsClass = 'k-columnmenu-actions';
1446
+ }
1447
+ onCollapse() {
1448
+ this.expanded = false;
1449
+ if (this.isLast) {
1450
+ this.service.menuTabbingService.lastFocusable = this.hostElement.nativeElement.querySelector('.k-columnmenu-item');
1451
+ }
1452
+ this.collapse.emit();
1453
+ }
1454
+ onExpand() {
1455
+ this.expanded = true;
1456
+ this.expand.emit();
1457
+ }
1458
+ /**
1459
+ * Returns the localized message for a given token
1460
+ */
1461
+ messageFor(localizationToken) {
1462
+ return this.localization.get(localizationToken);
1463
+ }
1464
+ }
1465
+ ChipMenuFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuFilterComponent, deps: [{ token: PivotLocalizationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
1466
+ ChipMenuFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuFilterComponent, selector: "kendo-pivot-chipmenu-filter", inputs: { chip: "chip", expanded: "expanded", isLast: "isLast" }, outputs: { expand: "expand", collapse: "collapse" }, usesInheritance: true, ngImport: i0, template: `
1467
+ <kendo-pivot-chipmenu-item
1468
+ classs="k-widget k-expander"
1469
+ [text]="messageFor('fieldMenuFilterItemLabel')"
1470
+ icon="filter"
1471
+ [expanded]="expanded"
1472
+ (collapse)="onCollapse()"
1473
+ (expand)="onExpand()">
1474
+ <ng-template kendoPivotChipMenuItemContentTemplate>
1475
+ <kendo-pivot-filter-menu-container
1476
+ [chip]="chip"
1477
+ [menuTabbingService]="service.menuTabbingService"
1478
+ [actionsClass]="actionsClass"
1479
+ [isLast]="isLast"
1480
+ [isExpanded]="expanded"
1481
+ (keydown.shift.tab)="$event.stopImmediatePropagation()"
1482
+ (close)="close()">
1483
+ </kendo-pivot-filter-menu-container>
1484
+ </ng-template>
1485
+ </kendo-pivot-chipmenu-item>
1486
+ `, isInline: true, components: [{ type: ChipMenuItemComponent, selector: "kendo-pivot-chipmenu-item", inputs: ["icon", "text", "selected", "expanded"], outputs: ["itemClick", "expand", "collapse"] }, { type: FilterMenuContainerComponent, selector: "kendo-pivot-filter-menu-container", inputs: ["chip", "isLast", "isExpanded", "menuTabbingService", "actionsClass"], outputs: ["close"] }], directives: [{ type: ChipMenuItemContentTemplateDirective, selector: "[kendoPivotChipMenuItemContentTemplate]" }] });
1487
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuFilterComponent, decorators: [{
1488
+ type: Component,
1489
+ args: [{
1490
+ selector: 'kendo-pivot-chipmenu-filter',
1491
+ template: `
1492
+ <kendo-pivot-chipmenu-item
1493
+ classs="k-widget k-expander"
1494
+ [text]="messageFor('fieldMenuFilterItemLabel')"
1495
+ icon="filter"
1496
+ [expanded]="expanded"
1497
+ (collapse)="onCollapse()"
1498
+ (expand)="onExpand()">
1499
+ <ng-template kendoPivotChipMenuItemContentTemplate>
1500
+ <kendo-pivot-filter-menu-container
1501
+ [chip]="chip"
1502
+ [menuTabbingService]="service.menuTabbingService"
1503
+ [actionsClass]="actionsClass"
1504
+ [isLast]="isLast"
1505
+ [isExpanded]="expanded"
1506
+ (keydown.shift.tab)="$event.stopImmediatePropagation()"
1507
+ (close)="close()">
1508
+ </kendo-pivot-filter-menu-container>
1509
+ </ng-template>
1510
+ </kendo-pivot-chipmenu-item>
1511
+ `
1512
+ }]
1513
+ }], ctorParameters: function () { return [{ type: PivotLocalizationService }, { type: i0.ElementRef }]; }, propDecorators: { expand: [{
1514
+ type: Output
1515
+ }], collapse: [{
1516
+ type: Output
1517
+ }], chip: [{
1518
+ type: Input
1519
+ }], expanded: [{
1520
+ type: Input
1521
+ }], isLast: [{
1522
+ type: Input
1523
+ }] } });
1524
+
1525
+ const POPUP_CLASS = 'k-column-menu';
1526
+ /**
1527
+ * @hidden
1528
+ *
1529
+ * Represents the field chip menu component.
1530
+ */
1531
+ class ChipMenuComponent {
1532
+ constructor(popupService, localization, service) {
1533
+ this.popupService = popupService;
1534
+ this.localization = localization;
1535
+ this.service = service;
1536
+ this.tabIndex = '-1';
1537
+ this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));
1538
+ }
1539
+ ngOnDestroy() {
1540
+ this.close();
1541
+ this.closeSubscription.unsubscribe();
1542
+ }
1543
+ toggle(e, anchor, template) {
1544
+ if (e) {
1545
+ e.preventDefault();
1546
+ e.stopImmediatePropagation();
1547
+ }
1548
+ this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);
1549
+ if (!this.popupRef) {
1550
+ this.anchor.nativeElement.focus();
1551
+ }
1552
+ }
1553
+ close() {
1554
+ this.popupService.destroy();
1555
+ this.popupRef = null;
1556
+ this.anchor.nativeElement.focus();
1557
+ }
1558
+ get chipMenuTitle() {
1559
+ const localizationMsg = this.localization.get('chipMenuIconTitle') || '';
1560
+ const chipName = this.chip.name.toString();
1561
+ return replaceMessagePlaceholder(localizationMsg, 'fieldName', chipName);
1562
+ }
1563
+ }
1564
+ ChipMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuComponent, deps: [{ token: SinglePopupService }, { token: PivotLocalizationService }, { token: ChipMenuService }], target: i0.ɵɵFactoryTarget.Component });
1565
+ ChipMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ChipMenuComponent, selector: "kendo-pivot-chip-menu", inputs: { chip: "chip", tabIndex: "tabIndex" }, providers: [
1566
+ ChipMenuService,
1567
+ MenuTabbingService
1568
+ ], viewQueries: [{ propertyName: "anchor", first: true, predicate: ["anchor"], descendants: true, static: true }], ngImport: i0, template: `
1569
+ <span #anchor
1570
+ class="k-icon k-i-more-vertical"
1571
+ (click)="toggle($event, anchor, template)"
1572
+ [tabindex]="tabIndex"
1573
+ [attr.title]="chipMenuTitle">
1574
+ </span>
1575
+ <ng-template #template>
1576
+ <kendo-pivot-chipmenu-container
1577
+ (keydown.escape)="close()"
1578
+ (keydown.enter)="$event.stopImmediatePropagation()">
1579
+ <kendo-pivot-chipmenu-sort
1580
+ #sortItem
1581
+ [chip]="chip"
1582
+ [kendoPivotChipMenuItem]="sortItem"
1583
+ [service]="service">
1584
+ </kendo-pivot-chipmenu-sort>
1585
+
1586
+ <kendo-pivot-chipmenu-filter
1587
+ #filterItem
1588
+ [chip]="chip"
1589
+ [kendoPivotChipMenuItem]="filterItem"
1590
+ [service]="service">
1591
+ </kendo-pivot-chipmenu-filter>
1592
+ </kendo-pivot-chipmenu-container>
1593
+ </ng-template>
1594
+ `, isInline: true, components: [{ type: ChipMenuContainerComponent, selector: "kendo-pivot-chipmenu-container" }, { type: ChipMenuSortComponent, selector: "kendo-pivot-chipmenu-sort", inputs: ["chip"] }, { type: ChipMenuFilterComponent, selector: "kendo-pivot-chipmenu-filter", inputs: ["chip", "expanded", "isLast"], outputs: ["expand", "collapse"] }], directives: [{ type: ChipMenuItemDirective, selector: "[kendoPivotChipMenuItem]", inputs: ["kendoPivotChipMenuItem"] }] });
1595
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuComponent, decorators: [{
1596
+ type: Component,
1597
+ args: [{
1598
+ providers: [
1599
+ ChipMenuService,
1600
+ MenuTabbingService
1601
+ ],
1602
+ selector: 'kendo-pivot-chip-menu',
1603
+ template: `
1604
+ <span #anchor
1605
+ class="k-icon k-i-more-vertical"
1606
+ (click)="toggle($event, anchor, template)"
1607
+ [tabindex]="tabIndex"
1608
+ [attr.title]="chipMenuTitle">
1609
+ </span>
1610
+ <ng-template #template>
1611
+ <kendo-pivot-chipmenu-container
1612
+ (keydown.escape)="close()"
1613
+ (keydown.enter)="$event.stopImmediatePropagation()">
1614
+ <kendo-pivot-chipmenu-sort
1615
+ #sortItem
1616
+ [chip]="chip"
1617
+ [kendoPivotChipMenuItem]="sortItem"
1618
+ [service]="service">
1619
+ </kendo-pivot-chipmenu-sort>
1620
+
1621
+ <kendo-pivot-chipmenu-filter
1622
+ #filterItem
1623
+ [chip]="chip"
1624
+ [kendoPivotChipMenuItem]="filterItem"
1625
+ [service]="service">
1626
+ </kendo-pivot-chipmenu-filter>
1627
+ </kendo-pivot-chipmenu-container>
1628
+ </ng-template>
1629
+ `
1630
+ }]
1631
+ }], ctorParameters: function () { return [{ type: SinglePopupService }, { type: PivotLocalizationService }, { type: ChipMenuService }]; }, propDecorators: { chip: [{
1632
+ type: Input
1633
+ }], tabIndex: [{
1634
+ type: Input
1635
+ }], anchor: [{
1636
+ type: ViewChild,
1637
+ args: ['anchor', { static: true }]
1638
+ }] } });
1639
+
526
1640
  /**
527
1641
  * @hidden
528
1642
  */
@@ -690,6 +1804,7 @@ class PivotGridConfiguratorComponent {
690
1804
  this.cdr = cdr;
691
1805
  this.hostClass = true;
692
1806
  this.horizontal = false;
1807
+ this.sort = new Array();
693
1808
  this.checked = [];
694
1809
  this.subs = new Subscription();
695
1810
  /**
@@ -852,10 +1967,11 @@ class PivotGridConfiguratorComponent {
852
1967
  }
853
1968
  ;
854
1969
  }
855
- PivotGridConfiguratorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridConfiguratorComponent, deps: [{ token: PivotGridDataService }, { token: i2.LocalizationService }, { token: ConfiguratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
856
- PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: { horizontal: "horizontal" }, host: { properties: { "class.k-pivotgrid-configurator": "this.hostClass" } }, providers: [
1970
+ PivotGridConfiguratorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridConfiguratorComponent, deps: [{ token: PivotGridDataService }, { token: i1.LocalizationService }, { token: ConfiguratorService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1971
+ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: { horizontal: "horizontal", sort: "sort", filter: "filter" }, host: { properties: { "class.k-pivotgrid-configurator": "this.hostClass" } }, providers: [
857
1972
  ConfiguratorService,
858
- DropCueService
1973
+ DropCueService,
1974
+ SinglePopupService
859
1975
  ], ngImport: i0, template: `
860
1976
  <div
861
1977
  class="k-pivotgrid-configurator-panel k-pivotgrid-configurator-push"
@@ -924,6 +2040,10 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
924
2040
  [removable]="true"
925
2041
  >
926
2042
  {{ getName(item.name) }}
2043
+
2044
+ <kendo-pivot-chip-menu
2045
+ [chip]="item">
2046
+ </kendo-pivot-chip-menu>
927
2047
  </kendo-chip>
928
2048
  </kendo-chiplist>
929
2049
 
@@ -950,6 +2070,10 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
950
2070
  [removable]="true"
951
2071
  >
952
2072
  {{ getName(item.name) }}
2073
+
2074
+ <kendo-pivot-chip-menu
2075
+ [chip]="item">
2076
+ </kendo-pivot-chip-menu>
953
2077
  </kendo-chip>
954
2078
  </kendo-chiplist>
955
2079
 
@@ -972,18 +2096,17 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
972
2096
  kendoDropTarget
973
2097
  axes="measureAxes"
974
2098
  >
975
- <kendo-chip *ngFor="let item of state.measureAxes"
976
- kendoChipDraggable
977
- kendoDraggable
978
- kendoDropTarget
979
- [item]="item"
980
- axes="measureAxes"
981
-
982
- rounded="full"
983
- [removable]="true"
984
- >
985
- {{ getName(item.name) }}
986
- </kendo-chip>
2099
+ <kendo-chip *ngFor="let item of state.measureAxes"
2100
+ kendoChipDraggable
2101
+ kendoDraggable
2102
+ kendoDropTarget
2103
+ [item]="item"
2104
+ axes="measureAxes"
2105
+ rounded="full"
2106
+ [removable]="true"
2107
+ >
2108
+ {{ getName(item.name) }}
2109
+ </kendo-chip>
987
2110
  </kendo-chiplist>
988
2111
 
989
2112
  <ng-template #noMeasureAxes>
@@ -998,14 +2121,15 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
998
2121
  <button kendoButton themeColor="primary" type="button" (click)="handleSubmit()">{{messageFor('configuratorApplyButtonText')}}</button>
999
2122
  </div>
1000
2123
  </div>
1001
- `, isInline: true, components: [{ type: i4.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i5.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size"], outputs: ["selectedChange", "remove"] }, { type: i5.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }], directives: [{ type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i4.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["item", "axes"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DraggableChipDirective, selector: "[kendoChipDraggable]", inputs: ["item"] }, { type: i3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i5.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
2124
+ `, isInline: true, components: [{ type: i4.TreeViewComponent, selector: "kendo-treeview", inputs: ["filterInputPlaceholder", "expandDisabledNodes", "animate", "nodeTemplate", "loadMoreButtonTemplate", "trackBy", "nodes", "textField", "hasChildren", "isChecked", "isDisabled", "isExpanded", "isSelected", "isVisible", "navigable", "children", "loadOnDemand", "filterable", "filter", "size", "disableParentNodesOnly"], outputs: ["childrenLoaded", "blur", "focus", "expand", "collapse", "nodeDragStart", "nodeDrag", "filterStateChange", "nodeDrop", "nodeDragEnd", "addItem", "removeItem", "checkedChange", "selectionChange", "filterChange", "nodeClick", "nodeDblClick"], exportAs: ["kendoTreeView"] }, { type: i5.ChipListComponent, selector: "kendo-chiplist, kendo-chip-list", inputs: ["selection", "size"], outputs: ["selectedChange", "remove"] }, { type: i5.ChipComponent, selector: "kendo-chip", inputs: ["label", "icon", "iconClass", "avatarClass", "selected", "removable", "removeIcon", "disabled", "size", "rounded", "fillMode", "themeColor"], outputs: ["remove", "contentClick"] }, { type: ChipMenuComponent, selector: "kendo-pivot-chip-menu", inputs: ["chip", "tabIndex"] }], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.ExpandDirective, selector: "[kendoTreeViewExpandable]", inputs: ["isExpanded", "expandBy", "expandOnFilter", "expandedKeys"], outputs: ["expandedKeysChange"] }, { type: i4.NodeTemplateDirective, selector: "[kendoTreeViewNodeTemplate]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["item", "axes"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: DraggableChipDirective, selector: "[kendoChipDraggable]", inputs: ["item"] }, { type: i3.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: i5.ButtonDirective, selector: "button[kendoButton], span[kendoButton]", inputs: ["toggleable", "togglable", "selected", "tabIndex", "icon", "iconClass", "imageUrl", "disabled", "size", "rounded", "fillMode", "themeColor", "role", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
1002
2125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridConfiguratorComponent, decorators: [{
1003
2126
  type: Component,
1004
2127
  args: [{
1005
2128
  selector: 'kendo-pivotgrid-configurator',
1006
2129
  providers: [
1007
2130
  ConfiguratorService,
1008
- DropCueService
2131
+ DropCueService,
2132
+ SinglePopupService
1009
2133
  ],
1010
2134
  template: `
1011
2135
  <div
@@ -1075,6 +2199,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1075
2199
  [removable]="true"
1076
2200
  >
1077
2201
  {{ getName(item.name) }}
2202
+
2203
+ <kendo-pivot-chip-menu
2204
+ [chip]="item">
2205
+ </kendo-pivot-chip-menu>
1078
2206
  </kendo-chip>
1079
2207
  </kendo-chiplist>
1080
2208
 
@@ -1101,6 +2229,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1101
2229
  [removable]="true"
1102
2230
  >
1103
2231
  {{ getName(item.name) }}
2232
+
2233
+ <kendo-pivot-chip-menu
2234
+ [chip]="item">
2235
+ </kendo-pivot-chip-menu>
1104
2236
  </kendo-chip>
1105
2237
  </kendo-chiplist>
1106
2238
 
@@ -1123,18 +2255,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1123
2255
  kendoDropTarget
1124
2256
  axes="measureAxes"
1125
2257
  >
1126
- <kendo-chip *ngFor="let item of state.measureAxes"
1127
- kendoChipDraggable
1128
- kendoDraggable
1129
- kendoDropTarget
1130
- [item]="item"
1131
- axes="measureAxes"
1132
-
1133
- rounded="full"
1134
- [removable]="true"
1135
- >
1136
- {{ getName(item.name) }}
1137
- </kendo-chip>
2258
+ <kendo-chip *ngFor="let item of state.measureAxes"
2259
+ kendoChipDraggable
2260
+ kendoDraggable
2261
+ kendoDropTarget
2262
+ [item]="item"
2263
+ axes="measureAxes"
2264
+ rounded="full"
2265
+ [removable]="true"
2266
+ >
2267
+ {{ getName(item.name) }}
2268
+ </kendo-chip>
1138
2269
  </kendo-chiplist>
1139
2270
 
1140
2271
  <ng-template #noMeasureAxes>
@@ -1151,11 +2282,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1151
2282
  </div>
1152
2283
  `
1153
2284
  }]
1154
- }], ctorParameters: function () { return [{ type: PivotGridDataService }, { type: i2.LocalizationService }, { type: ConfiguratorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{
2285
+ }], ctorParameters: function () { return [{ type: PivotGridDataService }, { type: i1.LocalizationService }, { type: ConfiguratorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{
1155
2286
  type: HostBinding,
1156
2287
  args: ['class.k-pivotgrid-configurator']
1157
2288
  }], horizontal: [{
1158
2289
  type: Input
2290
+ }], sort: [{
2291
+ type: Input
2292
+ }], filter: [{
2293
+ type: Input
1159
2294
  }] } });
1160
2295
 
1161
2296
  /**
@@ -1164,7 +2299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1164
2299
  class PivotGridMessages extends ComponentMessages {
1165
2300
  }
1166
2301
  PivotGridMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1167
- PivotGridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridMessages, inputs: { fieldMenuFilterItemLabel: "fieldMenuFilterItemLabel", fieldMenuSortAscendingItemLabel: "fieldMenuSortAscendingItemLabel", fieldMenuSortDescendingItemLabel: "fieldMenuSortDescendingItemLabel", filterInputLabel: "filterInputLabel", filterOperatorsDropDownLabel: "filterOperatorsDropDownLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", loading: "loading", emptyCellLabel: "emptyCellLabel", configuratorButtonText: "configuratorButtonText", configuratorHeaderText: "configuratorHeaderText", configuratorFieldsText: "configuratorFieldsText", configuratorColumnsText: "configuratorColumnsText", configuratorRowsText: "configuratorRowsText", configuratorValuesText: "configuratorValuesText", configuratorCancelButtonText: "configuratorCancelButtonText", configuratorApplyButtonText: "configuratorApplyButtonText", configuratorEmptyRowsText: "configuratorEmptyRowsText", configuratorEmptyColumnsText: "configuratorEmptyColumnsText", configuratorEmptyMeasuresText: "configuratorEmptyMeasuresText" }, usesInheritance: true, ngImport: i0 });
2302
+ PivotGridMessages.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridMessages, inputs: { fieldMenuFilterItemLabel: "fieldMenuFilterItemLabel", fieldMenuSortAscendingItemLabel: "fieldMenuSortAscendingItemLabel", fieldMenuSortDescendingItemLabel: "fieldMenuSortDescendingItemLabel", filterInputLabel: "filterInputLabel", filterOperatorsDropDownLabel: "filterOperatorsDropDownLabel", filterEqOperator: "filterEqOperator", filterNotEqOperator: "filterNotEqOperator", filterIsNullOperator: "filterIsNullOperator", filterIsNotNullOperator: "filterIsNotNullOperator", filterIsEmptyOperator: "filterIsEmptyOperator", filterIsNotEmptyOperator: "filterIsNotEmptyOperator", filterStartsWithOperator: "filterStartsWithOperator", filterContainsOperator: "filterContainsOperator", filterNotContainsOperator: "filterNotContainsOperator", filterEndsWithOperator: "filterEndsWithOperator", filterFilterButton: "filterFilterButton", filterClearButton: "filterClearButton", loading: "loading", emptyCellLabel: "emptyCellLabel", configuratorButtonText: "configuratorButtonText", configuratorHeaderText: "configuratorHeaderText", configuratorFieldsText: "configuratorFieldsText", configuratorColumnsText: "configuratorColumnsText", configuratorRowsText: "configuratorRowsText", configuratorValuesText: "configuratorValuesText", configuratorCancelButtonText: "configuratorCancelButtonText", configuratorApplyButtonText: "configuratorApplyButtonText", configuratorEmptyRowsText: "configuratorEmptyRowsText", configuratorEmptyColumnsText: "configuratorEmptyColumnsText", configuratorEmptyMeasuresText: "configuratorEmptyMeasuresText", chipMenuIconTitle: "chipMenuIconTitle" }, usesInheritance: true, ngImport: i0 });
1168
2303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, decorators: [{
1169
2304
  type: Directive
1170
2305
  }], propDecorators: { fieldMenuFilterItemLabel: [{
@@ -1227,6 +2362,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1227
2362
  type: Input
1228
2363
  }], configuratorEmptyMeasuresText: [{
1229
2364
  type: Input
2365
+ }], chipMenuIconTitle: [{
2366
+ type: Input
1230
2367
  }] } });
1231
2368
 
1232
2369
  /**
@@ -1238,7 +2375,7 @@ class LocalizedMessagesDirective extends PivotGridMessages {
1238
2375
  this.service = service;
1239
2376
  }
1240
2377
  }
1241
- LocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
2378
+ LocalizedMessagesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Directive });
1242
2379
  LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]", providers: [
1243
2380
  {
1244
2381
  provide: PivotGridMessages,
@@ -1256,7 +2393,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1256
2393
  ],
1257
2394
  selector: '[kendoPivotGridLocalizedMessages]'
1258
2395
  }]
1259
- }], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
2396
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
1260
2397
 
1261
2398
  const DEFAULT_LOADER_SETTINGS = {
1262
2399
  type: 'converging-spinner',
@@ -1271,10 +2408,12 @@ const DEFAULT_CONFIGURATOR_SETTINGS = {
1271
2408
  * Represents the Kendo UI PivotGrid component for Angular.
1272
2409
  */
1273
2410
  class PivotGridComponent {
1274
- constructor(hostEl, zone, dataService, localization, _scrollbarWidthService) {
2411
+ constructor(hostEl, zone, dataService, localization, renderer, _scrollbarWidthService) {
2412
+ this.hostEl = hostEl;
1275
2413
  this.zone = zone;
1276
2414
  this.dataService = dataService;
1277
2415
  this.localization = localization;
2416
+ this.renderer = renderer;
1278
2417
  this.hostClass = true;
1279
2418
  this.ariaRole = 'grid';
1280
2419
  /**
@@ -1283,6 +2422,12 @@ class PivotGridComponent {
1283
2422
  * @default 200
1284
2423
  */
1285
2424
  this.columnHeadersWidth = 200;
2425
+ /**
2426
+ * If set to true, the user can use dedicated shortcuts to interact with the PivotGrid. By default, navigation is disabled.
2427
+ *
2428
+ * @default false
2429
+ */
2430
+ this.navigable = false;
1286
2431
  this.resizeObservers = [];
1287
2432
  this._loaderSettings = DEFAULT_LOADER_SETTINGS;
1288
2433
  this.subs = new Subscription();
@@ -1370,15 +2515,29 @@ class PivotGridComponent {
1370
2515
  this.resizeObservers = [headerColsResizeObserver, headerRowsResizeObserver];
1371
2516
  this.subs.add(fromEvent(rowHeadersTable, 'wheel')
1372
2517
  .pipe(merge(fromEvent(colHeadersTable, 'wheel'), fromEvent(this.valuesTable.nativeElement, 'scroll'))).subscribe((ev) => this.handleScroll(ev)));
2518
+ if (this.navigable) {
2519
+ this.initNavigation();
2520
+ }
1373
2521
  });
1374
2522
  }
1375
2523
  }
1376
2524
  ngAfterContentInit() {
1377
2525
  this.subs.add(this.dataService.loading.subscribe(state => this.loading = state));
1378
2526
  }
2527
+ ngOnChanges(changes) {
2528
+ if (isChanged('navigable', changes)) {
2529
+ if (this.navigable) {
2530
+ this.initNavigation();
2531
+ }
2532
+ else {
2533
+ this.stopNavigation();
2534
+ }
2535
+ }
2536
+ }
1379
2537
  ngOnDestroy() {
1380
2538
  this.resizeObservers.forEach(o => o.disconnect());
1381
2539
  this.subs.unsubscribe();
2540
+ this.stopNavigation();
1382
2541
  }
1383
2542
  /**
1384
2543
  * @hidden
@@ -1386,16 +2545,38 @@ class PivotGridComponent {
1386
2545
  messageFor(localizationToken) {
1387
2546
  return this.localization.get(localizationToken);
1388
2547
  }
2548
+ initNavigation() {
2549
+ this.stopNavigation();
2550
+ this.navigation = new PivotGridNavigation({ tabIndex: 0 });
2551
+ this.navigation.start(this.hostEl.nativeElement);
2552
+ const firstCell = this.navigation.first;
2553
+ if (firstCell) {
2554
+ firstCell.setAttribute('tabindex', '0');
2555
+ }
2556
+ this.subs.add(this.dataService.directive.expandChange.pipe(merge(this.dataService.directive.configurationChange)).subscribe(() => this.zone.runOutsideAngular(() => {
2557
+ setTimeout(() => this.navigation.update());
2558
+ })));
2559
+ }
2560
+ stopNavigation() {
2561
+ if (this.navigation) {
2562
+ const lastFocusedEl = this.navigation.elements.find(el => el.hasAttribute('tabindex'));
2563
+ if (lastFocusedEl) {
2564
+ this.renderer.removeAttribute(lastFocusedEl, 'tabindex');
2565
+ }
2566
+ this.navigation.stop();
2567
+ }
2568
+ }
1389
2569
  }
1390
- PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PivotGridDataService }, { token: i2.LocalizationService }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
1391
- PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", configurator: "configurator", columnHeadersWidth: "columnHeadersWidth" }, host: { properties: { "class.k-d-flex": "this.hostClass", "class.k-pos-relative": "this.hostClass", "class.k-flex-row": "this.rightPositionClass", "class.k-flex-row-reverse": "this.leftPositionClass", "class.k-flex-column": "this.bottomPositionClass", "class.k-flex-column-reverse": "this.topPositionClass", "attr.dir": "this.dir", "attr.role": "this.ariaRole" } }, providers: [
2570
+ PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PivotGridDataService }, { token: i1.LocalizationService }, { token: i0.Renderer2 }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
2571
+ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", configurator: "configurator", columnHeadersWidth: "columnHeadersWidth", navigable: "navigable" }, host: { properties: { "class.k-d-flex": "this.hostClass", "class.k-pos-relative": "this.hostClass", "class.k-flex-row": "this.rightPositionClass", "class.k-flex-row-reverse": "this.leftPositionClass", "class.k-flex-column": "this.bottomPositionClass", "class.k-flex-column-reverse": "this.topPositionClass", "attr.dir": "this.dir", "attr.role": "this.ariaRole" } }, providers: [
1392
2572
  PivotGridDataService,
1393
2573
  LocalizationService,
2574
+ PivotLocalizationService,
1394
2575
  {
1395
2576
  provide: L10N_PREFIX,
1396
2577
  useValue: 'kendo.pivotgrid'
1397
2578
  }
1398
- ], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }], ngImport: i0, template: `
2579
+ ], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
1399
2580
  <ng-container kendoPivotGridLocalizedMessages
1400
2581
  i18n-loading="kendo.pivotgrid.loading|The loading text"
1401
2582
  loading="Loading"
@@ -1485,10 +2666,15 @@ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1485
2666
  configuratorEmptyColumnsText="Select some fields to begin setup"
1486
2667
 
1487
2668
  i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1488
- configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
2669
+ configuratorEmptyMeasuresText="Select some fields to begin setup"
2670
+
2671
+ i18n-chipMenuIconTitle="kendo.grid.chipMenuIconTitle|The title of the field menu icon"
2672
+ chipMenuIconTitle="{{ '{fieldName} Field Menu' }}"></ng-container>
1489
2673
 
1490
2674
  <div #table class="k-pivotgrid">
1491
- <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
2675
+ <span class="k-pivotgrid-empty-cell">
2676
+ <span class="k-sr-only">{{messageFor('emptyCellLabel')}}</span>
2677
+ </span>
1492
2678
  <kendo-pivotgrid-table
1493
2679
  #colHeadersTable
1494
2680
  [colWidth]="columnHeadersWidth"
@@ -1523,10 +2709,10 @@ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1523
2709
  <div *ngIf="configurator"
1524
2710
  class="k-pivotgrid-configurator-button"
1525
2711
  (click)="showConfigurator = !showConfigurator">
1526
- <span>{{ messageFor('configuratorButtonText') }}<span class="k-icon k-i-gear k-color-inherit"></span>
2712
+ <span>{{messageFor('configuratorButtonText')}}<span class="k-icon k-i-gear k-color-inherit"></span>
1527
2713
  </span>
1528
2714
  </div>
1529
- `, isInline: true, styles: ["\n /** TODO: Remove if added to themes */\n div.k-loader {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "], components: [{ type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: ["tableType", "colWidth"] }, { type: i5$1.LoaderComponent, selector: "kendo-loader", inputs: ["type", "themeColor", "size"] }, { type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: ["horizontal"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
2715
+ `, isInline: true, styles: ["\n /** TODO: Remove if added to themes */\n div.k-loader {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "], components: [{ type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: ["tableType", "colWidth"] }, { type: i5$1.LoaderComponent, selector: "kendo-loader", inputs: ["type", "themeColor", "size"] }, { type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: ["horizontal", "sort", "filter"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1530
2716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, decorators: [{
1531
2717
  type: Component,
1532
2718
  args: [{
@@ -1534,6 +2720,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1534
2720
  providers: [
1535
2721
  PivotGridDataService,
1536
2722
  LocalizationService,
2723
+ PivotLocalizationService,
1537
2724
  {
1538
2725
  provide: L10N_PREFIX,
1539
2726
  useValue: 'kendo.pivotgrid'
@@ -1629,10 +2816,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1629
2816
  configuratorEmptyColumnsText="Select some fields to begin setup"
1630
2817
 
1631
2818
  i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1632
- configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
2819
+ configuratorEmptyMeasuresText="Select some fields to begin setup"
2820
+
2821
+ i18n-chipMenuIconTitle="kendo.grid.chipMenuIconTitle|The title of the field menu icon"
2822
+ chipMenuIconTitle="{{ '{fieldName} Field Menu' }}"></ng-container>
1633
2823
 
1634
2824
  <div #table class="k-pivotgrid">
1635
- <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
2825
+ <span class="k-pivotgrid-empty-cell">
2826
+ <span class="k-sr-only">{{messageFor('emptyCellLabel')}}</span>
2827
+ </span>
1636
2828
  <kendo-pivotgrid-table
1637
2829
  #colHeadersTable
1638
2830
  [colWidth]="columnHeadersWidth"
@@ -1667,7 +2859,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1667
2859
  <div *ngIf="configurator"
1668
2860
  class="k-pivotgrid-configurator-button"
1669
2861
  (click)="showConfigurator = !showConfigurator">
1670
- <span>{{ messageFor('configuratorButtonText') }}<span class="k-icon k-i-gear k-color-inherit"></span>
2862
+ <span>{{messageFor('configuratorButtonText')}}<span class="k-icon k-i-gear k-color-inherit"></span>
1671
2863
  </span>
1672
2864
  </div>
1673
2865
  `,
@@ -1681,7 +2873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1681
2873
  }
1682
2874
  `]
1683
2875
  }]
1684
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2.LocalizationService }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
2876
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i1.LocalizationService }, { type: i0.Renderer2 }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
1685
2877
  type: HostBinding,
1686
2878
  args: ['class.k-d-flex']
1687
2879
  }, {
@@ -1723,16 +2915,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1723
2915
  type: Input
1724
2916
  }], columnHeadersWidth: [{
1725
2917
  type: Input
2918
+ }], navigable: [{
2919
+ type: Input
1726
2920
  }] } });
1727
2921
 
1728
2922
  /**
1729
2923
  * @hidden
1730
2924
  */
1731
2925
  class PivotGridState {
1732
- constructor(columnAxes, rowAxes, measureAxes) {
2926
+ constructor(columnAxes, rowAxes, measureAxes, sort, filter) {
1733
2927
  this.columnAxes = columnAxes;
1734
2928
  this.rowAxes = rowAxes;
1735
2929
  this.measureAxes = measureAxes;
2930
+ this.sort = sort;
2931
+ this.filter = filter;
1736
2932
  }
1737
2933
  }
1738
2934
 
@@ -1784,6 +2980,10 @@ class PivotBaseBindingDirective {
1784
2980
  * Represents the measure axes configuration of the PivotGrid.
1785
2981
  */
1786
2982
  this.measureAxes = [];
2983
+ /**
2984
+ * Represents the initial sorted state of the PivotGrid.
2985
+ */
2986
+ this.sort = [];
1787
2987
  /**
1788
2988
  * Fires each time a row or column header gets expanded or collapsed by the end user. The event is preventable.
1789
2989
  * If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the end user interaction.
@@ -1794,13 +2994,18 @@ class PivotBaseBindingDirective {
1794
2994
  * If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the configuration changes, applied through the configurator interface.
1795
2995
  */
1796
2996
  this.configurationChange = new EventEmitter();
2997
+ /**
2998
+ * Fires each time when new data is loaded and transformed to show aggregated values.
2999
+ * The event fires upon initialization and on user interaction that changes the state of the PivotGrid.
3000
+ */
3001
+ this.dataLoaded = new EventEmitter();
1797
3002
  this.subs = new Subscription();
1798
3003
  }
1799
3004
  /**
1800
3005
  * @hidden
1801
3006
  */
1802
3007
  get state() {
1803
- return new PivotGridState(this.columnAxes, this.rowAxes, this.measureAxes);
3008
+ return new PivotGridState(this.columnAxes, this.rowAxes, this.measureAxes, this.sort, this.filter);
1804
3009
  }
1805
3010
  ngOnInit() {
1806
3011
  this.loadData(this.state);
@@ -1826,11 +3031,20 @@ class PivotBaseBindingDirective {
1826
3031
  this.dataService.configuredFields.next({
1827
3032
  columnAxes: state.columnAxes,
1828
3033
  rowAxes: state.rowAxes,
1829
- measureAxes: state.measureAxes
3034
+ measureAxes: state.measureAxes,
3035
+ sort: state.sort,
3036
+ filter: state.filter
1830
3037
  });
1831
3038
  this.loadData(state);
1832
3039
  });
1833
3040
  }));
3041
+ this.subs.add(this.dataService.valuesRows.subscribe((data) => {
3042
+ this.zone.run(() => {
3043
+ if (hasObservers(this.dataLoaded)) {
3044
+ this.dataLoaded.emit(data);
3045
+ }
3046
+ });
3047
+ }));
1834
3048
  this.dataService.directive = this;
1835
3049
  }
1836
3050
  ngOnDestroy() {
@@ -1847,7 +3061,9 @@ class PivotBaseBindingDirective {
1847
3061
  this.dataService.configuredFields.next({
1848
3062
  columnAxes: this.columnAxes,
1849
3063
  rowAxes: this.rowAxes,
1850
- measureAxes: this.measureAxes
3064
+ measureAxes: this.measureAxes,
3065
+ sort: this.sort,
3066
+ filter: this.filter
1851
3067
  });
1852
3068
  }
1853
3069
  updateHeaders(axes, tree, path) {
@@ -1874,7 +3090,7 @@ class PivotBaseBindingDirective {
1874
3090
  ;
1875
3091
  }
1876
3092
  PivotBaseBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, deps: [{ token: PivotGridDataService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
1877
- PivotBaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotBaseBindingDirective, selector: "kendo-base-binding-directive", inputs: { columnAxes: "columnAxes", rowAxes: "rowAxes", measureAxes: "measureAxes" }, outputs: { expandChange: "expandChange", configurationChange: "configurationChange" }, ngImport: i0 });
3093
+ PivotBaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotBaseBindingDirective, selector: "kendo-base-binding-directive", inputs: { columnAxes: "columnAxes", rowAxes: "rowAxes", measureAxes: "measureAxes", sort: "sort", filter: "filter" }, outputs: { expandChange: "expandChange", configurationChange: "configurationChange", dataLoaded: "dataLoaded" }, ngImport: i0 });
1878
3094
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, decorators: [{
1879
3095
  type: Directive,
1880
3096
  args: [{
@@ -1886,10 +3102,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1886
3102
  type: Input
1887
3103
  }], measureAxes: [{
1888
3104
  type: Input
3105
+ }], sort: [{
3106
+ type: Input
3107
+ }], filter: [{
3108
+ type: Input
1889
3109
  }], expandChange: [{
1890
3110
  type: Output
1891
3111
  }], configurationChange: [{
1892
3112
  type: Output
3113
+ }], dataLoaded: [{
3114
+ type: Output
1893
3115
  }] } });
1894
3116
 
1895
3117
  const dataField = 'aggregate';
@@ -1921,13 +3143,13 @@ class PivotLocalBindingDirective extends PivotBaseBindingDirective {
1921
3143
  this.updateConfiguratorFields();
1922
3144
  }
1923
3145
  loadData(state) {
1924
- const { columnAxes, rowAxes, measureAxes } = state;
3146
+ const { columnAxes, rowAxes, measureAxes, sort, filter } = state;
1925
3147
  const rootColumnAxes = this.getRootAxes(columnAxes);
1926
3148
  const rootRowAxes = this.getRootAxes(rowAxes);
1927
3149
  const columnSettings = rootColumnAxes.split(stringSeparator).map(this.createAxisSettings);
1928
3150
  const rowSettings = rootRowAxes.split(stringSeparator).map(this.createAxisSettings);
1929
3151
  const measuresSettings = measureAxes.map(m => this.measures.find(meas => String(meas.name) === String(m.name))).filter(Boolean);
1930
- const dataTree = createDataTree(this.data, rowSettings, columnSettings, measuresSettings, bindingFields);
3152
+ const dataTree = createDataTree(this.data, rowSettings, columnSettings, measuresSettings, bindingFields, filter);
1931
3153
  this.dataState = createLocalDataState({
1932
3154
  dataTree,
1933
3155
  rowSettings,
@@ -1935,7 +3157,7 @@ class PivotLocalBindingDirective extends PivotBaseBindingDirective {
1935
3157
  rowAxes: rowAxes,
1936
3158
  columnAxes: columnAxes,
1937
3159
  measures: measuresSettings,
1938
- sort: [],
3160
+ sort: sort,
1939
3161
  fields: bindingFields
1940
3162
  });
1941
3163
  this.updateDataServiceFields();
@@ -1976,16 +3198,18 @@ class PivotOLAPBindingDirective extends PivotBaseBindingDirective {
1976
3198
  }
1977
3199
  }
1978
3200
  loadData(state) {
1979
- const { columnAxes, rowAxes, measureAxes } = state;
3201
+ const { columnAxes, rowAxes, measureAxes, sort, filter } = state;
1980
3202
  this.dataService.loading.next(true);
1981
3203
  const options = {
1982
3204
  connection: {
1983
3205
  catalog: this.catalog,
1984
3206
  cube: this.cube
1985
3207
  },
1986
- columnAxes: columnAxes,
1987
- rowAxes: rowAxes,
1988
- measureAxes: measureAxes
3208
+ columnAxes,
3209
+ rowAxes,
3210
+ measureAxes,
3211
+ sort,
3212
+ filter
1989
3213
  };
1990
3214
  fetchData({ url: this.url }, JSON.parse(JSON.stringify(options)))
1991
3215
  .then(createDataState)
@@ -2146,7 +3370,7 @@ class CustomMessagesComponent extends PivotGridMessages {
2146
3370
  return true;
2147
3371
  }
2148
3372
  }
2149
- CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
3373
+ CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
2150
3374
  CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomMessagesComponent, selector: "kendo-pivotgrid-messages", providers: [
2151
3375
  {
2152
3376
  provide: PivotGridMessages,
@@ -2165,16 +3389,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2165
3389
  selector: 'kendo-pivotgrid-messages',
2166
3390
  template: ``
2167
3391
  }]
2168
- }], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
3392
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
2169
3393
 
2170
- const IMPORTED_MODULES = [
3394
+ const MODULES = [
2171
3395
  CommonModule,
3396
+ DropDownsModule,
3397
+ InputsModule,
3398
+ ButtonsModule
3399
+ ];
3400
+ /**
3401
+ * @hidden
3402
+ */
3403
+ class SharedModule {
3404
+ }
3405
+ SharedModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3406
+ SharedModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, imports: [CommonModule,
3407
+ DropDownsModule,
3408
+ InputsModule,
3409
+ ButtonsModule], exports: [CommonModule,
3410
+ DropDownsModule,
3411
+ InputsModule,
3412
+ ButtonsModule] });
3413
+ SharedModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, imports: [[MODULES], CommonModule,
3414
+ DropDownsModule,
3415
+ InputsModule,
3416
+ ButtonsModule] });
3417
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SharedModule, decorators: [{
3418
+ type: NgModule,
3419
+ args: [{
3420
+ imports: [MODULES],
3421
+ exports: [MODULES]
3422
+ }]
3423
+ }] });
3424
+
3425
+ const COMPONENTS = [
3426
+ ChipMenuItemComponent,
3427
+ ChipMenuSortComponent,
3428
+ ChipMenuComponent,
3429
+ ChipMenuFilterComponent,
3430
+ ChipMenuItemContentTemplateDirective,
3431
+ FilterMenuContainerComponent,
3432
+ StringFilterMenuComponent,
3433
+ FilterMenuDropDownListDirective,
3434
+ ChipMenuContainerComponent,
3435
+ ChipMenuItemDirective
3436
+ ];
3437
+ /**
3438
+ * @hidden
3439
+ */
3440
+ class ChipMenuModule {
3441
+ static exports() {
3442
+ return [
3443
+ ChipMenuItemComponent,
3444
+ ChipMenuSortComponent,
3445
+ ChipMenuContainerComponent,
3446
+ ChipMenuItemDirective,
3447
+ ChipMenuComponent
3448
+ ];
3449
+ }
3450
+ }
3451
+ ChipMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3452
+ ChipMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuModule, declarations: [ChipMenuItemComponent,
3453
+ ChipMenuSortComponent,
3454
+ ChipMenuComponent,
3455
+ ChipMenuFilterComponent,
3456
+ ChipMenuItemContentTemplateDirective,
3457
+ FilterMenuContainerComponent,
3458
+ StringFilterMenuComponent,
3459
+ FilterMenuDropDownListDirective,
3460
+ ChipMenuContainerComponent,
3461
+ ChipMenuItemDirective], imports: [SharedModule,
3462
+ ReactiveFormsModule,
3463
+ FormsModule], exports: [ChipMenuItemComponent,
3464
+ ChipMenuSortComponent,
3465
+ ChipMenuComponent,
3466
+ ChipMenuFilterComponent,
3467
+ ChipMenuItemContentTemplateDirective,
3468
+ FilterMenuContainerComponent,
3469
+ StringFilterMenuComponent,
3470
+ FilterMenuDropDownListDirective,
3471
+ ChipMenuContainerComponent,
3472
+ ChipMenuItemDirective] });
3473
+ ChipMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuModule, imports: [[
3474
+ SharedModule,
3475
+ ReactiveFormsModule,
3476
+ FormsModule
3477
+ ]] });
3478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ChipMenuModule, decorators: [{
3479
+ type: NgModule,
3480
+ args: [{
3481
+ declarations: [COMPONENTS],
3482
+ imports: [
3483
+ SharedModule,
3484
+ ReactiveFormsModule,
3485
+ FormsModule
3486
+ ],
3487
+ exports: [COMPONENTS]
3488
+ }]
3489
+ }] });
3490
+
3491
+ const IMPORTED_MODULES = [
2172
3492
  EventsModule,
2173
3493
  IndicatorsModule,
2174
- ButtonsModule,
2175
3494
  TreeViewModule,
2176
- InputsModule,
2177
- DraggableModule
3495
+ DraggableModule,
3496
+ ChipMenuModule,
3497
+ SharedModule
2178
3498
  ];
2179
3499
  const DECLARATIONS = [
2180
3500
  PivotGridComponent,
@@ -2211,13 +3531,12 @@ PivotGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version
2211
3531
  DraggableChipDirective,
2212
3532
  DropTargetDirective,
2213
3533
  LocalizedMessagesDirective,
2214
- CustomMessagesComponent], imports: [CommonModule,
2215
- EventsModule,
3534
+ CustomMessagesComponent], imports: [EventsModule,
2216
3535
  IndicatorsModule,
2217
- ButtonsModule,
2218
3536
  TreeViewModule,
2219
- InputsModule,
2220
- DraggableModule], exports: [PivotGridComponent,
3537
+ DraggableModule,
3538
+ ChipMenuModule,
3539
+ SharedModule], exports: [PivotGridComponent,
2221
3540
  PivotGridTableComponent,
2222
3541
  PivotGridCellDirective,
2223
3542
  PivotLocalBindingDirective,