Skip to content

fix: identify the setting each reset button affects - #2253

Open
johnjheejin wants to merge 2 commits into
cjpais:mainfrom
johnjheejin:codex/fix-reset-button-accessible-names
Open

johnjheejin wants to merge 2 commits into
cjpais:mainfrom
johnjheejin:codex/fix-reset-button-accessible-names

Conversation

@johnjheejin

@johnjheejin johnjheejin commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Before Submitting This PR

Please submit only one fix or feature per pull request. Pull requests containing multiple fixes or features will likely be closed.

Please confirm you have done the following:

If this is a feature or change that was previously closed/rejected:

  • I have explained in the description below why this should be reconsidered
  • I have gathered community feedback (link to discussion below)

Not applicable: no previously closed or rejected change is being reopened.

Human Written Description

I'm continuing to look for small ways to contribute to Handy. I wanted the reset buttons to say which setting they affect, so people using screen readers can tell them apart.

Related Issues/Discussions

No issue is being closed. Related to #2238, which names the checkbox and range controls themselves. This PR names the separate reset actions for sliders, microphone/output selectors, the laptop clamshell microphone, recognition language, and both shortcut input backends.

The callers use the existing ResetButton.ariaLabel prop with the translated setting title. The reset-action key is present in all 26 locale files. English and Korean have action text in those languages; the other locales use an English action string with their translated setting names. The model-list refresh button retains its existing custom label.

Community Feedback

No separate community feedback was gathered for this reset-button accessibility fix.

Testing

  • Rendered the actual baseline and changed components using React 18.3.1, JSDOM, dom-accessibility-api, and the project translations.
  • All 120 scenarios per variant passed: ten setting contexts across English, Korean, and Japanese (English action fallback), inline/tooltip descriptions, and enabled/updating reset states.
  • The baseline reset buttons have empty accessible names. The changed buttons identify both the reset action and the setting.
  • Verified enabled buttons still call the original reset handler with the original setting/binding ID, while disabled buttons make no reset call.
  • Verified the existing custom-label path remains unchanged.
  • TypeScript 5.6.3 strict checks passed for the seven changed components and their UI dependencies, using actual generated binding types and the settings-hook interface extracted from source. OS, toast, opener, and secure-input helpers were isolated with declarations; this was not a full application build.
  • ESLint 9.39.1 with the repository configuration checked 148 frontend files with zero errors or warnings.
  • The repository's translation consistency check passed for all 25 non-English locales: node --experimental-strip-types scripts/check-translations.ts. Every locale has the new key and preserves {{setting}}.
  • Prettier 3.6.2 and git diff --check passed.
  • Native app and real screen-reader sessions were not run.

Screenshots/Videos (if applicable)

Not included: this adds accessible names without visual layout changes.

AI Assistance

  • No AI was used in this PR
  • AI was used (please describe below)

If AI was used:

  • Tools used: OpenAI Codex.
  • How extensively: AI inspected reset-button callers and existing issues/PRs, reproduced empty accessible names, added translated labels, ran isolated component and scoped type/lint/format checks, and prepared the branch and this PR template. AI also helped phrase the description from the contributor's stated interest in making small contributions. The contributor reviews the description and submits through the GitHub website.

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