# Dialog — Padrão de Componente > **Stack**: Vue 3 + PrimeVue 4 + Tailwind CSS --- ## Regras gerais | Propriedade | Valor obrigatório | |---|---| | `modal` | sempre `true` | | `maximizable` | sempre presente — botão nativo do PrimeVue, sem estado manual | | `:draggable` | sempre `false` | | `:closable` | `!saving` — desabilita o X durante operações assíncronas | | `:dismissableMask` | `!saving` — impede fechar clicando fora durante saving | | `pt:mask:class` | `backdrop-blur-xs` | | Largura | `w-[50rem]` (padrão); responsivo via `:breakpoints` | | Breakpoints | `{ '1199px': '90vw', '768px': '94vw' }` | --- ## Estrutura obrigatória ``` ├── #header ← dot de cor (se aplicável), título/subtítulo, btn Excluir ├── Banner ← preview visual (opcional — apenas quando há cor/identidade visual) ├── Corpo ← campos do formulário └── #footer ← Cancelar (flat) | Salvar (primary) ``` --- ## Configuração completa do `` ```vue ``` ### Detalhes do `pt` | Chave | O que faz | |---|---| | `header` | `!p-3` padding uniforme; `!rounded-t-[12px]` borda top arredondada; `border-b` + `shadow` separador com profundidade; `bg-gray-100` fundo levemente cinza | | `content` | `!p-3` padding interno do corpo | | `footer` | `!p-0` remove padding nativo (controlado pelo wrapper interno); `!rounded-b-[12px]` borda bottom arredondada; `border-t` + `shadow` separador; `bg-gray-100` fundo levemente cinza | | `pcCloseButton` | `!rounded-md` remove o círculo nativo; `hover:!text-red-500` feedback de danger no hover | | `pcMaximizeButton` | `!rounded-md` remove o círculo nativo; `hover:!text-primary` feedback de cor primária no hover | > O `!` (important) é necessário porque o PrimeVue injeta estilos inline nos botões e no root do Dialog — sem ele o Tailwind perde a disputa de especificidade. --- ## Header — slot `#header` ``` [dot-cor] [título / subtítulo] [btn-excluir] ← Close e Maximize nativos vêm após ``` - O PrimeVue injeta **Maximize** e **Close** automaticamente à direita do slot `#header`. - O botão **Excluir** fica **sempre no header**, nunca no footer. - Excluir desabilitado quando o registro é nativo/padrão: `:disabled="saving || isNativeRecord"`. ```vue ``` --- ## Footer — slot `#footer` ```vue ``` > **Regra**: Cancelar = `severity="secondary" text` + `hover:!text-red-500`. Salvar = primary (sem severity, usa o padrão do tema). Padding controlado pelo `div` interno (`px-3 py-3`), não pelo `pt.footer`. --- ## Maximizar Use a prop nativa `maximizable`. O PrimeVue injeta e gerencia o botão automaticamente — sem `ref`, sem `isMaximized`, sem `