Alert Dialog
Um diálogo modal que interrompe o fluxo e exige uma resposta explícita.
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 alert-dialog
do registry instala estes arquivos:
-
app/components/ui_component.rb -
app/components/ui/alert_dialog_component.rb -
app/components/ui/alert_dialog/trigger_component.rb -
app/components/ui/alert_dialog/content_component.rb -
app/components/ui/alert_dialog/header_component.rb -
app/components/ui/alert_dialog/footer_component.rb -
app/components/ui/alert_dialog/title_component.rb -
app/components/ui/alert_dialog/description_component.rb -
app/components/ui/alert_dialog/action_component.rb -
app/components/ui/alert_dialog/cancel_component.rb -
app/components/ui/button_component.rb -
app/helpers/ui/alert_dialog_helper.rb -
app/helpers/ui/button_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
Compartilha o controller ui-dialog
do Dialog, mas com backdrop e Esc desativados
e role="alertdialog".
ui_alert_dialog_action fecha o diálogo —
adicione a sua ação real (form, Turbo, Stimulus) ao botão.
Ou renderize os componentes diretamente:
Composição
Exemplos
Confirmação de exclusão
Backdrop e Esc não fecham — a pessoa precisa escolher Cancelar ou Continuar.
Referência da API
Todas as partes aceitam class /
class_name e
**attrs.
| Componente | Argumento | Padrão | Descrição |
|---|---|---|---|
AlertDialog |
— | — | Sempre injeta close_on_backdrop: false e close_on_escape: false. |
AlertDialog::Trigger |
variant, size |
:default |
Button que abre o diálogo. |
AlertDialog::Action |
variant, size |
:default |
Button de confirmação; fecha o diálogo após a sua ação. |
AlertDialog::Cancel |
variant, size |
:outline |
Button que dispensa o diálogo. |