Component library
Common UI patterns, built to be actually accessible — every example here is real and works with the keyboard, not a screenshot. Each page maps the keys, describes what a screen reader hears, notes the ARIA that makes it work, shows copyable source, and lists the mistakes that most often break it. A directory about accessibility has to hold its own components to the same bar: each live example passes axe with no violations, checked on every build.
Available components
Accordion
ReadyDisclosure · aria-expanded
Stacked sections that expand and collapse independently. The foundational aria-expanded disclosure pattern that a dozen other widgets build on.
Tabs
ReadyTabs · roving tabindex + arrow keys
One panel visible at a time, chosen from a row of tabs. Teaches the roving-tabindex idea and arrow-key navigation that trip up most hand-rolled versions.
Modal dialog
ReadyDialog · focus trap + Escape + focus return
A dialog that takes over the page until dismissed. The pattern where a broken implementation strands keyboard users most visibly — focus trap, Escape, and returning focus are all things static markup cannot promise.
Tooltip
ReadyTooltip · role=tooltip, aria-describedby, Escape to dismiss
A supplementary label revealed on hover and focus, dismissible with Escape, never the only place critical information lives. The pattern where showing it on hover alone is the single most common way tooltips break for keyboard users.
Combobox
ReadyCombobox · aria-expanded + aria-activedescendant
A text input paired with a filterable listbox popup — the most intricate composite widget, and the one autocomplete UIs most often break. The pattern where the highlighted option is not really focused: DOM focus stays in the text field the whole time, and aria-activedescendant is what tells a screen reader where you are.
Menu button
ReadyMenu · roving focus, type-ahead
A button that opens a menu of actions, navigable with the arrow keys and closable with Escape. The pattern where the highlighted item is only a CSS state: real DOM focus moves onto the menu items themselves (roving tabindex), the opposite arrangement from this library's Combobox.
Select (listbox)
ReadyListbox · single-select, roving focus, type-ahead
A collapsible single-select listbox: a button that opens a popup role="listbox" for cases where the native <select> cannot be styled to requirements — the native element stays the honest first choice everywhere else.
Breadcrumbs
ReadyNavigation landmark · aria-current, CSS separators
An ordered trail of ancestor links inside a named nav landmark, with the current page marked by aria-current and left unlinked. The pattern where typing the separator into the markup quietly makes every level noisier to listen to.
Pagination
ReadyNavigation landmark · aria-current=“page”
Page-by-page navigation of a long list, with the current page marked and controls that read clearly out of context.
Toast / status message
ReadyLive region · role=status / role=alert
A transient notification announced through a polite or assertive live region without stealing focus. The ARIA live-region pattern, where the hard part is invisible: the region has to exist before the message does.
Switch
ReadySwitch · role=switch, aria-checked
An on/off toggle distinct from a checkbox, reporting its state as “on” or “off”.
Data table
ReadyTable semantics · scope, sortable headers
A sortable, semantic table with proper header association and aria-sort, readable cell by cell.
Form field
ReadyLabelling · error text + aria-describedby
A labelled input with programmatically associated help and error messages, and errors announced without a focus jump.
Planned
The library is being built one exemplary component at a time — a page ships only when its live example is real and passes the same accessibility bar. These patterns are on the way; they are listed here honestly, with no page and no broken link until they are ready.
Need the same rigour on your own site?
Free instant scan against the automated checks — then compare verified auditors for the judgement calls automation cannot make.
Scan your website