diff --git a/apps/demos/package.json b/apps/demos/package.json index 91d5b04827c4..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.10.3", + "axe-core": "catalog:", "babel-jest": "29.7.0", "consola": "3.2.3", "cookie-parser": "1.4.7", 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/package.json b/e2e/testcafe-devextreme/package.json index dc78d1c157d2..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.10.3", + "axe-core": "catalog:", "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/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); diff --git a/package.json b/package.json index 4cf0ccd7c3a5..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.10.3", + "axe-core": "catalog:", "cheerio": "1.0.0-rc.10", "codelyzer": "6.0.2", "devextreme-internal-tools": "catalog:tools", 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/packages/devextreme/package.json b/packages/devextreme/package.json index f7347d7154ce..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.10.3", + "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 bc67b58044c3..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,8 +208,8 @@ importers: specifier: 3.4.27 version: 3.4.27 axe-core: - specifier: 4.10.3 - version: 4.10.3 + specifier: 'catalog:' + version: 4.11.1 cheerio: specifier: 1.0.0-rc.10 version: 1.0.0-rc.10 @@ -601,7 +604,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 +636,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: 'catalog:' + version: 4.11.1 babel-jest: specifier: 29.7.0 version: 29.7.0(@babel/core@7.28.6) @@ -1075,7 +1078,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 +1089,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: 'catalog:' + version: 4.11.1 devextreme: specifier: workspace:* version: link:../../packages/devextreme/artifacts/npm/devextreme @@ -1392,7 +1395,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 +1421,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: 'catalog:' + version: 4.11.1 babel-plugin-add-module-exports: specifier: 1.0.4 version: 1.0.4 @@ -8223,8 +8226,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + axe-core@4.11.1: + resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==} engines: {node: '>=4'} axios@1.13.2: @@ -25665,9 +25668,9 @@ snapshots: dependencies: '@swc/counter': 0.1.3 - '@testcafe-community/axe@3.5.0(axe-core@4.10.3)(testcafe@3.7.2)': + '@testcafe-community/axe@3.5.0(axe-core@4.11.1)(testcafe@3.7.2)': dependencies: - axe-core: 4.10.3 + axe-core: 4.11.1 chalk: 2.4.2 testcafe: 3.7.2 @@ -27693,7 +27696,7 @@ snapshots: aws4@1.13.2: {} - axe-core@4.10.3: {} + axe-core@4.11.1: {} axios@1.13.2: dependencies: @@ -31173,7 +31176,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 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