[a11y] Form-input label association sweep — 13 inputs lack programmatic labels #143
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:implement
agent:implement
agent:open_issues
agent:ready
agent:research
agent:security_audit
agent:verify
architecture
backend
blocker:hybrid
blocker:launch
blocker:limit-orders
blocker:v2
block:log_only
block:security
bug
ci
contracts
correctness
deploy
dev
devops
docs
documentation
duplicate
e2e
enhancement
epic
feature
frontend
functional-completion
gas
good first issue
governance
help wanted
high-risk
hooks
hybrid
indexer
infra
infrastructure
integrators
invalid
launch-blocker
limit-orders
localnet
localterra
low priority
missing-implementation
needs-design
ops
performance
priority
high
priority
medium
product
qa
QA
question
ready
ready
research
scripts
security
security-hardening
smartcontracts
tech-debt
testing
ux
UX
v2
verification
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-dex-terraclassic#143
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@totdking — visual / a11y finding from source-level audit, assigning to you. broader pattern across the dapp where form inputs lack programmatic label association. extends DEX visual QA umbrella #133.
Scope
Source audit found 30
<input>elements infrontend-dapp/src/. ~12 lack programmatic label association (sibling label withouthtmlFor/id, span used as label, or placeholder-only). Two correct patterns coexist in the codebase but are inconsistently applied.HIGH — broken label association (label sibling, no htmlFor/id)
frontend-dapp/src/components/trade/TradeOrderTicket.tsx:281-286frontend-dapp/src/components/trade/TradeOrderTicket.tsx:333-339placeholder="Order ID"and an h3 abovefrontend-dapp/src/components/trade/LimitOrderEscrowAmountField.tsx:33-39frontend-dapp/src/pages/LimitOrdersPage.tsx:381-386frontend-dapp/src/pages/LimitOrdersPage.tsx:436-443frontend-dapp/src/pages/SwapPage.tsx:701-709frontend-dapp/src/pages/SwapPage.tsx:712-720frontend-dapp/src/pages/SwapPage.tsx:769-799<span class="label-neo">(line 771) used as label; input at line 785 has neither id, aria-label, nor wrapping labelfrontend-dapp/src/pages/CreatePairPage.tsx:74-81frontend-dapp/src/pages/CreatePairPage.tsx:97-105frontend-dapp/src/pages/PoolPage.tsx:710-720HIGH — placeholder-only inputs (no label of any kind)
frontend-dapp/src/pages/SwapPage.tsx:651-665placeholder="Custom"frontend-dapp/src/pages/TraderPage.tsx:88-95placeholder="Paste a trader wallet address"How to verify on local stack
<input>in browser devtoolsidmatches any<label for="...">and noaria-label/aria-labelledbyis presentReference patterns (correct sites — use as the model when fixing)
frontend-dapp/src/components/order/LimitOrderExpiryField.tsx:38-74and:100-114—htmlFor+idcorrectly pairedfrontend-dapp/src/pages/ChartsPage.tsx:254-265— pair-search hashtmlFor+id+aria-labelfrontend-dapp/src/pages/PoolPage.tsx:917-934— pool-search hashtmlFor+idWhat's already PASS (don't touch)
<label>(e.g.,TradeOrderTicket.tsx:271-278,PoolPage.tsx:443-454,PoolPage.tsx:730-740,PoolPage.tsx:980-993,SwapPage.tsx:694-697)ProtocolPage.tsx:164-171,PoolPage.tsx:456-467,PoolPage.tsx:558-569usearia-label(acceptable but inconsistent — defer migration to umbrella decision)Suggestion
standardise on
htmlFor+idacross all 13 high-priority sites. for sites already usingaria-label(Protocol/Pool examples above), defer migration unless you want full consistency in one pass.Severity
P2 — accessibility issue. screen reader users get no announced label for these inputs (only placeholder text or surrounding visual context, which screen readers don't reliably surface). matches the pattern class behind YO #179 / DEX #133 umbrella.
Cross-reference
cc @PlasticDigits
assigned to @totdking
mentioned in issue #144
mentioned in commit
3fd47474dbImplemented (main @
3fd4747)Standardized programmatic label association for the high-priority inputs from this issue using
htmlFor+id, with ReactuseId()where appropriate for stable unique IDs.Code: `LimitOrderEscrowAmountField`, `TradeOrderTicket` (place price + cancel Order ID), `LimitOrdersPage` (price + cancel Order ID), `SwapPage` (custom slippage — sr-only label; hybrid book leg amount + max makers; You Pay amount), `CreatePairPage` (token A/B), `PoolPage` PoolCard remove-LP amount, `TraderPage` wallet search (sr-only label).
Docs: `docs/frontend.md` § Form inputs — programmatic labels. Agent playbook: `skills/AGENTS_FRONTEND_A11Y_FORM_LABELS.md` (cross-linked from `AGENTS_FRONTEND_PRODUCTION_BUILD.md`, `AGENTS_LOCALNET_TRADING_SWARM.md`).
Verification checklist
@brouie Could you verify on your side when you have a moment?
Issue left open until you confirm.
Verification checklist
All 13 items pass
TradeOrderTicket.tsx
LimitOrderEscrowAmountField.tsx
LimitOrdersPage.tsx
SwapPage.tsx
CreatePairPage.tsx
PoolPage.tsx
TraderPage.tsx
cc: @PlasticDigits , @Brouie
mentioned in issue #214
mentioned in issue #542