Added
- The Focus picker is now searchable. It was a native dropdown with one entry per table, which is fine on a small schema and unusable on a large one: at a couple of hundred tables it is a long scrolling list whose only search is the browser's prefix jump, so
itemnever reachesorder_itemsand nothing shows you what matched. Type to narrow it, matching anywhere in the name, with the matched span highlighted in each row and the number of matches announced as you type. It agrees with the toolbar filter now, which has always matched substrings. Reported by Alberto Peripolli (@trippo) from a schema of roughly that size. - The diagram is now operable from the keyboard. Table names, enum type labels, and health markers already carried a button role, so screen readers announced them as buttons; they now behave like one, answering Enter and Space. Escape closes the open menu and returns focus to whatever opened it, so a keyboard user is never dropped at the top of the document, and opening a menu with a key moves focus into it. Each of those triggers also has a visible focus ring, which is a shape rather than a colour change so it does not depend on distinguishing two colours.
- The rendered diagram now names and describes itself for assistive technology (
accTitle/accDescr, which Mermaid renders as<title>and<desc>). The description tracks the view you are actually looking at: the table and relationship counts, the active filter, and the focused table with its depth. - An accessibility check runs on every push: axe-core scans the dashboard and its overlays against WCAG 2.2 AA in the browser suite, reported as its own CI step, alongside specs covering keyboard operation. Run it locally with
npm run test:a11y.
Fixed
- The zoom slider had a tooltip but no accessible name, so screen readers announced an unlabelled slider. It now carries an explicit label; nothing changes visually.
Upgrading
Nothing to do, unless you have published the dashboard view with vendor:publish --tag=truss-views. The Focus control changed from a <select> to a combobox, and the frontend wires the picker only when the new markup is present, so a published copy of the old view leaves Focus inert rather than erroring. Re-publish the view to pick it up.
This release closes the Level A keyboard failures found in the dashboard. It is not an audit of every success criterion, so it is not a claim of WCAG conformance: what is covered and what is not is written up at https://trussphp.com/guides/accessibility/ (live once the docs site rebuilds).