Accessibility conformance report
An accessibility conformance report for the OGE UI component suite, following the VPAT® 2.5 format and its WCAG 2.2 table. It is self-assessed by the maintainers from the automated tests named in the remarks; it is not a third-party audit. How the components get there is in the accessibility guide.
VPAT 2.5 WCAG 2.2 A / AA self-assessed
Report details
| Item | Value |
|---|---|
| Product | OGE UI — Angular and React component packages ( @oge-ui/* ) |
| Version | 1.1.3 |
| Report date | 2026-10-08 |
| Standard | WCAG 2.2, levels A and AA |
| Evaluation methods | Self-assessment from automated tests: axe-core over every docs page in both render layers (nightly) and in about 95 component specs (every pull request), keyboard and ARIA assertions in Playwright, emulated forced colours and reduced motion, colour contrast scans. No manual screen-reader test is recorded. |
| Scope | The components as shipped with their default, dark and high-contrast themes. Page-level criteria (titles, language, bypass blocks, navigation) belong to the application using them. |
| Other standards | The Revised Section 508 and EN 301 549 web chapters reference these same WCAG criteria and are not repeated here. |
Summary
| Conformance level | Criteria |
|---|---|
| Supports | 32 |
| Partially Supports | 6 |
| Does Not Support | 0 |
| Not Applicable | 17 |
Level A
| Criterion | Conformance level | Remarks and explanations |
|---|---|---|
| 1.1.1 Non-text Content | Supports | Icons are decorative ( aria-hidden ) or labelled; icon-only buttons take your label. Charts expose role="img" with a generated label, an accessible legend and a screen-reader data table of the plotted values. |
| 1.2.1 Audio-only and Video-only (Prerecorded) | Not Applicable | No component plays audio or video. |
| 1.2.2 Captions (Prerecorded) | Not Applicable | No component plays audio or video. |
| 1.2.3 Audio Description or Media Alternative (Prerecorded) | Not Applicable | No component plays audio or video. |
| 1.3.1 Info and Relationships | Supports | Grid, treegrid, listbox, tree, tab and menu roles with their owned and labelled relationships; form fields are labelled and errors referenced. Checked by the axe crawl ( wcag2a … wcag22aa , both layers). |
| 1.3.2 Meaningful Sequence | Supports | DOM order follows reading order; popups render after their trigger in the accessibility tree. |
| 1.3.3 Sensory Characteristics | Supports | Built-in messages name controls, never their shape or position. |
| 1.4.1 Use of Color | Partially Supports | Switch and selection states are not colour alone ( forced-colors.spec.ts ). Chart series are told apart by colour unless you set dash styles or markers; legends and tooltips name every series. |
| 1.4.2 Audio Control | Not Applicable | No component plays audio or video. |
| 2.1.1 Keyboard | Supports | Every family is operable from the keyboard, including the alternatives to dragging (grid, tree list, pivot, kanban, tile layout). Freehand drawing in the signature pad falls under the path-dependent exception. |
| 2.1.2 No Keyboard Trap | Supports | Modal dialogs contain focus by design and close with Escape; every popup returns focus to its trigger. |
| 2.1.4 Character Key Shortcuts | Supports | Single-character shortcuts exist only on the focused BPMN canvas ( C , A , F , H , L , S ), which the criterion allows. |
| 2.2.1 Timing Adjustable | Supports | Toast timers are configurable and pause on hover, on focus and while the tab is hidden; hold-to-confirm durations are configurable. |
| 2.2.2 Pause, Stop, Hide | Supports | Carousel auto-rotation always shows a rotation control, pauses on hover, stops on keyboard focus and starts stopped under reduced motion. |
| 2.3.1 Three Flashes or Below Threshold | Supports | Nothing flashes. |
| 2.4.1 Bypass Blocks | Not Applicable | A page-level requirement the host application meets; the components do not prevent it. |
| 2.4.2 Page Titled | Not Applicable | A page-level requirement the host application meets; the components do not prevent it. |
| 2.4.3 Focus Order | Supports | Composite widgets use one roving tab stop; popups move focus in and back out in order. |
| 2.4.4 Link Purpose (In Context) | Supports | Breadcrumbs, menus and pagination render the link text you supply; pagination links are labelled. |
| 2.5.1 Pointer Gestures | Supports | No multipoint or path-based gesture is required: swipes (carousel, action sheet) have button alternatives. |
| 2.5.2 Pointer Cancellation | Supports | Activation happens on release; drags cancel with Escape or on pointercancel . |
| 2.5.3 Label in Name | Supports | Visible labels are the accessible names. Not checked by a dedicated test. |
| 2.5.4 Motion Actuation | Not Applicable | No component responds to device motion. |
| 3.1.1 Language of Page | Not Applicable | A page-level requirement the host application meets; the components do not prevent it. |
| 3.2.1 On Focus | Supports | Focus never commits a value or navigates. |
| 3.2.2 On Input | Supports | Choosing a value commits it to the component only; navigation on change is the application’s decision. |
| 3.2.6 Consistent Help | Not Applicable | A page-level requirement the host application meets; the components do not prevent it. |
| 3.3.1 Error Identification | Supports | Invalid cells and fields set aria-invalid , reference the message with aria-errormessage / aria-describedby and announce it ( grid-announcements.spec.ts ). |
| 3.3.2 Labels or Instructions | Supports | Editors render a visible or floating label; filter-row editors are labelled by their column. |
| 3.3.7 Redundant Entry | Not Applicable | A process-level requirement of the application. |
| 4.1.2 Name, Role, Value | Supports | Checked by axe in every component spec and the nightly crawl, and by explicit ARIA assertions in the keyboard specs. |
Level AA
| Criterion | Conformance level | Remarks and explanations |
|---|---|---|
| 1.2.4 Captions (Live) | Not Applicable | No component plays audio or video. |
| 1.2.5 Audio Description (Prerecorded) | Not Applicable | No component plays audio or video. |
| 1.3.4 Orientation | Supports | No orientation lock; popups can switch to phone presentations ( adaptiveMode ). |
| 1.3.5 Identify Input Purpose | Supports | Text boxes forward autocomplete ; the OTP input sets autocomplete="one-time-code" . Setting the right token is yours. |
| 1.4.3 Contrast (Minimum) | Supports | Default, dark and high-contrast themes: component text is scanned on every pull request ( contrast.spec.ts , themes.spec.ts , high-contrast.spec.ts ) and every page nightly. Tailwind and Bootstrap bridge themes take your palette. |
| 1.4.4 Resize Text | Supports | Browser zoom to 200 % scales the components. Not covered by an automated test. |
| 1.4.5 Images of Text | Supports | All text, chart labels included, is real text. |
| 1.4.10 Reflow | Supports | Editors and layout components fit 320 px; grids, pivot, scheduler and Gantt are two-dimensional content the criterion exempts and scroll inside themselves. Phone-width checks run on the docs pages. |
| 1.4.11 Non-text Contrast | Partially Supports | The focus ring and selected states are tested to be present, also under forced colours; borders and icons are not measured against 3:1 by any check. |
| 1.4.12 Text Spacing | Partially Supports | Not tested. Virtualized rows have a fixed height, so increased line height can clip cell text unless autoRowHeight is on. |
| 1.4.13 Content on Hover or Focus | Partially Supports | Tooltips show on hover and focus, hide with Escape and stay while the trigger is hovered or focused; keeping a tooltip open while the pointer moves onto it is not verified. |
| 2.4.5 Multiple Ways | Not Applicable | A page-level requirement the host application meets; the components do not prevent it. |
| 2.4.6 Headings and Labels | Supports | Column headers, dialog titles and field labels describe their content; the texts come from the message catalogs or from you. |
| 2.4.7 Focus Visible | Supports | One focus ring on :focus-visible in every component, kept under forced colours ( forced-colors.spec.ts ). |
| 2.4.11 Focus Not Obscured (Minimum) | Partially Supports | Composite widgets scroll the focused item into their viewport; sticky app chrome, toasts and the FAB can still cover focus and are not tested for it. |
| 2.5.7 Dragging Movements | Supports | Every drag has a keyboard or single-pointer alternative: column resize and move, row moves, pivot fields, kanban cards, tiles, splitters, sliders ( grid-keyboard-drag.spec.ts , tree-list-keyboard-drag.spec.ts , pivot-keyboard.spec.ts ). |
| 2.5.8 Target Size (Minimum) | Partially Supports | Small controls get a 24 px hit area (44 px on coarse pointers) through a shared stylesheet mixin; target sizes are not measured across every control. |
| 3.1.2 Language of Parts | Not Applicable | Component strings come from the catalog you provide, in your page’s language. |
| 3.2.3 Consistent Navigation | Not Applicable | A page-level requirement the host application meets; the components do not prevent it. |
| 3.2.4 Consistent Identification | Supports | Shared message catalogs give the same function the same name in every family and both layers. |
| 3.3.3 Error Suggestion | Supports | Validation messages are shown and announced as written; the built-in rules ship descriptive defaults. |
| 3.3.4 Error Prevention (Legal, Financial, Data) | Not Applicable | Whether a submission is reversible is the application’s decision; the suite supplies the means (batch editing with cancel, undo / redo, confirm() dialogs). |
| 3.3.8 Accessible Authentication (Minimum) | Not Applicable | No authentication component. The OTP input accepts paste and SMS autofill. |
| 4.1.3 Status Messages | Supports | Sorting, filtering, paging, selection, moves and errors are announced through shared polite / assertive live regions; toasts are status messages ( grid-announcements.spec.ts ). |
Terms
| Term | Meaning |
|---|---|
| Supports | The functionality meets the criterion without known defects. |
| Partially Supports | Some functionality does not meet the criterion, or it is not verified; the remark says which. |
| Does Not Support | The majority of the functionality does not meet the criterion. |
| Not Applicable | The criterion is not relevant to a component library, or is met by the host application. |
Level AAA criteria were not evaluated. "VPAT" is a registered service mark of the Information Technology Industry Council (ITI).