Exige confirmações destrutivas para identificar o alvo e a consequência, seguir o comportamento acessível do teclado em modais e usar perfis de confirmação mais rigorosos apenas quando o risco justificar.
Status do pacote: contexto de referência pronto para revisão humana. O contrato e os cenários de teste estão completos, mas não se afirma que uma implementação adotante os tenha aprovado.
Decisão
Uma ação destrutiva abre um modal que nomeia a consequência e o nome de exibição do alvo no servidor, não um aviso genérico. O foco do teclado permanece dentro do modal até confirmar, cancelar ou dispensar, e o foco inicial normalmente favorece a ação menos destrutiva, a menos que o conteúdo precise ser lido primeiro. A confirmação por digitação do nome é um perfil de alto impacto, não um requisito universal. Aplicam-se as semânticas padrão de formulário: Enter pode submeter apenas quando o controle explícito de confirmação estiver habilitado e a confirmação configurada for válida. Desfazer após o sucesso é oferecido somente quando existir um caminho real de recuperação.
Escopo
- Diálogos de confirmação para ações destrutivas em um alvo nomeado.
- Armadilha de foco, escape e confirmação por digitação do nome.
- Exclusões reversíveis versus purgas irreversíveis.
- Desfazer somente quando existir um caminho de tolerância.
Fora deste bloco
- Agendas de purga no backend e expiração de backups.
- Substituir o diálogo por um spinner que remove a armadilha.
- Autorização além de recusar confirmação sem permissão.
Contrato
- O nome acessível do diálogo inclui o verbo e o nome de exibição do alvo no servidor.
- Tabulação circula apenas dentro do diálogo; controles em segundo plano ficam inertes até o fechamento.
- Escape e cancelar fecham sem efeitos colaterais e restauram o controle previamente focado.
- No perfil de alto impacto
type-name, confirmar permanece desabilitado até que a string digitada seja igual arequired_phrase; pressionar Enter segue o comportamento normal do formulário e não pode ignorar o estado desabilitado ou inválido. - Ativações por mouse, toque e teclado invocam a mesma ação explícita de confirmação apenas após validação; o risco não é inferido pelo método de entrada.
- Ações irreversíveis definem
reversible: false, comunicam claramente a consequência permanente em texto localizado e nunca prometem desfazer. A palavra literal em inglês “irreversible” não é obrigatória.
Implementação
Use um modal com aria-modal. Escolha o foco inicial usando o conteúdo do diálogo e o perfil de risco, geralmente cancelar para uma confirmação destrutiva curta ou um elemento explicativo estático para consequências longas. Busque o nome canônico antes de abrir. Após confirmação reversível, retorne um id de operação para desfazer. Após confirmação irreversível, mostre um recibo estático.
Tratamento de falhas
Se a busca do nome falhar, não abra um diálogo de suposição. Frases incompatíveis mantêm o diálogo aberto e anunciam uma vez. Após falha de rede na confirmação, mostre estado incerto e atualize a existência; não tente repetir silenciosamente uma purga irreversível.
Verificação
Verifique o confinamento do teclado, comportamento do Escape permitido pelo perfil do produto, restauração do foco, recusa de nome digitado inválido e texto claro para ação permanente. Desfazer deve aparecer apenas quando a mutação for reversível. Execute os cenários empacotados, incluindo uma passagem com leitor de tela no nome acessível.
Os exemplos com aparência executável neste pacote são fixtures e contratos de aceitação. Execute
python tools/validate.py a partir da raiz da coleção para verificar a estrutura e metadados do pacote; então
implemente e execute os cenários no repositório alvo.
Suposições para adoção
- Nomes e valores numéricos em
example.yamlsão um perfil de adoção, não padrões universais. - A equipe adotante deve mapear atores, classes de dados, vocabulário de erros e propriedade para seu sistema.