Dialog
Uma janela sobreposta à página principal, construída sobre o elemento
<dialog> nativo.
Instalação
O Shadwire segue o modelo open-code do shadcn/ui: o código-fonte do componente é copiado para a sua aplicação e passa a ser seu. Instale com a CLI:
O item dialog
do registry instala estes arquivos:
-
app/components/ui_component.rb -
app/components/ui/dialog_component.rb -
app/components/ui/dialog/trigger_component.rb -
app/components/ui/dialog/content_component.rb -
app/components/ui/dialog/header_component.rb -
app/components/ui/dialog/footer_component.rb -
app/components/ui/dialog/title_component.rb -
app/components/ui/dialog/description_component.rb -
app/components/ui/dialog/close_component.rb -
app/components/ui/button_component.rb -
app/components/ui/icon_component.rb -
app/helpers/ui/dialog_helper.rb -
app/helpers/ui/button_helper.rb -
app/helpers/ui/icon_helper.rb -
app/javascript/controllers/ui_dialog_controller.js -
vendor/shadwire/shadwire.css
Este componente usa Stimulus: a aplicação precisa de
importmap-rails e
stimulus-rails
com carregamento automático de controllers.
Ainda não instalou a CLI?
gem install shadwire
e depois shadwire init.
Uso
showModal() entrega
focus trap, top layer, Esc e
restauração de foco nativamente; o controller adiciona animações, fechamento
pelo backdrop e o wiring de
aria-labelledby/aria-describedby.
Ou renderize os componentes diretamente:
Composição
Exemplos
Padrão
Formulário de perfil em um <dialog> nativo: focus trap, Esc e restauração de foco vêm do navegador.
Sem fechar pelo backdrop
close_on_backdrop: false ignora cliques fora do painel.
Footer custom
show_close_button: false remove o X; componha seus próprios botões com ui_dialog_close.
Referência da API
Todas as partes aceitam class /
class_name e
**attrs.
| Componente | Argumento | Padrão | Descrição |
|---|---|---|---|
Dialog |
close_on_backdrop |
true |
Fecha ao clicar fora do painel (no ::backdrop). |
Dialog::Trigger / Dialog::Close |
variant, size |
:default / :outline |
Encapsulam Ui::ButtonComponent com as ações de abrir/fechar. |
Dialog::Content |
show_close_button |
true |
Renderiza o botão X no canto superior direito. |
Dialog::Title / Dialog::Description |
— | — | Ligados ao diálogo via aria-labelledby/aria-describedby na abertura. |