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

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 (45) hide show
  1. package/bundles/kendo-angular-pivotgrid.umd.js +1 -1
  2. package/configurator/configurator.component.d.ts +96 -0
  3. package/configurator/configurator.service.d.ts +17 -0
  4. package/configurator/draggable.directive.d.ts +32 -0
  5. package/configurator/drop-cue.service.d.ts +22 -0
  6. package/configurator/drop-target.directive.d.ts +32 -0
  7. package/data-binding/base-binding-directive.d.ts +27 -5
  8. package/data-binding/local-binding.directive.d.ts +8 -1
  9. package/data-binding/olap-binding.directive.d.ts +13 -1
  10. package/data-binding/pivotgrid-data.service.d.ts +13 -4
  11. package/esm2015/configurator/configurator.component.js +500 -0
  12. package/esm2015/configurator/configurator.service.js +38 -0
  13. package/esm2015/configurator/draggable.directive.js +94 -0
  14. package/esm2015/configurator/drop-cue.service.js +64 -0
  15. package/esm2015/configurator/drop-target.directive.js +82 -0
  16. package/esm2015/data-binding/base-binding-directive.js +68 -9
  17. package/esm2015/data-binding/local-binding.directive.js +20 -8
  18. package/esm2015/data-binding/olap-binding.directive.js +131 -6
  19. package/esm2015/data-binding/pivotgrid-data.service.js +26 -3
  20. package/esm2015/localization/custom-messages.component.js +41 -0
  21. package/esm2015/localization/localized-messages.directive.js +36 -0
  22. package/esm2015/localization/messages.js +77 -0
  23. package/esm2015/main.js +8 -0
  24. package/esm2015/models/configuration-change-event.js +18 -0
  25. package/esm2015/models/configurator-settings.js +14 -0
  26. package/esm2015/models/expanded-change-event.js +18 -0
  27. package/esm2015/package-metadata.js +1 -1
  28. package/esm2015/pivotgrid.component.js +360 -63
  29. package/esm2015/pivotgrid.module.js +43 -16
  30. package/esm2015/rendering/pivotgrid-cell.directive.js +6 -3
  31. package/esm2015/rendering/pivotgrid-table.component.js +29 -10
  32. package/esm2015/util.js +86 -0
  33. package/fesm2015/kendo-angular-pivotgrid.js +1696 -156
  34. package/localization/custom-messages.component.d.ts +18 -0
  35. package/localization/localized-messages.directive.d.ts +16 -0
  36. package/localization/messages.d.ts +172 -0
  37. package/main.d.ts +6 -0
  38. package/models/configuration-change-event.d.ts +36 -0
  39. package/models/configurator-settings.d.ts +32 -0
  40. package/models/expanded-change-event.d.ts +27 -0
  41. package/package.json +7 -1
  42. package/pivotgrid.component.d.ts +28 -3
  43. package/pivotgrid.module.d.ts +15 -7
  44. package/rendering/pivotgrid-table.component.d.ts +3 -2
  45. package/util.d.ts +31 -0
@@ -3,19 +3,27 @@
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, ElementRef, ViewChild, Directive, NgModule } from '@angular/core';
6
+ import { EventEmitter, Injectable, Output, Component, HostBinding, Input, Directive, Optional, forwardRef, ElementRef, ViewChild, NgModule } from '@angular/core';
7
7
  import { validatePackage } from '@progress/kendo-licensing';
8
- import * as i2$1 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, anyChanged, EventsModule } from '@progress/kendo-angular-common';
10
- import { toTree, toRows, toColumns, toData, HEADERS_ACTION, headersReducer, createDataTree, createLocalDataState, rootFields, fetchData, createDataState } from '@progress/kendo-pivotgrid-common';
8
+ import * as i3 from '@progress/kendo-angular-common';
9
+ import { isDocumentAvailable, PreventableEvent, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
10
+ import { toTree, toRows, toColumns, toData, configuratorReducer, PIVOT_CONFIGURATOR_ACTION, HEADERS_ACTION, headersReducer, createFlatSchemaDimensions, createDataTree, createLocalDataState, rootFields, fetchData, createDataState, fetchDiscover, addKPI, buildKPIMeasures } from '@progress/kendo-pivotgrid-common';
11
11
  export { averageAggregate, maxAggregate, minAggregate, sumAggregate } from '@progress/kendo-pivotgrid-common';
12
- import { BehaviorSubject, Subscription, fromEvent } from 'rxjs';
13
- import { merge } from 'rxjs/operators';
14
- import * as i2 from '@angular/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';
15
+ import { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';
16
+ import * as i6 from '@angular/common';
15
17
  import { CommonModule } from '@angular/common';
16
- import * as i4 from '@progress/kendo-angular-indicators';
18
+ import * as i5$1 from '@progress/kendo-angular-indicators';
17
19
  import { IndicatorsModule } from '@progress/kendo-angular-indicators';
18
- import { L10N_PREFIX } from '@progress/kendo-angular-l10n';
20
+ import * as i4 from '@progress/kendo-angular-treeview';
21
+ import { TreeViewModule } from '@progress/kendo-angular-treeview';
22
+ import * as i5 from '@progress/kendo-angular-buttons';
23
+ import { ButtonsModule } from '@progress/kendo-angular-buttons';
24
+ import * as i7 from '@progress/kendo-angular-inputs';
25
+ import { InputsModule } from '@progress/kendo-angular-inputs';
26
+ import { __awaiter } from 'tslib';
19
27
 
20
28
  /**
21
29
  * @hidden
@@ -24,46 +32,11 @@ const packageMetadata = {
24
32
  name: '@progress/kendo-angular-pivotgrid',
25
33
  productName: 'Kendo UI for Angular',
26
34
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
27
- publishDate: 1660825543,
35
+ publishDate: 1660892763,
28
36
  version: '',
29
37
  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'
30
38
  };
31
39
 
32
- /**
33
- * @hidden
34
- */
35
- class PivotGridDataService {
36
- constructor() {
37
- this.expandedStateChange = new EventEmitter();
38
- this.columnHeaderRows = new BehaviorSubject([]);
39
- this.columnHeaderCols = new BehaviorSubject([]);
40
- this.rowHeaderCols = new BehaviorSubject([]);
41
- this.rowHeaderRows = new BehaviorSubject([]);
42
- this.valuesRows = new BehaviorSubject([]);
43
- this.loading = new BehaviorSubject(false);
44
- }
45
- updateRowsAndCols() {
46
- const rowsTree = toTree((this.rows || []).slice());
47
- const [rowHeaderRows, rowHeaderLeaves, rowHeaderDepth, rowHeaderBreadth] = toRows(rowsTree);
48
- const columnsTree = toTree((this.columns || []).slice());
49
- const [columnHeaderRows, columnHeaderLeaves, columnHeaderBreadth] = toColumns(columnsTree);
50
- this.columnHeaderLeaves = columnHeaderLeaves;
51
- this.columnHeaderCols.next(columnHeaderLeaves);
52
- this.columnHeaderRows.next(columnHeaderRows);
53
- this.rowHeaderLeaves = rowHeaderLeaves;
54
- this.rowHeaderCols.next(new Array(rowHeaderBreadth).fill({}));
55
- this.rowHeaderRows.next(rowHeaderRows);
56
- this.valuesRows.next(toData((this.normalizedData || []).slice(), columnHeaderLeaves, rowHeaderLeaves, columnHeaderBreadth, rowHeaderDepth));
57
- }
58
- }
59
- PivotGridDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
60
- PivotGridDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService });
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, decorators: [{
62
- type: Injectable
63
- }], propDecorators: { expandedStateChange: [{
64
- type: Output
65
- }] } });
66
-
67
40
  /**
68
41
  * @hidden
69
42
  */
@@ -126,6 +99,148 @@ const syncWheel = (event, tables, prop, axis) => {
126
99
  tables[1][prop] += delta;
127
100
  }
128
101
  };
102
+ /**
103
+ * @hidden
104
+ */
105
+ function cloneTo(obj, result) {
106
+ for (let field in obj) {
107
+ if (obj.hasOwnProperty(field)) {
108
+ const value = obj[field];
109
+ if (Array.isArray(value)) {
110
+ result[field] = value.slice(0);
111
+ }
112
+ else if (value && typeof value === 'object' && !(value instanceof Date)) {
113
+ result[field] = result[field] || {};
114
+ cloneTo(value, result[field]);
115
+ }
116
+ else {
117
+ result[field] = value;
118
+ }
119
+ }
120
+ }
121
+ }
122
+ /**
123
+ * @hidden
124
+ */
125
+ function clone(obj) {
126
+ const result = {};
127
+ cloneTo(obj, result);
128
+ return result;
129
+ }
130
+ /**
131
+ * @hidden
132
+ */
133
+ const getDocument = element => element.ownerDocument.documentElement;
134
+ /**
135
+ * @hidden
136
+ */
137
+ const getWindow = element => element.ownerDocument.defaultView;
138
+ /**
139
+ * @hidden
140
+ */
141
+ const offset = element => {
142
+ const { clientTop, clientLeft } = getDocument(element);
143
+ const { pageYOffset, pageXOffset } = getWindow(element);
144
+ const { top, left } = element.getBoundingClientRect();
145
+ return {
146
+ top: top + pageYOffset - clientTop,
147
+ left: left + pageXOffset - clientLeft
148
+ };
149
+ };
150
+ /**
151
+ * @hidden
152
+ */
153
+ const matchAriaAttributes = (wrapper) => {
154
+ const rowHeaderRows = wrapper.querySelectorAll('.k-pivotgrid-row-headers .k-pivotgrid-row');
155
+ const colHeaderCells = wrapper.querySelectorAll('.k-pivotgrid-column-headers th');
156
+ const valueTableCells = wrapper.querySelectorAll('.k-pivotgrid-values td');
157
+ rowHeaderRows.forEach((row, index) => {
158
+ const valueCellsIds = filterAndMap(Array.from(valueTableCells), c => c.getAttribute('id').split('-')[4] === (index + 1).toString(), c => c.getAttribute('id'));
159
+ row.setAttribute('aria-owns', valueCellsIds.join(' '));
160
+ });
161
+ valueTableCells.forEach(cell => {
162
+ const cellColIndex = +cell.getAttribute('id').split('-')[5];
163
+ const colHeaderCellsIds = filterAndMap(Array.from(colHeaderCells), c => {
164
+ const headerCellColIndex = +c.getAttribute('id').split('-')[5];
165
+ const headerCellColspan = +c.getAttribute('colspan');
166
+ const colIndexIsEqual = cellColIndex === headerCellColIndex;
167
+ const cellColIndexIsWithinHeaderCellRange = headerCellColspan > 1 && (headerCellColIndex + headerCellColspan - 1 >= cellColIndex);
168
+ return colIndexIsEqual || cellColIndexIsWithinHeaderCellRange;
169
+ }, c => c.getAttribute('id'));
170
+ cell.setAttribute('aria-describedby', colHeaderCellsIds.join(' '));
171
+ });
172
+ };
173
+ /**
174
+ * @hidden
175
+ */
176
+ const position = (target, before) => {
177
+ const targetRect = offset(target);
178
+ const { offsetWidth, offsetHeight } = target;
179
+ const left = targetRect.left + (before ? 0 : offsetWidth);
180
+ const top = targetRect.top + offsetHeight / 2;
181
+ const height = offsetHeight;
182
+ return { left, top, height };
183
+ };
184
+ /**
185
+ * @hidden
186
+ */
187
+ const filterAndMap = (arr, predicate, mapper) => arr.reduce((acc, curr) => predicate(curr) ? [...acc, mapper(curr)] : acc, []);
188
+
189
+ /**
190
+ * @hidden
191
+ */
192
+ let nextPivotGridId = 0;
193
+ /**
194
+ * @hidden
195
+ */
196
+ class PivotGridDataService {
197
+ constructor(ngZone) {
198
+ this.ngZone = ngZone;
199
+ this.expandedStateChange = new EventEmitter();
200
+ this.configuratorFieldChange = new EventEmitter();
201
+ this.expandedFieldChange = new EventEmitter();
202
+ this.columnHeaderRows = new BehaviorSubject([]);
203
+ this.columnHeaderCols = new BehaviorSubject([]);
204
+ this.rowHeaderCols = new BehaviorSubject([]);
205
+ this.rowHeaderRows = new BehaviorSubject([]);
206
+ this.valuesRows = new BehaviorSubject([]);
207
+ this.loading = new BehaviorSubject(false);
208
+ this.fields = new BehaviorSubject([]);
209
+ this.configuredFields = new BehaviorSubject([]);
210
+ this.pivotGridId = nextPivotGridId++;
211
+ }
212
+ updateRowsAndCols() {
213
+ const rowsTree = toTree((this.rows || []).slice());
214
+ const [rowHeaderRows, rowHeaderLeaves, rowHeaderDepth, rowHeaderBreadth] = toRows(rowsTree);
215
+ const columnsTree = toTree((this.columns || []).slice());
216
+ const [columnHeaderRows, columnHeaderLeaves, columnHeaderBreadth] = toColumns(columnsTree);
217
+ this.columnHeaderLeaves = columnHeaderLeaves;
218
+ this.columnHeaderCols.next(columnHeaderLeaves);
219
+ this.columnHeaderRows.next(columnHeaderRows);
220
+ this.rowHeaderLeaves = rowHeaderLeaves;
221
+ this.rowHeaderCols.next(new Array(rowHeaderBreadth).fill({}));
222
+ this.rowHeaderRows.next(rowHeaderRows);
223
+ this.valuesRows.next(toData((this.normalizedData || []).slice(), columnHeaderLeaves, rowHeaderLeaves, columnHeaderBreadth, rowHeaderDepth));
224
+ if (isDocumentAvailable()) {
225
+ this.ngZone.runOutsideAngular(() => {
226
+ // needed because all tables need to be rendered in accordance with the new settings
227
+ // before applying the required DOM attributes
228
+ setTimeout(() => matchAriaAttributes(this.wrapper));
229
+ });
230
+ }
231
+ }
232
+ }
233
+ PivotGridDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
234
+ PivotGridDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService });
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridDataService, decorators: [{
236
+ type: Injectable
237
+ }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { expandedStateChange: [{
238
+ type: Output
239
+ }], configuratorFieldChange: [{
240
+ type: Output
241
+ }], expandedFieldChange: [{
242
+ type: Output
243
+ }] } });
129
244
 
130
245
  /**
131
246
  * @hidden
@@ -149,15 +264,16 @@ class PivotGridCellDirective {
149
264
  return ((_a = this.kendoPivotGridCell) === null || _a === void 0 ? void 0 : _a.hasChildren) && this.kendoPivotGridCell.children.length;
150
265
  }
151
266
  ngOnInit() {
267
+ var _a, _b, _c;
152
268
  const nativeElement = this.hostEl.nativeElement;
153
269
  this.renderer.setAttribute(nativeElement, 'rowspan', this.kendoPivotGridCell.rowSpan || 1);
154
270
  this.renderer.setAttribute(nativeElement, 'colspan', this.kendoPivotGridCell.colSpan || 1);
155
271
  const classesToAdd = {
156
- 'k-pivotgrid-header-total': this.kendoPivotGridCell.total || (this.tableType === 'values'
272
+ 'k-pivotgrid-header-total': ((_a = this.kendoPivotGridCell) === null || _a === void 0 ? void 0 : _a.total) || (this.tableType === 'values'
157
273
  && (this.dataService.rowHeaderLeaves[this.rowIndex].total ||
158
274
  this.dataService.columnHeaderLeaves[this.colIndex].total)),
159
- 'k-pivotgrid-header-root': this.kendoPivotGridCell.levelNum === 0,
160
- 'k-pivotgrid-expanded': this.kendoPivotGridCell.hasChildren && this.kendoPivotGridCell.children.length,
275
+ 'k-pivotgrid-header-root': ((_b = this.kendoPivotGridCell) === null || _b === void 0 ? void 0 : _b.levelNum) === 0,
276
+ 'k-pivotgrid-expanded': ((_c = this.kendoPivotGridCell) === null || _c === void 0 ? void 0 : _c.hasChildren) && this.kendoPivotGridCell.children.length,
161
277
  'k-first': this.colIndex > 0
162
278
  };
163
279
  for (let prop in classesToAdd) {
@@ -172,13 +288,14 @@ PivotGridCellDirective.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
172
288
  <span
173
289
  *ngIf="kendoPivotGridCell.hasChildren && !kendoPivotGridCell.total"
174
290
  class="k-icon"
291
+ aria-hidden="true"
175
292
  [kendoEventsOutsideAngular]="{
176
293
  click: handleClick
177
294
  }"
178
295
  [ngClass]="{
179
296
  'k-i-arrow-chevron-up': expanded,
180
297
  'k-i-arrow-chevron-down': !expanded
181
- }"></span>{{ kendoPivotGridCell.data ? kendoPivotGridCell.data.fmtValue : kendoPivotGridCell.caption }}`, isInline: true, directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.EventsOutsideAngularDirective, selector: "[kendoEventsOutsideAngular]", inputs: ["kendoEventsOutsideAngular", "scope"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
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"] }] });
182
299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridCellDirective, decorators: [{
183
300
  type: Component,
184
301
  args: [{
@@ -188,6 +305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
188
305
  <span
189
306
  *ngIf="kendoPivotGridCell.hasChildren && !kendoPivotGridCell.total"
190
307
  class="k-icon"
308
+ aria-hidden="true"
191
309
  [kendoEventsOutsideAngular]="{
192
310
  click: handleClick
193
311
  }"
@@ -217,6 +335,9 @@ class PivotGridTableComponent {
217
335
  this.dataService = dataService;
218
336
  this.dataChangeSubs = new Subscription();
219
337
  }
338
+ get pivotGridId() {
339
+ return `kendo-pivotgrid-${this.dataService.pivotGridId}-`;
340
+ }
220
341
  ngOnInit() {
221
342
  this.dataChangeSubs.add(this.dataService[`${this.tableType}Rows`].subscribe(rows => this.rows = rows));
222
343
  this.dataChangeSubs.add(this.tableType === 'values' ?
@@ -229,86 +350,933 @@ class PivotGridTableComponent {
229
350
  }
230
351
  PivotGridTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridTableComponent, deps: [{ token: PivotGridDataService }], target: i0.ɵɵFactoryTarget.Component });
231
352
  PivotGridTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: { tableType: "tableType", colWidth: "colWidth" }, ngImport: i0, template: `
232
- <table class="k-pivotgrid-table">
353
+ <table
354
+ class="k-pivotgrid-table"
355
+ role="presentation">
233
356
  <colgroup>
234
357
  <col
235
358
  *ngFor="let item of headerItems;"
236
359
  [style.width]="tableType !== 'rowHeader' ? colWidth >= 0 ? colWidth + 'px' : '200px' : undefined" />
237
360
  </colgroup>
238
- <tbody class="k-pivotgrid-tbody">
361
+ <tbody class="k-pivotgrid-tbody" role="rowgroup">
239
362
  <tr *ngFor="let row of rows; index as rowIndex"
240
- class="k-pivotgrid-row">
363
+ class="k-pivotgrid-row"
364
+ role="row">
241
365
  <ng-container *ngFor="let cell of row.cells; index as colIndex">
242
366
  <th
243
367
  *ngIf="cell && tableType !== 'values'"
244
368
  [kendoPivotGridCell]="cell"
245
369
  [tableType]="tableType"
246
370
  [colIndex]="colIndex"
247
- [rowIndex]="rowIndex"></th>
371
+ [rowIndex]="rowIndex"
372
+ [attr.aria-expanded]="cell.hasChildren && cell.children.length ? 'true' : 'false'"
373
+ [attr.role]="tableType === 'columnHeader' ? 'columnheader' : 'rowheader'"
374
+ [attr.id]="pivotGridId + (tableType === 'columnHeader' ? 'ch-' : 'rh-') + (rowIndex + 1) + '-' + (colIndex + 1)"></th>
248
375
  <td
249
376
  *ngIf="cell && tableType === 'values'"
250
377
  [kendoPivotGridCell]="cell"
251
378
  tableType="values"
252
379
  [colIndex]="colIndex"
253
- [rowIndex]="rowIndex"></td>
380
+ [rowIndex]="rowIndex"
381
+ role="gridcell"
382
+ [attr.id]="pivotGridId + 'cell-' + (rowIndex + 1) + '-' + (colIndex + 1)"></td>
254
383
  </ng-container>
255
384
  </tr>
256
385
  </tbody>
257
386
  </table>
258
- `, isInline: true, components: [{ type: PivotGridCellDirective, selector: "[kendoPivotGridCell]", inputs: ["kendoPivotGridCell", "tableType", "rowIndex", "colIndex"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
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"] }] });
259
388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridTableComponent, decorators: [{
260
389
  type: Component,
261
390
  args: [{
262
391
  selector: 'kendo-pivotgrid-table',
263
392
  template: `
264
- <table class="k-pivotgrid-table">
393
+ <table
394
+ class="k-pivotgrid-table"
395
+ role="presentation">
265
396
  <colgroup>
266
397
  <col
267
398
  *ngFor="let item of headerItems;"
268
399
  [style.width]="tableType !== 'rowHeader' ? colWidth >= 0 ? colWidth + 'px' : '200px' : undefined" />
269
400
  </colgroup>
270
- <tbody class="k-pivotgrid-tbody">
401
+ <tbody class="k-pivotgrid-tbody" role="rowgroup">
271
402
  <tr *ngFor="let row of rows; index as rowIndex"
272
- class="k-pivotgrid-row">
403
+ class="k-pivotgrid-row"
404
+ role="row">
273
405
  <ng-container *ngFor="let cell of row.cells; index as colIndex">
274
406
  <th
275
407
  *ngIf="cell && tableType !== 'values'"
276
408
  [kendoPivotGridCell]="cell"
277
409
  [tableType]="tableType"
278
410
  [colIndex]="colIndex"
279
- [rowIndex]="rowIndex"></th>
411
+ [rowIndex]="rowIndex"
412
+ [attr.aria-expanded]="cell.hasChildren && cell.children.length ? 'true' : 'false'"
413
+ [attr.role]="tableType === 'columnHeader' ? 'columnheader' : 'rowheader'"
414
+ [attr.id]="pivotGridId + (tableType === 'columnHeader' ? 'ch-' : 'rh-') + (rowIndex + 1) + '-' + (colIndex + 1)"></th>
280
415
  <td
281
416
  *ngIf="cell && tableType === 'values'"
282
417
  [kendoPivotGridCell]="cell"
283
418
  tableType="values"
284
419
  [colIndex]="colIndex"
285
- [rowIndex]="rowIndex"></td>
420
+ [rowIndex]="rowIndex"
421
+ role="gridcell"
422
+ [attr.id]="pivotGridId + 'cell-' + (rowIndex + 1) + '-' + (colIndex + 1)"></td>
286
423
  </ng-container>
287
424
  </tr>
288
425
  </tbody>
289
426
  </table>
290
427
  `
291
428
  }]
292
- }], ctorParameters: function () { return [{ type: PivotGridDataService }]; }, propDecorators: { tableType: [{
429
+ }], ctorParameters: function () { return [{ type: PivotGridDataService }]; }, propDecorators: { tableType: [{
430
+ type: Input
431
+ }], colWidth: [{
432
+ type: Input
433
+ }] } });
434
+
435
+ /**
436
+ * @hidden
437
+ */
438
+ class ConfiguratorService {
439
+ constructor() {
440
+ this.configuratorStateChange = new EventEmitter();
441
+ }
442
+ parseConfiguratorState(action) {
443
+ const newState = configuratorReducer({
444
+ filter: [],
445
+ sort: [],
446
+ rowAxes: this.state.rowAxes,
447
+ columnAxes: this.state.columnAxes,
448
+ measureAxes: this.state.measureAxes,
449
+ dragItem: this.state.dragItem,
450
+ dropDirection: this.state.dropDirection,
451
+ dropTarget: this.state.dropTarget,
452
+ dropZone: this.state.dropZone
453
+ }, action);
454
+ Object.keys(newState).forEach(key => newState[key] === undefined && delete newState[key]);
455
+ this.state = Object.assign(Object.assign({}, this.state), newState);
456
+ this.configuratorStateChange.emit(this.state);
457
+ }
458
+ }
459
+ ConfiguratorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ConfiguratorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
460
+ ConfiguratorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ConfiguratorService });
461
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ConfiguratorService, decorators: [{
462
+ type: Injectable
463
+ }], propDecorators: { configuratorStateChange: [{
464
+ type: Output
465
+ }] } });
466
+
467
+ /**
468
+ * @hidden
469
+ */
470
+ const append = (element) => {
471
+ let appended = false;
472
+ return () => {
473
+ if (!appended) {
474
+ document.body.appendChild(element);
475
+ appended = true;
476
+ }
477
+ return element;
478
+ };
479
+ };
480
+ /**
481
+ * @hidden
482
+ */
483
+ class DropCueService {
484
+ create() {
485
+ this.dom = document.createElement('span');
486
+ this.dom.style.position = 'absolute';
487
+ const wrapper = document.createElement('div');
488
+ wrapper.classList.add('k-drop-hint', 'k-drop-hint-v');
489
+ const hintStart = document.createElement('div');
490
+ hintStart.classList.add('k-drop-hint-start');
491
+ const hintLine = document.createElement('div');
492
+ hintLine.classList.add('k-drop-hint-line');
493
+ const hintEnd = document.createElement('div');
494
+ hintEnd.classList.add('k-drop-hint-end');
495
+ wrapper.append(hintStart, hintLine, hintEnd);
496
+ this.dom.append(wrapper);
497
+ this.hide();
498
+ }
499
+ attach() {
500
+ return append(this.dom)();
501
+ }
502
+ remove() {
503
+ if (this.dom && this.dom.parentElement) {
504
+ document.body.removeChild(this.dom);
505
+ this.dom = null;
506
+ }
507
+ }
508
+ hide() {
509
+ this.dom.style.display = "none";
510
+ }
511
+ position({ left, top, height }) {
512
+ this.dom.style.display = 'block';
513
+ this.dom.style.height = height + 'px';
514
+ this.dom.style.top = top + 'px';
515
+ this.dom.style.zIndex = '1000';
516
+ const width = this.dom.offsetWidth / 2;
517
+ this.dom.style.left = left - width + 'px';
518
+ }
519
+ }
520
+ DropCueService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropCueService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
521
+ DropCueService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropCueService });
522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropCueService, decorators: [{
523
+ type: Injectable
524
+ }] });
525
+
526
+ /**
527
+ * @hidden
528
+ */
529
+ class DropTargetDirective {
530
+ constructor(element, configuratorService, cue, renderer, zone) {
531
+ this.element = element;
532
+ this.configuratorService = configuratorService;
533
+ this.cue = cue;
534
+ this.renderer = renderer;
535
+ this.zone = zone;
536
+ this.subs = new Subscription();
537
+ }
538
+ ngOnInit() {
539
+ const element = this.element.nativeElement;
540
+ this.elementType = element.nodeName === 'KENDO-CHIP' ? 'chip' : 'container';
541
+ this.zone.runOutsideAngular(() => {
542
+ this.subs.add(this.renderer.listen(element, 'mouseenter', this.handleMouseEnter.bind(this)));
543
+ this.subs.add(this.renderer.listen(element, 'mousemove', this.handleMouseMove.bind(this)));
544
+ this.subs.add(this.renderer.listen(element, 'mouseleave', this.handleMouseLeave.bind(this)));
545
+ });
546
+ }
547
+ ngOnDestroy() {
548
+ this.subs.unsubscribe();
549
+ }
550
+ handleMouseEnter(event) {
551
+ if (this.configuratorService.state.dragItem) {
552
+ if (this.elementType === 'chip') {
553
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropTarget, payload: this.item });
554
+ this.targetElement = event.target;
555
+ this.cue.position(position(event.target, this.configuratorService.state.dropDirection === 'before'));
556
+ }
557
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropZone, payload: this.axes });
558
+ }
559
+ }
560
+ handleMouseMove($event) {
561
+ if (this.configuratorService.state.dragItem) {
562
+ if (this.elementType !== 'chip') {
563
+ return;
564
+ }
565
+ if (this.element.nativeElement) {
566
+ const rect = this.element.nativeElement.getBoundingClientRect();
567
+ const x = $event.clientX - rect.left;
568
+ const direction = x < rect.width / 2 ? 'before' : 'after';
569
+ if ((direction !== this.configuratorService.state.dropDirection) && this.targetElement) {
570
+ this.cue.position(position(this.targetElement, direction === 'before'));
571
+ }
572
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropDirection, payload: direction });
573
+ }
574
+ }
575
+ }
576
+ handleMouseLeave() {
577
+ if (this.elementType === 'chip') {
578
+ return;
579
+ }
580
+ if (this.configuratorService.state.dragItem) {
581
+ this.configuratorService.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDropZone, payload: null });
582
+ }
583
+ }
584
+ }
585
+ DropTargetDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropTargetDirective, deps: [{ token: i0.ElementRef }, { token: ConfiguratorService }, { token: DropCueService }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
586
+ DropTargetDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: { item: "item", axes: "axes" }, ngImport: i0 });
587
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DropTargetDirective, decorators: [{
588
+ type: Directive,
589
+ args: [{
590
+ selector: '[kendoDropTarget]'
591
+ }]
592
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: ConfiguratorService }, { type: DropCueService }, { type: i0.Renderer2 }, { type: i0.NgZone }]; }, propDecorators: { item: [{
593
+ type: Input
594
+ }], axes: [{
595
+ type: Input
596
+ }] } });
597
+
598
+ /**
599
+ * @hidden
600
+ */
601
+ class DraggableChipDirective {
602
+ constructor(draggable, element, zone, service, cue) {
603
+ this.draggable = draggable;
604
+ this.element = element;
605
+ this.zone = zone;
606
+ this.service = service;
607
+ this.cue = cue;
608
+ this.touchActions = 'none';
609
+ this.initialX = {};
610
+ this.initialY = {};
611
+ this.subs = new Subscription();
612
+ }
613
+ get pointerEvents() {
614
+ return this.drag ? 'none' : undefined;
615
+ }
616
+ ngOnInit() {
617
+ this.zone.runOutsideAngular(() => this.subs.add(this.draggable.kendoPress
618
+ .subscribe((event) => {
619
+ if (isDocumentAvailable()) {
620
+ this.cue.create();
621
+ this.cue.attach();
622
+ this.initialX.current = event.clientX;
623
+ this.initialY.current = event.clientY;
624
+ }
625
+ })));
626
+ this.zone.runOutsideAngular(() => this.subs.add(this.draggable.kendoDrag
627
+ .subscribe((event) => {
628
+ if (isDocumentAvailable()) {
629
+ if (Math.abs(this.initialX.current - event.clientX) < 10 &&
630
+ Math.abs(this.initialY.current - event.clientY) < 10) {
631
+ return;
632
+ }
633
+ if (this.element.nativeElement) {
634
+ this.element.nativeElement.style.transform = `translate(${event.clientX - this.initialX.current}px, ${event.clientY - this.initialY.current}px)`;
635
+ }
636
+ }
637
+ this.drag = true;
638
+ this.service.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.setDragItem, payload: this.item });
639
+ })));
640
+ this.zone.runOutsideAngular(() => this.subs.add(this.draggable.kendoRelease
641
+ .subscribe(() => {
642
+ this.drag = false;
643
+ if (this.service.state.dragItem) {
644
+ if (isDocumentAvailable()) {
645
+ if (this.element.nativeElement) {
646
+ this.element.nativeElement.style.transform = '';
647
+ }
648
+ this.cue.remove();
649
+ }
650
+ this.service.parseConfiguratorState({ type: PIVOT_CONFIGURATOR_ACTION.drop, payload: this.item });
651
+ this.service.state.dragItem = null;
652
+ this.service.state.dropDirection = null;
653
+ this.service.state.dropTarget = null;
654
+ this.service.state.dropZone = null;
655
+ }
656
+ })));
657
+ }
658
+ ngOnDestroy() {
659
+ this.subs.unsubscribe();
660
+ }
661
+ }
662
+ DraggableChipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DraggableChipDirective, deps: [{ token: i3.DraggableDirective, optional: true }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: ConfiguratorService }, { token: DropCueService }], target: i0.ɵɵFactoryTarget.Directive });
663
+ DraggableChipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: DraggableChipDirective, selector: "[kendoChipDraggable]", inputs: { item: "item" }, host: { properties: { "style.pointerEvents": "this.pointerEvents", "style.touch-action": "this.touchActions" } }, ngImport: i0 });
664
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DraggableChipDirective, decorators: [{
665
+ type: Directive,
666
+ args: [{
667
+ selector: '[kendoChipDraggable]'
668
+ }]
669
+ }], ctorParameters: function () { return [{ type: i3.DraggableDirective, decorators: [{
670
+ type: Optional
671
+ }] }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: ConfiguratorService }, { type: DropCueService }]; }, propDecorators: { pointerEvents: [{
672
+ type: HostBinding,
673
+ args: ['style.pointerEvents']
674
+ }], touchActions: [{
675
+ type: HostBinding,
676
+ args: ['style.touch-action']
677
+ }], item: [{
678
+ type: Input
679
+ }] } });
680
+
681
+ /**
682
+ * @hidden
683
+ * Represents the Kendo UI PivotGrid Configurator component for Angular.
684
+ */
685
+ class PivotGridConfiguratorComponent {
686
+ constructor(dataService, localization, configuratorService, cdr) {
687
+ this.dataService = dataService;
688
+ this.localization = localization;
689
+ this.configuratorService = configuratorService;
690
+ this.cdr = cdr;
691
+ this.hostClass = true;
692
+ this.horizontal = false;
693
+ this.checked = [];
694
+ this.subs = new Subscription();
695
+ /**
696
+ * A function which determines if a specific node has child nodes.
697
+ */
698
+ this.hasChildren = (node) => !('hierarchyUniqueName' in node) && !('aggregator' in node);
699
+ /**
700
+ * A function which provides the child nodes for a given parent node.
701
+ */
702
+ this.children = (node) => {
703
+ if (this.dataService.directive.type === 'olap') {
704
+ const observable = from(this.dataService.directive.fetchChildren(node, this.fields));
705
+ return observable.pipe(mergeMap(value => of(value)));
706
+ }
707
+ return of(node.children);
708
+ };
709
+ }
710
+ ngOnInit() {
711
+ this.subs.add(this.dataService.fields
712
+ .subscribe(res => {
713
+ this.fields = res;
714
+ }));
715
+ this.subs.add(this.dataService.configuredFields
716
+ .subscribe(res => {
717
+ this.originalState = clone(res);
718
+ this.setState(clone(res));
719
+ this.setChecked();
720
+ }));
721
+ this.subs.add(this.configuratorService.configuratorStateChange
722
+ .subscribe(res => {
723
+ this.state = res;
724
+ this.cdr.detectChanges();
725
+ }));
726
+ }
727
+ ngOnDestroy() {
728
+ this.subs.unsubscribe();
729
+ }
730
+ getName(name) {
731
+ return name.toString();
732
+ }
733
+ setState(state) {
734
+ this.state = state;
735
+ this.configuratorService.state = state;
736
+ }
737
+ /**
738
+ * Returns the localized message for a given token
739
+ */
740
+ messageFor(localizationToken) {
741
+ return this.localization.get(localizationToken);
742
+ }
743
+ /**
744
+ * Retrieves the 'Columns' section item names
745
+ */
746
+ get columnHierarchies() {
747
+ return this.extractDefaultFields(this.state.columnAxes);
748
+ }
749
+ ;
750
+ /**
751
+ * Retrieves the 'Rows' section item names
752
+ */
753
+ get rowHierarchies() {
754
+ return this.extractDefaultFields(this.state.rowAxes);
755
+ }
756
+ ;
757
+ /**
758
+ * Retrieves the 'Value' section item names
759
+ */
760
+ get measureHierarchies() {
761
+ return this.extractDefaultFields(this.state.measureAxes);
762
+ }
763
+ ;
764
+ /**
765
+ * Constructs an array with all selected fields.
766
+ * @param fields - used for when child nodes are loaded on demand.
767
+ * Child nodes are concatinated to the root level nodes.
768
+ */
769
+ setChecked(fields = []) {
770
+ const allFields = [...this.fields, ...fields];
771
+ const checked = this.getFieldsFlatMap(allFields).filter((f) => [
772
+ ...this.columnHierarchies,
773
+ ...this.rowHierarchies,
774
+ ...this.measureHierarchies
775
+ ].some((h) => (h === f.uniqueName || h === f.defaultHierarchy)));
776
+ this.checked = checked;
777
+ }
778
+ /**
779
+ * A function which determines if a specific node is checked/
780
+ */
781
+ isItemChecked(node) {
782
+ var _a, _b;
783
+ const res = this.checked.some(s => node.defaultHierarchy
784
+ ? s.defaultHierarchy === node.defaultHierarchy
785
+ : s.uniqueName === node.uniqueName)
786
+ || (((_a = node.children) === null || _a === void 0 ? void 0 : _a.length) && ((_b = node.children) === null || _b === void 0 ? void 0 : _b.every((c) => c.checked)));
787
+ return res || null;
788
+ }
789
+ /**
790
+ * Determines if a checkbox should be rendered.
791
+ */
792
+ isSelectable(node) {
793
+ const hasChildren = !('hierarchyUniqueName' in node) && !('aggregator' in node);
794
+ return !Boolean((!hasChildren && !node.aggregator && !node.measure)
795
+ || (node.type === 2)
796
+ || node.uniqueName === '[KPIs]');
797
+ }
798
+ /**
799
+ * Check if the newly loaded child nodes have checked items.
800
+ * (Only for OLAP data-binding directive)
801
+ */
802
+ handleChildrenLoaded(event) {
803
+ if (this.dataService.directive.type === 'local') {
804
+ return;
805
+ }
806
+ const fields = event.children.map(item => item.dataItem);
807
+ this.setChecked(fields);
808
+ }
809
+ handleCheckedChange(event, item) {
810
+ if (event.target.checked) {
811
+ this.checked = [...this.checked, item];
812
+ }
813
+ else {
814
+ const itemIndex = this.checked.findIndex(checkedItem => checkedItem.uniqueName === item.uniqueName);
815
+ this.checked.splice(itemIndex, 1);
816
+ }
817
+ const action = {
818
+ type: 'PIVOT_CONFIGURATOR_ACTION_TOGGLE_SELECTION',
819
+ payload: item
820
+ };
821
+ this.configuratorService.parseConfiguratorState(action);
822
+ }
823
+ handleSubmit() {
824
+ this.dataService.configuratorFieldChange.emit(this.state);
825
+ }
826
+ /**
827
+ * Reset the configurator to the last saved state
828
+ */
829
+ handleReset() {
830
+ this.setState(clone(this.originalState));
831
+ this.setChecked();
832
+ }
833
+ /**
834
+ * Flattens all available fields.
835
+ */
836
+ getFieldsFlatMap(nodes = []) {
837
+ let result = [...nodes];
838
+ (nodes || []).forEach((child) => {
839
+ result = result.concat(this.getFieldsFlatMap(child.children));
840
+ });
841
+ return result;
842
+ }
843
+ /**
844
+ * Creates an array containing only the field names, e.g. '[Date].[Calendar]' or 'Product'
845
+ */
846
+ extractDefaultFields(columns = []) {
847
+ const result = new Set();
848
+ columns.forEach((column) => {
849
+ result.add(String(column.name));
850
+ });
851
+ return Array.from(result);
852
+ }
853
+ ;
854
+ }
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: [
857
+ ConfiguratorService,
858
+ DropCueService
859
+ ], ngImport: i0, template: `
860
+ <div
861
+ class="k-pivotgrid-configurator-panel k-pivotgrid-configurator-push"
862
+ [ngClass]="{
863
+ 'k-pivotgrid-configurator-horizontal': horizontal,
864
+ 'k-pivotgrid-configurator-vertical': !horizontal
865
+ }"
866
+ >
867
+ <div class="k-pivotgrid-configurator-header">
868
+ <div class="k-pivotgrid-configurator-header-text">{{messageFor('configuratorHeaderText')}}</div>
869
+ </div>
870
+
871
+ <div class="k-pivotgrid-configurator-content">
872
+ <div class="k-form" [class.k-form-horizontal]="horizontal">
873
+ <div class="k-form-field-wrapper">
874
+ <div class="k-form-field">
875
+ <span class="k-label">{{messageFor('configuratorFieldsText')}}</span>
876
+ </div>
877
+
878
+ <div class="k-form-field">
879
+ <div class="k-fields-list-wrapper">
880
+ <kendo-treeview
881
+ [nodes]="fields"
882
+ textField="caption"
883
+ [children]="children"
884
+ [hasChildren]="hasChildren"
885
+ kendoTreeViewExpandable
886
+ (childrenLoaded)="handleChildrenLoaded($event)"
887
+ >
888
+ <ng-template kendoTreeViewNodeTemplate let-dataItem>
889
+ <input kendoCheckBox
890
+ *ngIf="isSelectable(dataItem)"
891
+ type="checkbox"
892
+ kendoCheckBox
893
+ [checked]="isItemChecked(dataItem)"
894
+ (change)="handleCheckedChange($event, dataItem)"/>
895
+ {{ dataItem.caption }}
896
+ </ng-template>
897
+ </kendo-treeview>
898
+
899
+ </div>
900
+ </div>
901
+ </div>
902
+
903
+ <div *ngIf="horizontal; else verticalTemplate" class="k-form-field-wrapper">
904
+ <ng-container *ngTemplateOutlet="verticalTemplate"></ng-container>
905
+ </div>
906
+
907
+ <ng-template #verticalTemplate>
908
+ <div class="k-form-field" kendoDropTarget axes="columnAxes">
909
+ <span class="k-label">{{messageFor('configuratorColumnsText')}}</span>
910
+ </div>
911
+
912
+ <kendo-chiplist
913
+ *ngIf="state.columnAxes && state.columnAxes.length; else noColumnAxes"
914
+ kendoDropTarget
915
+ axes="columnAxes"
916
+ >
917
+ <kendo-chip *ngFor="let item of state.columnAxes"
918
+ kendoChipDraggable
919
+ kendoDraggable
920
+ kendoDropTarget
921
+ [item]="item"
922
+ axes="columnAxes"
923
+ rounded="full"
924
+ [removable]="true"
925
+ >
926
+ {{ getName(item.name) }}
927
+ </kendo-chip>
928
+ </kendo-chiplist>
929
+
930
+ <ng-template #noColumnAxes>
931
+ <div class="k-settings-description" kendoDropTarget axes="columnAxes">{{messageFor('configuratorEmptyColumnsText')}}</div>
932
+ </ng-template>
933
+
934
+ <div class="k-form-field" kendoDropTarget axes="rowAxes">
935
+ <span class="k-label">{{messageFor('configuratorRowsText')}}</span>
936
+ </div>
937
+
938
+ <kendo-chiplist
939
+ *ngIf="state.rowAxes && state.rowAxes.length; else noRowAxes"
940
+ kendoDropTarget
941
+ axes="rowAxes"
942
+ >
943
+ <kendo-chip *ngFor="let item of state.rowAxes"
944
+ kendoChipDraggable
945
+ kendoDraggable
946
+ kendoDropTarget
947
+ [item]="item"
948
+ axes="rowAxes"
949
+ rounded="full"
950
+ [removable]="true"
951
+ >
952
+ {{ getName(item.name) }}
953
+ </kendo-chip>
954
+ </kendo-chiplist>
955
+
956
+ <ng-template #noRowAxes>
957
+ <div class="k-settings-description" kendoDropTarget axes="rowAxes">{{messageFor('configuratorEmptyRowsText')}}</div>
958
+ </ng-template>
959
+ </ng-template>
960
+
961
+ <div *ngIf="horizontal; else elseTpl2" class="k-form-field-wrapper">
962
+ <ng-container *ngTemplateOutlet="elseTpl2"></ng-container>
963
+ </div>
964
+
965
+ <ng-template #elseTpl2>
966
+ <div class="k-form-field" kendoDropTarget axes="measureAxes">
967
+ <span class="k-label">{{messageFor('configuratorValuesText')}}</span>
968
+ </div>
969
+
970
+ <kendo-chiplist
971
+ *ngIf="state.measureAxes && state.measureAxes.length; else noMeasureAxes"
972
+ kendoDropTarget
973
+ axes="measureAxes"
974
+ >
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>
987
+ </kendo-chiplist>
988
+
989
+ <ng-template #noMeasureAxes>
990
+ <div class="k-settings-description" kendoDropTarget axes="measureAxes">{{messageFor('configuratorEmptyMeasuresText')}}</div>
991
+ </ng-template>
992
+ </ng-template>
993
+
994
+ </div>
995
+ </div>
996
+ <div class="k-pivotgrid-configurator-actions k-actions k-hstack k-justify-content-end">
997
+ <button kendoButton type="button" (click)="handleReset()">{{messageFor('configuratorCancelButtonText')}}</button>
998
+ <button kendoButton themeColor="primary" type="button" (click)="handleSubmit()">{{messageFor('configuratorApplyButtonText')}}</button>
999
+ </div>
1000
+ </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"] }] });
1002
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridConfiguratorComponent, decorators: [{
1003
+ type: Component,
1004
+ args: [{
1005
+ selector: 'kendo-pivotgrid-configurator',
1006
+ providers: [
1007
+ ConfiguratorService,
1008
+ DropCueService
1009
+ ],
1010
+ template: `
1011
+ <div
1012
+ class="k-pivotgrid-configurator-panel k-pivotgrid-configurator-push"
1013
+ [ngClass]="{
1014
+ 'k-pivotgrid-configurator-horizontal': horizontal,
1015
+ 'k-pivotgrid-configurator-vertical': !horizontal
1016
+ }"
1017
+ >
1018
+ <div class="k-pivotgrid-configurator-header">
1019
+ <div class="k-pivotgrid-configurator-header-text">{{messageFor('configuratorHeaderText')}}</div>
1020
+ </div>
1021
+
1022
+ <div class="k-pivotgrid-configurator-content">
1023
+ <div class="k-form" [class.k-form-horizontal]="horizontal">
1024
+ <div class="k-form-field-wrapper">
1025
+ <div class="k-form-field">
1026
+ <span class="k-label">{{messageFor('configuratorFieldsText')}}</span>
1027
+ </div>
1028
+
1029
+ <div class="k-form-field">
1030
+ <div class="k-fields-list-wrapper">
1031
+ <kendo-treeview
1032
+ [nodes]="fields"
1033
+ textField="caption"
1034
+ [children]="children"
1035
+ [hasChildren]="hasChildren"
1036
+ kendoTreeViewExpandable
1037
+ (childrenLoaded)="handleChildrenLoaded($event)"
1038
+ >
1039
+ <ng-template kendoTreeViewNodeTemplate let-dataItem>
1040
+ <input kendoCheckBox
1041
+ *ngIf="isSelectable(dataItem)"
1042
+ type="checkbox"
1043
+ kendoCheckBox
1044
+ [checked]="isItemChecked(dataItem)"
1045
+ (change)="handleCheckedChange($event, dataItem)"/>
1046
+ {{ dataItem.caption }}
1047
+ </ng-template>
1048
+ </kendo-treeview>
1049
+
1050
+ </div>
1051
+ </div>
1052
+ </div>
1053
+
1054
+ <div *ngIf="horizontal; else verticalTemplate" class="k-form-field-wrapper">
1055
+ <ng-container *ngTemplateOutlet="verticalTemplate"></ng-container>
1056
+ </div>
1057
+
1058
+ <ng-template #verticalTemplate>
1059
+ <div class="k-form-field" kendoDropTarget axes="columnAxes">
1060
+ <span class="k-label">{{messageFor('configuratorColumnsText')}}</span>
1061
+ </div>
1062
+
1063
+ <kendo-chiplist
1064
+ *ngIf="state.columnAxes && state.columnAxes.length; else noColumnAxes"
1065
+ kendoDropTarget
1066
+ axes="columnAxes"
1067
+ >
1068
+ <kendo-chip *ngFor="let item of state.columnAxes"
1069
+ kendoChipDraggable
1070
+ kendoDraggable
1071
+ kendoDropTarget
1072
+ [item]="item"
1073
+ axes="columnAxes"
1074
+ rounded="full"
1075
+ [removable]="true"
1076
+ >
1077
+ {{ getName(item.name) }}
1078
+ </kendo-chip>
1079
+ </kendo-chiplist>
1080
+
1081
+ <ng-template #noColumnAxes>
1082
+ <div class="k-settings-description" kendoDropTarget axes="columnAxes">{{messageFor('configuratorEmptyColumnsText')}}</div>
1083
+ </ng-template>
1084
+
1085
+ <div class="k-form-field" kendoDropTarget axes="rowAxes">
1086
+ <span class="k-label">{{messageFor('configuratorRowsText')}}</span>
1087
+ </div>
1088
+
1089
+ <kendo-chiplist
1090
+ *ngIf="state.rowAxes && state.rowAxes.length; else noRowAxes"
1091
+ kendoDropTarget
1092
+ axes="rowAxes"
1093
+ >
1094
+ <kendo-chip *ngFor="let item of state.rowAxes"
1095
+ kendoChipDraggable
1096
+ kendoDraggable
1097
+ kendoDropTarget
1098
+ [item]="item"
1099
+ axes="rowAxes"
1100
+ rounded="full"
1101
+ [removable]="true"
1102
+ >
1103
+ {{ getName(item.name) }}
1104
+ </kendo-chip>
1105
+ </kendo-chiplist>
1106
+
1107
+ <ng-template #noRowAxes>
1108
+ <div class="k-settings-description" kendoDropTarget axes="rowAxes">{{messageFor('configuratorEmptyRowsText')}}</div>
1109
+ </ng-template>
1110
+ </ng-template>
1111
+
1112
+ <div *ngIf="horizontal; else elseTpl2" class="k-form-field-wrapper">
1113
+ <ng-container *ngTemplateOutlet="elseTpl2"></ng-container>
1114
+ </div>
1115
+
1116
+ <ng-template #elseTpl2>
1117
+ <div class="k-form-field" kendoDropTarget axes="measureAxes">
1118
+ <span class="k-label">{{messageFor('configuratorValuesText')}}</span>
1119
+ </div>
1120
+
1121
+ <kendo-chiplist
1122
+ *ngIf="state.measureAxes && state.measureAxes.length; else noMeasureAxes"
1123
+ kendoDropTarget
1124
+ axes="measureAxes"
1125
+ >
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>
1138
+ </kendo-chiplist>
1139
+
1140
+ <ng-template #noMeasureAxes>
1141
+ <div class="k-settings-description" kendoDropTarget axes="measureAxes">{{messageFor('configuratorEmptyMeasuresText')}}</div>
1142
+ </ng-template>
1143
+ </ng-template>
1144
+
1145
+ </div>
1146
+ </div>
1147
+ <div class="k-pivotgrid-configurator-actions k-actions k-hstack k-justify-content-end">
1148
+ <button kendoButton type="button" (click)="handleReset()">{{messageFor('configuratorCancelButtonText')}}</button>
1149
+ <button kendoButton themeColor="primary" type="button" (click)="handleSubmit()">{{messageFor('configuratorApplyButtonText')}}</button>
1150
+ </div>
1151
+ </div>
1152
+ `
1153
+ }]
1154
+ }], ctorParameters: function () { return [{ type: PivotGridDataService }, { type: i2.LocalizationService }, { type: ConfiguratorService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { hostClass: [{
1155
+ type: HostBinding,
1156
+ args: ['class.k-pivotgrid-configurator']
1157
+ }], horizontal: [{
293
1158
  type: Input
294
- }], colWidth: [{
1159
+ }] } });
1160
+
1161
+ /**
1162
+ * @hidden
1163
+ */
1164
+ class PivotGridMessages extends ComponentMessages {
1165
+ }
1166
+ 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 });
1168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, decorators: [{
1169
+ type: Directive
1170
+ }], propDecorators: { fieldMenuFilterItemLabel: [{
1171
+ type: Input
1172
+ }], fieldMenuSortAscendingItemLabel: [{
1173
+ type: Input
1174
+ }], fieldMenuSortDescendingItemLabel: [{
1175
+ type: Input
1176
+ }], filterInputLabel: [{
1177
+ type: Input
1178
+ }], filterOperatorsDropDownLabel: [{
1179
+ type: Input
1180
+ }], filterEqOperator: [{
1181
+ type: Input
1182
+ }], filterNotEqOperator: [{
1183
+ type: Input
1184
+ }], filterIsNullOperator: [{
1185
+ type: Input
1186
+ }], filterIsNotNullOperator: [{
1187
+ type: Input
1188
+ }], filterIsEmptyOperator: [{
1189
+ type: Input
1190
+ }], filterIsNotEmptyOperator: [{
1191
+ type: Input
1192
+ }], filterStartsWithOperator: [{
1193
+ type: Input
1194
+ }], filterContainsOperator: [{
1195
+ type: Input
1196
+ }], filterNotContainsOperator: [{
1197
+ type: Input
1198
+ }], filterEndsWithOperator: [{
1199
+ type: Input
1200
+ }], filterFilterButton: [{
1201
+ type: Input
1202
+ }], filterClearButton: [{
1203
+ type: Input
1204
+ }], loading: [{
1205
+ type: Input
1206
+ }], emptyCellLabel: [{
1207
+ type: Input
1208
+ }], configuratorButtonText: [{
1209
+ type: Input
1210
+ }], configuratorHeaderText: [{
1211
+ type: Input
1212
+ }], configuratorFieldsText: [{
1213
+ type: Input
1214
+ }], configuratorColumnsText: [{
1215
+ type: Input
1216
+ }], configuratorRowsText: [{
1217
+ type: Input
1218
+ }], configuratorValuesText: [{
1219
+ type: Input
1220
+ }], configuratorCancelButtonText: [{
1221
+ type: Input
1222
+ }], configuratorApplyButtonText: [{
1223
+ type: Input
1224
+ }], configuratorEmptyRowsText: [{
1225
+ type: Input
1226
+ }], configuratorEmptyColumnsText: [{
1227
+ type: Input
1228
+ }], configuratorEmptyMeasuresText: [{
295
1229
  type: Input
296
1230
  }] } });
297
1231
 
1232
+ /**
1233
+ * @hidden
1234
+ */
1235
+ class LocalizedMessagesDirective extends PivotGridMessages {
1236
+ constructor(service) {
1237
+ super();
1238
+ this.service = service;
1239
+ }
1240
+ }
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 });
1242
+ LocalizedMessagesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]", providers: [
1243
+ {
1244
+ provide: PivotGridMessages,
1245
+ useExisting: forwardRef(() => LocalizedMessagesDirective)
1246
+ }
1247
+ ], usesInheritance: true, ngImport: i0 });
1248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: LocalizedMessagesDirective, decorators: [{
1249
+ type: Directive,
1250
+ args: [{
1251
+ providers: [
1252
+ {
1253
+ provide: PivotGridMessages,
1254
+ useExisting: forwardRef(() => LocalizedMessagesDirective)
1255
+ }
1256
+ ],
1257
+ selector: '[kendoPivotGridLocalizedMessages]'
1258
+ }]
1259
+ }], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
1260
+
298
1261
  const DEFAULT_LOADER_SETTINGS = {
299
1262
  type: 'converging-spinner',
300
1263
  themeColor: 'primary',
301
1264
  size: 'large'
302
1265
  };
1266
+ const DEFAULT_CONFIGURATOR_SETTINGS = {
1267
+ position: 'right',
1268
+ horizontal: false
1269
+ };
303
1270
  /**
304
1271
  * Represents the Kendo UI PivotGrid component for Angular.
305
1272
  */
306
1273
  class PivotGridComponent {
307
- constructor(hostEl, zone, dataService, _scrollbarWidthService) {
308
- this.hostEl = hostEl;
1274
+ constructor(hostEl, zone, dataService, localization, _scrollbarWidthService) {
309
1275
  this.zone = zone;
310
1276
  this.dataService = dataService;
1277
+ this.localization = localization;
311
1278
  this.hostClass = true;
1279
+ this.ariaRole = 'grid';
312
1280
  /**
313
1281
  * Specify the width of the column header and data cells. Value is treated as pixels.
314
1282
  *
@@ -318,12 +1286,13 @@ class PivotGridComponent {
318
1286
  this.resizeObservers = [];
319
1287
  this._loaderSettings = DEFAULT_LOADER_SETTINGS;
320
1288
  this.subs = new Subscription();
1289
+ this.rtl = false;
321
1290
  this.resizeContainer = (axis, element) => {
322
1291
  const isRows = axis === 'Rows';
323
- const wrapper = this.hostEl.nativeElement;
1292
+ const table = this.table.nativeElement;
324
1293
  const size = isRows ? 'offsetHeight' : 'offsetWidth';
325
- wrapper.style[`gridTemplate${axis}`] = '';
326
- wrapper.style[`gridTemplate${axis}`] = `${element[size]}px 1fr`;
1294
+ table.style[`gridTemplate${axis}`] = '';
1295
+ table.style[`gridTemplate${axis}`] = `${element[size]}px 1fr`;
327
1296
  };
328
1297
  this.handleScroll = (event) => {
329
1298
  if (event.target === this.valuesTable.nativeElement) {
@@ -340,6 +1309,30 @@ class PivotGridComponent {
340
1309
  }
341
1310
  };
342
1311
  validatePackage(packageMetadata);
1312
+ this.subs.add(this.localization.changes.subscribe(({ rtl }) => {
1313
+ this.rtl = rtl;
1314
+ this.direction = this.rtl ? 'rtl' : 'ltr';
1315
+ }));
1316
+ dataService.wrapper = hostEl.nativeElement;
1317
+ }
1318
+ get rightPositionClass() {
1319
+ var _a;
1320
+ return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'right';
1321
+ }
1322
+ get leftPositionClass() {
1323
+ var _a;
1324
+ return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'left';
1325
+ }
1326
+ get bottomPositionClass() {
1327
+ var _a;
1328
+ return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'bottom';
1329
+ }
1330
+ get topPositionClass() {
1331
+ var _a;
1332
+ return ((_a = this.configuratorSettings) === null || _a === void 0 ? void 0 : _a.position) === 'top';
1333
+ }
1334
+ get dir() {
1335
+ return this.direction;
343
1336
  }
344
1337
  /**
345
1338
  * Specify the type, size and color of the PivotGrid's loader.
@@ -356,6 +1349,15 @@ class PivotGridComponent {
356
1349
  get loaderSettings() {
357
1350
  return this._loaderSettings;
358
1351
  }
1352
+ /**
1353
+ * @hidden
1354
+ */
1355
+ get loadingText() {
1356
+ return this.localization.get('loading');
1357
+ }
1358
+ get configuratorSettings() {
1359
+ return this.configurator && Object.assign({}, DEFAULT_CONFIGURATOR_SETTINGS, this.configurator);
1360
+ }
359
1361
  ngAfterViewInit() {
360
1362
  if (isDocumentAvailable()) {
361
1363
  this.zone.runOutsideAngular(() => {
@@ -378,67 +1380,295 @@ class PivotGridComponent {
378
1380
  this.resizeObservers.forEach(o => o.disconnect());
379
1381
  this.subs.unsubscribe();
380
1382
  }
1383
+ /**
1384
+ * @hidden
1385
+ */
1386
+ messageFor(localizationToken) {
1387
+ return this.localization.get(localizationToken);
1388
+ }
381
1389
  }
382
- 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$1.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
383
- PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", columnHeadersWidth: "columnHeadersWidth" }, host: { properties: { "class.k-pivotgrid": "this.hostClass" } }, providers: [
384
- PivotGridDataService
385
- ], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }], ngImport: i0, template: `
386
- <span class="k-pivotgrid-empty-cell"></span>
387
- <kendo-pivotgrid-table
388
- #colHeadersTable
389
- [colWidth]="columnHeadersWidth"
390
- class="k-pivotgrid-column-headers"
391
- tableType="columnHeader"></kendo-pivotgrid-table>
392
- <kendo-pivotgrid-table
393
- #rowHeadersTable
394
- class="k-pivotgrid-row-headers"
395
- tableType="rowHeader"></kendo-pivotgrid-table>
396
- <kendo-pivotgrid-table
397
- #valuesTable
398
- [colWidth]="columnHeadersWidth"
399
- class="k-pivotgrid-values"
400
- tableType="values"></kendo-pivotgrid-table>
401
-
402
- <div *ngIf="loading" class="k-loader">
403
- <kendo-loader
404
- [type]="loaderSettings?.type"
405
- [themeColor]="loaderSettings?.themeColor"
406
- [size]="loaderSettings?.size"
407
- >
408
- </kendo-loader>
1390
+ PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PivotGridDataService }, { token: i2.LocalizationService }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
1391
+ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", configurator: "configurator", columnHeadersWidth: "columnHeadersWidth" }, host: { properties: { "class.k-d-flex": "this.hostClass", "class.k-pos-relative": "this.hostClass", "class.k-flex-row": "this.rightPositionClass", "class.k-flex-row-reverse": "this.leftPositionClass", "class.k-flex-column": "this.bottomPositionClass", "class.k-flex-column-reverse": "this.topPositionClass", "attr.dir": "this.dir", "attr.role": "this.ariaRole" } }, providers: [
1392
+ PivotGridDataService,
1393
+ LocalizationService,
1394
+ {
1395
+ provide: L10N_PREFIX,
1396
+ useValue: 'kendo.pivotgrid'
1397
+ }
1398
+ ], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }], ngImport: i0, template: `
1399
+ <ng-container kendoPivotGridLocalizedMessages
1400
+ i18n-loading="kendo.pivotgrid.loading|The loading text"
1401
+ loading="Loading"
1402
+
1403
+ i18n-emptyCellLabel="kendo.pivotgrid.emptyCellLabel|The value of the aria-label attribute placed on the focusable empty cell element"
1404
+ emptyCellLabel="PivotGrid Empty Cell"
1405
+
1406
+ i18n-fieldMenuFilterItemLabel="kendo.pivotgrid.fieldMenuFilterItemLabel|The text content of the filter item in the column and row fields menu"
1407
+ fieldMenuFilterItemLabel="Filter"
1408
+
1409
+ i18n-fieldMenuSortAscendingItemLabel="kendo.pivotgrid.fieldMenuSortAscendingItemLabel|The text content of the sort ascending item in the column and row fields menu"
1410
+ fieldMenuSortAscendingItemLabel="Sort ascending"
1411
+
1412
+ i18n-fieldMenuSortDescendingItemLabel="kendo.pivotgrid.fieldMenuSortDescendingItemLabel|The text content of the sort descending item in the column and row fields menu"
1413
+ fieldMenuSortDescendingItemLabel="Sort descending"
1414
+
1415
+ i18n-filterInputLabel="kendo.pivotgrid.filterInputLabel|The label of the filter input"
1416
+ filterInputLabel="{{ '{fields} Filter' }}"
1417
+
1418
+ i18n-filterOperatorsDropDownLabel="kendo.pivotgrid.filterOperatorsDropDownLabel|The label of the filter operators DropDownList"
1419
+ filterOperatorsDropDownLabel="{{ '{fields} Filter Operators' }}"
1420
+
1421
+ i18n-filterEqOperator="kendo.pivotgrid.filterEqOperator|The text of the equal filter operator"
1422
+ filterEqOperator="Is equal to"
1423
+
1424
+ i18n-filterNotEqOperator="kendo.pivotgrid.filterNotEqOperator|The text of the not equal filter operator"
1425
+ filterNotEqOperator="Is not equal to"
1426
+
1427
+ i18n-filterIsNullOperator="kendo.pivotgrid.filterIsNullOperator|The text of the is null filter operator"
1428
+ filterIsNullOperator="Is null"
1429
+
1430
+ i18n-filterIsNotNullOperator="kendo.pivotgrid.filterIsNotNullOperator|The text of the is not null filter operator"
1431
+ filterIsNotNullOperator="Is not null"
1432
+
1433
+ i18n-filterIsEmptyOperator="kendo.pivotgrid.filterIsEmptyOperator|The text of the is empty filter operator"
1434
+ filterIsEmptyOperator="Is empty"
1435
+
1436
+ i18n-filterIsNotEmptyOperator="kendo.pivotgrid.filterIsNotEmptyOperator|The text of the is not empty filter operator"
1437
+ filterIsNotEmptyOperator="Is not empty"
1438
+
1439
+ i18n-filterStartsWithOperator="kendo.pivotgrid.filterStartsWithOperator|The text of the starts with filter operator"
1440
+ filterStartsWithOperator="Starts with"
1441
+
1442
+ i18n-filterContainsOperator="kendo.pivotgrid.filterContainsOperator|The text of the contains filter operator"
1443
+ filterContainsOperator="Contains"
1444
+
1445
+ i18n-filterNotContainsOperator="kendo.pivotgrid.filterNotContainsOperator|The text of the does not contain filter operator"
1446
+ filterNotContainsOperator="Does not contain"
1447
+
1448
+ i18n-filterEndsWithOperator="kendo.pivotgrid.filterEndsWithOperator|The text of the ends with filter operator"
1449
+ filterEndsWithOperator="Ends with"
1450
+
1451
+ i18n-filterFilterButton="kendo.pivotgrid.filterFilterButton|The text of the filter button"
1452
+ filterFilterButton="Filter"
1453
+
1454
+ i18n-filterClearButton="kendo.pivotgrid.filterClearButton|The text of the clear filter button"
1455
+ filterClearButton="Clear"
1456
+
1457
+ i18n-configuratorButtonText="kendo.pivotgrid.configuratorButtonText|The text content of the button that opens and closes the PivotGrid configurator"
1458
+ configuratorButtonText="Change Settings"
1459
+
1460
+ i18n-configuratorHeaderText="kendo.pivotgrid.configuratorHeaderText|The text content of the PivotGrid configurator title element"
1461
+ configuratorHeaderText="Settings"
1462
+
1463
+ i18n-configuratorFieldsText="kendo.pivotgrid.configuratorFieldsText|The text content of the PivotGrid configurator fields section title element"
1464
+ configuratorFieldsText="Fields"
1465
+
1466
+ i18n-configuratorColumnsText="kendo.pivotgrid.configuratorColumnsText|The text content of the PivotGrid configurator columns section title element"
1467
+ configuratorColumnsText="Columns"
1468
+
1469
+ i18n-configuratorRowsText="kendo.pivotgrid.configuratorRowsText|The text content of the PivotGrid configurator rows section title element"
1470
+ configuratorRowsText="Rows"
1471
+
1472
+ i18n-configuratorValuesText="kendo.pivotgrid.configuratorValuesText|The text content of the PivotGrid configurator values section title element"
1473
+ configuratorValuesText="Values"
1474
+
1475
+ i18n-configuratorCancelButtonText="kendo.pivotgrid.configuratorCancelButtonText|The text content of the PivotGrid configurator configurator Cancel button"
1476
+ configuratorCancelButtonText="Cancel"
1477
+
1478
+ i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
1479
+ configuratorApplyButtonText="Apply"
1480
+
1481
+ i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
1482
+ configuratorEmptyRowsText="Select some fields to begin setup"
1483
+
1484
+ i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
1485
+ configuratorEmptyColumnsText="Select some fields to begin setup"
1486
+
1487
+ i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1488
+ configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
1489
+
1490
+ <div #table class="k-pivotgrid">
1491
+ <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
1492
+ <kendo-pivotgrid-table
1493
+ #colHeadersTable
1494
+ [colWidth]="columnHeadersWidth"
1495
+ class="k-pivotgrid-column-headers"
1496
+ tableType="columnHeader"></kendo-pivotgrid-table>
1497
+ <kendo-pivotgrid-table
1498
+ #rowHeadersTable
1499
+ class="k-pivotgrid-row-headers"
1500
+ tableType="rowHeader"></kendo-pivotgrid-table>
1501
+ <kendo-pivotgrid-table
1502
+ #valuesTable
1503
+ [colWidth]="columnHeadersWidth"
1504
+ class="k-pivotgrid-values"
1505
+ tableType="values"></kendo-pivotgrid-table>
1506
+
1507
+ <div *ngIf="loading" class="k-loader">
1508
+ <kendo-loader
1509
+ [type]="loaderSettings?.type"
1510
+ [themeColor]="loaderSettings?.themeColor"
1511
+ [size]="loaderSettings?.size"
1512
+ >
1513
+ </kendo-loader>
1514
+ <span class="k-loading-text">{{ loadingText }}</span>
1515
+ </div>
1516
+ </div>
1517
+
1518
+ <kendo-pivotgrid-configurator
1519
+ *ngIf="showConfigurator"
1520
+ [horizontal]="configuratorSettings.horizontal">
1521
+ </kendo-pivotgrid-configurator>
1522
+
1523
+ <div *ngIf="configurator"
1524
+ class="k-pivotgrid-configurator-button"
1525
+ (click)="showConfigurator = !showConfigurator">
1526
+ <span>{{ messageFor('configuratorButtonText') }}<span class="k-icon k-i-gear k-color-inherit"></span>
1527
+ </span>
409
1528
  </div>
410
- `, 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: i4.LoaderComponent, selector: "kendo-loader", inputs: ["type", "themeColor", "size"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1529
+ `, isInline: true, styles: ["\n /** TODO: Remove if added to themes */\n div.k-loader {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n }\n "], components: [{ type: PivotGridTableComponent, selector: "kendo-pivotgrid-table", inputs: ["tableType", "colWidth"] }, { type: i5$1.LoaderComponent, selector: "kendo-loader", inputs: ["type", "themeColor", "size"] }, { type: PivotGridConfiguratorComponent, selector: "kendo-pivotgrid-configurator", inputs: ["horizontal"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoPivotGridLocalizedMessages]" }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
411
1530
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, decorators: [{
412
1531
  type: Component,
413
1532
  args: [{
414
1533
  selector: 'kendo-pivotgrid',
415
1534
  providers: [
416
- PivotGridDataService
1535
+ PivotGridDataService,
1536
+ LocalizationService,
1537
+ {
1538
+ provide: L10N_PREFIX,
1539
+ useValue: 'kendo.pivotgrid'
1540
+ }
417
1541
  ],
418
1542
  template: `
419
- <span class="k-pivotgrid-empty-cell"></span>
420
- <kendo-pivotgrid-table
421
- #colHeadersTable
422
- [colWidth]="columnHeadersWidth"
423
- class="k-pivotgrid-column-headers"
424
- tableType="columnHeader"></kendo-pivotgrid-table>
425
- <kendo-pivotgrid-table
426
- #rowHeadersTable
427
- class="k-pivotgrid-row-headers"
428
- tableType="rowHeader"></kendo-pivotgrid-table>
429
- <kendo-pivotgrid-table
430
- #valuesTable
431
- [colWidth]="columnHeadersWidth"
432
- class="k-pivotgrid-values"
433
- tableType="values"></kendo-pivotgrid-table>
434
-
435
- <div *ngIf="loading" class="k-loader">
436
- <kendo-loader
437
- [type]="loaderSettings?.type"
438
- [themeColor]="loaderSettings?.themeColor"
439
- [size]="loaderSettings?.size"
440
- >
441
- </kendo-loader>
1543
+ <ng-container kendoPivotGridLocalizedMessages
1544
+ i18n-loading="kendo.pivotgrid.loading|The loading text"
1545
+ loading="Loading"
1546
+
1547
+ i18n-emptyCellLabel="kendo.pivotgrid.emptyCellLabel|The value of the aria-label attribute placed on the focusable empty cell element"
1548
+ emptyCellLabel="PivotGrid Empty Cell"
1549
+
1550
+ i18n-fieldMenuFilterItemLabel="kendo.pivotgrid.fieldMenuFilterItemLabel|The text content of the filter item in the column and row fields menu"
1551
+ fieldMenuFilterItemLabel="Filter"
1552
+
1553
+ i18n-fieldMenuSortAscendingItemLabel="kendo.pivotgrid.fieldMenuSortAscendingItemLabel|The text content of the sort ascending item in the column and row fields menu"
1554
+ fieldMenuSortAscendingItemLabel="Sort ascending"
1555
+
1556
+ i18n-fieldMenuSortDescendingItemLabel="kendo.pivotgrid.fieldMenuSortDescendingItemLabel|The text content of the sort descending item in the column and row fields menu"
1557
+ fieldMenuSortDescendingItemLabel="Sort descending"
1558
+
1559
+ i18n-filterInputLabel="kendo.pivotgrid.filterInputLabel|The label of the filter input"
1560
+ filterInputLabel="{{ '{fields} Filter' }}"
1561
+
1562
+ i18n-filterOperatorsDropDownLabel="kendo.pivotgrid.filterOperatorsDropDownLabel|The label of the filter operators DropDownList"
1563
+ filterOperatorsDropDownLabel="{{ '{fields} Filter Operators' }}"
1564
+
1565
+ i18n-filterEqOperator="kendo.pivotgrid.filterEqOperator|The text of the equal filter operator"
1566
+ filterEqOperator="Is equal to"
1567
+
1568
+ i18n-filterNotEqOperator="kendo.pivotgrid.filterNotEqOperator|The text of the not equal filter operator"
1569
+ filterNotEqOperator="Is not equal to"
1570
+
1571
+ i18n-filterIsNullOperator="kendo.pivotgrid.filterIsNullOperator|The text of the is null filter operator"
1572
+ filterIsNullOperator="Is null"
1573
+
1574
+ i18n-filterIsNotNullOperator="kendo.pivotgrid.filterIsNotNullOperator|The text of the is not null filter operator"
1575
+ filterIsNotNullOperator="Is not null"
1576
+
1577
+ i18n-filterIsEmptyOperator="kendo.pivotgrid.filterIsEmptyOperator|The text of the is empty filter operator"
1578
+ filterIsEmptyOperator="Is empty"
1579
+
1580
+ i18n-filterIsNotEmptyOperator="kendo.pivotgrid.filterIsNotEmptyOperator|The text of the is not empty filter operator"
1581
+ filterIsNotEmptyOperator="Is not empty"
1582
+
1583
+ i18n-filterStartsWithOperator="kendo.pivotgrid.filterStartsWithOperator|The text of the starts with filter operator"
1584
+ filterStartsWithOperator="Starts with"
1585
+
1586
+ i18n-filterContainsOperator="kendo.pivotgrid.filterContainsOperator|The text of the contains filter operator"
1587
+ filterContainsOperator="Contains"
1588
+
1589
+ i18n-filterNotContainsOperator="kendo.pivotgrid.filterNotContainsOperator|The text of the does not contain filter operator"
1590
+ filterNotContainsOperator="Does not contain"
1591
+
1592
+ i18n-filterEndsWithOperator="kendo.pivotgrid.filterEndsWithOperator|The text of the ends with filter operator"
1593
+ filterEndsWithOperator="Ends with"
1594
+
1595
+ i18n-filterFilterButton="kendo.pivotgrid.filterFilterButton|The text of the filter button"
1596
+ filterFilterButton="Filter"
1597
+
1598
+ i18n-filterClearButton="kendo.pivotgrid.filterClearButton|The text of the clear filter button"
1599
+ filterClearButton="Clear"
1600
+
1601
+ i18n-configuratorButtonText="kendo.pivotgrid.configuratorButtonText|The text content of the button that opens and closes the PivotGrid configurator"
1602
+ configuratorButtonText="Change Settings"
1603
+
1604
+ i18n-configuratorHeaderText="kendo.pivotgrid.configuratorHeaderText|The text content of the PivotGrid configurator title element"
1605
+ configuratorHeaderText="Settings"
1606
+
1607
+ i18n-configuratorFieldsText="kendo.pivotgrid.configuratorFieldsText|The text content of the PivotGrid configurator fields section title element"
1608
+ configuratorFieldsText="Fields"
1609
+
1610
+ i18n-configuratorColumnsText="kendo.pivotgrid.configuratorColumnsText|The text content of the PivotGrid configurator columns section title element"
1611
+ configuratorColumnsText="Columns"
1612
+
1613
+ i18n-configuratorRowsText="kendo.pivotgrid.configuratorRowsText|The text content of the PivotGrid configurator rows section title element"
1614
+ configuratorRowsText="Rows"
1615
+
1616
+ i18n-configuratorValuesText="kendo.pivotgrid.configuratorValuesText|The text content of the PivotGrid configurator values section title element"
1617
+ configuratorValuesText="Values"
1618
+
1619
+ i18n-configuratorCancelButtonText="kendo.pivotgrid.configuratorCancelButtonText|The text content of the PivotGrid configurator configurator Cancel button"
1620
+ configuratorCancelButtonText="Cancel"
1621
+
1622
+ i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
1623
+ configuratorApplyButtonText="Apply"
1624
+
1625
+ i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
1626
+ configuratorEmptyRowsText="Select some fields to begin setup"
1627
+
1628
+ i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
1629
+ configuratorEmptyColumnsText="Select some fields to begin setup"
1630
+
1631
+ i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1632
+ configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
1633
+
1634
+ <div #table class="k-pivotgrid">
1635
+ <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
1636
+ <kendo-pivotgrid-table
1637
+ #colHeadersTable
1638
+ [colWidth]="columnHeadersWidth"
1639
+ class="k-pivotgrid-column-headers"
1640
+ tableType="columnHeader"></kendo-pivotgrid-table>
1641
+ <kendo-pivotgrid-table
1642
+ #rowHeadersTable
1643
+ class="k-pivotgrid-row-headers"
1644
+ tableType="rowHeader"></kendo-pivotgrid-table>
1645
+ <kendo-pivotgrid-table
1646
+ #valuesTable
1647
+ [colWidth]="columnHeadersWidth"
1648
+ class="k-pivotgrid-values"
1649
+ tableType="values"></kendo-pivotgrid-table>
1650
+
1651
+ <div *ngIf="loading" class="k-loader">
1652
+ <kendo-loader
1653
+ [type]="loaderSettings?.type"
1654
+ [themeColor]="loaderSettings?.themeColor"
1655
+ [size]="loaderSettings?.size"
1656
+ >
1657
+ </kendo-loader>
1658
+ <span class="k-loading-text">{{ loadingText }}</span>
1659
+ </div>
1660
+ </div>
1661
+
1662
+ <kendo-pivotgrid-configurator
1663
+ *ngIf="showConfigurator"
1664
+ [horizontal]="configuratorSettings.horizontal">
1665
+ </kendo-pivotgrid-configurator>
1666
+
1667
+ <div *ngIf="configurator"
1668
+ class="k-pivotgrid-configurator-button"
1669
+ (click)="showConfigurator = !showConfigurator">
1670
+ <span>{{ messageFor('configuratorButtonText') }}<span class="k-icon k-i-gear k-color-inherit"></span>
1671
+ </span>
442
1672
  </div>
443
1673
  `,
444
1674
  styles: [`
@@ -451,9 +1681,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
451
1681
  }
452
1682
  `]
453
1683
  }]
454
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2$1.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
1684
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2.LocalizationService }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
1685
+ type: HostBinding,
1686
+ args: ['class.k-d-flex']
1687
+ }, {
1688
+ type: HostBinding,
1689
+ args: ['class.k-pos-relative']
1690
+ }], rightPositionClass: [{
1691
+ type: HostBinding,
1692
+ args: ['class.k-flex-row']
1693
+ }], leftPositionClass: [{
1694
+ type: HostBinding,
1695
+ args: ['class.k-flex-row-reverse']
1696
+ }], bottomPositionClass: [{
455
1697
  type: HostBinding,
456
- args: ['class.k-pivotgrid']
1698
+ args: ['class.k-flex-column']
1699
+ }], topPositionClass: [{
1700
+ type: HostBinding,
1701
+ args: ['class.k-flex-column-reverse']
1702
+ }], dir: [{
1703
+ type: HostBinding,
1704
+ args: ['attr.dir']
1705
+ }], ariaRole: [{
1706
+ type: HostBinding,
1707
+ args: ['attr.role']
457
1708
  }], colHeadersTable: [{
458
1709
  type: ViewChild,
459
1710
  args: ['colHeadersTable', { read: ElementRef }]
@@ -463,12 +1714,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
463
1714
  }], valuesTable: [{
464
1715
  type: ViewChild,
465
1716
  args: ['valuesTable', { read: ElementRef }]
1717
+ }], table: [{
1718
+ type: ViewChild,
1719
+ args: ['table', { read: ElementRef }]
466
1720
  }], loaderSettings: [{
467
1721
  type: Input
1722
+ }], configurator: [{
1723
+ type: Input
468
1724
  }], columnHeadersWidth: [{
469
1725
  type: Input
470
1726
  }] } });
471
1727
 
1728
+ /**
1729
+ * @hidden
1730
+ */
1731
+ class PivotGridState {
1732
+ constructor(columnAxes, rowAxes, measureAxes) {
1733
+ this.columnAxes = columnAxes;
1734
+ this.rowAxes = rowAxes;
1735
+ this.measureAxes = measureAxes;
1736
+ }
1737
+ }
1738
+
1739
+ /**
1740
+ * The event data for the ExpandChangeEvent
1741
+ */
1742
+ class ExpandChangeEvent extends PreventableEvent {
1743
+ /**
1744
+ * @hidden
1745
+ */
1746
+ constructor(args) {
1747
+ super();
1748
+ Object.assign(this, args);
1749
+ }
1750
+ }
1751
+ ;
1752
+
1753
+ /**
1754
+ * The event data for the ConfigurationChangeEvent
1755
+ */
1756
+ class ConfigurationChangeEvent extends PreventableEvent {
1757
+ /**
1758
+ * @hidden
1759
+ */
1760
+ constructor(args) {
1761
+ super();
1762
+ Object.assign(this, args);
1763
+ }
1764
+ }
1765
+ ;
1766
+
472
1767
  /**
473
1768
  * @hidden
474
1769
  * A directive which binds the PivotGrid to an array of objects.
@@ -489,11 +1784,28 @@ class PivotBaseBindingDirective {
489
1784
  * Represents the measure axes configuration of the PivotGrid.
490
1785
  */
491
1786
  this.measureAxes = [];
492
- this.expandedStateSub = new Subscription();
1787
+ /**
1788
+ * Fires each time a row or column header gets expanded or collapsed by the end user. The event is preventable.
1789
+ * If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the end user interaction.
1790
+ */
1791
+ this.expandChange = new EventEmitter();
1792
+ /**
1793
+ * Fires when the Configurator Apply button is pressed. The event is preventable.
1794
+ * If you prevent the event, the PivotGrid will not be rerendered with the new state, resulting from the configuration changes, applied through the configurator interface.
1795
+ */
1796
+ this.configurationChange = new EventEmitter();
1797
+ this.subs = new Subscription();
1798
+ }
1799
+ /**
1800
+ * @hidden
1801
+ */
1802
+ get state() {
1803
+ return new PivotGridState(this.columnAxes, this.rowAxes, this.measureAxes);
493
1804
  }
494
1805
  ngOnInit() {
495
- this.loadData();
496
- this.expandedStateSub = this.dataService.expandedStateChange.subscribe((state) => {
1806
+ this.loadData(this.state);
1807
+ this.loadFields();
1808
+ this.subs.add(this.dataService.expandedStateChange.subscribe((state) => {
497
1809
  this.zone.run(() => {
498
1810
  const isCol = state.tableType === 'columnHeader';
499
1811
  const axes = isCol ? 'columnAxes' : 'rowAxes';
@@ -501,10 +1813,28 @@ class PivotBaseBindingDirective {
501
1813
  const tree = toTree((isCol ? this.dataService.columns : this.dataService.rows || []).slice());
502
1814
  this.updateHeaders(axes, tree, state.cell.path);
503
1815
  });
504
- });
1816
+ }));
1817
+ this.subs.add(this.dataService.configuratorFieldChange.subscribe((state) => {
1818
+ this.zone.run(() => {
1819
+ if (hasObservers(this.configurationChange)) {
1820
+ const event = new ConfigurationChangeEvent(state);
1821
+ this.configurationChange.emit(event);
1822
+ if (event.isDefaultPrevented()) {
1823
+ return;
1824
+ }
1825
+ }
1826
+ this.dataService.configuredFields.next({
1827
+ columnAxes: state.columnAxes,
1828
+ rowAxes: state.rowAxes,
1829
+ measureAxes: state.measureAxes
1830
+ });
1831
+ this.loadData(state);
1832
+ });
1833
+ }));
1834
+ this.dataService.directive = this;
505
1835
  }
506
1836
  ngOnDestroy() {
507
- this.expandedStateSub.unsubscribe();
1837
+ this.subs.unsubscribe();
508
1838
  }
509
1839
  updateDataServiceFields() {
510
1840
  this.dataService.normalizedData = this.dataState.data;
@@ -512,6 +1842,14 @@ class PivotBaseBindingDirective {
512
1842
  this.dataService.columns = this.dataState.columns;
513
1843
  this.dataService.updateRowsAndCols();
514
1844
  }
1845
+ updateConfiguratorFields() {
1846
+ this.dataService.fields.next(this.configuratorFields);
1847
+ this.dataService.configuredFields.next({
1848
+ columnAxes: this.columnAxes,
1849
+ rowAxes: this.rowAxes,
1850
+ measureAxes: this.measureAxes
1851
+ });
1852
+ }
515
1853
  updateHeaders(axes, tree, path) {
516
1854
  // Action to determine expand/collapse state
517
1855
  const action = {
@@ -520,15 +1858,23 @@ class PivotBaseBindingDirective {
520
1858
  };
521
1859
  // The `headersReducer` method is responsible for udpating
522
1860
  // the expanded state based on the toggle action (expand/collapse)
523
- const newHeaders = headersReducer(this[axes].slice(), Object.assign(Object.assign({}, action), { tree }));
524
1861
  // Update axes and reload data
1862
+ const newHeaders = headersReducer(this[axes].slice(), Object.assign(Object.assign({}, action), { tree }));
1863
+ if (hasObservers(this.expandChange)) {
1864
+ const newState = Object.assign(Object.assign({}, this.state), { [axes]: newHeaders });
1865
+ const event = new ExpandChangeEvent(newState);
1866
+ this.expandChange.emit(event);
1867
+ if (event.isDefaultPrevented()) {
1868
+ return;
1869
+ }
1870
+ }
525
1871
  this[axes] = newHeaders;
526
- this.loadData();
1872
+ this.loadData(this.state);
527
1873
  }
528
1874
  ;
529
1875
  }
530
1876
  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 });
531
- 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" }, ngImport: i0 });
1877
+ PivotBaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotBaseBindingDirective, selector: "kendo-base-binding-directive", inputs: { columnAxes: "columnAxes", rowAxes: "rowAxes", measureAxes: "measureAxes" }, outputs: { expandChange: "expandChange", configurationChange: "configurationChange" }, ngImport: i0 });
532
1878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, decorators: [{
533
1879
  type: Directive,
534
1880
  args: [{
@@ -540,6 +1886,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
540
1886
  type: Input
541
1887
  }], measureAxes: [{
542
1888
  type: Input
1889
+ }], expandChange: [{
1890
+ type: Output
1891
+ }], configurationChange: [{
1892
+ type: Output
543
1893
  }] } });
544
1894
 
545
1895
  const dataField = 'aggregate';
@@ -552,26 +1902,38 @@ const stringSeparator = '&';
552
1902
  class PivotLocalBindingDirective extends PivotBaseBindingDirective {
553
1903
  constructor(dataService, zone) {
554
1904
  super(dataService, zone);
1905
+ this.type = 'local';
555
1906
  this.createAxisSettings = (key) => (Object.assign({ key }, this.dimensions[key]));
556
1907
  }
557
1908
  ngOnChanges(changes) {
558
1909
  if (anyChanged(['data', 'dimensions', 'columnAxes', 'rowAxes', 'measureAxes', 'measures'], changes)) {
559
- this.loadData();
1910
+ this.loadData(this.state);
560
1911
  }
561
1912
  }
562
- loadData() {
563
- const rootColumnAxes = this.getRootAxes(this.columnAxes);
564
- const rootRowAxes = this.getRootAxes(this.rowAxes);
1913
+ /**
1914
+ * @hidden
1915
+ */
1916
+ fetchChildren(node) {
1917
+ return node.children;
1918
+ }
1919
+ loadFields() {
1920
+ this.configuratorFields = createFlatSchemaDimensions(this.dimensions, this.measures);
1921
+ this.updateConfiguratorFields();
1922
+ }
1923
+ loadData(state) {
1924
+ const { columnAxes, rowAxes, measureAxes } = state;
1925
+ const rootColumnAxes = this.getRootAxes(columnAxes);
1926
+ const rootRowAxes = this.getRootAxes(rowAxes);
565
1927
  const columnSettings = rootColumnAxes.split(stringSeparator).map(this.createAxisSettings);
566
1928
  const rowSettings = rootRowAxes.split(stringSeparator).map(this.createAxisSettings);
567
- const measuresSettings = this.measureAxes.map(m => this.measures.find(meas => String(meas.name) === String(m.name))).filter(Boolean);
1929
+ const measuresSettings = measureAxes.map(m => this.measures.find(meas => String(meas.name) === String(m.name))).filter(Boolean);
568
1930
  const dataTree = createDataTree(this.data, rowSettings, columnSettings, measuresSettings, bindingFields);
569
1931
  this.dataState = createLocalDataState({
570
1932
  dataTree,
571
1933
  rowSettings,
572
1934
  columnSettings,
573
- rowAxes: this.rowAxes,
574
- columnAxes: this.columnAxes,
1935
+ rowAxes: rowAxes,
1936
+ columnAxes: columnAxes,
575
1937
  measures: measuresSettings,
576
1938
  sort: [],
577
1939
  fields: bindingFields
@@ -605,22 +1967,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
605
1967
  class PivotOLAPBindingDirective extends PivotBaseBindingDirective {
606
1968
  constructor(dataService, zone) {
607
1969
  super(dataService, zone);
1970
+ this.type = 'olap';
608
1971
  }
609
1972
  ngOnChanges(changes) {
610
1973
  if (anyChanged(['url', 'cube', 'catalog', 'columnAxes', 'rowAxes', 'measureAxes'], changes)) {
611
- this.loadData();
1974
+ this.loadData(this.state);
1975
+ this.loadFields();
612
1976
  }
613
1977
  }
614
- loadData() {
1978
+ loadData(state) {
1979
+ const { columnAxes, rowAxes, measureAxes } = state;
615
1980
  this.dataService.loading.next(true);
616
1981
  const options = {
617
1982
  connection: {
618
1983
  catalog: this.catalog,
619
1984
  cube: this.cube
620
1985
  },
621
- columnAxes: this.columnAxes,
622
- rowAxes: this.rowAxes,
623
- measureAxes: this.measureAxes
1986
+ columnAxes: columnAxes,
1987
+ rowAxes: rowAxes,
1988
+ measureAxes: measureAxes
624
1989
  };
625
1990
  fetchData({ url: this.url }, JSON.parse(JSON.stringify(options)))
626
1991
  .then(createDataState)
@@ -630,6 +1995,127 @@ class PivotOLAPBindingDirective extends PivotBaseBindingDirective {
630
1995
  this.dataService.loading.next(false);
631
1996
  });
632
1997
  }
1998
+ loadFields() {
1999
+ const options = {
2000
+ connection: {
2001
+ catalog: this.catalog,
2002
+ cube: this.cube
2003
+ },
2004
+ restrictions: {
2005
+ catalogName: this.catalog,
2006
+ cubeName: this.cube
2007
+ },
2008
+ command: 'schemaDimensions'
2009
+ };
2010
+ fetchDiscover({ url: this.url }, options)
2011
+ .then((newFields) => {
2012
+ addKPI(newFields);
2013
+ this.configuratorFields = newFields;
2014
+ this.updateConfiguratorFields();
2015
+ });
2016
+ }
2017
+ updateFields(event, fields) {
2018
+ return __awaiter(this, void 0, void 0, function* () {
2019
+ const newFields = fields.slice();
2020
+ const field = this.getField(newFields, event);
2021
+ if (field && field.uniqueName === '[KPIs]') {
2022
+ const KPIs = this.normalizeKPIs(yield this.loadKPIs());
2023
+ field.children = KPIs;
2024
+ }
2025
+ else if (field && field.type === 'kpi') {
2026
+ field.children = buildKPIMeasures(field);
2027
+ }
2028
+ else if (field && !field.children) {
2029
+ const additionalFields = yield this.loadAvailableFields(field);
2030
+ field.children = additionalFields;
2031
+ }
2032
+ return field === null || field === void 0 ? void 0 : field.children;
2033
+ });
2034
+ }
2035
+ /**
2036
+ * @hidden
2037
+ */
2038
+ fetchChildren(event, fields) {
2039
+ return this.updateFields(event, fields);
2040
+ }
2041
+ normalizeKPIs(data) {
2042
+ for (let idx = 0, length = data.length; idx < length; idx++) {
2043
+ data[idx].uniqueName = data[idx].name;
2044
+ data[idx].type = 'kpi';
2045
+ }
2046
+ return data;
2047
+ }
2048
+ ;
2049
+ getField(nodes = [], target) {
2050
+ for (let i = 0; i < nodes.length; i++) {
2051
+ const node = nodes[i];
2052
+ if (node.uniqueName === target.uniqueName) {
2053
+ return node;
2054
+ }
2055
+ let result = this.getField(node.children, target);
2056
+ if (result !== null) {
2057
+ return result;
2058
+ }
2059
+ }
2060
+ return null;
2061
+ }
2062
+ ;
2063
+ loadKPIs() {
2064
+ return __awaiter(this, void 0, void 0, function* () {
2065
+ const options = {
2066
+ connection: {
2067
+ catalog: this.catalog,
2068
+ cube: this.cube
2069
+ },
2070
+ restrictions: {
2071
+ catalogName: this.catalog,
2072
+ cubeName: this.cube
2073
+ },
2074
+ command: 'schemaKPIs'
2075
+ };
2076
+ return fetchDiscover({ url: this.url }, options);
2077
+ });
2078
+ }
2079
+ ;
2080
+ loadAvailableFields(field) {
2081
+ return __awaiter(this, void 0, void 0, function* () {
2082
+ let command;
2083
+ let dimensionUniqueName;
2084
+ let hierarchyUniqueName;
2085
+ let levelUniqueName;
2086
+ let memberUniqueName;
2087
+ let treeOp;
2088
+ if (field.type === 2) {
2089
+ command = 'schemaMeasures';
2090
+ }
2091
+ else if (field.dimensionUniqueName) {
2092
+ command = 'schemaLevels';
2093
+ hierarchyUniqueName = field.uniqueName;
2094
+ }
2095
+ else {
2096
+ command = 'schemaHierarchies';
2097
+ dimensionUniqueName = field.uniqueName;
2098
+ }
2099
+ const options = {
2100
+ connection: {
2101
+ catalog: this.catalog,
2102
+ cube: this.cube
2103
+ },
2104
+ restrictions: {
2105
+ catalogName: this.catalog,
2106
+ cubeName: this.cube,
2107
+ hierarchyUniqueName,
2108
+ dimensionUniqueName,
2109
+ levelUniqueName,
2110
+ memberUniqueName,
2111
+ treeOp
2112
+ },
2113
+ command
2114
+ };
2115
+ return fetchDiscover({ url: this.url }, options);
2116
+ });
2117
+ }
2118
+ ;
633
2119
  }
634
2120
  PivotOLAPBindingDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotOLAPBindingDirective, deps: [{ token: PivotGridDataService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
635
2121
  PivotOLAPBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotOLAPBindingDirective, selector: "[kendoPivotOLAPBinding]", inputs: { url: "url", cube: "cube", catalog: "catalog" }, exportAs: ["kendoPivotOLAPBinding"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
@@ -647,17 +2133,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
647
2133
  type: Input
648
2134
  }] } });
649
2135
 
2136
+ /**
2137
+ * Custom component messages override default component messages
2138
+ * ([see example]({% slug globalization_pivotgrid %}#toc-localization)).
2139
+ */
2140
+ class CustomMessagesComponent extends PivotGridMessages {
2141
+ constructor(service) {
2142
+ super();
2143
+ this.service = service;
2144
+ }
2145
+ get override() {
2146
+ return true;
2147
+ }
2148
+ }
2149
+ CustomMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, deps: [{ token: i2.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
2150
+ CustomMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CustomMessagesComponent, selector: "kendo-pivotgrid-messages", providers: [
2151
+ {
2152
+ provide: PivotGridMessages,
2153
+ useExisting: forwardRef(() => CustomMessagesComponent)
2154
+ }
2155
+ ], usesInheritance: true, ngImport: i0, template: ``, isInline: true });
2156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CustomMessagesComponent, decorators: [{
2157
+ type: Component,
2158
+ args: [{
2159
+ providers: [
2160
+ {
2161
+ provide: PivotGridMessages,
2162
+ useExisting: forwardRef(() => CustomMessagesComponent)
2163
+ }
2164
+ ],
2165
+ selector: 'kendo-pivotgrid-messages',
2166
+ template: ``
2167
+ }]
2168
+ }], ctorParameters: function () { return [{ type: i2.LocalizationService }]; } });
2169
+
650
2170
  const IMPORTED_MODULES = [
651
2171
  CommonModule,
652
2172
  EventsModule,
653
- IndicatorsModule
2173
+ IndicatorsModule,
2174
+ ButtonsModule,
2175
+ TreeViewModule,
2176
+ InputsModule,
2177
+ DraggableModule
654
2178
  ];
655
2179
  const DECLARATIONS = [
2180
+ PivotGridComponent,
2181
+ PivotGridTableComponent,
2182
+ PivotGridConfiguratorComponent,
2183
+ PivotGridCellDirective,
2184
+ PivotLocalBindingDirective,
2185
+ PivotOLAPBindingDirective,
2186
+ DraggableChipDirective,
2187
+ DropTargetDirective,
2188
+ LocalizedMessagesDirective,
2189
+ CustomMessagesComponent
2190
+ ];
2191
+ const EXPORTS = [
656
2192
  PivotGridComponent,
657
2193
  PivotGridTableComponent,
658
2194
  PivotGridCellDirective,
659
2195
  PivotLocalBindingDirective,
660
- PivotOLAPBindingDirective
2196
+ PivotOLAPBindingDirective,
2197
+ CustomMessagesComponent
661
2198
  ];
662
2199
  /**
663
2200
  * Sample module
@@ -667,29 +2204,32 @@ class PivotGridModule {
667
2204
  PivotGridModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
668
2205
  PivotGridModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, declarations: [PivotGridComponent,
669
2206
  PivotGridTableComponent,
2207
+ PivotGridConfiguratorComponent,
670
2208
  PivotGridCellDirective,
671
2209
  PivotLocalBindingDirective,
672
- PivotOLAPBindingDirective], imports: [CommonModule,
2210
+ PivotOLAPBindingDirective,
2211
+ DraggableChipDirective,
2212
+ DropTargetDirective,
2213
+ LocalizedMessagesDirective,
2214
+ CustomMessagesComponent], imports: [CommonModule,
673
2215
  EventsModule,
674
- IndicatorsModule], exports: [PivotGridComponent,
2216
+ IndicatorsModule,
2217
+ ButtonsModule,
2218
+ TreeViewModule,
2219
+ InputsModule,
2220
+ DraggableModule], exports: [PivotGridComponent,
675
2221
  PivotGridTableComponent,
676
2222
  PivotGridCellDirective,
677
2223
  PivotLocalBindingDirective,
678
- PivotOLAPBindingDirective] });
679
- PivotGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, providers: [{
680
- provide: L10N_PREFIX,
681
- useValue: 'kendo.pivotgrid'
682
- }], imports: [[...IMPORTED_MODULES]] });
2224
+ PivotOLAPBindingDirective,
2225
+ CustomMessagesComponent] });
2226
+ PivotGridModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, imports: [[...IMPORTED_MODULES]] });
683
2227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridModule, decorators: [{
684
2228
  type: NgModule,
685
2229
  args: [{
686
2230
  imports: [...IMPORTED_MODULES],
687
2231
  declarations: [...DECLARATIONS],
688
- exports: [...DECLARATIONS],
689
- providers: [{
690
- provide: L10N_PREFIX,
691
- useValue: 'kendo.pivotgrid'
692
- }]
2232
+ exports: [...EXPORTS]
693
2233
  }]
694
2234
  }] });
695
2235
 
@@ -697,5 +2237,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
697
2237
  * Generated bundle index. Do not edit.
698
2238
  */
699
2239
 
700
- export { PivotGridCellDirective, PivotGridComponent, PivotGridModule, PivotGridTableComponent, PivotLocalBindingDirective, PivotOLAPBindingDirective };
2240
+ export { ConfigurationChangeEvent, CustomMessagesComponent, DraggableChipDirective, DropTargetDirective, ExpandChangeEvent, PivotGridCellDirective, PivotGridComponent, PivotGridConfiguratorComponent, PivotGridModule, PivotGridTableComponent, PivotLocalBindingDirective, PivotOLAPBindingDirective };
701
2241