Docs›Componentes (Admin)›mad-toast
Componentes (Admin)

mad-toast

Notificações Sonner-style (PHP MadToast::* ou JS).

Notificacoes estilo Sonner — empilhadas, swipe-to-dismiss, auto-dismiss. Disparadas tanto do PHP (via MadResponse / MadToast) quanto do JS (via madToast()).

Setup — incluir UMA vez no layout

O <mad-toast /> registra a regiao de notificacoes (Alpine madToastSystem()). Deve aparecer uma unica vez no layout principal — nunca repetir em paginas/drawers.

{{-- app/templates/theme-notch/... ou layout principal --}}
<body>
    ...
    <mad-toast />
</body>

Sem o <mad-toast /> no layout, nenhum toast renderiza (PHP ou JS).

Tipos

Tipo Uso
success Acao concluida com sucesso
info Informacao neutra
warning Atencao / aviso
danger Erro / falha

Disparar do PHP — MadToast factory (atalho)

Retorna um MadResponse ja com o op de toast — encadeavel.

use Mad\Ui\MadToast;

return MadToast::success('Registro salvo!');
return MadToast::danger('Falha ao salvar.');
return MadToast::warning('Verifique os campos.');
return MadToast::info('Sincronizacao iniciada.');

// Com titulo
return MadToast::success('Pedido aprovado!', 'Sucesso');

// Com titulo e posicao — assinatura:
// MadToast::<tipo>(string $message, string $title = '', string $position = 'top-right')
return MadToast::warning('Sessao expirando', 'Atencao', 'bottom-center');

// Encadeando outras ops
return MadToast::success('Salvo!')
    ->closeDrawer()
    ->removeRow($id, MinhaListagem::class);

Disparar do PHP — MadResponse->toast()

Quando ja tem um MadResponse em construcao, usar o metodo direto.

return (new MadResponse())
    ->toast('Pedido salvo!', 'success')
    ->closeDrawer();

// Com titulo e posicao
return (new MadResponse())
    ->toast('Erro de validacao', 'danger', 'Atencao', 'top-center');

Assinatura: toast(string $message, string $type = 'info', string $title = '', string $position = 'top-right')

Posicoes: top-left, top-center, top-right (padrao), bottom-left, bottom-center, bottom-right.

Disparar do JS — madToast()

// Forma curta
madToast('Mensagem salva!', 'success');
madToast('Erro ao salvar.', 'danger', 'Erro', 6000);

// Helpers tipados
madToast.success('Pedido aprovado!');
madToast.danger('Falha na conexao');
madToast.warning('Sessao expirando');
madToast.info('Nova versao disponivel');

// Forma objeto (controle total)
madToast({
    message: 'Mensagem',
    type: 'success',
    title: 'Titulo opcional',
    duration: 6000
});

Assinatura: madToast(message, type, title, duration) — duracao default 4000ms.

Padrao de uso em forms

public function onSave(): MadResponse
{
    try {
        $this->form->validate(MeuModelo::rules($this->registroId));

        DB::connection('business')->transaction(function () {
            $registro = MeuModelo::findOrNew($this->registroId);
            $this->form->save($registro);
            $this->registroId = (int) $registro->id;
        });

        return (new MadResponse())
            ->toast('Salvo!', 'success')
            ->closeDrawer();

    } catch (MadValidationException $e) {
        return $e->asModal();
    } catch (Throwable $e) {
        return MadMessage::error('Erro', $e->getMessage());
    }
}

Quando usar toast vs modal

Cenario Usar
Confirmacao rapida de sucesso MadToast::success(...)
Aviso nao-bloqueante MadToast::warning(...)
Erro de validacao por campo MadValidationException::asModal()
Erro fatal / mensagem que precisa atencao MadMessage::error() (modal)
Confirmacao destrutiva (excluir) madConfirm() (modal)

NUNCA fazer

{{-- ERRADO: incluir <mad-toast /> em cada pagina --}}
<mad-page-container>
    <mad-toast />
    ...
</mad-page-container>

{{-- CERTO: incluir UMA vez no layout principal --}}
// ERRADO: script() para disparar toast
return (new MadResponse())->script("madToast('Salvo!', 'success')");

// CERTO: usar a op nativa
return (new MadResponse())->toast('Salvo!', 'success');

// ERRADO: echo / print de mensagem
echo "Salvo!";

// CERTO
return MadToast::success('Salvo!');
// ERRADO: alert() nativo
alert('Salvo!');

// CERTO
madToast.success('Salvo!');