# ConfirmDialog

![Status](https://img.shields.io/badge/status-stable-brightgreen)

Serviço para exibir diálogos de confirmação modais de forma programática. Utilizado via `ConfirmDialogService.confirm()` — não é instanciado diretamente no template.

## Quando usar

- Confirmar ações destrutivas como exclusão ou arquivamento de registros
- Solicitar confirmação explícita antes de operações irreversíveis
- Exibir alertas que requerem reconhecimento do usuário (sem botão de cancelar)

## Quando não usar

- Mensagens de feedback simples sem necessidade de confirmação — use [`Alert`](../alert/README.md) ou notificações inline
- Fluxos com formulários complexos — use [`Dialog`](../dialog/README.md) com `DialogService`

## Instalação

```typescript
import { ConfirmDialogService } from '@seniorsistemas/angular-components/confirm-dialog';
import { DialogService } from '@seniorsistemas/angular-components/dialog';

@Component({
  standalone: true,
  providers: [ConfirmDialogService, DialogService],
})
export class MeuComponent {}
```

## Uso básico

```typescript
// No componente — injete o serviço e chame confirm()
constructor(private confirmDialogService: ConfirmDialogService) {}

openConfirm() {
  this.confirmDialogService.confirm({
    header: 'Remover item?',
    message: 'Esta ação não pode ser desfeita.',
    acceptLabel: 'Remover',
    rejectLabel: 'Cancelar',
    accept: () => this.delete(),
    reject: () => console.log('cancelado'),
  });
}
```

## API

### Tipos

```typescript
type ConfirmDialog = {
  header: string;        // Título do diálogo (obrigatório)
  message: string;       // Mensagem exibida no corpo (obrigatório)
  acceptLabel: string;   // Label do botão de confirmar (obrigatório)
  accept: VoidFunction;  // Callback ao confirmar (obrigatório)
  rejectLabel?: string;  // Label do botão de cancelar (opcional)
  reject?: VoidFunction; // Callback ao cancelar ou fechar (opcional)
}
```

### ConfirmDialogService

| Método | Parâmetros | Descrição |
|--------|-----------|-----------|
| `confirm` | `confirmDialog: ConfirmDialog` | Abre o diálogo de confirmação modal |

## Exemplos

### Confirmação de exclusão

```typescript
this.confirmDialogService.confirm({
  header: 'Remover este item?',
  message: 'Uma vez removido, o item não poderá ser restaurado.',
  acceptLabel: 'Remover',
  rejectLabel: 'Cancelar',
  accept: () => { this.lastAction = 'Confirmado: item removido'; },
  reject: () => { this.lastAction = 'Cancelado'; },
});
```

### Alerta sem botão de cancelar

```typescript
this.confirmDialogService.confirm({
  header: 'Atividade concluída',
  message: 'Salvamos esta atividade em seu repositório.',
  acceptLabel: 'Entendi',
  accept: () => { this.lastAction = 'Usuário confirmou'; },
});
```

## Acessibilidade

- O diálogo é aberto em uma janela modal com backdrop que bloqueia interação com o conteúdo de fundo
- O foco é capturado dentro do diálogo enquanto estiver aberto
- Fechar via Escape chama o callback `reject` quando definido

## Componentes relacionados

- [`Dialog`](../dialog/README.md) — quando precisar de formulários ou conteúdo customizado na modal
- [`Alert`](../alert/README.md) — para mensagens de feedback inline sem confirmação
