Conversation

majornista

Closes #8328

✅ Pull Request Checklist:

  • Included link to corresponding React Spectrum Issue #8328.
  • Added/updated unit tests and storybook for this change (for new code or code which already has tests).
  • Filled out test instructions.
  • Updated documentation (if it already exists for this component).
  • Looked at the Accessibility Practices for this feature - Aria Practices

📝 Test Instructions:

  1. Open the Spectrum 2 Preview > Form > Example storybook example.
  2. With a screen reader running, like VoiceOver on macOS or NVDA on Windows, navigate to move focus to the Email field, which is the third field in the form.
  3. Enter an invalid email value, like "admin", and press Enter to trigger validation by submitting the form.
  4. The screen reader should announce the error message that renders politely.
  5. Type some more to modify the value to another invalid value like, "admin@", then Tab or Shift+Tab to blur the input, which again trigger validation.
  6. After the screen reader announces the input that receives keyboard focus, it should announce "Please review Email field: Please enter a part following '@'. 'admin@' is incomplete," with the name and error message for the Email field that was blurred.

🧢 Your Project:

Accessibility/SUSI/Adobe

@majornistamajornista added enhancementNew feature or requestaccessibility labels May 30, 2025
@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from db1dec4 to 71e40dc Compare May 30, 2025 21:05

Choose a reason for hiding this comment

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

Pull Request Overview

This PR fixes the error message announcement behavior for focused fields by updating the logic in the Field component to announce errors via the live announcer. Key changes include:

  • Adding a useEffect in Field.tsx to announce error messages when the field is focused.
  • Renaming the help text flag to hasErrorMessage for clarity.
  • Adding the @react-aria/live-announcer dependency in package.json.
  • Extending InlineAlert stories with a new DynamicWithAriaLivePolite variant.

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

FileDescription
packages/@react-spectrum/label/src/Field.tsxUpdates error message announcement logic and variable naming
packages/@react-spectrum/label/package.jsonAdds dependency for live announcer
packages/@react-spectrum/inlinealert/stories/InlineAlert.stories.tsxAdds a new story variant showcasing aria-live behavior

@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from 71e40dc to 3484b2f Compare May 30, 2025 21:20
@majornistamajornista changed the title fix(#8328): Field announce error message for focused field fix(accessibility): Field announce error message for focused field May 30, 2025
@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch 3 times, most recently from fee6570 to af43a05 Compare May 30, 2025 22:04
@rspbot

@majornistamajornista requested a review from Copilot May 30, 2025 22:18

Choose a reason for hiding this comment

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

Pull Request Overview

This PR improves accessibility by ensuring that error messages are announced when the associated field is focused.

  • Introduces an effect in Field.tsx to announce error messages when the field is active.
  • Adds a dependency on @react-aria/live-announcer in package.json.
  • Updates stories and tests to better handle error message rendering.

Reviewed Changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated no comments.

FileDescription
packages/@react-spectrum/label/src/Field.tsxImplements useEffect to announce error messages for focused fields.
packages/@react-spectrum/label/package.jsonAdds the live announcer dependency to support new accessibility logic.
packages/@react-spectrum/inlinealert/stories/InlineAlert.stories.tsxIntroduces a new story variant with aria-live explicitly set.
packages/@react-spectrum/datepicker/test/DateField.test.jsModifies test to access the first instance of the error message element.
Comments suppressed due to low confidence (2)

packages/@react-spectrum/datepicker/test/DateField.test.js:239

  • Verify that multiple occurrences of the 'Date unavailable.' text are expected. If only one error message should appear, consider updating this to use a more specific selector to avoid masking potential duplication issues.
expect(tree.getAllByText('Date unavailable.')[0]).toBeInTheDocument();

packages/@react-spectrum/label/src/Field.tsx:71

  • Ensure that the ref passed to Field is always a RefObject. The current cast to RefObject assumes a stable object ref; if callback refs are used, this might lead to unexpected behavior when announcing error messages.
React.useEffect(() => {

@rspbot

@majornistamajornista requested a review from Copilot June 3, 2025 15:08
Copilot

This comment was marked as outdated.

@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from fd00b91 to fbd7356 Compare June 3, 2025 15:09
@rspbot

@rspbot

@majornistamajornista requested a review from Copilot June 4, 2025 13:45
Copilot

This comment was marked as outdated.

@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from 3573692 to bd37367 Compare June 4, 2025 13:45
@rspbot

@rspbot

@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from f862c17 to 72b183c Compare June 4, 2025 20:23
@majornistamajornista requested a review from Copilot June 4, 2025 20:23
Copilot

This comment was marked as outdated.

@rspbot

@rspbot

@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from 85261b4 to b495793 Compare June 6, 2025 16:02
@rspbot

@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from b495793 to 2fb28d7 Compare June 6, 2025 18:14
@rspbot

Michael Jordan and others added 5 commits June 10, 2025 15:51
…blurred field

1. Improves announcement of validation error for just blurred field, by including accessible name in announcement for context.
2. Forgo announcement when the field receiving focus already has a validation error. It can be too much information.
3. Add alt text, "(valid)," to validationIcon, and include it in the `aria-describedby` for input for TextFieldBase.
4.  fix tests after adding alt text to validationIcon
@majornistamajornista force-pushed the Issue-8328-field-error-announcement branch from 2fb28d7 to 4acca66 Compare June 10, 2025 15:51
@rspbot

@rspbot

@rspbot

@rspbot

@rspbot

@rspbot

@majornistamajornista requested a review from Copilot June 12, 2025 17:46

Choose a reason for hiding this comment

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

Pull Request Overview

This pull request enhances accessibility by ensuring error messages for focused fields are appropriately announced and by refining ID and aria-describedby attributes across form components.

  • Introduces a valid state localized string and updates intl files.
  • Adjusts IDs and aria attributes for Input, DateField, DatePicker, DateRangePicker, ComboBox, and Autocomplete to improve accessibility announcements.
  • Enhances form validation logic with a timeout mechanism to announce error messages upon blur.

Reviewed Changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
packages/@react-spectrum/textfield/intl/en-US.jsonAdds new locale string for valid state.
packages/@react-spectrum/label/src/Field.tsxRemoves an unnecessary blank line.
packages/@react-spectrum/label/package.jsonUpdates dependency versions and adds live announcer.
packages/@react-spectrum/inlinealert/stories/InlineAlert.stories.tsxAdds a new story with aria-live="polite".
packages/@react-spectrum/datepicker/test/DateField.test.jsAdjusts test selector for improved reliability.
packages/@react-spectrum/datepicker/src/TimeField.tsxAdds ID and aria-describedby for valid icon accessibility.
packages/@react-spectrum/datepicker/src/Input.tsxUpdates ID propagation and valid icon logic.
packages/@react-spectrum/datepicker/src/DateRangePicker.tsxIntroduces useId for the input and assigns IDs conditionally on validation state.
packages/@react-spectrum/datepicker/src/DatePickerSegment.tsxEnhances merging of aria-describedby props.
packages/@react-spectrum/datepicker/src/DatePickerField.tsxPropagates the valid icon ID to segments for accessibility.
packages/@react-spectrum/datepicker/src/DatePicker.tsxIncorporates useId for improved ID management.
packages/@react-spectrum/datepicker/src/DateField.tsxIntegrates improved ID handling and aria-describedby for a valid field.
packages/@react-spectrum/datepicker/intl/en-US.jsonAdds new valid state locale string entry.
packages/@react-spectrum/combobox/src/MobileComboBox.tsxAdds valid icon ID for improved validation accessibility.
packages/@react-spectrum/combobox/intl/en-US.jsonUpdates locale strings to include a valid state.
packages/@react-spectrum/autocomplete/src/MobileSearchAutocomplete.tsxAdds valid icon ID and updates aria-labelledby join logic for accessibility.
packages/@react-spectrum/autocomplete/intl/en-US.jsonUpdates locale strings to include a valid state.
packages/@react-aria/form/src/useFormValidation.tsEnhances error message announcement logic with a delay on blur.
packages/@react-aria/form/package.jsonUpdates dependencies and adds dom-accessibility-api.
packages/@react-aria/form/intl/en-US.jsonIntroduces new locale strings for invalid value and review field prompts.

@rspbot

@rspbot

Sign up for free to join this conversation on . Already have an account? Sign in to comment
accessibility enhancementNew feature or request
None yet

Successfully merging this pull request may close these issues.

Announce Field error message for a focused field more reliably on Form submission