Skip to content

MeToast

Toasts de notificação empilhados no canto inferior direito da tela. Disparados via this.$root.$emit('show-toast', payload) ou EventBus.$emit('show-toast', payload).

Playground

Uso Básico

js
const payload = {
  type: 'success',
  message: 'Exportado com sucesso!',
}
this.$root.$emit('show-toast', payload)

Sub-mensagem

js
const payload = {
  type: 'success',
  message: 'Arquivo exportado.',
  subMessage: 'Verifique na sua pasta de downloads.',
}
this.$root.$emit('show-toast', payload)

Timeout Customizado

Por padrão o toast dura 10 segundos. Use timeout (em ms) para alterar.

js
const payload = {
  type: 'success',
  message: 'Exportado com sucesso!',
  iconLeft: '',
  subMessage: 'Verifique na sua pasta de downloads.',
  timeout: 5000,
}
this.$root.$emit('show-toast', payload)

Com Ação

Toasts clicáveis executam um callback e se fecham automaticamente.

js
const payload = {
  type: 'info',
  message: 'Clique para ver detalhes.',
  action: () => {
    this.$router.push('/detalhes')
  },
}
this.$root.$emit('show-toast', payload)

Ícones Customizados

Use iconLeft para substituir o ícone padrão do tipo, e iconRight para substituir o botão de fechar.

js
const payload = {
  type: 'info',
  message: 'Novo comentário recebido.',
  iconLeft: 'chat_bubble',
}
this.$root.$emit('show-toast', payload)

Toast Indefinite

Um toast indefinite não remove automaticamente. Use hide-toast para fechá-lo — ideal para estados de carregamento.

js
// Abre o toast de loading
const payload = {
  type: 'gray',
  message: 'Processando...',
  indefinite: true,
  id: 'meu-loading',
}
this.$root.$emit('show-toast', payload)

// Fecha após a operação concluir
this.$root.$emit('hide-toast', 'meu-loading')

Via EventBus

Use EventBus para disparar toasts fora do contexto Vue (ex: services, Axios interceptors).

js
import EventBus from '@/utils/EventBus'

EventBus.$emit('show-toast', {
  type: 'error',
  message: 'Sessão expirada.',
  subMessage: 'Faça login novamente.',
})

API

Payload

CampoTipoPadrãoDescrição
messagestringTexto principal do toast
type'success' | 'error' | 'info' | 'gray'Variante visual e ícone padrão
subMessagestringTexto secundário abaixo da mensagem
iconLeftstringícone do tipoÍcone Material Icons à esquerda
iconRightstring'close'Ícone Material Icons à direita
action() => voidCallback ao clicar no toast; fecha automaticamente
timeoutnumber10000Duração em ms
indefinitebooleanfalseNão remove automaticamente
idstringIdentificador para toasts indefinite (necessário para hide-toast)

Ícones padrão por tipo

TipoÍcone
successcheck_circle
errorhighlight_off
infoinfo
grayinfo

Eventos

EventoPayloadDescrição
show-toastToastPayloadExibe um toast
hide-toaststring (id)Remove um toast indefinite pelo id

Componente único

Monte <MeToast /> apenas uma vez na aplicação (ex: App.vue). Múltiplas instâncias recebem os mesmos eventos e exibem toasts duplicados.