Feedback

Toast

Sistema di notifiche temporanee posizionate sullo schermo. Si usa tramite il composable useToast() per mostrare messaggi da qualsiasi componente.

Import

import { Toast, useToast } from '@pzeta/vue-components'
// oppure tramite plugin:
import { FeedbackPlugin } from '@pzeta/vue-components'
app.use(FeedbackPlugin)

Setup dell'applicazione

Il componente <Toast> deve essere montato una sola volta nel layout principale. Poi si usa useToast() da qualsiasi componente figlio.

<!-- App.vue o layout principale -->
<script setup lang="ts">
import { Toast } from '@pzeta/vue-components'
</script>

<template>
  <Toast />
  <RouterView />
</template>

Utilizzo con useToast()

API del composable useToast()

MetodoFirmaDescrizione
add(message: ToastMessage) => numberAggiunge un toast con configurazione completa, ritorna l'ID
remove(id: number) => voidRimuove un toast specifico per ID
removeAll() => voidRimuove tutti i toast attivi
info(message: string, title?: string) => numberShortcut per toast informativo
success(message: string, title?: string) => numberShortcut per toast di successo
warn(message: string, title?: string) => numberShortcut per toast di avviso
error(message: string, title?: string) => numberShortcut per toast di errore

Props del componente Toast

PropTipoDefaultDescrizione
position'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right' | 'center''top-right'Posizione predefinita per tutti i toast
groupstring | nullnullGruppo per filtrare quali toast mostrare (più istanze Toast)
closeIconstringIcona di chiusura predefinita (default dal config globale)
baseZIndexnumber9999Z-index base per lo stacking
autoZIndexbooleantrueCalcola automaticamente lo z-index incrementale
breakpointsRecord<string, { width?, left?, right? }>{ '960px': { width: '90vw', left: '5vw', right: '5vw' } }Configurazione responsive

Emits del componente Toast

EventoPayloadDescrizione
closenumberEmesso con l'ID del toast quando viene chiuso

Slot del componente Toast

SlotScopeDescrizione
container{ message: InternalToast, closeCallback: () => void }Headless: template completo del toast
message{ message: InternalToast, closeCallback: () => void }Template custom del contenuto (mantiene il container)

Interfaccia ToastMessage

interface ToastMessage {
  severity?: 'success' | 'info' | 'warn' | 'error' | 'secondary' | 'contrast'
  title?: string        // Titolo in grassetto
  message?: string      // Testo principale
  detail?: string       // Descrizione secondaria
  icon?: string | null  // Icona custom (classe CSS)
  closable?: boolean    // Default: true
  sticky?: boolean      // Default: false (se true ignora life)
  life?: number         // ms prima della chiusura (default: 3000)
  closeIcon?: string    // Icona di chiusura custom
  position?: ToastPosition  // Sovrascrive la posizione del componente
}

Esempi

Toast con configurazione avanzata

Toast persistente (sticky)

Gestione ID per rimozione programmatica

Posizioni diverse

Template custom via slot

Accessibilità

  • Ogni toast ha role="alert".
  • aria-live="assertive" per severity error, aria-live="polite" per le altre.
  • Il pulsante di chiusura ha aria-label localizzato.

TypeScript

import type { ToastProps, ToastEmits, ToastMessage, ToastSeverity, ToastPosition } from '@pzeta/vue-components'
import { useToast, type ToastService } from '@pzeta/vue-components'

// ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right' | 'center'
// ToastSeverity = 'success' | 'info' | 'warn' | 'error' | 'secondary' | 'contrast'