Ir para o conteúdo principal
WBC - GovBR-DS
Copiar página como Markdown para IA

Modal

Componente estável e recomendada para novos projetos.
Anatomia, uso, comportamento visual e recomendações conceituais são mantidos pelo Padrão Digital de Governo. Esta página documenta a implementação Web Components e sua API executável.

Visão Geral

Para a documentação completa, incluindo diretrizes de uso, acessibilidade e exemplos visuais, consulte o Design System do GovBR.

Exemplo(s)

Desktop (100%)
Tablet - 768px
iPhone (iOS) - 390x844
Android - 360x800
Compartilhar URL
Mudar fundo
Abrir no StackBlitz
Tela cheia
HTML
Controles
JS
CSS
Console
Angular (Somente leitura)
React (Somente leitura)
Vue (Somente leitura)
Acessibilidade
Recolher controles e código
Formatar código
Resetar código para o estado inicial
Copiar para a área de transferência

Composição com scrim

O modal continua sendo o conteúdo do br-scrim e preserva open(), showModal(), close(), eventos, foco e slots. Quando o scrim fullscreen usa <dialog>, o conjunto entra na top layer; em ambientes sem showModal(), usa a camada bloqueadora 4 e o gerenciamento de foco legado.

A ordem de abertura define a precedência entre diálogos nativos: o último bloqueador aberto fica ativo. No fallback CSS, mantenha apenas um bloqueador legado ativo por vez.

Propriedades

alignFooter

Atributoalign-footer
DescriçãoDefine o alinhamento do conteúdo do rodapé (slot="footer").
Tipo"center" | "end" | "start"
Valor padrão'center'

autoClose

Atributoauto-close
DescriçãoDefine o comportamento de fechamento do modal.

- true: O modal fecha automaticamente ao clicar no botão fechar.
- false: O modal emite brModalBeforeClose mas não fecha, permitindo a implementação de lógica customizada (validação, confirmação, etc.) antes do fechamento. O desenvolvedor deve
controlar manualmente o fechamento.
Tipoboolean
Valor padrãofalse

customId

Atributocustom-id
DescriçãoIdentificador único do componente.
Quando omitido, um valor é gerado automaticamente.

> Padrão: valor único gerado por generateUniqueId().
Tipostring
Valor padrãogenerateUniqueId()

initialFocusSelector

Atributoinitial-focus-selector
DescriçãoSeletor CSS do elemento que deve receber foco quando o modal é aberto (ex: "#meu-elemento").
Tipostring
Valor padrão---

scrollable

Atributoscrollable
DescriçãoSe true, habilita a rolagem interna do conteúdo do modal.
Tipoboolean
Valor padrãofalse

show

Atributoshow
DescriçãoControla a visibilidade do modal.
Tipoboolean
Valor padrãofalse

size

Atributosize
DescriçãoDefine o tamanho (largura) do modal.
Tipo"auto" | "large" | "medium" | "small" | "xsmall"
Valor padrão'medium'

titleText

Atributotitle-text
DescriçãoO texto do título a ser exibido no cabeçalho do modal. Usado quando o slot header não é fornecido.
Tipostring
Valor padrão---

Slots

NomeDescrição
"close-button"Botão de fechar customizado. Se não for usado, o botão padrão será exibido.
"default"Corpo do modal.
"footer"Rodapé do modal.
"header"Cabeçalho do modal. Se não for usado, o title-text será exibido.

Eventos

EventoDescriçãoDepreciaçãoPropagação
brModalBeforeCloseEvento emitido antes do fechamento do modal (quando o botão X é clicado). Se autoClose está desativado, o desenvolvedor deve fechar manualmente o modal após este evento. Se autoClose está ativado, o modal fecha automaticamente após este evento.---true
brModalCloseEvento emitido após o modal ser fechado (quando show muda de true para false).---true
brModalOpenEvento emitido quando o modal é aberto (quando show muda de false para true).---true
brModalOpenedEvento emitido após o modal estar completamente aberto e com o foco estabilizado dentro dele. Complementa brModalOpen (que dispara imediatamente ao abrir): use brModalOpened quando precisar interagir com o modal já pronto.---true

Métodos

close

DescriçãoMétodo público para fechar o modal
Assinaturaclose() => Promise<void>
Parâmetros---

open

DescriçãoMétodo público para abrir o modal
Assinaturaopen() => Promise<void>
Parâmetros---

requestClose

DescriçãoSolicita fechamento e permite cancelamento pelo evento cancel.
AssinaturarequestClose() => Promise<void>
Parâmetros---

showModal

DescriçãoAbre o modal usando a nomenclatura de HTMLDialogElement.
AssinaturashowModal() => Promise<void>
Parâmetros---

toggle

DescriçãoMétodo público para alternar a visibilidade do modal
Assinaturatoggle() => Promise<void>
Parâmetros---

CSS Shadow Parts

NomeDescrição
"body"Corpo do modal.
"close-button"Botão de fechar do modal.
"container"Wrapper principal do modal.
"footer"Rodapé do modal.
"header"Cabeçalho do modal.
"title"Título do modal.

Dependências

Depende de

Gráfico

Eventos nativos

Elemento HTML de referência

A referência é <dialog>. O modal independente usa esse elemento e a top layer; dentro de br-scrim, o componente preserva um contêiner com role="dialog" para que exista apenas um owner da sobreposição.

Como ouvir os eventos

const modal = document.querySelector('br-modal');

modal.addEventListener('cancel', (event) => {
event.preventDefault();
});

Eventos nativos suportados

EventoQuando ocorreBubblesComposedCancelableHostObservações
cancelcomponente recebe pedido de fechamentoNãoNãoSimSimNormalizado no host; cancelar mantém o modal aberto.
closefechamento terminaNãoNãoNãoSimNormalizado uma vez no host e sem returnValue.

Eventos não aplicáveis ou não suportados

EventoSituaçãoMotivoAlternativa
beforetoggle / toggleNão suportadoNão há modo não modal no contrato.Observe show e os eventos documentados.
returnValueNão suportadoO contrato não define resultado de diálogo.Transporte dados na aplicação antes de fechar.

Eventos customizados do componente

EventoQuando ocorreDetailBubblesComposedCancelable
brModalBeforeCloseantes do pedido de fechamentonenhumlegadolegadolegado
brModalCloseciclo legado de fechamentonenhumlegadolegadolegado
brModalOpen / brModalOpenedabertura solicitada/concluídanenhumconforme declaraçãoconforme declaraçãoNão

Valor e estado após o evento

Leia show no host. Os eventos cancel e close não transformam o componente em HTMLDialogElement.

Frameworks

Registre cancel/close diretamente no host em HTML, React por ref, Angular e Vue com seus listeners DOM. Eventos brModal* continuam separados.

Acessibilidade

O componente gerencia foco e Escape, mas a equivalência completa com modal nativo depende dos testes de foco, inertização e restauração documentados no componente.

Evidência de teste

_tests/modal.e2e.tsx cobre standalone, composição com scrim, cancelamento, fechamento único e ARIA em Chromium headless. A matriz completa em três engines permanece pendente.

Migração de <br-modal> (1.x → 2.x)

O modal continua sendo controlado por show, mas títulos, rodapé e dimensionamento foram reorganizados.

Propriedades e eventos

API 1.xAPI 2.xAção na migração
buttonsslot footerMova os botões para o rodapé.
centerButtonsalignFooterRenomeie e revise os valores.
closableslot close-buttonRemova a flag e personalize o botão, se necessário.
close-modalbrModalCloseAtualize o listener.
maxHeightscrollableTroque o limite fixo pelo comportamento de rolagem.
showshowMantenha.
titletitleText ou slot headerRenomeie ou mova para o slot quando houver marcação customizada.
widthsizeConverta para o tamanho disponível.

Exemplo

1.x:

<br-modal title="Confirmação" width="large" center-buttons>
<template #buttons><br-button>OK</br-button></template>
</br-modal>

2.x:

<br-modal title-text="Confirmação" size="large" align-footer="center">
<div slot="footer"><br-button>OK</br-button></div>
</br-modal>