Skip to content

Alert

Mensagens contextuais com tons semânticos. Três variantes: inline (em formulários e fluxos), banner (topo da página) e solid (modais destrutivos, outages).

Uso básico

vue
<script setup lang="ts">
import { Alert } from '@halfbyte/maka'
</script>

<template>
  <Alert tone="info" title="Informação">
    Seu cadastro foi recebido e está em análise.
  </Alert>
</template>

Tons

vue
<Alert tone="info"    title="Info">Uma mensagem informativa.</Alert>
<Alert tone="success" title="Sucesso">Operação realizada com sucesso.</Alert>
<Alert tone="warn"    title="Atenção">Verifique os dados antes de continuar.</Alert>
<Alert tone="error"   title="Erro">Não foi possível completar a ação.</Alert>
<Alert tone="neutral" title="Neutro">Uma nota adicional sem urgência.</Alert>

Tamanhos

Solid

Usado em modais de ação destrutiva ou banners de outage. Fundo cheio na cor do tom.

vue
<Alert tone="error"   variant="solid" title="Sistema indisponível">
  Estamos trabalhando para restaurar o serviço.
</Alert>
<Alert tone="success" variant="solid" title="Publicado">
  Seu conteúdo já está disponível para todos os usuários.
</Alert>

Com ações

vue
<Alert
  tone="error"
  title="Falha no envio"
  :actions="[
    { label: 'Tentar de novo', onClick: handleRetry },
    { label: 'Cancelar',       onClick: handleCancel, variant: 'ghost' }
  ]"
>
  Não foi possível enviar o formulário. Verifique sua conexão.
</Alert>

Sem ícone / sem fechar

vue
<!-- Sem ícone -->
<Alert tone="info" :hide-icon="true">Mensagem simples sem ícone.</Alert>

<!-- Sem botão de fechar -->
<Alert tone="warn" title="Atenção" :dismissible="false">
  Esta mensagem não pode ser fechada.
</Alert>
vue
<!-- Adicione ao topo do layout, abaixo da navbar -->
<Alert tone="warn" variant="banner" title="Manutenção programada">
  O sistema ficará indisponível no sábado das 02h às 06h.
</Alert>

Banner é um por página. Se houver vários alertas globais, agrupe em um "Notification Center" e mostre só o mais crítico.

Props

PropTipoPadrão
tone"info" | "success" | "warn" | "error" | "neutral""info"
size"sm" | "md" | "lg""md"
variant"inline" | "banner" | "solid""inline"
titlestring
hideIconbooleanfalse
actionsAlertAction[]
dismissiblebooleantrue
role"alert" | "status"auto

role é derivado automaticamente: alert para warn/error, status para os demais.

Eventos

EventoPayloadDescrição
@dismissEmitido ao fechar o alerta

Slots

SlotDescrição
defaultCorpo da mensagem
iconÍcone customizado (mantém o quadrado sólido ao redor)

Tipo AlertAction

ts
interface AlertAction {
  label:    string;
  onClick:  () => void;
  variant?: "primary" | "ghost";  // default: "primary" no primeiro, "ghost" nos demais
}

Toast

O useToast() usa o mesmo sistema de tons e ícones. Toasts auto-dispensam por padrão (5–8s conforme tom). Com actions, não auto-dispensam.

vue
<script setup lang="ts">
import { useToast } from '@halfbyte/maka'

const toast = useToast()

function save() {
  toast.show({
    tone:        'success',
    title:       'Salvo',
    description: 'Suas alterações foram persistidas.',
  })
}

function deleteItem() {
  toast.show({
    tone:    'error',
    title:   'Excluído',
    actions: [{ label: 'Desfazer', onClick: undo }],
  })
}
</script>

Adicione <Toaster /> uma vez na raiz do app:

vue
<script setup lang="ts">
import { Toaster } from '@halfbyte/maka'
</script>

<template>
  <RouterView />
  <Toaster placement="bottom-end" />
</template>

Durações automáticas por tom

TomDuração
info5 s
success5 s
warn6 s
error8 s
Com actionsNão auto-dispensa