# DialogConfirmation — Padrão de Componente > **Stack**: Vue 3 + PrimeVue 4 + Tailwind CSS --- ## Regras gerais | Propriedade | Valor obrigatório | |---|---| | `group` | sempre `"headless"` — desacopla o template do trigger | | `ConfirmDialog` | declarado **uma única vez**, no componente pai (página) | | Filhos | disparam via `useConfirm()` com `group: 'headless'` — sem declarar `ConfirmDialog` próprio | | `icon` | passado em `confirm.require({ icon })` — classe PrimeIcons sem o prefixo `pi` (ex: `'pi-trash'`) | | `color` | passado em `confirm.require({ color })` — hex; define o fundo do círculo e a cor do botão Confirmar | | `ConfirmationService` | obrigatório em `main.js` — `app.use(ConfirmationService)` | --- ## Arquitetura pai / filho ``` Pai (página) └── ← único, renderiza aqui ├── Filho A (componente qualquer) → confirm.require({ group: 'headless', ... }) └── Filho B (Dialog interno) → confirm.require({ group: 'headless', ... }) ``` > O `ConfirmDialog` **não** deve ser colocado dentro de um `` filho — isso causaria dois popups simultâneos. Sempre no pai. --- ## Setup obrigatório — `main.js` ```js import ConfirmationService from 'primevue/confirmationservice' app.use(ConfirmationService) // sem isso, useConfirm() não funciona ``` --- ## Template do `ConfirmDialog` (somente no pai) ```vue ``` --- ## Uso nos componentes (pai ou filhos) ```vue ``` --- ## Paleta de ícones e cores por ação | Ação | `icon` | `color` | Observação | |---|---|---|---| | Excluir / Remover | `pi-trash` | `#ef4444` | Vermelho — ação destrutiva | | Salvar / Confirmar | `pi-save` | `var(--p-primary-color)` | Cor primária do tema | | Editar / Atualizar | `pi-pencil` | `#f97316` | Laranja — mudança de estado | | Aviso / Atenção | `pi-exclamation-triangle` | `#eab308` | Amarelo — ação reversível | | Info / Neutro | `pi-info-circle` | `#3b82f6` | Azul — informativo | --- ## Referência completa de `confirm.require` ```js confirm.require({ group: 'headless', // obrigatório — aponta para o ConfirmDialog correto header: 'Título do popup', // linha em negrito message: 'Descrição clara.', // linha secundária icon: 'pi-trash', // sufixo PrimeIcons sem o "pi " inicial color: '#ef4444', // hex — fundo do círculo + cor do botão Confirmar accept: () => { /* ação confirmada */ }, reject: () => { /* opcional — ação cancelada */ } }) ``` --- ## Checklist antes de usar - [ ] `ConfirmationService` registrado no `main.js` - [ ] `` declarado **apenas no pai**, antes do conteúdo - [ ] Filhos usam `useConfirm()` com `group: 'headless'` — sem `ConfirmDialog` próprio - [ ] `icon` passado como sufixo PrimeIcons: `'pi-trash'`, não `'pi pi-trash'` - [ ] `color` em hex para ações com semântica de cor (delete = `#ef4444`) - [ ] `header` curto e direto | `message` com contexto suficiente para o usuário decidir - [ ] `accept` contém a ação real — `reject` é opcional --- ## Variações de confirmação | Contexto | `header` | `icon` | `color` | |---|---|---|---| | Excluir registro | `'Excluir ?'` | `pi-trash` | `#ef4444` | | Remover item de lista | `'Remover campo?'` | `pi-trash` | `#ef4444` | | Salvar com impacto | `'Confirmar alterações?'` | `pi-save` | primária | | Atualizar com risco | `'Atualizar ?'` | `pi-pencil` | `#f97316` | | Ação irreversível genérica | `'Tem certeza?'` | `pi-exclamation-triangle` | `#eab308` |