Problem
src/components/SorobanPanel.tsx renders a <textarea> for the JSON arguments input, but uses a plain <label> element that is not programmatically associated with the textarea. The label text "Arguments (JSON array)" is rendered as a <label className="..."> without an htmlFor attribute, and the textarea has no id attribute.
A second related problem: the src/components/ui/Input.tsx component correctly associates labels via auto-generated id from the label text, but the SorobanPanel bypasses the Input component and uses a raw <textarea> — so the label association logic is never applied.
Without a programmatic label association, screen readers will announce the textarea as "unlabeled text area". Users who rely on screen readers or voice control software will have no context for what the field expects.
Solution
Either add matching id and htmlFor attributes to wire the label to the textarea, or create a Textarea component in src/components/ui/ that mirrors the label-association logic from Input.tsx.
Acceptance Criteria
Note for Contributors: If you are assigned to this issue, write a clear and detailed description for your pull request. Explain what was changed, why it was needed, how it was implemented, and include any relevant testing or screenshots where applicable.
Problem
src/components/SorobanPanel.tsxrenders a<textarea>for the JSON arguments input, but uses a plain<label>element that is not programmatically associated with the textarea. The label text "Arguments (JSON array)" is rendered as a<label className="...">without anhtmlForattribute, and the textarea has noidattribute.A second related problem: the
src/components/ui/Input.tsxcomponent correctly associates labels via auto-generatedidfrom the label text, but theSorobanPanelbypasses theInputcomponent and uses a raw<textarea>— so the label association logic is never applied.Without a programmatic label association, screen readers will announce the textarea as "unlabeled text area". Users who rely on screen readers or voice control software will have no context for what the field expects.
Solution
Either add matching
idandhtmlForattributes to wire the label to the textarea, or create aTextareacomponent insrc/components/ui/that mirrors the label-association logic fromInput.tsx.Acceptance Criteria
idattributehtmlForattribute pointing to the textarea idaria-describedbyTextareacomponent is added tosrc/components/ui/