Skip to content

Conversation

@siarhei-epam
Copy link
Collaborator

@siarhei-epam siarhei-epam commented Oct 13, 2025

Description:

This MR implements keyboard accessibility improvements for DataTable components to comply with WCAG 2.1.1 standards.

Changes Made

New Components:

  • ControlIcon - New accessible icon button component with keyboard support, tabIndex management, ARIA labeling, and focus-visible styling

Enhanced Components:

  • DataTableHeaderCell - Added keyboard handlers for sorting and filter dropdowns (Enter/Space keys), proper tabIndex management
  • KeyboardUtils - Enhanced handleDataSourceKeyboard function with better focus management and Enter key handling for virtual lists
  • DataPickerRow - Added proper focus handling
  • DataRowAddons - Added isFoldingFocusable prop for better focus control

Accessibility Standards Addressed

  • WCAG 2.1.1 Keyboard (Level A) - All functionality available via keyboard
  • WCAG 2.4.3 Focus Order (Level A) - Logical focus sequence
  • WCAG 4.1.2 Name, Role, Value (Level A) - Proper ARIA implementation

Implementation Notes

  1. The focus size on the LinkButton in pickers and filters extends beyond the container.
  2. When clearing a value in a single picker, the focus becomes invisible because the "Clear" button's state changes to disabled.
  3. It is difficult to implement folding by keyboard in tables that contain trees. When certain parts are folded, the focus shifts to the base because the DOM tree is recreated.
  4. Navigating through dates with arrow keys instead of the Tab key is difficult, time-consuming, and does not follow established patterns.
  5. The focus can sometimes be hidden behind fixed columns.

Issue link:

QA notes:

- Add ControlIcon component with keyboard navigation support
- Enhance DataTableHeaderCell with proper ARIA attributes and keyboard handlers
- Improve picker keyboard navigation and focus management
@siarhei-epam siarhei-epam self-assigned this Oct 13, 2025
@github-actions
Copy link

github-actions bot commented Oct 13, 2025

Generated by: track-bundle-size
Generated at: Mon, 27 Oct 2025 15:14:47 GMT
Bundle size diff (in kBytes). Not gzipped. Both CSS & JS included.
Baseline: v6.1.5-beta.1 (2025-07-15)
CI Status: ok

Module Baseline Size
(v6.1.5-beta.1)
Size Diff Within
Threshold
Threshold
(min - max)
templateApp 646.65 694.63 +47.98
js:+22.11
css:+25.87
🆗 581.98 - 711.31
@epam/app 5368.95 5584.05 +215.1
js:+189.12
css:+25.98
🆗 4832.06 - 5905.85
@epam/electric 5.03 5.04 +0.01
js:+0.01
css:0
🆗 4.53 - 5.54
@epam/promo 55.43 55.61 +0.18
js:+0.01
css:+0.18
🆗 49.89 - 60.97
@epam/uui-extra 0.21 0.21 0
js:0
css:0
🆗 0.19 - 0.23
@epam/loveship 92.62 92.82 +0.2
js:+0.02
css:+0.18
🆗 83.35 - 101.88
@epam/uui-components 251.75 252.23 +0.48
js:+0.13
css:+0.35
🆗 226.58 - 276.93
@epam/uui-core 325.46 324.36 -1.1
js:-1.1
css:0
🆗 292.92 - 358.01
@epam/uui-db 41.63 41.63 0
js:0
css:0
🆗 37.47 - 45.8
@epam/uui-docs 179.06 181.03 +1.97
js:+1.97
css:0
🆗 161.15 - 196.96
@epam/uui-editor 173.82 174.1 +0.28
js:+0.24
css:+0.04
🆗 156.44 - 191.2
@epam/uui-timeline 75.5 75.5 +0
js:+0
css:0
🆗 67.95 - 83.04
@epam/uui 503.4 529.24 +25.84
js:+17.61
css:+8.23
🆗 453.06 - 553.74
new sizes (raw)

To set the sizes as a new baseline, you can copy/paste next content to the uui-build/config/bundleSizeBaseLine.json and commit the file.

{
  "version": "6.3.1",
  "timestamp": "2025-10-27",
  "sizes": {
    "templateApp": {
      "css": 259422,
      "js": 451877
    },
    "@epam/app": {
      "css": 722404,
      "js": 4995665
    },
    "@epam/electric": {
      "css": 2275,
      "js": 2883
    },
    "@epam/promo": {
      "css": 47803,
      "js": 9145
    },
    "@epam/uui-extra": {
      "css": 0,
      "js": 213
    },
    "@epam/loveship": {
      "css": 55379,
      "js": 39666
    },
    "@epam/uui-components": {
      "css": 23582,
      "js": 234701
    },
    "@epam/uui-core": {
      "css": 0,
      "js": 332147
    },
    "@epam/uui-db": {
      "css": 0,
      "js": 42633
    },
    "@epam/uui-docs": {
      "css": 2156,
      "js": 183212
    },
    "@epam/uui-editor": {
      "css": 12953,
      "js": 165326
    },
    "@epam/uui-timeline": {
      "css": 2201,
      "js": 75109
    },
    "@epam/uui": {
      "css": 200377,
      "js": 341564
    }
  }
}

Generated by: generate-components-api
CI Status: ok

Total amount of exported types/props without JSDoc comments

Amount
Types 336 (+0) 🆗
Props 221 (+0) 🆗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants