fix(a11y): wire field labels to their controls across remaining widgets (#14461)
* fix(a11y): label and keyboard-nav fixes for canvas fields and picker popovers * fix(a11y): wire field labels to their controls across remaining widgets * [autofix.ci] apply automated fixes * fix(a11y): wire accessible names for tier-1 form fields and dialog inputs * [autofix.ci] apply automated fixes * docs(tests): tighten a11y-mock-helpers comments * docs(tests): tighten a11y-mock-helpers comments * test(a11y): cover mcp aria-expanded and file-management trigger branch * improve biome * fix(a11y): sync real focus to cmdk's virtual selection in output-type dropdown; * fix(a11y): forward tableTitle into TableComponent's tableLabel so the canvas table grid announces its real name instead of Data table * remove comment * fix output testcases * fix(a11y): add accessible field labels to Tools, InputFile, and MCP components * [autofix.ci] apply automated fixes * test(a11y): add axe coverage for CustomEdges, HandleRenderComponent, and NodeInputField (#14487) * test(a11y): add axe coverage for CustomEdges, HandleRenderComponent, and NodeInputField * test(a11y): add axe coverage for NodeInputField and drop OutputComponent's unused selected/types/idx props * test(a11y): add axe coverage for NodeInputField and drop OutputComponent's unused selected/types/idx props --------- Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local> * fix(a11y): announce the MCP server value and name the key/value pair inputs Two defects QA found on this PR. The MCP server trigger is a plain button, not a combobox: a screen reader announces its name and nothing else. Labelling it with the field alone meant aria-labelledby won the name computation and the selected server was discarded, so users heard "MCP Server" with no value. Compose the field label and the visible value span into the name instead, and drop the aria-label that used to carry the value on its own. The key/value pair field labelled only its key input, leaving the value input announced as a bare "edit text" and indistinguishable from the key beside it. Name it from the field label plus a translated qualifier, so the pair reads as "<field>" and "<field> value". * fix(a11y): name every key/value row, not just the first Naming only the first row left every later row announced as a bare "Type a value..., edit text" — the same symptom QA reported, one row down, and an axe `label` violation on both inputs of each additional row. Every row is named now. Rows past the first carry their position, so they stay distinguishable from row 1 and from each other: "Headers", "Headers value", "Headers row 2", "Headers value row 2". This reverses the first-row-stands-in-for-the-field rule this component borrowed from inputListComponent. That rule leaves real controls unnamed, which is a Level 1 failure; inputListComponent still has it and needs the same treatment separately. --------- Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Viktor Avelino <viktor.avelino@gmail.com> Co-authored-by: Viktor Avelino <64113566+viktoravelino@users.noreply.github.com>
O
olayinkaadelakun committed
13bb21ce26db49719e3ce211fe6b2465679b6d79
Parent: ad78422
Committed by GitHub <noreply@github.com>
on 8/18/2026, 10:51:11 PM