From eae42fc2e92c77c126cedcb0565e964a78541999 Mon Sep 17 00:00:00 2001 From: Raushen Date: Thu, 29 Jan 2026 19:19:08 +0200 Subject: [PATCH 1/4] T1318244 --- e2e/testcafe-devextreme/package.json | 2 +- .../tests/accessibility/dataGrid/common.ts | 19 ++++++++++++++++-- .../grids/grid_core/views/m_rows_view.ts | 3 +-- pnpm-lock.yaml | 20 +++++++++++++++---- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/e2e/testcafe-devextreme/package.json b/e2e/testcafe-devextreme/package.json index dc78d1c157d2..1b46fec03789 100644 --- a/e2e/testcafe-devextreme/package.json +++ b/e2e/testcafe-devextreme/package.json @@ -11,7 +11,7 @@ "@babel/plugin-transform-runtime": "7.28.5", "@testcafe-community/axe": "3.5.0", "@types/jquery": "catalog:", - "axe-core": "4.10.3", + "axe-core": "4.11.1", "devextreme": "workspace:*", "devextreme-screenshot-comparer": "2.0.17", "devextreme-testcafe-models": "workspace:*", diff --git a/e2e/testcafe-devextreme/tests/accessibility/dataGrid/common.ts b/e2e/testcafe-devextreme/tests/accessibility/dataGrid/common.ts index 0e630c7c0f04..13d638637460 100644 --- a/e2e/testcafe-devextreme/tests/accessibility/dataGrid/common.ts +++ b/e2e/testcafe-devextreme/tests/accessibility/dataGrid/common.ts @@ -5,14 +5,26 @@ import { a11yCheck } from '../../../helpers/accessibility/utils'; import url from '../../../helpers/getPageUrl'; import { createWidget } from '../../../helpers/createWidget'; import { getData } from '../../dataGrid/helpers/generateDataSourceData'; -import { isMaterialBased } from '../../../helpers/themeUtils'; +import { isFluent } from '../../../helpers/themeUtils'; fixture.disablePageReloads`DataGrid - Common` .page(url(__dirname, '../../container.html')); const DATA_GRID_SELECTOR = '#container'; -const a11yCheckConfig = isMaterialBased() ? { runOnly: 'color-contrast' } : { }; +const a11yCheckConfig = isFluent() ? {} : { runOnly: 'color-contrast' }; + +test('Grid without config', async (t) => { + const dataGrid = new DataGrid(DATA_GRID_SELECTOR); + + await t + .expect(dataGrid.isReady()) + .ok(); + + await a11yCheck(t, a11yCheckConfig, DATA_GRID_SELECTOR); +}).before(async () => createWidget('dxDataGrid', { + dataSource: [], +})); test('Grid without data', async (t) => { const dataGrid = new DataGrid(DATA_GRID_SELECTOR); @@ -24,6 +36,9 @@ test('Grid without data', async (t) => { await a11yCheck(t, a11yCheckConfig, DATA_GRID_SELECTOR); }).before(async () => createWidget('dxDataGrid', { dataSource: [], + columns: [ + 'test', + ], })); test('Sorting and group panel', async (t) => { diff --git a/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts b/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts index 8841c184be0b..90320c2c1edd 100644 --- a/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts +++ b/packages/devextreme/js/__internal/grids/grid_core/views/m_rows_view.ts @@ -517,10 +517,9 @@ export class RowsView extends ColumnsView { } private _setGridRole($element: dxElementWrapper): void { - const hasData = !this._dataController?.isEmpty(); const gridRoleName = this._getGridRoleName(); - if ($element?.length && hasData) { + if ($element?.length) { this.setAria('role', gridRoleName, $element); } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc67b58044c3..68e51616f3a8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1075,7 +1075,7 @@ importers: version: 5.4.0(eslint@9.18.0(jiti@2.6.1)) '@testcafe-community/axe': specifier: 3.5.0 - version: 3.5.0(axe-core@4.10.3)(testcafe@3.7.2) + version: 3.5.0(axe-core@4.11.1)(testcafe@3.7.2) '@types/jquery': specifier: 'catalog:' version: 3.5.33 @@ -1086,8 +1086,8 @@ importers: specifier: 'catalog:' version: 8.52.0(eslint@9.18.0(jiti@2.6.1))(typescript@5.9.3) axe-core: - specifier: 4.10.3 - version: 4.10.3 + specifier: 4.11.1 + version: 4.11.1 devextreme: specifier: workspace:* version: link:../../packages/devextreme/artifacts/npm/devextreme @@ -8227,6 +8227,10 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} + axe-core@4.11.1: + resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} + engines: {node: '>=4'} + axios@1.13.2: resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} @@ -25671,6 +25675,12 @@ snapshots: chalk: 2.4.2 testcafe: 3.7.2 + '@testcafe-community/axe@3.5.0(axe-core@4.11.1)(testcafe@3.7.2)': + dependencies: + axe-core: 4.11.1 + chalk: 2.4.2 + testcafe: 3.7.2 + '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.28.6 @@ -27695,6 +27705,8 @@ snapshots: axe-core@4.10.3: {} + axe-core@4.11.1: {} + axios@1.13.2: dependencies: follow-redirects: 1.15.9(debug@4.4.3) @@ -31173,7 +31185,7 @@ snapshots: array-includes: 3.1.9 array.prototype.flatmap: 1.3.3 ast-types-flow: 0.0.8 - axe-core: 4.10.3 + axe-core: 4.11.1 axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 From bee89c2dff59aab19b0106558284f405875e83f7 Mon Sep 17 00:00:00 2001 From: Raushen Date: Fri, 30 Jan 2026 11:13:07 +0200 Subject: [PATCH 2/4] Turn on Grid Accessibility tests --- e2e/testcafe-devextreme/helpers/accessibility/test.ts | 6 +++--- .../tests/accessibility/treeList/common.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e/testcafe-devextreme/helpers/accessibility/test.ts b/e2e/testcafe-devextreme/helpers/accessibility/test.ts index 0a0a278a9516..b0ee0f853879 100644 --- a/e2e/testcafe-devextreme/helpers/accessibility/test.ts +++ b/e2e/testcafe-devextreme/helpers/accessibility/test.ts @@ -1,7 +1,7 @@ import { ElementContext } from 'axe-core'; import type { WidgetName } from 'devextreme-testcafe-models/types'; import { createWidget } from '../createWidget'; -import { isMaterialBased } from '../themeUtils'; +import { isFluent } from '../themeUtils'; import { a11yCheck, A11yCheckOptions } from './utils'; import { generateOptionMatrix, Options } from '../generateOptionMatrix'; @@ -16,9 +16,9 @@ export interface Configuration { export const defaultSelector = '#container'; const defaultOptions = {}; const defaultCreated = async () => {}; -const defaultA11yCheckConfig = isMaterialBased() ? { +const defaultA11yCheckConfig = isFluent() ? {} : { runOnly: 'color-contrast', -} : {}; +}; const getOptionConfigurations = ( options: Options | undefined, diff --git a/e2e/testcafe-devextreme/tests/accessibility/treeList/common.ts b/e2e/testcafe-devextreme/tests/accessibility/treeList/common.ts index ebe4740b21fe..3661148b3cc4 100644 --- a/e2e/testcafe-devextreme/tests/accessibility/treeList/common.ts +++ b/e2e/testcafe-devextreme/tests/accessibility/treeList/common.ts @@ -2,7 +2,7 @@ import TreeList from 'devextreme-testcafe-models/treeList'; import { a11yCheck } from '../../../helpers/accessibility/utils'; import url from '../../../helpers/getPageUrl'; import { createWidget } from '../../../helpers/createWidget'; -import { isMaterialBased } from '../../../helpers/themeUtils'; +import { isFluent } from '../../../helpers/themeUtils'; fixture.disablePageReloads`TreeList - a11y` .page(url(__dirname, '../../container.html')); @@ -27,7 +27,7 @@ function getData(rowCount: number): Record[] { return data; } -const a11yCheckConfig = isMaterialBased() ? { runOnly: 'color-contrast' } : {}; +const a11yCheckConfig = isFluent() ? {} : { runOnly: 'color-contrast' }; test('Search panel, filter panel, pager and selection', async (t) => { const treeList = new TreeList(TREE_LIST_SELECTOR); From b19587b945be54f1e41dfd66c3485132504ebda6 Mon Sep 17 00:00:00 2001 From: Raushen Date: Fri, 30 Jan 2026 14:49:53 +0200 Subject: [PATCH 3/4] Bump aXe --- apps/demos/package.json | 2 +- package.json | 2 +- packages/devextreme/package.json | 2 +- pnpm-lock.yaml | 28 ++++++++-------------------- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/apps/demos/package.json b/apps/demos/package.json index 91d5b04827c4..85aea9bdaeac 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -112,7 +112,7 @@ "@typescript-eslint/parser": "catalog:", "@vue/eslint-config-typescript": "12.0.0", "@vue/tsconfig": "0.7.0", - "axe-core": "4.10.3", + "axe-core": "4.11.1", "babel-jest": "29.7.0", "consola": "3.2.3", "cookie-parser": "1.4.7", diff --git a/package.json b/package.json index 4cf0ccd7c3a5..15576452e7e5 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@types/tar-fs": "2.0.4", "@types/yargs": "17.0.35", "@vue/shared": "3.4.27", - "axe-core": "4.10.3", + "axe-core": "4.11.1", "cheerio": "1.0.0-rc.10", "codelyzer": "6.0.2", "devextreme-internal-tools": "catalog:tools", diff --git a/packages/devextreme/package.json b/packages/devextreme/package.json index f7347d7154ce..2a8989450641 100644 --- a/packages/devextreme/package.json +++ b/packages/devextreme/package.json @@ -92,7 +92,7 @@ "@typescript-eslint/parser": "catalog:", "ast-types": "0.14.2", "autoprefixer": "10.4.23", - "axe-core": "4.10.3", + "axe-core": "4.11.1", "babel-plugin-add-module-exports": "1.0.4", "babel-plugin-inferno": "6.8.5", "cldr-core": "41.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68e51616f3a8..c7f7b0210aee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -205,8 +205,8 @@ importers: specifier: 3.4.27 version: 3.4.27 axe-core: - specifier: 4.10.3 - version: 4.10.3 + specifier: 4.11.1 + version: 4.11.1 cheerio: specifier: 1.0.0-rc.10 version: 1.0.0-rc.10 @@ -601,7 +601,7 @@ importers: version: 5.4.0(eslint@9.18.0(jiti@2.6.1)) '@testcafe-community/axe': specifier: 3.5.0 - version: 3.5.0(axe-core@4.10.3)(testcafe@3.7.2) + version: 3.5.0(axe-core@4.11.1)(testcafe@3.7.2) '@types/eslint': specifier: 8.56.12 version: 8.56.12 @@ -633,8 +633,8 @@ importers: specifier: 0.7.0 version: 0.7.0(typescript@5.9.3)(vue@3.4.27(typescript@5.9.3)) axe-core: - specifier: 4.10.3 - version: 4.10.3 + specifier: 4.11.1 + version: 4.11.1 babel-jest: specifier: 29.7.0 version: 29.7.0(@babel/core@7.28.6) @@ -1392,7 +1392,7 @@ importers: version: 5.4.0(eslint@9.18.0(jiti@2.6.1)) '@testcafe-community/axe': specifier: 3.5.0 - version: 3.5.0(axe-core@4.10.3)(testcafe@3.7.2) + version: 3.5.0(axe-core@4.11.1)(testcafe@3.7.2) '@types/enzyme': specifier: 3.10.19 version: 3.10.19 @@ -1418,8 +1418,8 @@ importers: specifier: 10.4.23 version: 10.4.23(postcss@8.4.38) axe-core: - specifier: 4.10.3 - version: 4.10.3 + specifier: 4.11.1 + version: 4.11.1 babel-plugin-add-module-exports: specifier: 1.0.4 version: 1.0.4 @@ -8223,10 +8223,6 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} - engines: {node: '>=4'} - axe-core@4.11.1: resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} engines: {node: '>=4'} @@ -25669,12 +25665,6 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@testcafe-community/axe@3.5.0(axe-core@4.10.3)(testcafe@3.7.2)': - dependencies: - axe-core: 4.10.3 - chalk: 2.4.2 - testcafe: 3.7.2 - '@testcafe-community/axe@3.5.0(axe-core@4.11.1)(testcafe@3.7.2)': dependencies: axe-core: 4.11.1 @@ -27703,8 +27693,6 @@ snapshots: aws4@1.13.2: {} - axe-core@4.10.3: {} - axe-core@4.11.1: {} axios@1.13.2: From f72670b0acb1d08ce78b5890413f53938214e18d Mon Sep 17 00:00:00 2001 From: Raushen Date: Fri, 30 Jan 2026 15:10:49 +0200 Subject: [PATCH 4/4] Move axe-core to the catalog --- apps/demos/package.json | 2 +- e2e/testcafe-devextreme/package.json | 2 +- package.json | 2 +- packages/devextreme/package.json | 2 +- pnpm-lock.yaml | 11 +++++++---- pnpm-workspace.yaml | 1 + 6 files changed, 12 insertions(+), 8 deletions(-) diff --git a/apps/demos/package.json b/apps/demos/package.json index 85aea9bdaeac..90e510c7f25f 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -112,7 +112,7 @@ "@typescript-eslint/parser": "catalog:", "@vue/eslint-config-typescript": "12.0.0", "@vue/tsconfig": "0.7.0", - "axe-core": "4.11.1", + "axe-core": "catalog:", "babel-jest": "29.7.0", "consola": "3.2.3", "cookie-parser": "1.4.7", diff --git a/e2e/testcafe-devextreme/package.json b/e2e/testcafe-devextreme/package.json index 1b46fec03789..b8df29a4ac61 100644 --- a/e2e/testcafe-devextreme/package.json +++ b/e2e/testcafe-devextreme/package.json @@ -11,7 +11,7 @@ "@babel/plugin-transform-runtime": "7.28.5", "@testcafe-community/axe": "3.5.0", "@types/jquery": "catalog:", - "axe-core": "4.11.1", + "axe-core": "catalog:", "devextreme": "workspace:*", "devextreme-screenshot-comparer": "2.0.17", "devextreme-testcafe-models": "workspace:*", diff --git a/package.json b/package.json index 15576452e7e5..d9c3f1367d06 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@types/tar-fs": "2.0.4", "@types/yargs": "17.0.35", "@vue/shared": "3.4.27", - "axe-core": "4.11.1", + "axe-core": "catalog:", "cheerio": "1.0.0-rc.10", "codelyzer": "6.0.2", "devextreme-internal-tools": "catalog:tools", diff --git a/packages/devextreme/package.json b/packages/devextreme/package.json index 2a8989450641..033dbac77f98 100644 --- a/packages/devextreme/package.json +++ b/packages/devextreme/package.json @@ -92,7 +92,7 @@ "@typescript-eslint/parser": "catalog:", "ast-types": "0.14.2", "autoprefixer": "10.4.23", - "axe-core": "4.11.1", + "axe-core": "catalog:", "babel-plugin-add-module-exports": "1.0.4", "babel-plugin-inferno": "6.8.5", "cldr-core": "41.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7f7b0210aee..d7a59a63ed43 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -76,6 +76,9 @@ catalogs: '@typescript-eslint/parser': specifier: 8.52.0 version: 8.52.0 + axe-core: + specifier: ^4.11.1 + version: 4.11.1 devexpress-diagram: specifier: 2.2.24 version: 2.2.24 @@ -205,7 +208,7 @@ importers: specifier: 3.4.27 version: 3.4.27 axe-core: - specifier: 4.11.1 + specifier: 'catalog:' version: 4.11.1 cheerio: specifier: 1.0.0-rc.10 @@ -633,7 +636,7 @@ importers: specifier: 0.7.0 version: 0.7.0(typescript@5.9.3)(vue@3.4.27(typescript@5.9.3)) axe-core: - specifier: 4.11.1 + specifier: 'catalog:' version: 4.11.1 babel-jest: specifier: 29.7.0 @@ -1086,7 +1089,7 @@ importers: specifier: 'catalog:' version: 8.52.0(eslint@9.18.0(jiti@2.6.1))(typescript@5.9.3) axe-core: - specifier: 4.11.1 + specifier: 'catalog:' version: 4.11.1 devextreme: specifier: workspace:* @@ -1418,7 +1421,7 @@ importers: specifier: 10.4.23 version: 10.4.23(postcss@8.4.38) axe-core: - specifier: 4.11.1 + specifier: 'catalog:' version: 4.11.1 babel-plugin-add-module-exports: specifier: 1.0.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9972c1f482bf..348cf1abb25e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,6 +6,7 @@ packages: - '!packages/sbom' catalog: + axe-core: ^4.11.1 inferno: ^8.2.3 inferno-hydrate: ^8.2.3 inferno-create-element: ^8.2.3