Skip to content

refactor: sweep remaining config forms onto shared FormField (#2051)#2081

Merged
atomantic merged 1 commit into
mainfrom
claim/issue-2051
Jul 2, 2026
Merged

refactor: sweep remaining config forms onto shared FormField (#2051)#2081
atomantic merged 1 commit into
mainfrom
claim/issue-2051

Conversation

@atomantic

Copy link
Copy Markdown
Owner

Summary

Follow-up to #2027, completing the repo-wide sweep of sibling config-form labels onto the shared FormField accessibility wrapper (client/src/components/ui/FormField.jsx), which wires <label htmlFor> ↔ control id via useId().

~130 fields migrated across ~40 files. Each converted field's label now focuses its control on click and is announced correctly by screen readers.

Areas migrated

  • Agents: OverviewTab (13), AgentList (9), MemoryEditModal (6), ImageGenControls (6), PublishedTab, ResumeAgentModal, TrustTab
  • Digital Twin: AccountsTab, DocumentsTab, GoalsTab, ImportTab, OverviewTab, EnrichTab, SoulWizard, ListEnrichment
  • Pages: PromptManager (11), VideoGen (9), Jira (5), Sharing (4), Loras, Security, ImageGen, Templates, Loops, Browser
  • Media / pipeline / writers-room / MeatSpace / brain / cos / music / messages: MediaJobsQueue (6), LifeEventsPanel (6), GoalEditForm (5), AlcoholTab, AddActivityForm, PromptRefineModal, StandardDrinkCalculator, ExercisePanel, StagePromptModelPicker, DailyLogTab, ProcessesTab, MemoryBuilder, PostSessionLauncher, GenomeCategoryCard, SyncTab, and more

Deliberately skipped (per #2027 rules)

  • Wrapping labels (<label><input/></label>) — valid implicit associations left untouched (e.g. Tribe, CreativeDirector, MusicGenPanel, StoryboardConfigTab, the local Field components in Authors/PipelineSeries/AlbumsManager/TracksManager).
  • Group labels heading radio/toggle/button groups (no single bindable control) — e.g. Platform pickers, Type/Tags groups, MergeModal survivor/fold radios, icon pickers, seed input+randomize rows.
  • Custom-component controls that don't forward id to a real DOM input — ToggleSwitch, CronInput, InfluenceChipsInput, FolderPicker-wrapped rows, etc. (ModelSelect was migrated because it does forward id to its <select>).
  • Labels that already had htmlFor (LocalLlmPlayground, many in Importer/StoryBuilder/PipelineSeries/UniverseBuilder).

Test plan

  • Client Vitest suite green: 291 files, 3127 tests passing.
  • ESLint clean on all 40 changed files.
  • Diff self-scan confirms no migrated FormField has a non-DOM (<div>) first child, so every label binds to a real control.
  • Accessibility only: zero restyle — Tailwind classes moved verbatim to className / labelClassName.

Closes #2051

https://claude.ai/code/session_01KSyAbxEjURcLPhugG8MZCw

Follow-up to #2027. Migrate ~130 sibling <label>+input config-form fields
across ~40 client files onto the shared FormField accessibility wrapper so
each label's htmlFor is wired to its control id (click-to-focus + screen
reader association). Accessibility only — Tailwind classes preserved verbatim;
wrapping labels, radio/toggle group labels, and custom controls that don't
forward id to a DOM input were deliberately left alone.

Closes #2051

Claude-Session: https://claude.ai/code/session_01KSyAbxEjURcLPhugG8MZCw
@atomantic atomantic merged commit 4143b6f into main Jul 2, 2026
2 checks passed
@atomantic atomantic deleted the claim/issue-2051 branch July 2, 2026 19:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sweep remaining config forms onto shared FormField (follow-up to #2027)

1 participant