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 o seu app 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, 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
Compartilha o controller ui-dialog
do Dialog, mas sem fechar pelo backdrop nem pelo Esc,
e com role="alertdialog".
ui_alert_dialog_action só fecha o diálogo, então
ligue você mesmo a ação de verdade (um form, Turbo, Stimulus) ao botão.
Ou renderize os componentes diretamente:
Composição
Exemplos
Confirmação de exclusão
Nem o backdrop nem o Esc fecham: é preciso 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 usa close_on_backdrop: false e close_on_escape: false. |
AlertDialog::Trigger |
variant, size |
:outline, :default |
O botão que abre o diálogo. |
AlertDialog::Action |
variant, size |
:default |
O botão de confirmação; fecha o diálogo depois que a sua ação roda. |
AlertDialog::Cancel |
variant, size |
:outline |
O botão que fecha o diálogo sem confirmar. |