fix(miner-ui): give ChatComposer's textarea an accessible name#7465
Conversation
The ui-kit Textarea is a bare native <textarea> with no label, and the placeholder is not a reliable accessible name (it vanishes on input and is exposed to assistive tech inconsistently). Add a stable aria-label="Chat message" independent of the placeholder prop, matching how the other bare/icon-only controls in this codebase are labelled. Closes JSONbored#7440
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
|
Tip ✅ LoopOver review result - approve/merge recommendedReview updated: 2026-07-20 13:56:46 UTC
Review summary Nits — 3 non-blocking
Decision drivers
Context & advisory signals — never blocks the verdict
Review context
Contributor next steps
Signal definitions
🧪 Chat with LoopOverAsk LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://loopover.ai/docs/loopover-commands 🧪 Experimental — new and may change. Visual preview
Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy. Scroll preview
A short scroll-through clip (desktop) — click either thumbnail to open the full animation. Evidence for scroll-linked behavior a single screenshot can't show. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by LoopOver, a quiet PR intelligence layer for OSS maintainers.
|

Summary
ChatComposer's<Textarea>(apps/loopover-miner-ui/src/components/chat-composer.tsx) had noaria-label/aria-labelledby/wrapping label. The ui-kitTextareais a deliberately bare native<textarea>, so the caller must supply a name;placeholderisn't a substitute (WCAG 2.1 SC 3.3.2 / 4.1.2 — it disappears on input and its exposure to assistive tech as an accessible name is inconsistent).Fix
Add a stable
aria-label="Chat message"to the Textarea — hardcoded and independent of theplaceholderprop (which callers can override), matching how the other bare/icon-only controls in this codebase (theme-toggle, the copy button,back-to-top, …) are labelled.Verification
chat-composer.test.tsx'ssetup()now queriesgetByRole("textbox", { name: /chat message/i }), so the test asserts the accessible name exists and pins the fix. All chat-composer and chat-conversation tests pass (21).Closes #7440