UNPKG

accessibility-sidebar

Version:

A comprehensive, lightweight accessibility widget for web and mobile apps with WCAG 2.1 AA compliance

249 lines (220 loc) 8.48 kB
import React, { useState } from 'react'; import { View, Text, ScrollView, StyleSheet, SafeAreaView, StatusBar } from 'react-native'; import { SafeAreaProvider } from 'react-native-safe-area-context'; import { GestureHandlerRootView } from 'react-native-gesture-handler'; import AccessibilitySidebar from './AccessibilitySidebar'; const AccessibilityExample = () => { // State for accessibility settings const [fontSize, setFontSize] = useState(0); const [highContrast, setHighContrast] = useState(false); const [lineHeight, setLineHeight] = useState(0); // Sample content for the test const sampleContent = ` Testul RAADS-R (Ritvo Autism Asperger Diagnostic Scale-Revised) este un instrument de screening pentru identificarea trăsăturilor autiste la adulți. Acest test a fost dezvoltat pentru a ajuta la identificarea persoanelor care ar putea beneficia de o evaluare clinică formală pentru tulburările din spectrul autist. Testul constă în 80 de întrebări care evaluează patru domenii principale: 1. Limbaj - Dificultăți în comunicarea verbală și nonverbală 2. Relaționare socială - Provocări în interacțiunile sociale 3. Senzorial-motor - Sensibilități și comportamente repetitive 4. Interese circumscrise - Interese intense și focalizate Este important de reținut că acest test nu oferă un diagnostic medical și nu înlocuiește o evaluare profesională efectuată de un specialist în sănătatea mintală. `; // Calculate dynamic styles based on accessibility settings const getDynamicStyles = () => { const baseFontSize = 16; const fontSizeMultiplier = fontSize === 0 ? 1 : fontSize === 1 ? 1.25 : 1.5; const calculatedFontSize = baseFontSize * fontSizeMultiplier; const baseLineHeight = 1.4; const lineHeightMultiplier = lineHeight === 0 ? 1 : lineHeight === 1 ? 1.14 : 1.29; const calculatedLineHeight = baseLineHeight * lineHeightMultiplier; return { fontSize: calculatedFontSize, lineHeight: calculatedFontSize * calculatedLineHeight, color: highContrast ? '#ffffff' : '#333333', backgroundColor: highContrast ? '#000000' : '#ffffff' }; }; const textStyles = getDynamicStyles(); return ( <SafeAreaProvider> <GestureHandlerRootView style={styles.container}> <StatusBar barStyle={highContrast ? 'light-content' : 'dark-content'} backgroundColor={highContrast ? '#000000' : '#ffffff'} /> <SafeAreaView style={[styles.safeArea, { backgroundColor: textStyles.backgroundColor }]}> <ScrollView style={[styles.scrollView, { backgroundColor: textStyles.backgroundColor }]} contentContainerStyle={styles.contentContainer} showsVerticalScrollIndicator={true} > {/* Header */} <View style={styles.header}> <Text style={[styles.title, textStyles]}> Test de Accesibilitate </Text> <Text style={[styles.subtitle, textStyles, { opacity: 0.8 }]}> Demonstrație AccessibilitySidebar pentru React Native </Text> </View> {/* Sample Content Section */} <View style={styles.section}> <Text style={[styles.sectionTitle, textStyles]}> Despre testul RAADS-R </Text> <Text style={[styles.bodyText, textStyles]}> {sampleContent} </Text> </View> {/* Features Section */} <View style={styles.section}> <Text style={[styles.sectionTitle, textStyles]}> Funcții de Accesibilitate </Text> <View style={styles.featureList}> <Text style={[styles.featureItem, textStyles]}> 📝 <Text style={styles.featureBold}>Mărime text:</Text> {fontSize === 0 ? 'Normal' : fontSize === 1 ? 'Mare' : 'Foarte mare'} </Text> <Text style={[styles.featureItem, textStyles]}> 🎨 <Text style={styles.featureBold}>Contrast:</Text> {highContrast ? 'Ridicat' : 'Normal'} </Text> <Text style={[styles.featureItem, textStyles]}> 📏 <Text style={styles.featureBold}>Spațiu între rânduri:</Text> {lineHeight === 0 ? 'Normal' : lineHeight === 1 ? 'Mare' : 'Foarte mare'} </Text> </View> </View> {/* Instructions Section */} <View style={styles.section}> <Text style={[styles.sectionTitle, textStyles]}> Cum să folosești panoul de accesibilitate </Text> <Text style={[styles.bodyText, textStyles]}> 1. Apasă pe iconița <Text style={styles.icon}>⚙️</Text> din colțul drept pentru a deschide panoul de accesibilitate. </Text> <Text style={[styles.bodyText, textStyles]}> 2. Ajustează mărimea textului folosind butonul "Mărime text". </Text> <Text style={[styles.bodyText, textStyles]}> 3. Activează modul contrast ridicat pentru o mai bună vizibilitate. </Text> <Text style={[styles.bodyText, textStyles]}> 4. Mărește spațiul dintre rânduri pentru o lectură mai confortabilă. </Text> <Text style={[styles.bodyText, textStyles]}> 5. Folosește funcția "Citește cu voce tare" pentru a audia conținutul. </Text> <Text style={[styles.bodyText, textStyles]}> 6. Toate setările sunt salvate automat și vor fi restaurate la următoarea utilizare. </Text> </View> {/* Accessibility Statement */} <View style={[styles.accessibilityStatement, { backgroundColor: highContrast ? '#222222' : '#f0f7ff', borderColor: highContrast ? '#555555' : '#2196F3' }]}> <Text style={[styles.statementTitle, textStyles]}> Declarație de Accesibilitate </Text> <Text style={[styles.statementText, textStyles]}> Această aplicație a fost dezvoltată urmând standardele WCAG 2.1 AA pentru a fi accesibilă tuturor utilizatorilor, inclusiv celor cu dizabilități vizuale, auditive sau cognitive. </Text> </View> {/* Bottom spacing for the floating sidebar */} <View style={styles.bottomSpacing} /> </ScrollView> {/* Accessibility Sidebar */} <AccessibilitySidebar targetContent={sampleContent} onFontSizeChange={setFontSize} onContrastChange={setHighContrast} onLineHeightChange={setLineHeight} /> </SafeAreaView> </GestureHandlerRootView> </SafeAreaProvider> ); }; const styles = StyleSheet.create({ container: { flex: 1, }, safeArea: { flex: 1, }, scrollView: { flex: 1, }, contentContainer: { paddingHorizontal: 16, paddingBottom: 100, // Extra space for the floating sidebar }, header: { alignItems: 'center', marginVertical: 24, }, title: { fontSize: 28, fontWeight: 'bold', textAlign: 'center', marginBottom: 8, }, subtitle: { fontSize: 16, textAlign: 'center', fontStyle: 'italic', }, section: { marginBottom: 24, }, sectionTitle: { fontSize: 20, fontWeight: 'bold', marginBottom: 12, }, bodyText: { fontSize: 16, marginBottom: 12, textAlign: 'justify', }, featureList: { marginTop: 8, }, featureItem: { fontSize: 16, marginBottom: 8, paddingLeft: 8, }, featureBold: { fontWeight: 'bold', }, icon: { fontSize: 18, }, accessibilityStatement: { padding: 16, borderRadius: 8, borderWidth: 1, marginTop: 16, }, statementTitle: { fontSize: 18, fontWeight: 'bold', marginBottom: 8, }, statementText: { fontSize: 14, lineHeight: 20, }, bottomSpacing: { height: 80, }, }); export default AccessibilityExample;