@progress/kendo-angular-pivotgrid 21.4.1 → 22.0.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/configurator/chip-menu/chip-menu-item-base.d.ts +1 -1
  2. package/data-binding/base-binding-directive.d.ts +1 -1
  3. package/fesm2022/progress-kendo-angular-pivotgrid.mjs +120 -120
  4. package/localization/messages.d.ts +1 -1
  5. package/package.json +18 -26
  6. package/schematics/ngAdd/index.js +2 -2
  7. package/esm2022/configurator/chip-kb-nav.directive.mjs +0 -69
  8. package/esm2022/configurator/chip-menu/chip-menu-container.component.mjs +0 -51
  9. package/esm2022/configurator/chip-menu/chip-menu-filter.component.mjs +0 -135
  10. package/esm2022/configurator/chip-menu/chip-menu-item-base.mjs +0 -40
  11. package/esm2022/configurator/chip-menu/chip-menu-item-content-template.directive.mjs +0 -29
  12. package/esm2022/configurator/chip-menu/chip-menu-item.component.mjs +0 -206
  13. package/esm2022/configurator/chip-menu/chip-menu-item.directive.mjs +0 -98
  14. package/esm2022/configurator/chip-menu/chip-menu-reorder.component.mjs +0 -198
  15. package/esm2022/configurator/chip-menu/chip-menu-sort.component.mjs +0 -104
  16. package/esm2022/configurator/chip-menu/chip-menu.component.mjs +0 -165
  17. package/esm2022/configurator/chip-menu/chip-menu.service.mjs +0 -40
  18. package/esm2022/configurator/chip-menu/filtering/filter-menu-container.component.mjs +0 -186
  19. package/esm2022/configurator/chip-menu/filtering/filter-menu-dropdownlist.directive.mjs +0 -44
  20. package/esm2022/configurator/chip-menu/filtering/menu-tabbing.service.mjs +0 -20
  21. package/esm2022/configurator/chip-menu/filtering/string-filter-menu.component.mjs +0 -148
  22. package/esm2022/configurator/chip-menu/single-popup.service.mjs +0 -136
  23. package/esm2022/configurator/configurator.component.mjs +0 -806
  24. package/esm2022/configurator/configurator.service.mjs +0 -53
  25. package/esm2022/configurator/draggable.directive.mjs +0 -131
  26. package/esm2022/configurator/drop-cue.service.mjs +0 -86
  27. package/esm2022/configurator/drop-target.directive.mjs +0 -190
  28. package/esm2022/data-binding/base-binding-directive.mjs +0 -164
  29. package/esm2022/data-binding/local-binding.directive.mjs +0 -107
  30. package/esm2022/data-binding/olap-binding.directive.mjs +0 -204
  31. package/esm2022/data-binding/pivotgrid-data.service.mjs +0 -76
  32. package/esm2022/directives.mjs +0 -97
  33. package/esm2022/index.mjs +0 -28
  34. package/esm2022/localization/custom-messages.component.mjs +0 -57
  35. package/esm2022/localization/localized-messages.directive.mjs +0 -39
  36. package/esm2022/localization/messages.mjs +0 -254
  37. package/esm2022/localization/pivot-localization.service.mjs +0 -30
  38. package/esm2022/models/configuration-change-event.mjs +0 -37
  39. package/esm2022/models/configurator-chipmenu-reorder-target.mjs +0 -5
  40. package/esm2022/models/configurator-orientation.mjs +0 -5
  41. package/esm2022/models/configurator-position.mjs +0 -5
  42. package/esm2022/models/configurator-settings.mjs +0 -21
  43. package/esm2022/models/data-row-item.mjs +0 -5
  44. package/esm2022/models/drop-section.mjs +0 -5
  45. package/esm2022/models/drop-target.mjs +0 -5
  46. package/esm2022/models/expanded-change-event.mjs +0 -29
  47. package/esm2022/models/expanded-state-action.mjs +0 -5
  48. package/esm2022/models/loader-settings.mjs +0 -5
  49. package/esm2022/models/virtualization-settings.mjs +0 -25
  50. package/esm2022/package-metadata.mjs +0 -16
  51. package/esm2022/pivotgrid.component.mjs +0 -729
  52. package/esm2022/pivotgrid.module.mjs +0 -87
  53. package/esm2022/progress-kendo-angular-pivotgrid.mjs +0 -8
  54. package/esm2022/rendering/pivotgrid-cell.directive.mjs +0 -247
  55. package/esm2022/rendering/pivotgrid-table.component.mjs +0 -386
  56. package/esm2022/rendering/templates/pivotgrid-cell-template.directive.mjs +0 -44
  57. package/esm2022/rendering/templates/pivotgrid-column-header-cell-template.directive.mjs +0 -44
  58. package/esm2022/rendering/templates/pivotgrid-row-header-cell-template.directive.mjs +0 -44
  59. package/esm2022/rendering/templates/pivotgrid-value-cell-template.directive.mjs +0 -43
  60. package/esm2022/util.mjs +0 -223
  61. package/esm2022/virtual/scroll.service.mjs +0 -18
  62. package/esm2022/virtual/scrollable-container.mjs +0 -128
@@ -1,186 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { MenuTabbingService } from './menu-tabbing.service';
6
- import { Component, Input, Output, EventEmitter, ChangeDetectorRef, ElementRef, ViewChild } from '@angular/core';
7
- import { isNullOrEmptyString } from "../../../util";
8
- import { PivotLocalizationService } from '../../../localization/pivot-localization.service';
9
- import { ConfiguratorService } from '../../configurator.service';
10
- import { PIVOT_CONFIGURATOR_ACTION } from '@progress/kendo-pivotgrid-common';
11
- import { NgClass } from '@angular/common';
12
- import { StringFilterMenuComponent } from './string-filter-menu.component';
13
- import { ReactiveFormsModule, FormsModule } from '@angular/forms';
14
- import { ButtonComponent } from '@progress/kendo-angular-buttons';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "../../../localization/pivot-localization.service";
17
- import * as i2 from "./menu-tabbing.service";
18
- import * as i3 from "../../configurator.service";
19
- import * as i4 from "@angular/forms";
20
- const isNoValueOperator = operator => (operator === "isnull"
21
- || operator === "isnotnull"
22
- || operator === "isempty"
23
- || operator === "isnotempty");
24
- const validFilter = ({ value, operator }) => !isNullOrEmptyString(value) || isNoValueOperator(operator);
25
- /**
26
- * @hidden
27
- */
28
- export class FilterMenuContainerComponent {
29
- localization;
30
- cd;
31
- configuratorService;
32
- close = new EventEmitter();
33
- /**
34
- * The field with which the filter is associated.
35
- */
36
- chip;
37
- isLast;
38
- isExpanded;
39
- menuTabbingService;
40
- actionsClass = 'k-action-buttons k-button-group';
41
- filterDescriptorValue;
42
- resetButton;
43
- filterButton;
44
- constructor(localization, cd, menuTabbingService, configuratorService) {
45
- this.localization = localization;
46
- this.cd = cd;
47
- this.configuratorService = configuratorService;
48
- this.menuTabbingService = menuTabbingService;
49
- }
50
- ngAfterViewChecked() {
51
- if (this.isLast && this.isExpanded) {
52
- this.menuTabbingService.lastFocusable = this.disabled ?
53
- this.resetButton.nativeElement : this.filterButton.nativeElement;
54
- }
55
- }
56
- ngOnDestroy() {
57
- this.menuTabbingService.lastFocusable = null;
58
- }
59
- get disabled() {
60
- return !(this.filterDescriptorValue && validFilter(this.filterDescriptorValue));
61
- }
62
- submit() {
63
- const filterDescriptor = {
64
- field: this.chip.name.toString(),
65
- ...this.filterDescriptorValue
66
- };
67
- const payload = !this.configuratorService.state.filter ?
68
- [filterDescriptor] :
69
- [
70
- ...this.configuratorService.state.filter.filter(descriptor => descriptor.field !== filterDescriptor.field),
71
- filterDescriptor
72
- ];
73
- this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setFilter, payload: payload });
74
- this.close.emit();
75
- return false;
76
- }
77
- reset() {
78
- const filters = this.configuratorService.state.filter.filter(descriptor => descriptor.field !== this.chip.name.toString());
79
- this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setFilter, payload: filters });
80
- this.close.emit();
81
- }
82
- onTab(e, buttonType) {
83
- if (this.menuTabbingService.firstFocusable && this.isLast) {
84
- e.preventDefault();
85
- if (buttonType === 'reset') {
86
- // eslint-disable-next-line no-unused-expressions
87
- this.disabled ? this.menuTabbingService.firstFocusable.focus() : this.filterButton.nativeElement.focus();
88
- }
89
- else {
90
- this.menuTabbingService.firstFocusable.focus();
91
- }
92
- }
93
- }
94
- /**
95
- * Returns the localized message for a given token
96
- */
97
- messageFor(localizationToken) {
98
- return this.localization.get(localizationToken);
99
- }
100
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterMenuContainerComponent, deps: [{ token: i1.PivotLocalizationService }, { token: i0.ChangeDetectorRef }, { token: i2.MenuTabbingService }, { token: i3.ConfiguratorService }], target: i0.ɵɵFactoryTarget.Component });
101
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FilterMenuContainerComponent, isStandalone: true, selector: "kendo-pivot-filter-menu-container", inputs: { chip: "chip", isLast: "isLast", isExpanded: "isExpanded", menuTabbingService: "menuTabbingService", actionsClass: "actionsClass" }, outputs: { close: "close" }, providers: [
102
- MenuTabbingService
103
- ], viewQueries: [{ propertyName: "resetButton", first: true, predicate: ["resetButton"], descendants: true }, { propertyName: "filterButton", first: true, predicate: ["filterButton"], descendants: true }], ngImport: i0, template: `
104
- <form (submit)="submit()" (reset)="reset()"
105
- class="k-filter-menu k-group k-reset k-state-border-up">
106
- <div class="k-filter-menu-container">
107
- <kendo-pivot-string-filter-menu
108
- [style]="'display: flex; flex-flow: column nowrap; align-items: stretch; gap: 8px;'"
109
- [(ngModel)]="filterDescriptorValue"
110
- name="'filterDescriptorValue'"
111
- [chip]="chip"
112
- [menuTabbingService]="menuTabbingService">
113
- </kendo-pivot-string-filter-menu>
114
- <div [ngClass]="actionsClass">
115
- <button
116
- #resetButton
117
- type="reset"
118
- kendoButton
119
- (keydown.tab)="onTab($event, 'reset')">{{messageFor('filterClearButton')}}</button>
120
- <button #filterButton
121
- type="submit"
122
- [disabled]="disabled"
123
- kendoButton
124
- themeColor="primary"
125
- (keydown.tab)="onTab($event, 'filter')">{{messageFor('filterFilterButton')}}</button>
126
- </div>
127
- </div>
128
- </form>
129
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: StringFilterMenuComponent, selector: "kendo-pivot-string-filter-menu", inputs: ["chip", "menuTabbingService"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] });
130
- }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterMenuContainerComponent, decorators: [{
132
- type: Component,
133
- args: [{
134
- providers: [
135
- MenuTabbingService
136
- ],
137
- selector: 'kendo-pivot-filter-menu-container',
138
- template: `
139
- <form (submit)="submit()" (reset)="reset()"
140
- class="k-filter-menu k-group k-reset k-state-border-up">
141
- <div class="k-filter-menu-container">
142
- <kendo-pivot-string-filter-menu
143
- [style]="'display: flex; flex-flow: column nowrap; align-items: stretch; gap: 8px;'"
144
- [(ngModel)]="filterDescriptorValue"
145
- name="'filterDescriptorValue'"
146
- [chip]="chip"
147
- [menuTabbingService]="menuTabbingService">
148
- </kendo-pivot-string-filter-menu>
149
- <div [ngClass]="actionsClass">
150
- <button
151
- #resetButton
152
- type="reset"
153
- kendoButton
154
- (keydown.tab)="onTab($event, 'reset')">{{messageFor('filterClearButton')}}</button>
155
- <button #filterButton
156
- type="submit"
157
- [disabled]="disabled"
158
- kendoButton
159
- themeColor="primary"
160
- (keydown.tab)="onTab($event, 'filter')">{{messageFor('filterFilterButton')}}</button>
161
- </div>
162
- </div>
163
- </form>
164
- `,
165
- standalone: true,
166
- imports: [ReactiveFormsModule, FormsModule, StringFilterMenuComponent, NgClass, ButtonComponent]
167
- }]
168
- }], ctorParameters: () => [{ type: i1.PivotLocalizationService }, { type: i0.ChangeDetectorRef }, { type: i2.MenuTabbingService }, { type: i3.ConfiguratorService }], propDecorators: { close: [{
169
- type: Output
170
- }], chip: [{
171
- type: Input
172
- }], isLast: [{
173
- type: Input
174
- }], isExpanded: [{
175
- type: Input
176
- }], menuTabbingService: [{
177
- type: Input
178
- }], actionsClass: [{
179
- type: Input
180
- }], resetButton: [{
181
- type: ViewChild,
182
- args: ['resetButton']
183
- }], filterButton: [{
184
- type: ViewChild,
185
- args: ['filterButton']
186
- }] } });
@@ -1,44 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { DropDownListComponent } from '@progress/kendo-angular-dropdowns';
6
- import { Directive, Input } from '@angular/core';
7
- import { Keys } from '@progress/kendo-angular-common';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@progress/kendo-angular-dropdowns";
10
- /**
11
- * @hidden
12
- */
13
- export class FilterMenuDropDownListDirective {
14
- host;
15
- filterMenuDropDownLabel;
16
- constructor(host) {
17
- this.host = host;
18
- }
19
- ngAfterViewInit() {
20
- const wrapperElement = this.host.wrapper.nativeElement;
21
- wrapperElement.setAttribute('aria-label', this.filterMenuDropDownLabel);
22
- wrapperElement.addEventListener('keydown', this.keydownHandler, true);
23
- }
24
- ngOnDestroy() {
25
- this.host.wrapper.nativeElement.removeEventListener('keydown', this.keydownHandler);
26
- }
27
- keydownHandler = (e) => {
28
- if (e.code === Keys.Escape && this.host.isOpen) {
29
- e.stopPropagation();
30
- this.host.toggle(false);
31
- }
32
- };
33
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterMenuDropDownListDirective, deps: [{ token: i1.DropDownListComponent }], target: i0.ɵɵFactoryTarget.Directive });
34
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: FilterMenuDropDownListDirective, isStandalone: true, selector: "[kendoFilterMenuDropDown]", inputs: { filterMenuDropDownLabel: "filterMenuDropDownLabel" }, ngImport: i0 });
35
- }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FilterMenuDropDownListDirective, decorators: [{
37
- type: Directive,
38
- args: [{
39
- selector: '[kendoFilterMenuDropDown]',
40
- standalone: true
41
- }]
42
- }], ctorParameters: () => [{ type: i1.DropDownListComponent }], propDecorators: { filterMenuDropDownLabel: [{
43
- type: Input
44
- }] } });
@@ -1,20 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Injectable } from '@angular/core';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * @hidden
9
- */
10
- export class MenuTabbingService {
11
- firstFocusable;
12
- lastFocusable;
13
- isPopupOpen = false;
14
- lastMenuItem;
15
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTabbingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
16
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTabbingService });
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MenuTabbingService, decorators: [{
19
- type: Injectable
20
- }] });
@@ -1,148 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { MenuTabbingService } from './menu-tabbing.service';
6
- import { Component, Input, forwardRef } from '@angular/core';
7
- import { PivotLocalizationService } from '../../../localization/pivot-localization.service';
8
- import { FormBuilder, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
9
- import { ConfiguratorService } from '../../configurator.service';
10
- import { Subscription } from 'rxjs';
11
- import { FilterMenuDropDownListDirective } from './filter-menu-dropdownlist.directive';
12
- import { DropDownListComponent } from '@progress/kendo-angular-dropdowns';
13
- import { TextBoxDirective } from '@progress/kendo-angular-inputs';
14
- import { replaceMessagePlaceholder } from '@progress/kendo-angular-common';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "../../../localization/pivot-localization.service";
17
- import * as i2 from "../../configurator.service";
18
- import * as i3 from "@angular/forms";
19
- /**
20
- * @hidden
21
- */
22
- export const localizeOperators = operators => localization => Object.keys(operators).map(key => ({
23
- text: localization.get(key),
24
- value: operators[key]
25
- }));
26
- const stringOperators = localizeOperators({
27
- "filterEqOperator": "eq",
28
- "filterNotEqOperator": "neq",
29
- "filterContainsOperator": "contains",
30
- "filterNotContainsOperator": "doesnotcontain",
31
- "filterStartsWithOperator": "startswith",
32
- "filterEndsWithOperator": "endswith",
33
- "filterIsNullOperator": "isnull",
34
- "filterIsNotNullOperator": "isnotnull",
35
- "filterIsEmptyOperator": "isempty",
36
- "filterIsNotEmptyOperator": "isnotempty"
37
- });
38
- /**
39
- * @hidden
40
- *
41
- * Represents a string-filter menu component.
42
- */
43
- export class StringFilterMenuComponent {
44
- localization;
45
- configuratorService;
46
- fb;
47
- /**
48
- * The field with which the filter is associated.
49
- */
50
- chip;
51
- menuTabbingService;
52
- operators;
53
- filterFormGroup;
54
- get currentFilter() {
55
- const filterValue = this.configuratorService.state.filter?.filter(x => x.field === this.chip.name.toString());
56
- return filterValue && filterValue[0];
57
- }
58
- subscription = new Subscription();
59
- constructor(localization, configuratorService, fb) {
60
- this.localization = localization;
61
- this.configuratorService = configuratorService;
62
- this.fb = fb;
63
- }
64
- // eslint-disable-next-line @typescript-eslint/no-empty-function
65
- onTouched = () => { };
66
- registerOnChange(fn) {
67
- this.filterFormGroup.valueChanges.subscribe(fn);
68
- }
69
- registerOnTouched(fn) {
70
- this.onTouched = fn;
71
- }
72
- writeValue(val) {
73
- if (val) {
74
- this.filterFormGroup.setValue(val, { emitEvent: false });
75
- }
76
- }
77
- get filterMenuDropDownLabel() {
78
- const localizationMsg = this.localization.get('filterOperatorsDropDownLabel') || '';
79
- const chipName = this.chip.name.toString();
80
- return replaceMessagePlaceholder(localizationMsg, 'fields', chipName);
81
- }
82
- ngOnInit() {
83
- this.filterFormGroup = this.fb.group({
84
- operator: [this.currentFilter ? this.currentFilter.operator : ''],
85
- value: [this.currentFilter ? this.currentFilter.value : '']
86
- });
87
- this.operators = stringOperators(this.localization);
88
- }
89
- ngOnDestroy() {
90
- this.subscription.unsubscribe();
91
- }
92
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StringFilterMenuComponent, deps: [{ token: i1.PivotLocalizationService }, { token: i2.ConfiguratorService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
93
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: StringFilterMenuComponent, isStandalone: true, selector: "kendo-pivot-string-filter-menu", inputs: { chip: "chip", menuTabbingService: "menuTabbingService" }, providers: [{
94
- provide: NG_VALUE_ACCESSOR,
95
- useExisting: forwardRef(() => StringFilterMenuComponent),
96
- multi: true
97
- }], ngImport: i0, template: `
98
- <ng-container [formGroup]="filterFormGroup">
99
- <kendo-dropdownlist
100
- kendoFilterMenuDropDown
101
- [filterMenuDropDownLabel]="filterMenuDropDownLabel"
102
- [data]="operators"
103
- formControlName="operator"
104
- [valuePrimitive]="true"
105
- textField="text"
106
- valueField="value">
107
- </kendo-dropdownlist>
108
- <input
109
- kendoTextBox
110
- formControlName="value"
111
- />
112
- </ng-container>
113
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: FilterMenuDropDownListDirective, selector: "[kendoFilterMenuDropDown]", inputs: ["filterMenuDropDownLabel"] }, { kind: "directive", type: TextBoxDirective, selector: "input[kendoTextBox]", inputs: ["value"] }] });
114
- }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StringFilterMenuComponent, decorators: [{
116
- type: Component,
117
- args: [{
118
- selector: 'kendo-pivot-string-filter-menu',
119
- providers: [{
120
- provide: NG_VALUE_ACCESSOR,
121
- useExisting: forwardRef(() => StringFilterMenuComponent),
122
- multi: true
123
- }],
124
- template: `
125
- <ng-container [formGroup]="filterFormGroup">
126
- <kendo-dropdownlist
127
- kendoFilterMenuDropDown
128
- [filterMenuDropDownLabel]="filterMenuDropDownLabel"
129
- [data]="operators"
130
- formControlName="operator"
131
- [valuePrimitive]="true"
132
- textField="text"
133
- valueField="value">
134
- </kendo-dropdownlist>
135
- <input
136
- kendoTextBox
137
- formControlName="value"
138
- />
139
- </ng-container>
140
- `,
141
- standalone: true,
142
- imports: [ReactiveFormsModule, DropDownListComponent, FilterMenuDropDownListDirective, TextBoxDirective]
143
- }]
144
- }], ctorParameters: () => [{ type: i1.PivotLocalizationService }, { type: i2.ConfiguratorService }, { type: i3.FormBuilder }], propDecorators: { chip: [{
145
- type: Input
146
- }], menuTabbingService: [{
147
- type: Input
148
- }] } });
@@ -1,136 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { PopupService } from '@progress/kendo-angular-popup';
6
- import { Injectable, Renderer2, NgZone } from '@angular/core';
7
- import { Subject, Subscription } from 'rxjs';
8
- import { PreventableEvent } from '@progress/kendo-angular-common';
9
- import { PivotLocalizationService } from '../../localization/pivot-localization.service';
10
- import { isPresent } from '../../util';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@progress/kendo-angular-popup";
13
- import * as i2 from "../../localization/pivot-localization.service";
14
- const contains = (node, predicate) => {
15
- while (node) {
16
- if (predicate(node)) {
17
- return true;
18
- }
19
- node = node.parentNode;
20
- }
21
- return false;
22
- };
23
- /**
24
- * @hidden
25
- * Arguments for the `close` event of the chip-menu popup.
26
- */
27
- export class PopupCloseEvent extends PreventableEvent {
28
- /**
29
- * The original DOM event that causes the popup to close.
30
- */
31
- originalEvent;
32
- /**
33
- * @hidden
34
- */
35
- constructor(e) {
36
- super();
37
- this.originalEvent = e;
38
- }
39
- }
40
- const DEFAULT_POPUP_CLASS = 'k-grid-filter-popup';
41
- /**
42
- * @hidden
43
- * The service that is used for the popups of the chip menus.
44
- */
45
- export class SinglePopupService {
46
- popupService;
47
- renderer;
48
- ngZone;
49
- localization;
50
- /**
51
- * Fires when the chip menus are about to close because the user clicked outside their popups.
52
- * Used to prevent the popup from closing.
53
- */
54
- onClose = new Subject();
55
- removeClick;
56
- pointerEventsSub = new Subscription();
57
- popupRef;
58
- scrollSubscription = new Subscription();
59
- canClosePopup;
60
- constructor(popupService, renderer, ngZone, localization) {
61
- this.popupService = popupService;
62
- this.renderer = renderer;
63
- this.ngZone = ngZone;
64
- this.localization = localization;
65
- }
66
- open(anchor, template, popupRef, popupClass = DEFAULT_POPUP_CLASS) {
67
- const toggle = isPresent(popupRef) && this.popupRef === popupRef;
68
- this.destroy();
69
- if (!toggle) {
70
- const direction = this.localization.rtl ? 'right' : 'left';
71
- this.popupRef = this.popupService.open({
72
- anchorAlign: { vertical: 'bottom', horizontal: direction },
73
- popupAlign: { vertical: 'top', horizontal: direction },
74
- anchor: anchor,
75
- popupClass: popupClass,
76
- content: template,
77
- positionMode: "absolute"
78
- });
79
- this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.localization.rtl ? 'rtl' : 'ltr');
80
- this.attachClose(anchor);
81
- }
82
- const popupEl = this.popupRef?.popupElement;
83
- if (popupEl) {
84
- this.attachMouseListeners(popupEl);
85
- }
86
- return this.popupRef;
87
- }
88
- destroy() {
89
- if (this.popupRef) {
90
- this.detachClose();
91
- this.pointerEventsSub.unsubscribe();
92
- this.pointerEventsSub = null;
93
- this.popupRef.close();
94
- this.popupRef = null;
95
- }
96
- }
97
- ngOnDestroy() {
98
- this.destroy();
99
- this.scrollSubscription.unsubscribe();
100
- }
101
- detachClose() {
102
- if (this.removeClick) {
103
- this.removeClick();
104
- }
105
- }
106
- attachClose(skipElement) {
107
- this.detachClose();
108
- this.ngZone.runOutsideAngular(() => this.removeClick = this.renderer.listen('document', 'click', (e) => {
109
- if (!contains(e.target, x => this.popupRef.popupElement === x || x === skipElement)) {
110
- const args = new PopupCloseEvent(e);
111
- this.onClose.next(args);
112
- if (!args.isDefaultPrevented() && this.canClosePopup) {
113
- this.destroy();
114
- }
115
- this.canClosePopup = true;
116
- }
117
- }));
118
- }
119
- attachMouseListeners(el) {
120
- this.pointerEventsSub = new Subscription();
121
- this.ngZone.runOutsideAngular(() => {
122
- this.pointerEventsSub.add(this.renderer.listen(el, 'pointerdown', (e) => {
123
- e.stopImmediatePropagation();
124
- this.canClosePopup = false;
125
- }));
126
- this.pointerEventsSub.add(this.renderer.listen(el, 'pointerup', () => {
127
- this.canClosePopup = true;
128
- }));
129
- });
130
- }
131
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SinglePopupService, deps: [{ token: i1.PopupService }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i2.PivotLocalizationService }], target: i0.ɵɵFactoryTarget.Injectable });
132
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SinglePopupService });
133
- }
134
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SinglePopupService, decorators: [{
135
- type: Injectable
136
- }], ctorParameters: () => [{ type: i1.PopupService }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i2.PivotLocalizationService }] });