Skip to content

🎨 Palette: Form element accessibility improvements and render optimizations#35

Open
parvezk wants to merge 1 commit into
mainfrom
palette/a11y-form-labels-3447360759996294050
Open

🎨 Palette: Form element accessibility improvements and render optimizations#35
parvezk wants to merge 1 commit into
mainfrom
palette/a11y-form-labels-3447360759996294050

Conversation

@parvezk

@parvezk parvezk commented Jul 19, 2026

Copy link
Copy Markdown
Owner

💡 What

This PR introduces several micro-UX and accessibility improvements focused on form usability and React performance:

  • Converted the custom vendor selection buttons to behave semantically as a native radiogroup (role="radiogroup" and role="radio" with aria-checked).
  • Added explicit htmlFor and id linking for the Model <Select>, Repo <Input>, and Task <Textarea> fields.
  • Replaced a useEffect inside SessionDrawer with a conditional render-phase state update, fixing a React set-state-in-effect linter error and eliminating a potential stale message flash.

🎯 Why

  • Accessibility: Screen readers require explicit ARIA roles and labels to properly navigate complex forms like the new agent modal. Linking labels to inputs ensures screen reader users know the context of the fields and makes the click target larger.
  • Performance/UX: Setting state during a useEffect based on a prop change causes a double-render cycle and can briefly show stale data. Using a render-phase update immediately flushes the updated initial state.

📸 Before/After

  • The vendor buttons lacked screen-reader context for what they were. They are now explicitly a mutually exclusive set of radios.
  • The SessionDrawer previously triggered the react-hooks/set-state-in-effect eslint error, which is now resolved without any functional side-effects.

♿ Accessibility

  • Explicit labeling mapping applied to <label> and their respective <input> / <SelectTrigger> / <Textarea>.
  • Appropriate ARIA attributes (aria-labelledby, role, aria-checked) added to custom non-semantic HTML form elements.

PR created automatically by Jules for task 3447360759996294050 started by @parvezk

…nDrawer renders

- Refactored `SessionDrawer` to conditionally reset state during the render phase instead of `useEffect` to prevent React cascading render warnings.
- Added explicit labels with `id`/`htmlFor` across inputs and textareas in `new-agent-modal.tsx`.
- Assigned `role="radiogroup"` to the vendor selection and `role="radio"` with `aria-checked` to the vendor buttons to ensure correct screen reader semantics.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
@google-labs-jules

Copy link
Copy Markdown
Contributor

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@vercel

vercel Bot commented Jul 19, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
polyagent Ready Ready Preview, Comment Jul 19, 2026 7:57am

@cursor

cursor Bot commented Jul 19, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cc60afac77

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines 108 to 113
<button
key={v}
type="button"
role="radio"
aria-checked={selected}
onClick={() => setVendor(v)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Implement keyboard behavior for the radio group

When keyboard users interact with this control, role="radio" causes assistive technology to expose the tiles as a single-choice radio group, but the buttons have neither roving tabIndex nor arrow-key handling. Consequently, all four radios remain separate Tab stops and the expected arrow keys do nothing; use native radio inputs or implement the radio-group keyboard pattern.

Useful? React with 👍 / 👎.

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.

1 participant