Accessibility
AccessibilityProvider
A React context provider that shares accessibility policies across all components in its tree — font scaling behavior, minimum touch target sizes, contrast mode, and haptic intent resolution.
Import
typescript
import { AccessibilityProvider, useAccessibilityPolicy } from 'reactnatively';
// or
import { AccessibilityProvider, useAccessibilityPolicy } from 'reactnatively/primitives';Setup
ReactnativelyProvider wraps your app in AccessibilityProvider automatically. Use it standalone only when you need a different policy in a sub-tree:
app/_layout.tsx
import { ReactnativelyProvider } from 'reactnatively';
export default function RootLayout() {
return (
<ReactnativelyProvider
accessibility={{
allowFontScaling: true, // true = respect system font size
minimumTouchTarget: 44, // 44pt minimum touch area (Apple HIG)
}}
>
<App />
</ReactnativelyProvider>
);
}Standalone usage
KioskMode.tsx
import { AccessibilityProvider } from 'reactnatively';
// Kiosk mode: larger touch targets, no font scaling
export function KioskShell({ children }: { children: React.ReactNode }) {
return (
<AccessibilityProvider policy={{ allowFontScaling: false, minimumTouchTarget: 56 }}>
{children}
</AccessibilityProvider>
);
}useAccessibilityPolicy
Read the active accessibility policy in your own components:
CustomButton.tsx
1import { useAccessibilityPolicy } from 'reactnatively';2import { Text, Pressable, View } from 'react-native';34export function CustomButton({ label, onPress }: { label: string; onPress: () => void }) {5 const { allowFontScaling, minimumTouchTarget } = useAccessibilityPolicy();67 return (8 <Pressable9 onPress={onPress}10 style={{ minWidth: minimumTouchTarget, minHeight: minimumTouchTarget }}11 accessibilityRole="button"12 accessibilityLabel={label}13 >14 <View style={{ justifyContent: 'center', alignItems: 'center', flex: 1 }}>15 <Text allowFontScaling={allowFontScaling} style={{ color: '#fff', fontWeight: '600' }}>16 {label}17 </Text>18 </View>19 </Pressable>20 );21}VisuallyHidden
Use VisuallyHidden to render content that is visible to screen readers but not on screen:
tsx
import { VisuallyHidden } from 'reactnatively';
// Icon button where the visible icon has no text label
<Pressable accessibilityRole="button">
<SearchIcon />
<VisuallyHidden>
<Text>Search</Text>
</VisuallyHidden>
</Pressable>