diff --git a/projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.ts b/projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.ts index c99c34d3355..84ecfa540fc 100644 --- a/projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.ts +++ b/projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.ts @@ -79,6 +79,9 @@ export class IgxGridFilteringCellComponent implements AfterViewInit, OnInit, DoC return !this.column.grid.hasColumnLayouts ? this.column.isFirstPinned : false;; } + @HostBinding('attr.role') + public role = 'gridcell'; + private baseClass = 'igx-grid__filtering-cell-indicator'; constructor() { diff --git a/projects/igniteui-angular/grids/core/src/grouping/group-by-area.directive.ts b/projects/igniteui-angular/grids/core/src/grouping/group-by-area.directive.ts index e2beae8f486..507fbbf4217 100644 --- a/projects/igniteui-angular/grids/core/src/grouping/group-by-area.directive.ts +++ b/projects/igniteui-angular/grids/core/src/grouping/group-by-area.directive.ts @@ -37,6 +37,12 @@ export abstract class IgxGroupByAreaDirective { @HostBinding('class.igx-grid-grouparea') public defaultClass = true; + /** + * @hidden @internal + */ + @HostBinding('attr.role') + public role = 'presentation'; + /** The parent grid containing the component. */ @Input() public grid: FlatGridType | GridType; diff --git a/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.html b/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.html index 261a1f203d9..55f6674f551 100644 --- a/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.html +++ b/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.html @@ -1,4 +1,4 @@ -
@@ -16,7 +16,7 @@ @if (grid.rowDraggable) { -
+
@@ -25,7 +25,7 @@ @if (grid.showRowSelectors) { -
@@ -41,6 +41,7 @@ (click)="grid.toggleAll()" (pointerdown)="$event.preventDefault()" [hidden]="!grid.hasExpandableChildren || !grid.hasVisibleColumns" + role="columnheader" [ngClass]="{ 'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren, 'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible, @@ -55,7 +56,8 @@ @if (grid?.groupingExpressions?.length) {
+ (pointerdown)="$event.preventDefault()" + role="columnheader">
} diff --git a/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.ts b/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.ts index a8fef047e5b..414cc912696 100644 --- a/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.ts +++ b/projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.ts @@ -62,6 +62,12 @@ export class IgxGridHeaderRowComponent implements DoCheck { @Input() public unpinnedColumnCollection: ColumnType[] = []; + /** + * @hidden @internal + */ + @HostBinding('attr.role') + public role = 'rowgroup'; + @HostBinding('attr.aria-activedescendant') public get activeDescendant() { const activeElem = this.navigation.activeNode; diff --git a/projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.ts b/projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.ts index 57ea58f5add..7ed8cd6685c 100644 --- a/projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.ts +++ b/projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.ts @@ -88,6 +88,13 @@ export class IgxGridToolbarComponent implements OnDestroy { @HostBinding('class.igx-grid-toolbar') public defaultStyle = true; + /** + * @hidden + * @internal + */ + @HostBinding('attr.role') + public role = 'presentation'; + protected _grid: GridType; protected sub: Subscription; diff --git a/projects/igniteui-angular/grids/grid/src/grid-row-selection.spec.ts b/projects/igniteui-angular/grids/grid/src/grid-row-selection.spec.ts index 2e42b445360..d910a1e66af 100644 --- a/projects/igniteui-angular/grids/grid/src/grid-row-selection.spec.ts +++ b/projects/igniteui-angular/grids/grid/src/grid-row-selection.spec.ts @@ -2452,6 +2452,11 @@ describe('IgxGrid - Row Selection #grid', () => { expect(rowSelector.textContent).toBe('CUSTOM SELECTOR: 0'); expect(groupRowSelector.textContent).toBe('CUSTOM GROUP SELECTOR'); expect(headerSelector.textContent).toBe('CUSTOM HEADER SELECTOR'); + + // ARIA: row-selector wrappers must have the correct cell roles + expect(rowSelector.getAttribute('role')).toBe('gridcell'); + expect(groupRowSelector.getAttribute('role')).toBe('gridcell'); + expect(headerSelector.getAttribute('role')).toBe('columnheader'); }); }); }); diff --git a/projects/igniteui-angular/grids/grid/src/grid-row.component.html b/projects/igniteui-angular/grids/grid/src/grid-row.component.html index 5ef9a3af0ea..3804d9bbfdd 100644 --- a/projects/igniteui-angular/grids/grid/src/grid-row.component.html +++ b/projects/igniteui-angular/grids/grid/src/grid-row.component.html @@ -7,12 +7,12 @@ @if (rowDraggable) { -
+
} @if (this.showRowSelectors) { -
+
diff --git a/projects/igniteui-angular/grids/grid/src/grid.component.html b/projects/igniteui-angular/grids/grid/src/grid.component.html index c10caf47eae..cb41e274ad1 100644 --- a/projects/igniteui-angular/grids/grid/src/grid.component.html +++ b/projects/igniteui-angular/grids/grid/src/grid.component.html @@ -30,8 +30,8 @@ > -
-