スキル一覧に戻る
LionGab

accessibility-checker

by LionGab

Nossa Maternidade - App mobile React Native + Expo com IA integrada (Gemini, Claude, OpenAI)

1🍴 0📅 2025年12月6日
GitHubで見るManusで実行

SKILL.md


name: accessibility-checker description: Valida acessibilidade WCAG AAA para o projeto Nossa Maternidade. Verifica touch targets minimo 44pt, contraste 7:1, accessibilityLabel em todos elementos interativos. Use ao criar componentes de UI, revisar telas, ou validar acessibilidade. allowed-tools: Read, Grep, Glob

Accessibility Checker (WCAG AAA)

Proposito

Garantir que o app Nossa Maternidade seja acessivel para todas as maes, incluindo aquelas com deficiencias visuais ou motoras.

Padroes WCAG AAA

1. Touch Targets - Minimo 44pt (iOS) / 48dp (Android)

// ❌ ERRADO - muito pequeno
<TouchableOpacity style={{ width: 30, height: 30 }}>

// ✅ CORRETO - tamanho minimo
import { Tokens } from '@/theme/tokens';
<TouchableOpacity
  style={{
    minWidth: Tokens.touchTargets.min,  // 44
    minHeight: Tokens.touchTargets.min, // 44
  }}
>

Token disponivel: Tokens.touchTargets.min = 44

2. Contraste de Cores - 7:1 (Nivel AAA)

Tipo de TextoContraste Minimo
Texto normal7:1 (AAA)
Texto grande (18pt+)4.5:1 (AAA)
Icones/graficos3:1

Cores do tema ja sao WCAG AAA compliant:

  • text.primary sobre background.canvas = 15.8:1 ✅
  • text.secondary sobre background.card = 8.6:1 ✅
  • text.tertiary sobre fundos = 8.6:1 ✅

3. Accessibility Labels - OBRIGATORIO em Interativos

// ❌ ERRADO - sem label
<TouchableOpacity onPress={handleLike}>
  <HeartIcon />
</TouchableOpacity>

// ✅ CORRETO - com labels
<TouchableOpacity
  onPress={handleLike}
  accessibilityLabel="Curtir publicacao"
  accessibilityRole="button"
  accessibilityHint="Toque duas vezes para curtir"
>
  <HeartIcon />
</TouchableOpacity>

4. Accessibility Roles

// Roles comuns:
accessibilityRole = 'button'; // Botoes
accessibilityRole = 'link'; // Links
accessibilityRole = 'image'; // Imagens
accessibilityRole = 'text'; // Texto simples
accessibilityRole = 'header'; // Titulos de secao
accessibilityRole = 'search'; // Campo de busca
accessibilityRole = 'tab'; // Abas
accessibilityRole = 'checkbox'; // Checkboxes
accessibilityRole = 'switch'; // Toggles

5. Accessibility State

<TouchableOpacity
  accessibilityState={{
    selected: isSelected,
    disabled: isDisabled,
    checked: isChecked,
    expanded: isExpanded,
  }}
>

6. Imagens Decorativas vs Informativas

// Decorativa - esconder do screen reader
<Image
  source={decorativeImage}
  accessibilityElementsHidden={true}
  importantForAccessibility="no-hide-descendants"
/>

// Informativa - descrever
<Image
  source={chartImage}
  accessibilityLabel="Grafico mostrando aumento de 20% no bem-estar"
/>

Checklist de Acessibilidade

Touch Targets

  • Todos os botoes tem minimo 44x44pt
  • Areas de toque nao sobrepoem
  • Espacamento adequado entre elementos clicaveis

Labels e Roles

  • Todos elementos interativos tem accessibilityLabel
  • accessibilityRole definido corretamente
  • accessibilityHint para acoes complexas

Contraste

  • Texto sobre fundos tem contraste 7:1+
  • Icones tem contraste 3:1+
  • Funciona em light e dark mode
  • Ordem logica de foco (tab order)
  • Headings marcados com accessibilityRole="header"
  • Conteudo agrupado logicamente

Estados

  • Estados disabled comunicados
  • Estados selected/checked comunicados
  • Feedback de erro acessivel

Patterns a Detectar com Grep

# TouchableOpacity sem accessibilityLabel
grep -r "TouchableOpacity" --include="*.tsx" | grep -v "accessibilityLabel"

# Pressable sem accessibilityLabel
grep -r "Pressable" --include="*.tsx" | grep -v "accessibilityLabel"

# Button sem accessibilityLabel
grep -r "<Button" --include="*.tsx" | grep -v "accessibilityLabel"

# width/height menores que 44
grep -rE "(width|height):\s*[1-3][0-9]" --include="*.tsx"

Ferramentas de Teste

iOS

  • VoiceOver: Settings > Accessibility > VoiceOver
  • Accessibility Inspector (Xcode)

Android

  • TalkBack: Settings > Accessibility > TalkBack
  • Accessibility Scanner app

Comandos do Projeto

# Rodar lint de acessibilidade
npm run lint -- --rule react-native-a11y/has-accessibility-props:error

Tokens de Acessibilidade

import { Tokens } from '@/theme/tokens';

// Touch targets
Tokens.touchTargets.min; // 44 (minimo WCAG)
Tokens.touchTargets.medium; // 44
Tokens.touchTargets.large; // 56
Tokens.touchTargets.xl; // 64

// Emoji sizes (garantir legibilidade)
Tokens.emojiSizes.lg; // 44 (WCAG compliant)

Severidade de Violacoes

ViolacaoSeveridadeImpacto
Sem accessibilityLabelAltaUsuario nao sabe o que e
Touch target < 44ptAltaDificil de tocar
Contraste < 4.5:1AltaTexto ilegivel
Sem accessibilityRoleMediaContexto perdido
Imagem sem altMediaConteudo perdido
Ordem de foco erradaBaixaNavegacao confusa

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です