Pular para o conteúdo

Modal

Diálogo centralizado para decisões, confirmação e conteúdo que bloqueia o fluxo.

Em cada stack

HTML e Astro
Classes itps-* do CSS Sinapse, com todas as variantes desta página.
React e Vue
Componentes padrão do shadcn (dialog) com o tema Sinapse: cores, fonte e raio vêm do tema, e as variantes itps-* desta página existem só no HTML. O Button é o Sinapse.

Confirmar exclusão

Esta ação não pode ser desfeita.

O paciente e todos os dados associados serão removidos permanentemente.

Instalação

O comando instala o Dialog da sua stack e o Button Sinapse com o tema Sinapse. Configure o registry uma vez por projeto em Comece por aqui.

terminal · React/Next

pnpm dlx shadcn@latest add @sinapse/modal

terminal · Vue 3/Nuxt 4

pnpm dlx shadcn-vue@latest add https://dsystem.sinapse.org.br/r/vue/modal.json

Sem shadcn, não há instalação por componente: use o CSS Sinapse e as classes da API copy-first desta página.

Uso

Em React/Next com shadcn/ui e Vue 3/Nuxt 4 com shadcn-vue, use os componentes compostos de Dialog. A stack gerencia foco, portal, Esc e acessibilidade.

Para HTML ou wrappers finos, use <dialog> nativo com itps-modal. Este site usa src/scripts/overlays.ts para inicializar [data-modal], abrir gatilhos com data-modal-open e fechar controles com data-modal-close; o pacote não inclui esse script, então o produto precisa abrir e fechar o <dialog> por conta própria.

Exemplos

Estrutura

PeçaReact/Next e Vue 3/Nuxt 4HTML
RaizDialog<dialog class="itps-modal" data-modal>
TriggerDialogTrigger[data-modal-open="id-do-modal"]
CabeçalhoDialogHeader, DialogTitle, DialogDescriptionitps-modal__header, aria-labelledby, aria-describedby
AçõesDialogFooteritps-modal__footer
FecharDialogCloseitps-modal__close ou [data-modal-close]

Status

Use alert quando a decisão pede atenção e error quando existe falha ou bloqueio.

Sem conexão

Suas alterações foram salvas localmente.

Confira a conexão antes de continuar o atendimento.

Falha no envio

O arquivo excede 10 MB.

Escolha outro arquivo ou compacte o documento antes de tentar novamente.

API copy-first

Classe/atributoUso
itps-modalSuperfície visual do <dialog>.
itps-modal--alert, itps-modal--errorStatus visual para atenção e bloqueio.
itps-modal__header, itps-modal__body, itps-modal__footerAnatomia interna.
itps-modal__closeBotão de fechamento com nome acessível.
data-modalMarca o dialog inicializável pelo script.
data-modal-open, data-modal-closeAbre por id e fecha o dialog atual.
aria-labelledby, aria-describedbyConectam título e descrição ao dialog.
aria-labelNomeia o botão de fechar quando ele usa só ícone.

Acessibilidade

Use modal para confirmação, decisão bloqueante ou tarefa curta. Para feedback transitório, prefira Toast; para conteúdo longo, Side Panel; para informação sem bloqueio, Callout ou Banner.

No shadcn, preserve DialogTitle e DialogDescription. Na API copy-first, conecte título e descrição com aria-labelledby e aria-describedby, use botão real para fechar com aria-label="Fechar" e deixe o <dialog> nativo controlar Esc e a modalidade.

Teclado e foco:

MomentoComportamento esperado
AbrirO foco entra no modal. Por padrão vai para o primeiro controle focável; em confirmação destrutiva, comece na ação segura (Cancelar).
AbertoTab e Shift+Tab circulam só dentro do modal; o resto da página fica inerte.
EscFecha o modal, como o botão Fechar.
FecharO foco volta ao botão que abriu o modal. Se esse botão sumiu (por exemplo, a linha foi excluída), mova o foco para um ponto próximo e estável.

No <dialog> aberto com showModal(), o navegador já prende o foco, fecha com Esc e devolve o foco ao gatilho; use autofocus no controle que deve receber o foco inicial, como no exemplo acima. No shadcn, o Dialog faz o mesmo; para escolher o foco inicial, use onOpenAutoFocus (React) ou @open-auto-focus (Vue).