Native elements first
Use the native element (button, a, details, input, select, dialog) before a custom widget.
Draft — not yet reviewed by a maintainer
Why it matters
Native elements come with keyboard support, focus handling, form behaviour and screen-reader semantics. A custom widget has to rebuild all of that and usually misses some of it.
How to check it
No clickable div or span (onClick, role="button"); Tab reaches every control.
The default it guards against
A div with onClick as a button, a script-driven accordion instead of details and summary, a custom toggle that isn't a radio or checkbox.
Library items that apply it
Where it comes from
- WCAG 2.2 SC 4.1.2 Name, Role, Value (A)
- WCAG 2.2 SC 2.1.1 Keyboard (A)
- docs/quality-gates.md (no invalid nested interactive markup)
Repository paths refer to the Tessli repository ; WCAG references are to WCAG 2.2.