feat(a11y): label icon-only buttons and inputs for screen readers

Header, message action, send/stop, history, model selector and dark-mode controls had no accessible name (icon-only buttons). Adds roles/labels and selected/disabled state; no visual change.
This commit is contained in:
evandro committed 2026-10-10 04:29:33 -03:00
1 parent 0e5b38fd15
commit b441339bb4
8 files changed
+84 -7

No files matched your search

+12 -1
View File
@@ -65,7 +65,12 @@ export function ChatInput({ onSend, onStop, isLoading, editingText, onCancelEdit
{isEditing && (
<View style={[styles.editBanner, { backgroundColor: colors.bannerBg, borderBottomColor: colors.border }]}>
<Text style={[styles.editBannerText, { color: colors.bannerText }]}>Editing message</Text>
<TouchableOpacity onPress={handleCancelEdit} style={styles.editCancelBtn}>
<TouchableOpacity
onPress={handleCancelEdit}
style={styles.editCancelBtn}
accessibilityRole="button"
accessibilityLabel="Cancel editing"
>
<X size={16} color={colors.textMuted} />
</TouchableOpacity>
</View>
@@ -80,6 +85,7 @@ export function ChatInput({ onSend, onStop, isLoading, editingText, onCancelEdit
<TextInput
style={[styles.input, { color: colors.text }]}
placeholder="Send a message..."
accessibilityLabel="Message"
placeholderTextColor={colors.textMuted}
value={text}
onChangeText={setText}
@@ -94,6 +100,8 @@ export function ChatInput({ onSend, onStop, isLoading, editingText, onCancelEdit
style={[styles.stopButton, { backgroundColor: colors.errorText }]}
onPress={handleStop}
activeOpacity={0.7}
accessibilityRole="button"
accessibilityLabel="Stop generating"
>
<Square size={16} color={colors.backgroundColor} />
</TouchableOpacity>
@@ -106,6 +114,9 @@ export function ChatInput({ onSend, onStop, isLoading, editingText, onCancelEdit
onPress={handleSend}
disabled={!text.trim()}
activeOpacity={0.7}
accessibilityRole="button"
accessibilityLabel="Send message"
accessibilityState={{ disabled: !text.trim() }}
>
<Send size={18} color={text.trim() ? colors.backgroundColor : colors.textMuted} />
</TouchableOpacity>