@progress/kendo-angular-pivotgrid 0.2.0-dev.202208181339 → 0.2.0-dev.202209020712

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.
@@ -0,0 +1,6 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ ;
6
+ export {};
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-pivotgrid',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1660829909,
12
+ publishDate: 1662102713,
13
13
  version: '',
14
14
  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'
15
15
  };
@@ -5,13 +5,14 @@
5
5
  import { Component, ElementRef, HostBinding, Input, ViewChild } from '@angular/core';
6
6
  import { validatePackage } from '@progress/kendo-licensing';
7
7
  import { packageMetadata } from './package-metadata';
8
- import { isDocumentAvailable } from '@progress/kendo-angular-common';
8
+ import { isChanged, isDocumentAvailable } from '@progress/kendo-angular-common';
9
9
  import { PivotGridDataService } from './data-binding/pivotgrid-data.service';
10
10
  import { fromEvent, Subscription } from 'rxjs';
11
11
  import { syncScroll, syncWheel } from './util';
12
12
  // eslint-disable-next-line rxjs/ban-operators
13
13
  import { merge } from 'rxjs/operators';
14
14
  import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
15
+ import { PivotGridNavigation } from '@progress/kendo-pivotgrid-common';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "./data-binding/pivotgrid-data.service";
17
18
  import * as i2 from "@progress/kendo-angular-l10n";
@@ -34,10 +35,12 @@ const DEFAULT_CONFIGURATOR_SETTINGS = {
34
35
  * Represents the Kendo UI PivotGrid component for Angular.
35
36
  */
36
37
  export class PivotGridComponent {
37
- constructor(hostEl, zone, dataService, localization, _scrollbarWidthService) {
38
+ constructor(hostEl, zone, dataService, localization, renderer, _scrollbarWidthService) {
39
+ this.hostEl = hostEl;
38
40
  this.zone = zone;
39
41
  this.dataService = dataService;
40
42
  this.localization = localization;
43
+ this.renderer = renderer;
41
44
  this.hostClass = true;
42
45
  this.ariaRole = 'grid';
43
46
  /**
@@ -46,6 +49,12 @@ export class PivotGridComponent {
46
49
  * @default 200
47
50
  */
48
51
  this.columnHeadersWidth = 200;
52
+ /**
53
+ * If set to true, the user can use dedicated shortcuts to interact with the PivotGrid. By default, navigation is disabled.
54
+ *
55
+ * @default false
56
+ */
57
+ this.navigable = false;
49
58
  this.resizeObservers = [];
50
59
  this._loaderSettings = DEFAULT_LOADER_SETTINGS;
51
60
  this.subs = new Subscription();
@@ -133,15 +142,29 @@ export class PivotGridComponent {
133
142
  this.resizeObservers = [headerColsResizeObserver, headerRowsResizeObserver];
134
143
  this.subs.add(fromEvent(rowHeadersTable, 'wheel')
135
144
  .pipe(merge(fromEvent(colHeadersTable, 'wheel'), fromEvent(this.valuesTable.nativeElement, 'scroll'))).subscribe((ev) => this.handleScroll(ev)));
145
+ if (this.navigable) {
146
+ this.initNavigation();
147
+ }
136
148
  });
137
149
  }
138
150
  }
139
151
  ngAfterContentInit() {
140
152
  this.subs.add(this.dataService.loading.subscribe(state => this.loading = state));
141
153
  }
154
+ ngOnChanges(changes) {
155
+ if (isChanged('navigable', changes)) {
156
+ if (this.navigable) {
157
+ this.initNavigation();
158
+ }
159
+ else {
160
+ this.stopNavigation();
161
+ }
162
+ }
163
+ }
142
164
  ngOnDestroy() {
143
165
  this.resizeObservers.forEach(o => o.disconnect());
144
166
  this.subs.unsubscribe();
167
+ this.stopNavigation();
145
168
  }
146
169
  /**
147
170
  * @hidden
@@ -149,16 +172,37 @@ export class PivotGridComponent {
149
172
  messageFor(localizationToken) {
150
173
  return this.localization.get(localizationToken);
151
174
  }
175
+ initNavigation() {
176
+ this.stopNavigation();
177
+ this.navigation = new PivotGridNavigation({ tabIndex: 0 });
178
+ this.navigation.start(this.hostEl.nativeElement);
179
+ const firstCell = this.navigation.first;
180
+ if (firstCell) {
181
+ firstCell.setAttribute('tabindex', '0');
182
+ }
183
+ this.subs.add(this.dataService.directive.expandChange.pipe(merge(this.dataService.directive.configurationChange)).subscribe(() => this.zone.runOutsideAngular(() => {
184
+ setTimeout(() => this.navigation.update());
185
+ })));
186
+ }
187
+ stopNavigation() {
188
+ if (this.navigation) {
189
+ const lastFocusedEl = this.navigation.elements.find(el => el.hasAttribute('tabindex'));
190
+ if (lastFocusedEl) {
191
+ this.renderer.removeAttribute(lastFocusedEl, 'tabindex');
192
+ }
193
+ this.navigation.stop();
194
+ }
195
+ }
152
196
  }
153
- PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.PivotGridDataService }, { token: i2.LocalizationService }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
154
- 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: [
197
+ PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.PivotGridDataService }, { token: i2.LocalizationService }, { token: i0.Renderer2 }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
198
+ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", configurator: "configurator", columnHeadersWidth: "columnHeadersWidth", navigable: "navigable" }, host: { properties: { "class.k-d-flex": "this.hostClass", "class.k-pos-relative": "this.hostClass", "class.k-flex-row": "this.rightPositionClass", "class.k-flex-row-reverse": "this.leftPositionClass", "class.k-flex-column": "this.bottomPositionClass", "class.k-flex-column-reverse": "this.topPositionClass", "attr.dir": "this.dir", "attr.role": "this.ariaRole" } }, providers: [
155
199
  PivotGridDataService,
156
200
  LocalizationService,
157
201
  {
158
202
  provide: L10N_PREFIX,
159
203
  useValue: 'kendo.pivotgrid'
160
204
  }
161
- ], 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: `
205
+ ], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
162
206
  <ng-container kendoPivotGridLocalizedMessages
163
207
  i18n-loading="kendo.pivotgrid.loading|The loading text"
164
208
  loading="Loading"
@@ -239,10 +283,21 @@ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
239
283
  configuratorCancelButtonText="Cancel"
240
284
 
241
285
  i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
242
- configuratorApplyButtonText="Apply"></ng-container>
286
+ configuratorApplyButtonText="Apply"
287
+
288
+ i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
289
+ configuratorEmptyRowsText="Select some fields to begin setup"
290
+
291
+ i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
292
+ configuratorEmptyColumnsText="Select some fields to begin setup"
293
+
294
+ i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
295
+ configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
243
296
 
244
297
  <div #table class="k-pivotgrid">
245
- <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
298
+ <span class="k-pivotgrid-empty-cell">
299
+ <span class="k-sr-only">{{messageFor('emptyCellLabel')}}</span>
300
+ </span>
246
301
  <kendo-pivotgrid-table
247
302
  #colHeadersTable
248
303
  [colWidth]="columnHeadersWidth"
@@ -374,10 +429,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
374
429
  configuratorCancelButtonText="Cancel"
375
430
 
376
431
  i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
377
- configuratorApplyButtonText="Apply"></ng-container>
432
+ configuratorApplyButtonText="Apply"
433
+
434
+ i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
435
+ configuratorEmptyRowsText="Select some fields to begin setup"
436
+
437
+ i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
438
+ configuratorEmptyColumnsText="Select some fields to begin setup"
439
+
440
+ i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
441
+ configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
378
442
 
379
443
  <div #table class="k-pivotgrid">
380
- <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
444
+ <span class="k-pivotgrid-empty-cell">
445
+ <span class="k-sr-only">{{messageFor('emptyCellLabel')}}</span>
446
+ </span>
381
447
  <kendo-pivotgrid-table
382
448
  #colHeadersTable
383
449
  [colWidth]="columnHeadersWidth"
@@ -426,7 +492,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
426
492
  }
427
493
  `]
428
494
  }]
429
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.PivotGridDataService }, { type: i2.LocalizationService }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
495
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.PivotGridDataService }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
430
496
  type: HostBinding,
431
497
  args: ['class.k-d-flex']
432
498
  }, {
@@ -468,4 +534,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
468
534
  type: Input
469
535
  }], columnHeadersWidth: [{
470
536
  type: Input
537
+ }], navigable: [{
538
+ type: Input
471
539
  }] } });
@@ -6,8 +6,8 @@ import * as i0 from '@angular/core';
6
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
8
  import * as i3 from '@progress/kendo-angular-common';
9
- import { isDocumentAvailable, PreventableEvent, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
10
- import { toTree, toRows, toColumns, toData, configuratorReducer, PIVOT_CONFIGURATOR_ACTION, HEADERS_ACTION, headersReducer, createFlatSchemaDimensions, createDataTree, createLocalDataState, rootFields, fetchData, createDataState, fetchDiscover, addKPI, buildKPIMeasures } from '@progress/kendo-pivotgrid-common';
9
+ import { isDocumentAvailable, isChanged, PreventableEvent, hasObservers, anyChanged, EventsModule, DraggableModule } from '@progress/kendo-angular-common';
10
+ import { toTree, toRows, toColumns, toData, configuratorReducer, PIVOT_CONFIGURATOR_ACTION, PivotGridNavigation, HEADERS_ACTION, headersReducer, createFlatSchemaDimensions, createDataTree, createLocalDataState, rootFields, fetchData, createDataState, fetchDiscover, addKPI, buildKPIMeasures } from '@progress/kendo-pivotgrid-common';
11
11
  export { averageAggregate, maxAggregate, minAggregate, sumAggregate } from '@progress/kendo-pivotgrid-common';
12
12
  import { BehaviorSubject, Subscription, from, of, fromEvent } from 'rxjs';
13
13
  import { mergeMap, merge } from 'rxjs/operators';
@@ -32,7 +32,7 @@ const packageMetadata = {
32
32
  name: '@progress/kendo-angular-pivotgrid',
33
33
  productName: 'Kendo UI for Angular',
34
34
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
35
- publishDate: 1660829909,
35
+ publishDate: 1662102713,
36
36
  version: '',
37
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'
38
38
  };
@@ -928,9 +928,7 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
928
928
  </kendo-chiplist>
929
929
 
930
930
  <ng-template #noColumnAxes>
931
- <div class="k-settings-description" kendoDropTarget axes="columnAxes">
932
- Select some fields to begin setup
933
- </div>
931
+ <div class="k-settings-description" kendoDropTarget axes="columnAxes">{{messageFor('configuratorEmptyColumnsText')}}</div>
934
932
  </ng-template>
935
933
 
936
934
  <div class="k-form-field" kendoDropTarget axes="rowAxes">
@@ -956,9 +954,7 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
956
954
  </kendo-chiplist>
957
955
 
958
956
  <ng-template #noRowAxes>
959
- <div class="k-settings-description" kendoDropTarget axes="rowAxes">
960
- Select some fields to begin setup
961
- </div>
957
+ <div class="k-settings-description" kendoDropTarget axes="rowAxes">{{messageFor('configuratorEmptyRowsText')}}</div>
962
958
  </ng-template>
963
959
  </ng-template>
964
960
 
@@ -991,9 +987,7 @@ PivotGridConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
991
987
  </kendo-chiplist>
992
988
 
993
989
  <ng-template #noMeasureAxes>
994
- <div class="k-settings-description" kendoDropTarget axes="measureAxes">
995
- Select some fields to begin setup
996
- </div>
990
+ <div class="k-settings-description" kendoDropTarget axes="measureAxes">{{messageFor('configuratorEmptyMeasuresText')}}</div>
997
991
  </ng-template>
998
992
  </ng-template>
999
993
 
@@ -1085,9 +1079,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1085
1079
  </kendo-chiplist>
1086
1080
 
1087
1081
  <ng-template #noColumnAxes>
1088
- <div class="k-settings-description" kendoDropTarget axes="columnAxes">
1089
- Select some fields to begin setup
1090
- </div>
1082
+ <div class="k-settings-description" kendoDropTarget axes="columnAxes">{{messageFor('configuratorEmptyColumnsText')}}</div>
1091
1083
  </ng-template>
1092
1084
 
1093
1085
  <div class="k-form-field" kendoDropTarget axes="rowAxes">
@@ -1113,9 +1105,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1113
1105
  </kendo-chiplist>
1114
1106
 
1115
1107
  <ng-template #noRowAxes>
1116
- <div class="k-settings-description" kendoDropTarget axes="rowAxes">
1117
- Select some fields to begin setup
1118
- </div>
1108
+ <div class="k-settings-description" kendoDropTarget axes="rowAxes">{{messageFor('configuratorEmptyRowsText')}}</div>
1119
1109
  </ng-template>
1120
1110
  </ng-template>
1121
1111
 
@@ -1148,9 +1138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1148
1138
  </kendo-chiplist>
1149
1139
 
1150
1140
  <ng-template #noMeasureAxes>
1151
- <div class="k-settings-description" kendoDropTarget axes="measureAxes">
1152
- Select some fields to begin setup
1153
- </div>
1141
+ <div class="k-settings-description" kendoDropTarget axes="measureAxes">{{messageFor('configuratorEmptyMeasuresText')}}</div>
1154
1142
  </ng-template>
1155
1143
  </ng-template>
1156
1144
 
@@ -1176,7 +1164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1176
1164
  class PivotGridMessages extends ComponentMessages {
1177
1165
  }
1178
1166
  PivotGridMessages.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1179
- 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" }, usesInheritance: true, ngImport: i0 });
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 });
1180
1168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridMessages, decorators: [{
1181
1169
  type: Directive
1182
1170
  }], propDecorators: { fieldMenuFilterItemLabel: [{
@@ -1233,6 +1221,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1233
1221
  type: Input
1234
1222
  }], configuratorApplyButtonText: [{
1235
1223
  type: Input
1224
+ }], configuratorEmptyRowsText: [{
1225
+ type: Input
1226
+ }], configuratorEmptyColumnsText: [{
1227
+ type: Input
1228
+ }], configuratorEmptyMeasuresText: [{
1229
+ type: Input
1236
1230
  }] } });
1237
1231
 
1238
1232
  /**
@@ -1277,10 +1271,12 @@ const DEFAULT_CONFIGURATOR_SETTINGS = {
1277
1271
  * Represents the Kendo UI PivotGrid component for Angular.
1278
1272
  */
1279
1273
  class PivotGridComponent {
1280
- constructor(hostEl, zone, dataService, localization, _scrollbarWidthService) {
1274
+ constructor(hostEl, zone, dataService, localization, renderer, _scrollbarWidthService) {
1275
+ this.hostEl = hostEl;
1281
1276
  this.zone = zone;
1282
1277
  this.dataService = dataService;
1283
1278
  this.localization = localization;
1279
+ this.renderer = renderer;
1284
1280
  this.hostClass = true;
1285
1281
  this.ariaRole = 'grid';
1286
1282
  /**
@@ -1289,6 +1285,12 @@ class PivotGridComponent {
1289
1285
  * @default 200
1290
1286
  */
1291
1287
  this.columnHeadersWidth = 200;
1288
+ /**
1289
+ * If set to true, the user can use dedicated shortcuts to interact with the PivotGrid. By default, navigation is disabled.
1290
+ *
1291
+ * @default false
1292
+ */
1293
+ this.navigable = false;
1292
1294
  this.resizeObservers = [];
1293
1295
  this._loaderSettings = DEFAULT_LOADER_SETTINGS;
1294
1296
  this.subs = new Subscription();
@@ -1376,15 +1378,29 @@ class PivotGridComponent {
1376
1378
  this.resizeObservers = [headerColsResizeObserver, headerRowsResizeObserver];
1377
1379
  this.subs.add(fromEvent(rowHeadersTable, 'wheel')
1378
1380
  .pipe(merge(fromEvent(colHeadersTable, 'wheel'), fromEvent(this.valuesTable.nativeElement, 'scroll'))).subscribe((ev) => this.handleScroll(ev)));
1381
+ if (this.navigable) {
1382
+ this.initNavigation();
1383
+ }
1379
1384
  });
1380
1385
  }
1381
1386
  }
1382
1387
  ngAfterContentInit() {
1383
1388
  this.subs.add(this.dataService.loading.subscribe(state => this.loading = state));
1384
1389
  }
1390
+ ngOnChanges(changes) {
1391
+ if (isChanged('navigable', changes)) {
1392
+ if (this.navigable) {
1393
+ this.initNavigation();
1394
+ }
1395
+ else {
1396
+ this.stopNavigation();
1397
+ }
1398
+ }
1399
+ }
1385
1400
  ngOnDestroy() {
1386
1401
  this.resizeObservers.forEach(o => o.disconnect());
1387
1402
  this.subs.unsubscribe();
1403
+ this.stopNavigation();
1388
1404
  }
1389
1405
  /**
1390
1406
  * @hidden
@@ -1392,16 +1408,37 @@ class PivotGridComponent {
1392
1408
  messageFor(localizationToken) {
1393
1409
  return this.localization.get(localizationToken);
1394
1410
  }
1411
+ initNavigation() {
1412
+ this.stopNavigation();
1413
+ this.navigation = new PivotGridNavigation({ tabIndex: 0 });
1414
+ this.navigation.start(this.hostEl.nativeElement);
1415
+ const firstCell = this.navigation.first;
1416
+ if (firstCell) {
1417
+ firstCell.setAttribute('tabindex', '0');
1418
+ }
1419
+ this.subs.add(this.dataService.directive.expandChange.pipe(merge(this.dataService.directive.configurationChange)).subscribe(() => this.zone.runOutsideAngular(() => {
1420
+ setTimeout(() => this.navigation.update());
1421
+ })));
1422
+ }
1423
+ stopNavigation() {
1424
+ if (this.navigation) {
1425
+ const lastFocusedEl = this.navigation.elements.find(el => el.hasAttribute('tabindex'));
1426
+ if (lastFocusedEl) {
1427
+ this.renderer.removeAttribute(lastFocusedEl, 'tabindex');
1428
+ }
1429
+ this.navigation.stop();
1430
+ }
1431
+ }
1395
1432
  }
1396
- 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 });
1397
- 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: [
1433
+ PivotGridComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: PivotGridDataService }, { token: i2.LocalizationService }, { token: i0.Renderer2 }, { token: i3.ScrollbarWidthService }], target: i0.ɵɵFactoryTarget.Component });
1434
+ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: PivotGridComponent, selector: "kendo-pivotgrid", inputs: { loaderSettings: "loaderSettings", configurator: "configurator", columnHeadersWidth: "columnHeadersWidth", navigable: "navigable" }, host: { properties: { "class.k-d-flex": "this.hostClass", "class.k-pos-relative": "this.hostClass", "class.k-flex-row": "this.rightPositionClass", "class.k-flex-row-reverse": "this.leftPositionClass", "class.k-flex-column": "this.bottomPositionClass", "class.k-flex-column-reverse": "this.topPositionClass", "attr.dir": "this.dir", "attr.role": "this.ariaRole" } }, providers: [
1398
1435
  PivotGridDataService,
1399
1436
  LocalizationService,
1400
1437
  {
1401
1438
  provide: L10N_PREFIX,
1402
1439
  useValue: 'kendo.pivotgrid'
1403
1440
  }
1404
- ], 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: `
1441
+ ], viewQueries: [{ propertyName: "colHeadersTable", first: true, predicate: ["colHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "rowHeadersTable", first: true, predicate: ["rowHeadersTable"], descendants: true, read: ElementRef }, { propertyName: "valuesTable", first: true, predicate: ["valuesTable"], descendants: true, read: ElementRef }, { propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: `
1405
1442
  <ng-container kendoPivotGridLocalizedMessages
1406
1443
  i18n-loading="kendo.pivotgrid.loading|The loading text"
1407
1444
  loading="Loading"
@@ -1482,10 +1519,21 @@ PivotGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
1482
1519
  configuratorCancelButtonText="Cancel"
1483
1520
 
1484
1521
  i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
1485
- configuratorApplyButtonText="Apply"></ng-container>
1522
+ configuratorApplyButtonText="Apply"
1523
+
1524
+ i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
1525
+ configuratorEmptyRowsText="Select some fields to begin setup"
1526
+
1527
+ i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
1528
+ configuratorEmptyColumnsText="Select some fields to begin setup"
1529
+
1530
+ i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1531
+ configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
1486
1532
 
1487
1533
  <div #table class="k-pivotgrid">
1488
- <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
1534
+ <span class="k-pivotgrid-empty-cell">
1535
+ <span class="k-sr-only">{{messageFor('emptyCellLabel')}}</span>
1536
+ </span>
1489
1537
  <kendo-pivotgrid-table
1490
1538
  #colHeadersTable
1491
1539
  [colWidth]="columnHeadersWidth"
@@ -1617,10 +1665,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1617
1665
  configuratorCancelButtonText="Cancel"
1618
1666
 
1619
1667
  i18n-configuratorApplyButtonText="kendo.pivotgrid.configuratorApplyButtonText|The text content of the PivotGrid configurator configurator Apply button"
1620
- configuratorApplyButtonText="Apply"></ng-container>
1668
+ configuratorApplyButtonText="Apply"
1669
+
1670
+ i18n-configuratorEmptyRowsText="kendo.pivotgrid.configuratorEmptyRowsText|The text content of the PivotGrid configurator empty rows container"
1671
+ configuratorEmptyRowsText="Select some fields to begin setup"
1672
+
1673
+ i18n-configuratorEmptyColumnsText="kendo.pivotgrid.configuratorEmptyColumnsText|The text content of the PivotGrid configurator empty columns container"
1674
+ configuratorEmptyColumnsText="Select some fields to begin setup"
1675
+
1676
+ i18n-configuratorEmptyMeasuresText="kendo.pivotgrid.configuratorEmptyMeasuresText|The text content of the PivotGrid configurator empty measures container"
1677
+ configuratorEmptyMeasuresText="Select some fields to begin setup"></ng-container>
1621
1678
 
1622
1679
  <div #table class="k-pivotgrid">
1623
- <span class="k-pivotgrid-empty-cell" [attr.aria-label]="messageFor('emptyCellLabel')"></span>
1680
+ <span class="k-pivotgrid-empty-cell">
1681
+ <span class="k-sr-only">{{messageFor('emptyCellLabel')}}</span>
1682
+ </span>
1624
1683
  <kendo-pivotgrid-table
1625
1684
  #colHeadersTable
1626
1685
  [colWidth]="columnHeadersWidth"
@@ -1669,7 +1728,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1669
1728
  }
1670
1729
  `]
1671
1730
  }]
1672
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2.LocalizationService }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
1731
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: PivotGridDataService }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { type: i3.ScrollbarWidthService }]; }, propDecorators: { hostClass: [{
1673
1732
  type: HostBinding,
1674
1733
  args: ['class.k-d-flex']
1675
1734
  }, {
@@ -1711,6 +1770,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1711
1770
  type: Input
1712
1771
  }], columnHeadersWidth: [{
1713
1772
  type: Input
1773
+ }], navigable: [{
1774
+ type: Input
1714
1775
  }] } });
1715
1776
 
1716
1777
  /**
@@ -1782,6 +1843,11 @@ class PivotBaseBindingDirective {
1782
1843
  * 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.
1783
1844
  */
1784
1845
  this.configurationChange = new EventEmitter();
1846
+ /**
1847
+ * Fires each time when new data is loaded and transformed to show aggregated values.
1848
+ * The event fires upon initialization and on user interaction that changes the state of the PivotGrid.
1849
+ */
1850
+ this.dataLoaded = new EventEmitter();
1785
1851
  this.subs = new Subscription();
1786
1852
  }
1787
1853
  /**
@@ -1819,6 +1885,13 @@ class PivotBaseBindingDirective {
1819
1885
  this.loadData(state);
1820
1886
  });
1821
1887
  }));
1888
+ this.subs.add(this.dataService.valuesRows.subscribe((data) => {
1889
+ this.zone.run(() => {
1890
+ if (hasObservers(this.dataLoaded)) {
1891
+ this.dataLoaded.emit(data);
1892
+ }
1893
+ });
1894
+ }));
1822
1895
  this.dataService.directive = this;
1823
1896
  }
1824
1897
  ngOnDestroy() {
@@ -1862,7 +1935,7 @@ class PivotBaseBindingDirective {
1862
1935
  ;
1863
1936
  }
1864
1937
  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 });
1865
- 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 });
1938
+ PivotBaseBindingDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.16", type: PivotBaseBindingDirective, selector: "kendo-base-binding-directive", inputs: { columnAxes: "columnAxes", rowAxes: "rowAxes", measureAxes: "measureAxes" }, outputs: { expandChange: "expandChange", configurationChange: "configurationChange", dataLoaded: "dataLoaded" }, ngImport: i0 });
1866
1939
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: PivotBaseBindingDirective, decorators: [{
1867
1940
  type: Directive,
1868
1941
  args: [{
@@ -1878,6 +1951,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1878
1951
  type: Output
1879
1952
  }], configurationChange: [{
1880
1953
  type: Output
1954
+ }], dataLoaded: [{
1955
+ type: Output
1881
1956
  }] } });
1882
1957
 
1883
1958
  const dataField = 'aggregate';
@@ -155,6 +155,18 @@ export declare class PivotGridMessages extends ComponentMessages {
155
155
  * The text content of the PivotGrid configurator Apply button.
156
156
  */
157
157
  configuratorApplyButtonText: string;
158
+ /**
159
+ * The text content of the PivotGrid configurator empty rows container.
160
+ */
161
+ configuratorEmptyRowsText: string;
162
+ /**
163
+ * The text content of the PivotGrid configurator empty columns container.
164
+ */
165
+ configuratorEmptyColumnsText: string;
166
+ /**
167
+ * The text content of the PivotGrid configurator empty measures container.
168
+ */
169
+ configuratorEmptyMeasuresText: string;
158
170
  static ɵfac: i0.ɵɵFactoryDeclaration<PivotGridMessages, never>;
159
- static ɵdir: i0.ɵɵDirectiveDeclaration<PivotGridMessages, never, never, { "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"; }, {}, never>;
171
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PivotGridMessages, never, never, { "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"; }, {}, never>;
160
172
  }
package/main.d.ts CHANGED
@@ -14,4 +14,5 @@ export { DraggableChipDirective } from './configurator/draggable.directive';
14
14
  export { DropTargetDirective } from './configurator/drop-target.directive';
15
15
  export { ExpandChangeEvent } from './models/expanded-change-event';
16
16
  export { ConfigurationChangeEvent } from './models/configuration-change-event';
17
+ export { PivotDataRowItem } from './models/data-row-item';
17
18
  export { PivotGridAxis, PivotGridField, AxisDataItem, DimensionField, HierarchyField, KPIField, KPIMeasureField, LevelField, MeasureField, MemberField, PivotDataItem, sumAggregate, averageAggregate, minAggregate, maxAggregate, Aggregate, Dimension, Measure } from '@progress/kendo-pivotgrid-common';
@@ -0,0 +1,18 @@
1
+ /**-----------------------------------------------------------------------------------------
2
+ * Copyright © 2021 Progress Software Corporation. All rights reserved.
3
+ * Licensed under commercial license. See LICENSE.md in the project root for more information
4
+ *-------------------------------------------------------------------------------------------*/
5
+ import { PivotDataItem } from "@progress/kendo-pivotgrid-common";
6
+ /**
7
+ * The event data for DataLoadedEvent.
8
+ */
9
+ export interface PivotDataRowItem {
10
+ /**
11
+ * The row hierarchy.
12
+ */
13
+ row: string[];
14
+ /**
15
+ * The aggregated cell data.
16
+ */
17
+ cells: PivotDataItem[];
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-pivotgrid",
3
- "version": "0.2.0-dev.202208181339",
3
+ "version": "0.2.0-dev.202209020712",
4
4
  "description": "PivotGrid package for Angular",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",
@@ -21,9 +21,9 @@
21
21
  "friendlyName": "PivotGrid"
22
22
  },
23
23
  "dependencies": {
24
- "@progress/kendo-pivotgrid-common": "0.2.1",
25
- "@telerik/kendo-draggable": "^2.0.0",
24
+ "@progress/kendo-pivotgrid-common": "0.4.0",
26
25
  "@progress/kendo-schematics": "^3.0.0",
26
+ "@telerik/kendo-draggable": "^2.0.0",
27
27
  "tslib": "^2.3.1"
28
28
  },
29
29
  "peerDependencies": {