Repository navigation
Map role="slider" to the adjustable accessibility trait on iOS - #59463
jeltehomminga wants to merge 1 commit into
Conversation
`role="slider"` resolves to no accessibility traits on iOS, so VoiceOver does not treat the view as adjustable, while `accessibilityRole="adjustable"` does. Before the ARIA roles moved to native, the JS mapping turned `role: 'slider'` into `accessibilityRole: 'adjustable'`. Add `slider` to the `adjustable` case of the traits `fromString`, the same way `img`/`image` and `heading`/`header` share a case.
|
Hi @jeltehomminga! Thank you for your pull request and welcome to our community. Action RequiredIn order to merge any pull request (code, docs, etc.), we require contributors to sign our Contributor License Agreement, and we don't seem to have one on file for you. ProcessIn order for us to review and merge your suggested changes, please sign at https://code.facebook.com/cla. If you are contributing on behalf of someone else (eg your employer), the individual CLA may not be sufficient and your employer may need to sign the corporate CLA. Once the CLA is signed, our tooling will perform checks and validations. Afterwards, the pull request will be tagged with If you have received this in error or have any questions, please contact us at cla@meta.com. Thanks! |
There was a problem hiding this comment.
🟢 Approval recommended
The narrow mapping change follows the existing conversion pattern and includes a focused regression test; native tests were not executed during review.
No open issues 🎉
What changed in this PR
This PR restores the iOS adjustable accessibility trait for role="slider" in Fabric, addressing the slider portion of #50123 without changing other role mappings or the legacy architecture.
Changes:
- Maps
slidertoAccessibilityTraits::Adjustable, alongsideadjustable. - Adds a regression test for trait derivation from
role="slider".
| File | Description |
|---|---|
| packages/react-native/ReactCommon/react/renderer/components/view/tests/AccessibilityPropsTest.cpp | Adds a slider-role regression test. |
| packages/react-native/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h | Maps slider to the adjustable trait. |
Review effort: Balanced
|
Thank you for signing our Contributor License Agreement. We can now accept your code for this (and any) Meta Open Source project. Thanks! |
Summary:
Hi, I'm a React Native developer. Thanks for the recent iOS accessibility work.
On iOS,
role="slider"ends up with no accessibility traits, so VoiceOver doesn't treat the view as adjustable.accessibilityRole="adjustable"on the same view works. The traits come fromfromString(const std::string &, AccessibilityTraits &)inaccessibilityPropsConversions.h, which has an"adjustable"case but no"slider"case.Before the ARIA roles moved to native in #37309, the JS mapping turned
role: 'slider'intoaccessibilityRole: 'adjustable', so this used to work. The native table mapssliderto no trait instead. This addssliderto theadjustablecase, the same wayimg/imageandheading/headershare a case. Android doesn't readaccessibilityTraits, so only iOS changes.It only touches
slider. The other roles listed in #50123 stay as they are, since the comment aboveRCTViewIsInteractiveAccessibilityElementsays some of them carry no trait on purpose. I also left the legacyRCTViewManager.mtable alone, which mapsslidertoUIAccessibilityTraitNoneas well. Happy to change that one too if it's still wanted.Part of #50123.
Changelog:
[IOS] [FIXED] -
role="slider"now gets the adjustable accessibility trait, likeaccessibilityRole="adjustable"Test Plan:
RNTester on an iPhone 18 Pro simulator (iOS 27.0), with the Playground rendering:
The simulator's accessibility tree for both views:
derives_adjustable_trait_from_slider_roletoAccessibilityPropsTest.cpp, next toderives_traits_from_role. I couldn't run it, because I didn't find a way to run the ReactCommon gtests from the open-source checkout.node scripts/clang-format.js --checkpasses on both files.