diff --git a/apps/demos/package.json b/apps/demos/package.json index 7822cce4f4d4..631da9272ba5 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -108,7 +108,7 @@ "@typescript-eslint/parser": "catalog:eslint8", "@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.6", 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 2e91f4b8ec4d..4b5bee02bbba 100644 --- a/e2e/testcafe-devextreme/package.json +++ b/e2e/testcafe-devextreme/package.json @@ -13,7 +13,7 @@ "@types/jquery": "3.5.29", "@typescript-eslint/eslint-plugin": "catalog:eslint8", "@typescript-eslint/parser": "catalog:eslint8", - "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 e75165175319..f666f24f5c51 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@types/tar-fs": "2.0.4", "@types/yargs": "17.0.32", "@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 866ec6065780..05f590ca9e63 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 8a30f1f04ef8..3d2f54372b53 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.21", - "axe-core": "4.10.3", + "axe-core": "catalog:", "babel-plugin-add-module-exports": "1.0.4", "babel-plugin-inferno": "6.8.3", "cldr-core": "41.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d891ce063613..b519b95b5b88 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,6 +24,9 @@ catalogs: '@typescript-eslint/parser': specifier: 8.23.0 version: 8.23.0 + axe-core: + specifier: ^4.11.1 + version: 4.11.1 devexpress-diagram: specifier: 2.2.24 version: 2.2.24 @@ -157,8 +160,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 @@ -556,7 +559,7 @@ importers: version: 5.0.5(rollup@4.22.4) '@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.2 version: 8.56.2 @@ -588,8 +591,8 @@ importers: specifier: ^0.7.0 version: 0.7.0(typescript@5.4.5)(vue@3.4.27(typescript@5.4.5)) 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.23.9) @@ -940,7 +943,7 @@ importers: version: 7.19.6(@babel/core@7.28.5) '@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: 3.5.29 version: 3.5.29 @@ -951,8 +954,8 @@ importers: specifier: catalog:eslint8 version: 5.62.0(eslint@8.56.0)(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 @@ -1257,7 +1260,7 @@ importers: version: 2.13.0(eslint@9.18.0(jiti@1.21.6))(typescript@4.9.5) '@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.18 version: 3.10.18 @@ -1283,8 +1286,8 @@ importers: specifier: 10.4.21 version: 10.4.21(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 @@ -7960,8 +7963,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'} axe-core@4.7.0: @@ -24760,16 +24763,16 @@ 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 '@testing-library/dom@10.4.0': dependencies: '@babel/code-frame': 7.27.1 - '@babel/runtime': 7.26.10 + '@babel/runtime': 7.28.6 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -26867,7 +26870,7 @@ snapshots: aws4@1.13.2: {} - axe-core@4.10.3: {} + axe-core@4.11.1: {} axe-core@4.7.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 63f7882f70b2..a57e837f006b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,6 +5,7 @@ packages: - 'packages/devextreme/artifacts/npm/devextreme-dist' catalog: + axe-core: ^4.11.1 inferno: ^8.2.3 inferno-hydrate: ^8.2.3 inferno-create-element: ^8.2.3