Fix screen readers announcing toasts #1551
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I'm currently fixing accessibility for our app and migrating to Radix. I struggled to make screen readers announce toasts and I think I found the culprit.
aria-atomic
attribute specifically needs thetrue
value to be read by screen readers, and VoiceOver requires therole
to be set asalert
for some reason.Also,
announceTextContent
seems to display content as an array which is weird when it's announced:VoiceOver:

NVDA:
It's done on purpose (cf. https://github.com/unovue/radix-vue/blob/main/packages/radix-vue/src/Toast/utils.ts#L77-L78) but VoiceOver actually reads
"3"
asthree inches
for instance, because in our case we have astrong
element on the number but there's no reason to make a pause between those words.Setup:
Also I couldn't make screen readers read the
label
prop from theToastViewport
component, I'm not sure if it's expected.In conclusion the proposed fix makes the component work at least in my tests, even if there's still room for improvement IMO.
Let me know what you think!