Skip to content

Sweep remaining unlabeled form controls outside FormField #4156

Description

@atomantic

The 2026-07-23 accessibility audit pass fixed the toggle-switch, icon-button, focus-indicator, and lightbox-dialog gaps, plus ~20 unlabeled controls on the highest-traffic pages. What remains is the long tail of standalone <select>/<input>/<textarea> that sit in toolbars and inline rows rather than inside a labeling wrapper (client/src/components/ui/FormField.jsx, or a local Field that wraps children in a <label>).

Sweep the remaining unlabeled controls

The scan that produced this backlog: for every git-tracked client/src/**/*.jsx, parse each <input|select|textarea> opening tag (brace-aware); skip tags carrying aria-label/aria-labelledby/type="hidden", tags whose id is targeted by an htmlFor in the same file, and tags whose preceding ~14 lines contain <FormField/<label/<Field/label=/sr-only. That yields ~400 hits, but the true-positive rate is roughly half — the rest are <img>/<select> mentions inside comments and wrappers the lookback window missed. Verify each candidate by reading its context before labeling it; do not mass-apply.

Highest value first (still confirmed present, e.g. client/src/pages/Instances.jsx has 10 <input|select|textarea> tags against 13 aria-label occurrences — some are already fixed, so re-verify per-tag rather than assuming the raw count is the gap):

  • client/src/pages/Instances.jsx
  • client/src/pages/PipelineSeries.jsx
  • client/src/pages/VideoTimelineEditor.jsx
  • client/src/pages/CatalogIngredient.jsx
  • client/src/pages/CharacterSheet.jsx
  • client/src/pages/GitHub.jsx
  • client/src/pages/Sharing.jsx
  • client/src/pages/MoodBoardDetail.jsx
  • client/src/pages/OpenClaw.jsx
  • client/src/pages/LoraDatasetDetail.jsx
  • client/src/pages/Browser.jsx

Prefer wrapping in FormField (visible label + htmlFor/id pairing) over an aria-label when the surface has room for a visible label.

Sequencing note: this sweep should land before enabling Biome's a11y rule group (see the companion issue), since enabling those rules against the current backlog would fail CI immediately.

Migrated from PLAN.md by /do:replan --issues.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions