@progress/kendo-angular-pivotgrid 0.2.0-dev.202209020712 → 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 (54) 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 +10 -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 +16 -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/package-metadata.js +1 -1
  43. package/esm2015/pivotgrid.component.js +14 -5
  44. package/esm2015/pivotgrid.module.js +9 -12
  45. package/esm2015/shared.module.js +40 -0
  46. package/esm2015/util.js +13 -0
  47. package/fesm2015/kendo-angular-pivotgrid.js +1331 -75
  48. package/localization/messages.d.ts +23 -1
  49. package/localization/pivot-localization.service.d.ts +19 -0
  50. package/models/configurator-settings.d.ts +4 -1
  51. package/package.json +1 -1
  52. package/pivotgrid.module.d.ts +6 -7
  53. package/shared.module.d.ts +17 -0
  54. 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, isChanged, PreventableEvent, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
9
+ import { isDocumentAvailable, PreventableEvent, Keys, isChanged, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
10
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: 1662102713,
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',
@@ -1430,10 +2567,11 @@ class PivotGridComponent {
1430
2567
  }
1431
2568
  }
1432
2569
  }
1433
- 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: i0.Renderer2 }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
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 });
1434
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: [
1435
2572
  PivotGridDataService,
1436
2573
  LocalizationService,
2574
+ PivotLocalizationService,
1437
2575
  {
1438
2576
  provide: L10N_PREFIX,
1439
2577
  useValue: 'kendo.pivotgrid'
@@ -1528,7 +2666,10 @@ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1528
2666
  configuratorEmptyColumnsText="Select some fields to begin setup"
1529
2667
 
1530
2668
  i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1531
- 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>
1532
2673
 
1533
2674
  <div #table class="k-pivotgrid">
1534
2675
  <span class="k-pivotgrid-empty-cell">
@@ -1568,10 +2709,10 @@ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1568
2709
  <div *ngIf="configurator"
1569
2710
  class="k-pivotgrid-configurator-button"
1570
2711
  (click)="showConfigurator = !showConfigurator">
1571
- <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>
1572
2713
  </span>
1573
2714
  </div>
1574
- `, 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"] }] });
1575
2716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, decorators: [{
1576
2717
  type: Component,
1577
2718
  args: [{
@@ -1579,6 +2720,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1579
2720
  providers: [
1580
2721
  PivotGridDataService,
1581
2722
  LocalizationService,
2723
+ PivotLocalizationService,
1582
2724
  {
1583
2725
  provide: L10N_PREFIX,
1584
2726
  useValue: 'kendo.pivotgrid'
@@ -1674,7 +2816,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1674
2816
  configuratorEmptyColumnsText="Select some fields to begin setup"
1675
2817
 
1676
2818
  i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1677
- 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>
1678
2823
 
1679
2824
  <div #table class="k-pivotgrid">
1680
2825
  <span class="k-pivotgrid-empty-cell">
@@ -1714,7 +2859,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1714
2859
  <div *ngIf="configurator"
1715
2860
  class="k-pivotgrid-configurator-button"
1716
2861
  (click)="showConfigurator = !showConfigurator">
1717
- <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>
1718
2863
  </span>
1719
2864
  </div>
1720
2865
  `,
@@ -1728,7 +2873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1728
2873
  }
1729
2874
  `]
1730
2875
  }]
1731
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { 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: [{
1732
2877
  type: HostBinding,
1733
2878
  args: ['class.k-d-flex']
1734
2879
  }, {
@@ -1778,10 +2923,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1778
2923
  * @hidden
1779
2924
  */
1780
2925
  class PivotGridState {
1781
- constructor(columnAxes, rowAxes, measureAxes) {
2926
+ constructor(columnAxes, rowAxes, measureAxes, sort, filter) {
1782
2927
  this.columnAxes = columnAxes;
1783
2928
  this.rowAxes = rowAxes;
1784
2929
  this.measureAxes = measureAxes;
2930
+ this.sort = sort;
2931
+ this.filter = filter;
1785
2932
  }
1786
2933
  }
1787
2934
 
@@ -1833,6 +2980,10 @@ class PivotBaseBindingDirective {
1833
2980
  * Represents the measure axes configuration of the PivotGrid.
1834
2981
  */
1835
2982
  this.measureAxes = [];
2983
+ /**
2984
+ * Represents the initial sorted state of the PivotGrid.
2985
+ */
2986
+ this.sort = [];
1836
2987
  /**
1837
2988
  * Fires each time a row or column header gets expanded or collapsed by the end user. The event is preventable.
1838
2989
  * If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the end user interaction.
@@ -1854,7 +3005,7 @@ class PivotBaseBindingDirective {
1854
3005
  * @hidden
1855
3006
  */
1856
3007
  get state() {
1857
- return new PivotGridState(this.columnAxes, this.rowAxes, this.measureAxes);
3008
+ return new PivotGridState(this.columnAxes, this.rowAxes, this.measureAxes, this.sort, this.filter);
1858
3009
  }
1859
3010
  ngOnInit() {
1860
3011
  this.loadData(this.state);
@@ -1880,7 +3031,9 @@ class PivotBaseBindingDirective {
1880
3031
  this.dataService.configuredFields.next({
1881
3032
  columnAxes: state.columnAxes,
1882
3033
  rowAxes: state.rowAxes,
1883
- measureAxes: state.measureAxes
3034
+ measureAxes: state.measureAxes,
3035
+ sort: state.sort,
3036
+ filter: state.filter
1884
3037
  });
1885
3038
  this.loadData(state);
1886
3039
  });
@@ -1908,7 +3061,9 @@ class PivotBaseBindingDirective {
1908
3061
  this.dataService.configuredFields.next({
1909
3062
  columnAxes: this.columnAxes,
1910
3063
  rowAxes: this.rowAxes,
1911
- measureAxes: this.measureAxes
3064
+ measureAxes: this.measureAxes,
3065
+ sort: this.sort,
3066
+ filter: this.filter
1912
3067
  });
1913
3068
  }
1914
3069
  updateHeaders(axes, tree, path) {
@@ -1935,7 +3090,7 @@ class PivotBaseBindingDirective {
1935
3090
  ;
1936
3091
  }
1937
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 });
1938
- 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", dataLoaded: "dataLoaded" }, 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 });
1939
3094
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, decorators: [{
1940
3095
  type: Directive,
1941
3096
  args: [{
@@ -1947,6 +3102,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1947
3102
  type: Input
1948
3103
  }], measureAxes: [{
1949
3104
  type: Input
3105
+ }], sort: [{
3106
+ type: Input
3107
+ }], filter: [{
3108
+ type: Input
1950
3109
  }], expandChange: [{
1951
3110
  type: Output
1952
3111
  }], configurationChange: [{
@@ -1984,13 +3143,13 @@ class PivotLocalBindingDirective extends PivotBaseBindingDirective {
1984
3143
  this.updateConfiguratorFields();
1985
3144
  }
1986
3145
  loadData(state) {
1987
- const { columnAxes, rowAxes, measureAxes } = state;
3146
+ const { columnAxes, rowAxes, measureAxes, sort, filter } = state;
1988
3147
  const rootColumnAxes = this.getRootAxes(columnAxes);
1989
3148
  const rootRowAxes = this.getRootAxes(rowAxes);
1990
3149
  const columnSettings = rootColumnAxes.split(stringSeparator).map(this.createAxisSettings);
1991
3150
  const rowSettings = rootRowAxes.split(stringSeparator).map(this.createAxisSettings);
1992
3151
  const measuresSettings = measureAxes.map(m => this.measures.find(meas => String(meas.name) === String(m.name))).filter(Boolean);
1993
- const dataTree = createDataTree(this.data, rowSettings, columnSettings, measuresSettings, bindingFields);
3152
+ const dataTree = createDataTree(this.data, rowSettings, columnSettings, measuresSettings, bindingFields, filter);
1994
3153
  this.dataState = createLocalDataState({
1995
3154
  dataTree,
1996
3155
  rowSettings,
@@ -1998,7 +3157,7 @@ class PivotLocalBindingDirective extends PivotBaseBindingDirective {
1998
3157
  rowAxes: rowAxes,
1999
3158
  columnAxes: columnAxes,
2000
3159
  measures: measuresSettings,
2001
- sort: [],
3160
+ sort: sort,
2002
3161
  fields: bindingFields
2003
3162
  });
2004
3163
  this.updateDataServiceFields();
@@ -2039,16 +3198,18 @@ class PivotOLAPBindingDirective extends PivotBaseBindingDirective {
2039
3198
  }
2040
3199
  }
2041
3200
  loadData(state) {
2042
- const { columnAxes, rowAxes, measureAxes } = state;
3201
+ const { columnAxes, rowAxes, measureAxes, sort, filter } = state;
2043
3202
  this.dataService.loading.next(true);
2044
3203
  const options = {
2045
3204
  connection: {
2046
3205
  catalog: this.catalog,
2047
3206
  cube: this.cube
2048
3207
  },
2049
- columnAxes: columnAxes,
2050
- rowAxes: rowAxes,
2051
- measureAxes: measureAxes
3208
+ columnAxes,
3209
+ rowAxes,
3210
+ measureAxes,
3211
+ sort,
3212
+ filter
2052
3213
  };
2053
3214
  fetchData({ url: this.url }, JSON.parse(JSON.stringify(options)))
2054
3215
  .then(createDataState)
@@ -2209,7 +3370,7 @@ class CustomMessagesComponent extends PivotGridMessages {
2209
3370
  return true;
2210
3371
  }
2211
3372
  }
2212
- 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 });
2213
3374
  CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomMessagesComponent, selector: "kendo-pivotgrid-messages", providers: [
2214
3375
  {
2215
3376
  provide: PivotGridMessages,
@@ -2228,16 +3389,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2228
3389
  selector: 'kendo-pivotgrid-messages',
2229
3390
  template: ``
2230
3391
  }]
2231
- }], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
3392
+ }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
2232
3393
 
2233
- const IMPORTED_MODULES = [
3394
+ const MODULES = [
2234
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 = [
2235
3492
  EventsModule,
2236
3493
  IndicatorsModule,
2237
- ButtonsModule,
2238
3494
  TreeViewModule,
2239
- InputsModule,
2240
- DraggableModule
3495
+ DraggableModule,
3496
+ ChipMenuModule,
3497
+ SharedModule
2241
3498
  ];
2242
3499
  const DECLARATIONS = [
2243
3500
  PivotGridComponent,
@@ -2274,13 +3531,12 @@ PivotGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version
2274
3531
  DraggableChipDirective,
2275
3532
  DropTargetDirective,
2276
3533
  LocalizedMessagesDirective,
2277
- CustomMessagesComponent], imports: [CommonModule,
2278
- EventsModule,
3534
+ CustomMessagesComponent], imports: [EventsModule,
2279
3535
  IndicatorsModule,
2280
- ButtonsModule,
2281
3536
  TreeViewModule,
2282
- InputsModule,
2283
- DraggableModule], exports: [PivotGridComponent,
3537
+ DraggableModule,
3538
+ ChipMenuModule,
3539
+ SharedModule], exports: [PivotGridComponent,
2284
3540
  PivotGridTableComponent,
2285
3541
  PivotGridCellDirective,
2286
3542
  PivotLocalBindingDirective,