Skip to content

Toolbar: support keyboard navigation according to APG W3C#33578

Open
EugeniyKiyashko wants to merge 26 commits into
DevExpress:26_1from
EugeniyKiyashko:26_1_toolbar_kbn
Open

Toolbar: support keyboard navigation according to APG W3C#33578
EugeniyKiyashko wants to merge 26 commits into
DevExpress:26_1from
EugeniyKiyashko:26_1_toolbar_kbn

Conversation

@EugeniyKiyashko

Copy link
Copy Markdown
Contributor

No description provided.

@EugeniyKiyashko EugeniyKiyashko self-assigned this May 14, 2026
@EugeniyKiyashko EugeniyKiyashko force-pushed the 26_1_toolbar_kbn branch 2 times, most recently from 04d5b32 to e926260 Compare May 15, 2026 11:03
@github-actions github-actions Bot added the .d.ts label May 29, 2026
@EugeniyKiyashko EugeniyKiyashko force-pushed the 26_1_toolbar_kbn branch 3 times, most recently from 2a41600 to 6e0645a Compare June 1, 2026 12:30
@EugeniyKiyashko EugeniyKiyashko marked this pull request as ready for review June 10, 2026 20:55
Copilot AI review requested due to automatic review settings June 10, 2026 20:55
@EugeniyKiyashko EugeniyKiyashko requested review from a team as code owners June 10, 2026 20:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds APG/WAI-ARIA–style keyboard navigation (“roving tabindex”) to dxToolbar and its overflow menu, exposing a new allowKeyboardNavigation option (default true) across core, themes, and framework wrappers.

Changes:

  • Introduces allowKeyboardNavigation (default true) to enable roving-tabindex keyboard navigation in Toolbar + overflow menu, including focus restore behavior.
  • Implements new internal roving navigation utilities/controllers and updates Toolbar/DropDownMenu internals to support APG interactions.
  • Updates styling (focus outlines) and adjusts unit/e2e tests, snapshots, and demos (often opting out via allowKeyboardNavigation: false to keep legacy behavior where required).

Reviewed changes

Copilot reviewed 62 out of 70 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/devextreme/ts/dx.all.d.ts Adds allowKeyboardNavigation to public typings bundle.
packages/devextreme/testing/tests/DevExpress.ui/defaultOptions.tests.js Adds default-options coverage for Toolbar, including allowKeyboardNavigation.
packages/devextreme/testing/tests/DevExpress.ui.widgets/toolbar.tests.js Updates assertion messages impacted by focus changes.
packages/devextreme/testing/tests/DevExpress.ui.widgets/toolbar.menu.tests.js Removes/adjusts keyboard/focus-related menu tests for new navigation model.
packages/devextreme/testing/tests/DevExpress.ui.widgets/toolbar.disabled.tests.js Expands disabled-state tests to cover both allowKeyboardNavigation modes.
packages/devextreme/testing/tests/DevExpress.ui.widgets/toolbar.buttons.material.tests.js Adjusts Material rendering expectation to account for new horizontal margins.
packages/devextreme/testing/tests/DevExpress.ui.widgets/popup.tests.js Verifies Popup toolbars force allowKeyboardNavigation: false.
packages/devextreme/js/ui/toolbar.d.ts Adds allowKeyboardNavigation to dxToolbar options typing with default.
packages/devextreme/js/__internal/ui/toolbar/toolbar.utils.ts Refactors focus-target resolution and component instance lookup for roving support.
packages/devextreme/js/__internal/ui/toolbar/toolbar.ts Wires overflow-menu open-with-focus and updates tabindex refresh logic.
packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts Adds roving keyboard integration, focus handling hooks, and the new option’s default/behavior.
packages/devextreme/js/__internal/ui/toolbar/strategy/toolbar.singleline.ts Passes allowKeyboardNavigation to overflow menu and supports open-with-focus.
packages/devextreme/js/__internal/ui/toolbar/strategy/toolbar.multiline.ts Adds no-op overflow open hook for multiline strategy.
packages/devextreme/js/__internal/ui/toolbar/internal/toolbar.menu.ts Updates DropDownMenu to support roving focus in the overflow list + focus restoration.
packages/devextreme/js/__internal/ui/toolbar/internal/toolbar.menu.list.ts Implements roving navigation in the overflow list.
packages/devextreme/js/__internal/ui/toolbar/internal/roving.utils.ts New: shared helpers for roving tabindex, focus targets, and key handling.
packages/devextreme/js/__internal/ui/toolbar/internal/keyboard.navigation.ts New: roving tabindex controller (capture handler + focus restore).
packages/devextreme/js/__internal/ui/toolbar/constants.ts Adds shared constants/selectors/classes used by roving/focus logic.
packages/devextreme/js/__internal/ui/text_box/text_box.ts Exports TEXTBOX_CLASS constant for reuse.
packages/devextreme/js/__internal/ui/switch.ts Exports SWITCH_CLASS constant for reuse.
packages/devextreme/js/__internal/ui/popup/popup.ts Ensures embedded toolbars disable keyboard navigation by default.
packages/devextreme/js/__internal/ui/overlay/overlay.ts Exports OVERLAY_STACK for overlay-content containment checks.
packages/devextreme/js/__internal/ui/list/list.base.ts Exports LIST_ITEM_CLASS for styling/selection helpers.
packages/devextreme/js/__internal/ui/file_manager/ui.file_manager.toolbar.ts Removes now-unneeded eslint comments around setTimeout.
packages/devextreme/js/__internal/ui/drop_down_editor/drop_down_editor.ts Adjusts popup tab-cycling focus to use component focus targets.
packages/devextreme/js/__internal/ui/drop_down_button.ts Exports DROP_DOWN_BUTTON_CLASS constant for reuse.
packages/devextreme/js/__internal/ui/context_menu/menu_base.ts Exports menu CSS class constants for reuse.
packages/devextreme/js/__internal/ui/check_box/check_box.tsx Exports CHECK_BOX_CLASS and refactors class map usage.
packages/devextreme/js/__internal/ui/chat/message_box/chat_text_area.ts Disables toolbar APG navigation for chat textarea toolbar.
packages/devextreme/js/__internal/grids/new/grid_core/toolbar/snapshots/options.test.ts.snap Updates snapshots for new toolbar focus-mode class and tabindex changes.
packages/devextreme/js/__internal/grids/new/card_view/content_view/content/card/snapshots/card.test.tsx.snap Updates snapshots for new toolbar focus-mode class and tabindex changes.
packages/devextreme/js/__internal/core/widget/widget.ts Exports DISABLED_STATE_CLASS for roving utilities.
packages/devextreme/js/__internal/core/utils/m_public_component.ts Adds getComponentInstance helper for instance lookup from elements.
packages/devextreme-vue/src/toolbar.ts Exposes allowKeyboardNavigation in Vue wrapper props/emits.
packages/devextreme-scss/scss/widgets/material/toolbar/_mixins.scss Imports colors for focus outline usage.
packages/devextreme-scss/scss/widgets/material/toolbar/_index.scss Applies toolbar focus-outline mixin (Material).
packages/devextreme-scss/scss/widgets/material/dropDownMenu/_sizes.scss Adds Material dropdown menu section horizontal margin variable.
packages/devextreme-scss/scss/widgets/material/dropDownMenu/_index.scss Applies dropdownmenu focus-outline mixin (Material).
packages/devextreme-scss/scss/widgets/generic/toolbar/_mixins.scss Imports colors for focus outline usage.
packages/devextreme-scss/scss/widgets/generic/toolbar/_index.scss Applies toolbar focus-outline mixin (Generic).
packages/devextreme-scss/scss/widgets/generic/dropDownMenu/_sizes.scss Adds Generic dropdown menu section horizontal margin variable.
packages/devextreme-scss/scss/widgets/generic/dropDownMenu/_index.scss Applies dropdownmenu focus-outline mixin (Generic).
packages/devextreme-scss/scss/widgets/fluent/toolbar/_mixins.scss Imports colors for focus outline usage.
packages/devextreme-scss/scss/widgets/fluent/toolbar/_index.scss Applies toolbar focus-outline mixin (Fluent).
packages/devextreme-scss/scss/widgets/fluent/dropDownMenu/_index.scss Applies dropdownmenu focus-outline mixin (Fluent).
packages/devextreme-scss/scss/widgets/base/toolbar/_mixins.scss New: base mixin for toolbar focus-visible outline in focus mode.
packages/devextreme-scss/scss/widgets/base/toolbar/_index.scss Switches to shared base mixins import.
packages/devextreme-scss/scss/widgets/base/dropDownMenu/_mixins.scss New: base mixin for dropdownmenu focus-visible outline in focus mode.
packages/devextreme-scss/scss/widgets/base/dropDownMenu/_index.scss New: base dropdownmenu list structural styles.
packages/devextreme-angular/src/ui/toolbar/index.ts Exposes allowKeyboardNavigation Input/Output in Angular wrapper.
e2e/testcafe-devextreme/tests/scheduler/common/hotkeysBehaviour/hotkeysBehaviour.ts Opts Scheduler toolbars out of APG navigation for existing hotkey tests.
e2e/testcafe-devextreme/tests/scheduler/common/header/viewSwitcher.ts Opts Scheduler header toolbar out of APG navigation.
e2e/testcafe-devextreme/tests/navigation/toolbar/overflowMenu.ts Opts specific toolbar navigation tests out where legacy behavior is expected.
e2e/testcafe-devextreme/tests/navigation/toolbar/keyboard.ts New: e2e coverage for APG keyboard navigation and focus visuals.
e2e/testcafe-devextreme/tests/navigation/toolbar/keyboard.nonAPG.ts New: e2e coverage for legacy (non-APG) toolbar keyboard behavior.
e2e/testcafe-devextreme/tests/dataGrid/sticky/common/withGrouping.ts Disables APG navigation in DataGrid toolbars for drag/visual tests.
e2e/testcafe-devextreme/tests/dataGrid/common/keyboardNavigation/groupColumnReordering.visual.ts Disables APG navigation in DataGrid toolbars for keyboard/drag tests.
e2e/testcafe-devextreme/tests/dataGrid/common/exportButton.ts Disables APG navigation in DataGrid toolbars for export button tests.
e2e/testcafe-devextreme/tests/dataGrid/common/columnReordering/visual.ts Disables APG navigation in DataGrid toolbars for reordering visuals.
apps/demos/Demos/DataGrid/Toolbar/Vue/App.vue Updates demo to disable APG navigation via onToolbarPreparing.
apps/demos/Demos/DataGrid/Toolbar/ReactJs/App.js Updates demo to disable APG navigation via onToolbarPreparing.
apps/demos/Demos/DataGrid/Toolbar/React/App.tsx Updates demo to disable APG navigation via onToolbarPreparing.
apps/demos/Demos/DataGrid/Toolbar/jQuery/index.js Updates demo to disable APG navigation via onToolbarPreparing.
apps/demos/Demos/DataGrid/Toolbar/Angular/app/app.component.ts Updates demo to disable APG navigation via onToolbarPreparing.
apps/demos/Demos/DataGrid/Toolbar/Angular/app/app.component.html Wires onToolbarPreparing handler in Angular demo template.

Comment thread packages/devextreme/testing/tests/DevExpress.ui.widgets/toolbar.disabled.tests.js Outdated
Copilot AI review requested due to automatic review settings June 11, 2026 13:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 70 changed files in this pull request and generated 3 comments.

Comment thread packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts
Comment thread packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts
Copilot AI review requested due to automatic review settings June 12, 2026 08:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 62 out of 70 changed files in this pull request and generated 3 comments.

Comment thread packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts
Comment thread packages/devextreme/testing/tests/DevExpress.ui.widgets/toolbar.disabled.tests.js Outdated
Copilot AI review requested due to automatic review settings June 17, 2026 10:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 52 out of 75 changed files in this pull request and generated 2 comments.

Comment thread packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please recheck this case and 3 below - it seems the functionality changed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello, we found the reason, fix it and update etalons one more time, please, check it again

Copilot AI review requested due to automatic review settings June 17, 2026 14:23

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 53 out of 76 changed files in this pull request and generated 3 comments.

Comment thread packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts
Copilot AI review requested due to automatic review settings June 18, 2026 08:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 53 out of 76 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings June 18, 2026 09:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 52 out of 75 changed files in this pull request and generated 3 comments.

Comment thread packages/devextreme-angular/src/ui/toolbar/index.ts
Comment thread packages/devextreme-vue/src/toolbar.ts
Copilot AI review requested due to automatic review settings June 18, 2026 15:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 52 out of 75 changed files in this pull request and generated 3 comments.

Comment thread packages/devextreme/js/__internal/ui/toolbar/toolbar.base.ts
@Alyar666 Alyar666 requested review from Alyar666 and removed request for Alyar666 June 19, 2026 09:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants