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 o seu app 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, então 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
O showModal() do navegador já prende o foco,
coloca o diálogo acima de tudo, fecha com Esc e
devolve o foco ao fechar; o controller acrescenta as animações, o fechamento
pelo backdrop e a ligação de
aria-labelledby/aria-describedby.
Ou renderize os componentes diretamente:
Composição
Exemplos
Padrão
Um formulário de perfil num <dialog> nativo: o navegador cuida de prender o foco, do Esc e de devolver o foco ao fechar.
Sem fechar pelo backdrop
close_on_backdrop: false ignora cliques fora do painel.
Rodapé personalizado
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 |
:outline, :default |
Encapsulam o Ui::ButtonComponent com as ações de abrir e fechar. |
Dialog::Content |
show_close_button |
true |
Renderiza o botão X no canto superior direito. |
Dialog::Title / Dialog::Description |
— | — | Ligados ao diálogo por aria-labelledby/aria-describedby quando ele abre. |