# Confirm Morph

Botão de apagar que vira a pergunta no próprio lugar, depois o andamento e o resultado com desfazer.

- Nome no registry: `confirm-morph`
- Tipo: componente
- Dependências npm: lucide-react, motion
- Demo: https://ui.visantlabs.com/c/confirm-morph
- Categorias: controles, botao, confirmacao, destrutivo, desfazer

## Quando usar

- Use quando: Apagar item com confirmação no próprio botão, andamento e desfazer, quando a ação é reversível
- Evite quando: Ação irreversível e cara: hold-to-confirm; pagamento ou envio no celular, slide-to-confirm

## Instalar

```bash
npx shadcn@latest add @visant/confirm-morph
```

## Usar

```tsx
<ConfirmMorph
  cancelLabel="Não"
/>
```

## API

### ConfirmMorph

- `label: any` — Rótulo em repouso, como "Apagar projeto".
- `cancelLabel?: string = "Cancelar"`
- `className?: string`
- `confirmLabel?: string = "Apagar"`
- `confirmTimeout?: number = 6000` — Ms até a pergunta sem resposta voltar ao repouso. 0 desliga.
- `disabled?: boolean = false`
- `doneLabel?: string = "Apagado"`
- `errorLabel?: string = "Não deu certo"`
- `icon?: any` — Ícone antes do rótulo em repouso.
- `onCancel?: () => void`
- `onConfirm?: () => void | Promise<unknown>` — Roda ao confirmar. Devolva promessa pra mostrar o "apagando"; rejeição mostra o erro.
- `onUndo?: () => void | Promise<unknown>` — Se existir, o resultado ganha Desfazer.
- `pendingLabel?: string = "Apagando"` — Ao lado do giro, enquanto `onConfirm` resolve.
- `prompt?: any` — A pergunta, como "Apagar 3 arquivos?". Sem ela, vira o rótulo com interrogação.
- `resultTimeout?: number = 5000` — Ms que o resultado fica antes de voltar ao repouso. 0 desliga.
- `retryLabel?: string = "Tentar de novo"`
- `tone?: "danger" | "brand" = "danger"` — `danger` pinta o Apagar de destrutivo; `brand` usa a cor da marca, pra ação importante mas reversível.
- `undoingLabel?: string = "Restaurando"` — Ao lado do giro, enquanto `onUndo` resolve.
- `undoLabel?: string = "Desfazer"`
