@progress/kendo-angular-grid 7.0.1-dev.202205100915 → 7.1.0-dev.202205311232

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.
@@ -1515,6 +1515,8 @@ class NavigationService {
1515
1515
  this.mode = 0 /* Standby */;
1516
1516
  this.model = new NavigationModel();
1517
1517
  this.cursor = new NavigationCursor(this.model);
1518
+ this.pagerIsNavigable = false;
1519
+ this.tableIsNavigable = false;
1518
1520
  this.changes = this.cursor.changes;
1519
1521
  }
1520
1522
  set metadata(value) {
@@ -1527,6 +1529,12 @@ class NavigationService {
1527
1529
  get enabled() {
1528
1530
  return this.alive;
1529
1531
  }
1532
+ get pagerEnabled() {
1533
+ return this.alive && this.pagerIsNavigable;
1534
+ }
1535
+ get tableEnabled() {
1536
+ return this.alive && this.tableIsNavigable;
1537
+ }
1530
1538
  get activeCell() {
1531
1539
  if (this.mode !== 0 /* Standby */) {
1532
1540
  return this.cursor.cell;
@@ -1542,7 +1550,8 @@ class NavigationService {
1542
1550
  get activeDataRow() {
1543
1551
  return Math.max(0, this.activeRowIndex - this.meta.headerRows);
1544
1552
  }
1545
- init(meta) {
1553
+ init(meta, navigableOptions) {
1554
+ this.setActiveSections(navigableOptions);
1546
1555
  this.alive = true;
1547
1556
  this.focusRoot.active = true;
1548
1557
  this.metadata = meta;
@@ -1718,6 +1727,10 @@ class NavigationService {
1718
1727
  autoFocusCell(start, end) {
1719
1728
  return !this.meta.virtualColumns || end < this.meta.columns.lockedLeafColumns.length || this.columnViewport.intersects(start, end);
1720
1729
  }
1730
+ setActiveSections(navigableOptions) {
1731
+ this.pagerIsNavigable = navigableOptions.includes('pager');
1732
+ this.tableIsNavigable = navigableOptions.includes('table');
1733
+ }
1721
1734
  focusAdjacentCell(fwd, wrap) {
1722
1735
  this.focusCell();
1723
1736
  let success = fwd ? this.moveCursorFwd() : this.moveCursorBwd();
@@ -2822,7 +2835,7 @@ const packageMetadata = {
2822
2835
  name: '@progress/kendo-angular-grid',
2823
2836
  productName: 'Kendo UI for Angular',
2824
2837
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
2825
- publishDate: 1652174049,
2838
+ publishDate: 1654000234,
2826
2839
  version: '',
2827
2840
  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'
2828
2841
  };
@@ -7729,7 +7742,7 @@ class PagerComponent {
7729
7742
  return this._isFocused;
7730
7743
  }
7731
7744
  get pagerAriaLabel() {
7732
- return this.navigationService.enabled ? this.pagerLabel : undefined;
7745
+ return this.navigationService.pagerEnabled ? this.pagerLabel : undefined;
7733
7746
  }
7734
7747
  /**
7735
7748
  * @hidden
@@ -7742,7 +7755,7 @@ class PagerComponent {
7742
7755
  return this.focusGroup.isActive ? '0' : '-1';
7743
7756
  }
7744
7757
  onFocusIn(event) {
7745
- if (this.navigationService.enabled) {
7758
+ if (this.navigationService.pagerEnabled) {
7746
7759
  const shouldFocusPager = event.target === this.element.nativeElement;
7747
7760
  if (shouldFocusPager) {
7748
7761
  this._isFocused = true;
@@ -7754,18 +7767,18 @@ class PagerComponent {
7754
7767
  }
7755
7768
  }
7756
7769
  onFocusOut() {
7757
- if (this.navigationService.enabled) {
7770
+ if (this.navigationService.pagerEnabled) {
7758
7771
  this._isFocused = false;
7759
7772
  }
7760
7773
  }
7761
7774
  onEscape() {
7762
- if (this.navigationService.enabled) {
7775
+ if (this.navigationService.pagerEnabled) {
7763
7776
  this.focusRoot.deactivate();
7764
7777
  this.element.nativeElement.focus();
7765
7778
  }
7766
7779
  }
7767
7780
  onEnter(event) {
7768
- if (this.navigationService.enabled && event.target === this.element.nativeElement) {
7781
+ if (this.navigationService.pagerEnabled && event.target === this.element.nativeElement) {
7769
7782
  this.focusRoot.activate();
7770
7783
  this.focusFirstElement();
7771
7784
  }
@@ -7807,7 +7820,7 @@ class PagerComponent {
7807
7820
  }
7808
7821
  ngOnInit() {
7809
7822
  this.subscriptions.add(this.pagerContext.pageChange.subscribe(this.changePage.bind(this)));
7810
- if (this.navigationService.enabled) {
7823
+ if (this.navigationService.pagerEnabled) {
7811
7824
  this.focusRoot.deactivate();
7812
7825
  }
7813
7826
  }
@@ -7860,7 +7873,7 @@ class PagerComponent {
7860
7873
  this.renderer.removeClass(element, 'k-pager-md');
7861
7874
  }
7862
7875
  shouldTriggerPageChange(target, condition) {
7863
- return this.navigationService.enabled &&
7876
+ return this.navigationService.pagerEnabled &&
7864
7877
  target === this.element.nativeElement &&
7865
7878
  condition;
7866
7879
  }
@@ -7896,7 +7909,7 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
7896
7909
  useClass: FocusGroup
7897
7910
  }], usesOnChanges: true, ngImport: i0, template: `
7898
7911
  <div
7899
- *ngIf="navigationService.enabled"
7912
+ *ngIf="navigationService.pagerEnabled"
7900
7913
  class="k-sr-only"
7901
7914
  [tabindex]="focusTrapTabIndex"
7902
7915
  [attr.aria-hidden]="true"
@@ -7923,7 +7936,7 @@ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
7923
7936
  ></kendo-pager-page-sizes>
7924
7937
  </ng-container>
7925
7938
  <div
7926
- *ngIf="navigationService.enabled"
7939
+ *ngIf="navigationService.pagerEnabled"
7927
7940
  class="k-sr-only"
7928
7941
  [tabindex]="focusTrapTabIndex"
7929
7942
  [attr.aria-hidden]="true"
@@ -7949,7 +7962,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
7949
7962
  }],
7950
7963
  template: `
7951
7964
  <div
7952
- *ngIf="navigationService.enabled"
7965
+ *ngIf="navigationService.pagerEnabled"
7953
7966
  class="k-sr-only"
7954
7967
  [tabindex]="focusTrapTabIndex"
7955
7968
  [attr.aria-hidden]="true"
@@ -7976,7 +7989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
7976
7989
  ></kendo-pager-page-sizes>
7977
7990
  </ng-container>
7978
7991
  <div
7979
- *ngIf="navigationService.enabled"
7992
+ *ngIf="navigationService.pagerEnabled"
7980
7993
  class="k-sr-only"
7981
7994
  [tabindex]="focusTrapTabIndex"
7982
7995
  [attr.aria-hidden]="true"
@@ -8750,7 +8763,6 @@ const localizeOperators = operators => localization => Object.keys(operators).ma
8750
8763
  }));
8751
8764
  /**
8752
8765
  * An abstract base class for the filter-cell component ([see example]({% slug reusablecustomfilters_grid %}#toc-filter-row)).
8753
- * @hidden
8754
8766
  */
8755
8767
  class BaseFilterCellComponent {
8756
8768
  constructor(filterService) {
@@ -10974,7 +10986,7 @@ class FilterMenuComponent {
10974
10986
  toggle(anchor, template) {
10975
10987
  this.popupRef = this.popupService.open(anchor, template, this.popupRef);
10976
10988
  if (!this.popupRef) {
10977
- if (this.navigationService.enabled) {
10989
+ if (this.navigationService.tableEnabled) {
10978
10990
  this.navigationService.focusCell(0, this.column.leafIndex);
10979
10991
  }
10980
10992
  else {
@@ -10985,7 +10997,7 @@ class FilterMenuComponent {
10985
10997
  }
10986
10998
  close() {
10987
10999
  this.popupService.destroy();
10988
- if (this.navigationService.enabled) {
11000
+ if (this.navigationService.tableEnabled) {
10989
11001
  this.navigationService.focusCell(0, this.column.leafIndex);
10990
11002
  }
10991
11003
  else {
@@ -12559,7 +12571,7 @@ class ColumnMenuComponent {
12559
12571
  this.expandedPosition = this.getExpandedState(this.settings.setColumnPosition);
12560
12572
  this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);
12561
12573
  if (!this.popupRef) {
12562
- if (this.navigationService.enabled) {
12574
+ if (this.navigationService.tableEnabled) {
12563
12575
  this.navigationService.focusCell(0, this.column.leafIndex);
12564
12576
  }
12565
12577
  else {
@@ -12573,7 +12585,7 @@ class ColumnMenuComponent {
12573
12585
  close() {
12574
12586
  this.popupService.destroy();
12575
12587
  this.popupRef = null;
12576
- if (this.navigationService.enabled) {
12588
+ if (this.navigationService.tableEnabled) {
12577
12589
  this.navigationService.focusCell(0, this.column.leafIndex);
12578
12590
  }
12579
12591
  else {
@@ -13489,13 +13501,13 @@ class LogicalCellDirective {
13489
13501
  return this.logicalColIndex + 1;
13490
13502
  }
13491
13503
  ngOnInit() {
13492
- if (!this.navigationService.enabled) {
13504
+ if (!this.navigationService.tableEnabled) {
13493
13505
  return;
13494
13506
  }
13495
13507
  this.navigationChange = this.navigationService.changes.subscribe((e) => this.onNavigationChange(e));
13496
13508
  }
13497
13509
  ngDoCheck() {
13498
- if (!this.navigationService.enabled || this.logicalColIndex === -1) {
13510
+ if (!this.navigationService.tableEnabled || this.logicalColIndex === -1) {
13499
13511
  return;
13500
13512
  }
13501
13513
  if (this.cellContext) {
@@ -13504,7 +13516,7 @@ class LogicalCellDirective {
13504
13516
  this.registerNoChanges();
13505
13517
  }
13506
13518
  ngOnChanges(changes) {
13507
- if (!this.navigationService.enabled) {
13519
+ if (!this.navigationService.tableEnabled) {
13508
13520
  return;
13509
13521
  }
13510
13522
  const keys = Object.keys(changes);
@@ -14717,21 +14729,11 @@ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
14717
14729
  [logicalSlaveCellsCount]="unlockedColumnsCount"
14718
14730
  ></tr>
14719
14731
  </ng-container>
14720
- `, isInline: true, styles: ["\n .k-column-resizer {\n cursor: col-resize;\n display: block;\n height: 1000%;\n position: absolute;\n top: 0;\n width: .5em;\n }\n "], components: [{ type: FilterMenuComponent, selector: "kendo-grid-filter-menu", inputs: ["column", "filter", "tabIndex"] }, { type: ColumnMenuComponent, selector: "kendo-grid-column-menu", inputs: ["standalone", "column", "settings", "sort", "filter", "sortable", "columnMenuTemplate", "tabIndex"] }, { type: FilterRowComponent, selector: "[kendoGridFilterRow]", inputs: ["columns", "filter", "groups", "detailTemplate", "logicalRowIndex", "lockedColumnsCount"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i1$1.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: ColumnHandleDirective, selector: "[kendoGridColumnHandle]", inputs: ["columns", "column"] }] });
14732
+ `, isInline: true, components: [{ type: FilterMenuComponent, selector: "kendo-grid-filter-menu", inputs: ["column", "filter", "tabIndex"] }, { type: ColumnMenuComponent, selector: "kendo-grid-column-menu", inputs: ["standalone", "column", "settings", "sort", "filter", "sortable", "columnMenuTemplate", "tabIndex"] }, { type: FilterRowComponent, selector: "[kendoGridFilterRow]", inputs: ["columns", "filter", "groups", "detailTemplate", "logicalRowIndex", "lockedColumnsCount"] }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: LogicalRowDirective, selector: "[kendoGridLogicalRow]", inputs: ["logicalRowIndex", "logicalSlaveRow", "logicalCellsCount", "logicalSlaveCellsCount", "dataRowIndex", "dataItem"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: LogicalCellDirective, selector: "[kendoGridLogicalCell]", inputs: ["logicalColIndex", "logicalRowIndex", "logicalSlaveCell", "colIndex", "colSpan", "rowSpan", "groupItem", "dataRowIndex", "dataItem", "detailExpandCell", "headerLabelText"] }, { type: DropTargetDirective, selector: "[kendoDropTarget]", inputs: ["context"], outputs: ["enter", "leave", "drop"] }, { type: i1$1.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: DraggableColumnDirective, selector: "[kendoDraggableColumn]", inputs: ["context", "enableDrag"], outputs: ["drag"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: TemplateContextDirective, selector: "[templateContext]", inputs: ["templateContext"] }, { type: SelectAllCheckboxDirective, selector: "[kendoGridSelectAllCheckbox]", inputs: ["state"], outputs: ["selectAllChange"] }, { type: FocusableDirective, selector: "[kendoGridFocusable],\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n ", inputs: ["kendoGridFocusable"] }, { type: ColumnHandleDirective, selector: "[kendoGridColumnHandle]", inputs: ["columns", "column"] }] });
14721
14733
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: HeaderComponent, decorators: [{
14722
14734
  type: Component,
14723
14735
  args: [{
14724
14736
  selector: '[kendoGridHeader]',
14725
- styles: [`
14726
- .k-column-resizer {
14727
- cursor: col-resize;
14728
- display: block;
14729
- height: 1000%;
14730
- position: absolute;
14731
- top: 0;
14732
- width: .5em;
14733
- }
14734
- `],
14735
14737
  template: `
14736
14738
  <ng-container>
14737
14739
  <tr *ngFor="let i of columnLevels; let levelIndex = index"
@@ -17309,7 +17311,7 @@ class ListComponent {
17309
17311
  }
17310
17312
  }
17311
17313
  resetNavigationViewport() {
17312
- if (!this.container || !this.navigationService.enabled ||
17314
+ if (!this.container || !this.navigationService.tableEnabled ||
17313
17315
  !this.navigationService.needsViewport() || this.data.length === 0) {
17314
17316
  return;
17315
17317
  }
@@ -18271,11 +18273,6 @@ class GridComponent {
18271
18273
  * By default, grouping is disabled ([see example]({% slug groupingbasics_grid %})).
18272
18274
  */
18273
18275
  this.groupable = false;
18274
- /**
18275
- * If set to `true`, the user can use dedicated shortcuts to interact with the Grid.
18276
- * By default, navigation is disabled and the Grid content is accessible in the normal tab sequence.
18277
- */
18278
- this.navigable = false;
18279
18276
  /**
18280
18277
  * Indicates whether the Grid columns will be resized during initialization so that
18281
18278
  * they fit their headers and row content. Defaults to `false`.
@@ -18451,6 +18448,7 @@ class GridComponent {
18451
18448
  this.cachedWindowWidth = 0;
18452
18449
  this._rowSelected = null;
18453
18450
  this._cellSelected = null;
18451
+ this._navigable = [];
18454
18452
  this.rtl = false;
18455
18453
  this._rowClass = () => null;
18456
18454
  validatePackage(packageMetadata);
@@ -18582,6 +18580,21 @@ class GridComponent {
18582
18580
  get marqueeSelection() {
18583
18581
  return this.selectionService.enableMarquee || this.cellSelectionService.enableMarquee;
18584
18582
  }
18583
+ /**
18584
+ * If set to `true`, the user can use dedicated shortcuts to interact with the Grid.
18585
+ * By default, navigation is disabled and the Grid content is accessible in the normal tab sequence.
18586
+ * To enable navigation through separate Grid sections only, provide a [`GridNavigableSection`]({% slug api_grid_gridnavigablesection %}) array.
18587
+ */
18588
+ set navigable(value) {
18589
+ if (typeof value === 'boolean') {
18590
+ this._navigable = value ? ['table', 'pager'] : [];
18591
+ return;
18592
+ }
18593
+ this._navigable = value;
18594
+ }
18595
+ get navigable() {
18596
+ return this._navigable;
18597
+ }
18585
18598
  /**
18586
18599
  * @hidden
18587
18600
  *
@@ -18805,6 +18818,9 @@ class GridComponent {
18805
18818
  get ariaColCount() {
18806
18819
  return this.columnsContainer.leafColumnsToRender.length;
18807
18820
  }
18821
+ get navigation() {
18822
+ return this.navigationService;
18823
+ }
18808
18824
  get isVirtual() {
18809
18825
  return this.scrollable === 'virtual';
18810
18826
  }
@@ -19000,6 +19016,16 @@ class GridComponent {
19000
19016
  if (isChanged$1('groupable', changes, true)) {
19001
19017
  this.groupable = changes.groupable.currentValue;
19002
19018
  }
19019
+ if (isChanged$1('navigable', changes, true)) {
19020
+ if (this.navigationService.enabled) {
19021
+ this.navigationService.setActiveSections(this.navigable);
19022
+ }
19023
+ else {
19024
+ if (this.navigable.length) {
19025
+ this.navigationService.init(this.navigationMetadata(), this.navigable);
19026
+ }
19027
+ }
19028
+ }
19003
19029
  }
19004
19030
  ngAfterViewInit() {
19005
19031
  this.attachScrollSync();
@@ -19019,8 +19045,8 @@ class GridComponent {
19019
19045
  this.columnsChangeSubscription = this.columns.changes.subscribe(() => this.verifySettings());
19020
19046
  }
19021
19047
  ngOnInit() {
19022
- if (this.navigable) {
19023
- this.navigationService.init(this.navigationMetadata());
19048
+ if (this.navigable.length) {
19049
+ this.navigationService.init(this.navigationMetadata(), this.navigable);
19024
19050
  }
19025
19051
  }
19026
19052
  ngOnDestroy() {
@@ -19981,8 +20007,8 @@ class GridComponent {
19981
20007
  this.columnResize.emit(args);
19982
20008
  }
19983
20009
  assertNavigable() {
19984
- if (isDevMode() && !this.navigable) {
19985
- throw new Error('The Grid should be configured as [navigable]="true" to control focus');
20010
+ if (isDevMode() && !this.navigationService.enabled) {
20011
+ throw new Error('The Grid should be configured as navigable to control focus');
19986
20012
  }
19987
20013
  }
19988
20014
  navigationMetadata() {
@@ -20348,8 +20374,8 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
20348
20374
  <kendo-grid-toolbar class="k-toolbar k-grid-toolbar" *ngIf="showTopToolbar" position="top"></kendo-grid-toolbar>
20349
20375
  <kendo-pager
20350
20376
  *ngIf="showTopPager"
20351
- [tabindex]="navigable ? '0' : '-1'"
20352
- [attr.role]="navigable ? 'navigation' : undefined"
20377
+ [tabindex]="navigation.pagerEnabled ? '0' : '-1'"
20378
+ [attr.role]="navigation.pagerEnabled ? 'application' : undefined"
20353
20379
  class="k-grid-pager-top"
20354
20380
  [template]="pagerTemplate"
20355
20381
  [pageSize]="pageSize"
@@ -20403,7 +20429,7 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
20403
20429
  [columnMenuTemplate]="columnMenuTemplate"
20404
20430
  [totalColumnsCount]="leafColumns.length"
20405
20431
  [detailTemplate]="detailTemplate"
20406
- [tabIndex]="navigable ? '-1' : '0'">
20432
+ [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
20407
20433
  </thead>
20408
20434
  </table>
20409
20435
  </div><div #header class="k-grid-header-wrap" role="presentation" data-scrollable
@@ -20434,7 +20460,7 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
20434
20460
  [lockedColumnsCount]="lockedLeafColumns.length"
20435
20461
  [totalColumnsCount]="leafColumns.length"
20436
20462
  [detailTemplate]="detailTemplate"
20437
- [tabIndex]="navigable ? '-1' : '0'">
20463
+ [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
20438
20464
  </thead>
20439
20465
  </table>
20440
20466
  <div *ngIf="virtualColumns" class="k-width-container" role="presentation">
@@ -20539,7 +20565,7 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
20539
20565
  [columnMenu]="columnMenuOptions"
20540
20566
  [columnMenuTemplate]="columnMenuTemplate"
20541
20567
  [detailTemplate]="detailTemplate"
20542
- [tabIndex]="navigable ? '-1' : '0'">
20568
+ [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
20543
20569
  </thead>
20544
20570
  <tbody kendoGridTableBody
20545
20571
  [isLoading]="loading"
@@ -20573,8 +20599,8 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
20573
20599
  </div>
20574
20600
  <kendo-pager
20575
20601
  *ngIf="showBottomPager"
20576
- [tabindex]="navigable ? '0' : '-1'"
20577
- [attr.role]="navigable ? 'navigation' : undefined"
20602
+ [tabindex]="navigation.pagerEnabled ? '0' : '-1'"
20603
+ [attr.role]="navigation.pagerEnabled ? 'application' : undefined"
20578
20604
  [template]="pagerTemplate"
20579
20605
  [pageSize]="pageSize"
20580
20606
  [total]="view.total"
@@ -20583,7 +20609,7 @@ GridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
20583
20609
  (pageChange)="notifyPageChange('pager', $event)">
20584
20610
  </kendo-pager>
20585
20611
  <kendo-grid-toolbar class="k-toolbar k-grid-toolbar k-grid-toolbar-bottom" *ngIf="showBottomToolbar" position="bottom"></kendo-grid-toolbar>
20586
- `, isInline: true, styles: [" .k-grid .k-grid-aria-root {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .k-grid .k-filter-row td {\n white-space: nowrap;\n }"], components: [{ type: ToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position"] }, { type: PagerComponent, selector: "kendo-pager", inputs: ["total", "skip", "pageSize", "options", "template"], outputs: ["pageChange"] }, { type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "groups"], outputs: ["change"] }, { type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate"] }, { type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "tabIndex"] }, { type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "stickyRowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex"] }, { type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "rowClass"] }, { type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { type: i1$1.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }], encapsulation: i0.ViewEncapsulation.None });
20612
+ `, isInline: true, components: [{ type: ToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position"] }, { type: PagerComponent, selector: "kendo-pager", inputs: ["total", "skip", "pageSize", "options", "template"], outputs: ["pageChange"] }, { type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "groups"], outputs: ["change"] }, { type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate"] }, { type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "tabIndex"] }, { type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "stickyRowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex"] }, { type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "data", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "showGroupFooters", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "rowClass"] }, { type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }], directives: [{ type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: TableDirective, selector: "table", inputs: ["locked", "virtualColumns"] }, { type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { type: i1$1.DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }], encapsulation: i0.ViewEncapsulation.None });
20587
20613
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: GridComponent, decorators: [{
20588
20614
  type: Component,
20589
20615
  args: [{
@@ -20632,19 +20658,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
20632
20658
  ContextService
20633
20659
  ],
20634
20660
  selector: 'kendo-grid',
20635
- styles: [
20636
- // Styles for backwards compatibility with kendo-theme-default@v2.46.0 and earlier.
20637
- ` .k-grid .k-grid-aria-root {
20638
- display: flex;
20639
- flex-direction: column;
20640
- flex: 1 1 auto;
20641
- overflow: hidden;
20642
- }
20643
-
20644
- .k-grid .k-filter-row td {
20645
- white-space: nowrap;
20646
- }`
20647
- ],
20648
20661
  template: `
20649
20662
  <ng-container kendoGridLocalizedMessages
20650
20663
  i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
@@ -20858,8 +20871,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
20858
20871
  <kendo-grid-toolbar class="k-toolbar k-grid-toolbar" *ngIf="showTopToolbar" position="top"></kendo-grid-toolbar>
20859
20872
  <kendo-pager
20860
20873
  *ngIf="showTopPager"
20861
- [tabindex]="navigable ? '0' : '-1'"
20862
- [attr.role]="navigable ? 'navigation' : undefined"
20874
+ [tabindex]="navigation.pagerEnabled ? '0' : '-1'"
20875
+ [attr.role]="navigation.pagerEnabled ? 'application' : undefined"
20863
20876
  class="k-grid-pager-top"
20864
20877
  [template]="pagerTemplate"
20865
20878
  [pageSize]="pageSize"
@@ -20913,7 +20926,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
20913
20926
  [columnMenuTemplate]="columnMenuTemplate"
20914
20927
  [totalColumnsCount]="leafColumns.length"
20915
20928
  [detailTemplate]="detailTemplate"
20916
- [tabIndex]="navigable ? '-1' : '0'">
20929
+ [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
20917
20930
  </thead>
20918
20931
  </table>
20919
20932
  </div><div #header class="k-grid-header-wrap" role="presentation" data-scrollable
@@ -20944,7 +20957,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
20944
20957
  [lockedColumnsCount]="lockedLeafColumns.length"
20945
20958
  [totalColumnsCount]="leafColumns.length"
20946
20959
  [detailTemplate]="detailTemplate"
20947
- [tabIndex]="navigable ? '-1' : '0'">
20960
+ [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
20948
20961
  </thead>
20949
20962
  </table>
20950
20963
  <div *ngIf="virtualColumns" class="k-width-container" role="presentation">
@@ -21049,7 +21062,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
21049
21062
  [columnMenu]="columnMenuOptions"
21050
21063
  [columnMenuTemplate]="columnMenuTemplate"
21051
21064
  [detailTemplate]="detailTemplate"
21052
- [tabIndex]="navigable ? '-1' : '0'">
21065
+ [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
21053
21066
  </thead>
21054
21067
  <tbody kendoGridTableBody
21055
21068
  [isLoading]="loading"
@@ -21083,8 +21096,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
21083
21096
  </div>
21084
21097
  <kendo-pager
21085
21098
  *ngIf="showBottomPager"
21086
- [tabindex]="navigable ? '0' : '-1'"
21087
- [attr.role]="navigable ? 'navigation' : undefined"
21099
+ [tabindex]="navigation.pagerEnabled ? '0' : '-1'"
21100
+ [attr.role]="navigation.pagerEnabled ? 'application' : undefined"
21088
21101
  [template]="pagerTemplate"
21089
21102
  [pageSize]="pageSize"
21090
21103
  [total]="view.total"
@@ -45,7 +45,6 @@ export declare const localizeOperators: (operators: any) => (localization: any)
45
45
  }[];
46
46
  /**
47
47
  * An abstract base class for the filter-cell component ([see example]({% slug reusablecustomfilters_grid %}#toc-filter-row)).
48
- * @hidden
49
48
  */
50
49
  export declare abstract class BaseFilterCellComponent implements AfterContentInit, OnDestroy {
51
50
  protected filterService: FilterService;
@@ -73,6 +73,7 @@ import { GroupRowArgs } from './grouping/group-rows-args.interface';
73
73
  import { CellLoadingTemplateDirective } from './rendering/cell-loading.template.directive';
74
74
  import { ContextService } from './common/provider.service';
75
75
  import { LoadingTemplateDirective } from './rendering/loading-template.directive';
76
+ import { GridNavigableSettings } from './navigation/navigable-settings';
76
77
  import * as i0 from "@angular/core";
77
78
  /**
78
79
  * Represents the Kendo UI Grid component for Angular.
@@ -306,14 +307,16 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
306
307
  /**
307
308
  * If set to `true`, the user can use dedicated shortcuts to interact with the Grid.
308
309
  * By default, navigation is disabled and the Grid content is accessible in the normal tab sequence.
310
+ * To enable navigation through separate Grid sections only, provide a [`GridNavigableSection`]({% slug api_grid_gridnavigablesection %}) array.
309
311
  */
310
- navigable: boolean;
312
+ set navigable(value: GridNavigableSettings);
313
+ get navigable(): GridNavigableSettings;
311
314
  /**
312
315
  * @hidden
313
316
  *
314
317
  * An alias for `navigable` for users who migrate from Kendo UI for jQuery.
315
318
  */
316
- set navigatable(value: boolean);
319
+ set navigatable(value: GridNavigableSettings);
317
320
  /**
318
321
  * Indicates whether the Grid columns will be resized during initialization so that
319
322
  * they fit their headers and row content. Defaults to `false`.
@@ -325,7 +328,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
325
328
  /**
326
329
  * @hidden
327
330
  */
328
- get navigatable(): boolean;
331
+ get navigatable(): GridNavigableSettings;
329
332
  /**
330
333
  * Defines a function that is executed for every data row in the component.
331
334
  *
@@ -598,6 +601,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
598
601
  get showGroupFooters(): boolean;
599
602
  get ariaRowCount(): number;
600
603
  get ariaColCount(): number;
604
+ get navigation(): NavigationService;
601
605
  private shouldGenerateColumns;
602
606
  private direction;
603
607
  private _sort;
@@ -615,6 +619,7 @@ export declare class GridComponent implements AfterContentInit, AfterViewInit, O
615
619
  private _customToolbarTemplate;
616
620
  private leafViewportColumns;
617
621
  private viewportColumns;
622
+ private _navigable;
618
623
  get isVirtual(): boolean;
619
624
  get isScrollable(): boolean;
620
625
  get visibleColumns(): QueryList<ColumnBase>;
package/main.d.ts CHANGED
@@ -145,6 +145,7 @@ export { ColumnReorderConfig } from './dragdrop/column-reorder-config';
145
145
  export { FocusableDirective } from './navigation/focusable.directive';
146
146
  export { NavigationCell } from './navigation/navigation-cell.interface';
147
147
  export { NavigationRow } from './navigation/navigation-row.interface';
148
+ export { GridNavigableSettings, GridNavigableSection } from './navigation/navigable-settings';
148
149
  export { ColumnMenuSettings } from './column-menu/column-menu-settings.interface';
149
150
  export { ColumnVisibilityChangeEvent } from './column-menu/column-visibility-change-event';
150
151
  export { ExpandableColumnMenuItem } from './column-menu/column-menu-expandable-item.interface';
@@ -0,0 +1,12 @@
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
+ * Represents the possible navigable sections of the Grid.
7
+ */
8
+ export declare type GridNavigableSection = 'pager' | 'table';
9
+ /**
10
+ * Represents the type of the Grid [`navigable`]({% slug api_grid_gridcomponent %}#toc-navigable) option.
11
+ */
12
+ export declare type GridNavigableSettings = boolean | GridNavigableSection[];
@@ -19,6 +19,7 @@ import { GroupsService } from '../grouping/groups.service';
19
19
  import { PagerContextService } from '../pager/pager-context.service';
20
20
  import { DetailsService } from '../rendering/details/details.service';
21
21
  import { ScrollRequestService } from '../scrolling/scroll-request.service';
22
+ import { GridNavigableSection } from './navigable-settings';
22
23
  import * as i0 from "@angular/core";
23
24
  /**
24
25
  * @hidden
@@ -50,6 +51,8 @@ export declare class NavigationService implements OnDestroy {
50
51
  set metadata(value: NavigationMetadata);
51
52
  get metadata(): NavigationMetadata;
52
53
  get enabled(): boolean;
54
+ get pagerEnabled(): boolean;
55
+ get tableEnabled(): boolean;
53
56
  get activeCell(): NavigationCell;
54
57
  get activeRow(): NavigationRow;
55
58
  viewport: NavigationViewport;
@@ -64,9 +67,11 @@ export declare class NavigationService implements OnDestroy {
64
67
  private subs;
65
68
  private pendingRowIndex;
66
69
  private virtualCell;
70
+ private pagerIsNavigable;
71
+ private tableIsNavigable;
67
72
  private get activeDataRow();
68
73
  constructor(zone: NgZone, domEvents: DomEventsService, pagerContextService: PagerContextService, scrollRequestService: ScrollRequestService, groupsService: GroupsService, detailsService: DetailsService, focusRoot: FocusRoot, editService: EditService, cd: ChangeDetectorRef, localization: LocalizationService, focusableParent: FocusableDirective);
69
- init(meta: NavigationMetadata): void;
74
+ init(meta: NavigationMetadata, navigableOptions: GridNavigableSection[]): void;
70
75
  ngOnDestroy(): void;
71
76
  registerCell(cell: LogicalCell): void;
72
77
  registerCellOnCurrentRow(cell: LogicalCell): void;
@@ -88,6 +93,7 @@ export declare class NavigationService implements OnDestroy {
88
93
  toggle(active: boolean): void;
89
94
  hasFocus(): boolean;
90
95
  autoFocusCell(start: number, end: number): boolean;
96
+ setActiveSections(navigableOptions: GridNavigableSection[]): void;
91
97
  private focusAdjacentCell;
92
98
  private enterCell;
93
99
  private leaveCell;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@progress/kendo-angular-grid",
3
- "version": "7.0.1-dev.202205100915",
3
+ "version": "7.1.0-dev.202205311232",
4
4
  "description": "Kendo UI Grid for Angular - high performance data grid with paging, filtering, virtualization, CRUD, and more.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Progress",