Buttons

Button

Componente pulsante versatile con supporto a severity, varianti visive (solid, outlined, text, link), icone, badge e stato di caricamento.

Import

import { Button } from '@pzeta/vue-components'
// oppure con plugin selettivo:
import { ButtonsPlugin } from '@pzeta/vue-components'
app.use(ButtonsPlugin)

Esempio Base

Props

PropTipoDefaultDescrizione
labelstring | nullnullTesto visualizzato nel pulsante
iconstring | nullnullClasse CSS dell'icona (es. 'pi pi-check')
iconPos'left' | 'right' | 'top' | 'bottom''left'Posizione dell'icona rispetto al testo
loadingbooleanfalseMostra spinner di caricamento e disabilita il pulsante
loadingIconstringundefinedClasse CSS dell'icona di caricamento personalizzata
disabledbooleanfalseDisabilita il pulsante impedendo interazioni
severity'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'contrast' | 'help''primary'Severità visiva che determina il colore del pulsante
raisedbooleanfalseAggiunge elevazione (ombra) al pulsante
roundedbooleanfalseRende il pulsante completamente arrotondato
textbooleanfalseStile solo testo senza sfondo
outlinedbooleanfalseStile con bordo e sfondo trasparente
linkbooleanfalseStile come link testuale (priorità massima sulle varianti)
plainbooleanfalseRimuove la colorazione severity, mostrando colori neutri
size'small' | 'medium' | 'large''medium'Dimensione del pulsante
type'button' | 'submit' | 'reset''button'Tipo nativo del button HTML
autofocusbooleanfalseImposta il focus automatico al mount del componente
badgestring | number | nullnullTesto o numero da mostrare come badge sovrapposto
badgeSeverity'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'contrast' | 'help''primary'Severità visiva del badge
badgeClassstring | nullnullClasse CSS aggiuntiva per il badge
fluidbooleanfalseIl pulsante occupa tutta la larghezza disponibile
valuestring | numberundefinedValore associato al pulsante (utile dentro un ButtonGroup)

Emits

EventoPayloadDescrizione
clickMouseEventEmesso al click (non propagato se disabled o loading)
focusFocusEventEmesso quando il pulsante riceve il focus
blurFocusEventEmesso quando il pulsante perde il focus
keydownKeyboardEventEmesso alla pressione di un tasto con focus sul pulsante

Slot

SlotScopeDescrizione
default—Contenuto del pulsante (sostituisce label)
icon—Icona personalizzata nella posizione sinistra/top/bottom
icon-right—Icona personalizzata nella posizione destra
loadingicon—Icona di caricamento personalizzata

Esempi

Severity (varianti colore)

Varianti visive

Con icone

Dimensioni

Stati disabled e loading

Con badge

Full width (fluid)

Submit in un form

Accessibilità

  • L'attributo disabled nativo viene applicato al <button> HTML, bloccando interazioni tastiera e mouse.
  • Quando loading è true, lo spinner ha role="status" con aria-label localizzato tramite @pzeta/vue-i18n.
  • Quando usato in ButtonGroup con la prop value, viene impostato automaticamente aria-pressed.
  • Le icone (prop icon e slot icon / icon-right) sono avvolte in un contenitore aria-hidden="true": il glifo del font icone (disegnato con ::before) non entra nel nome accessibile, che resta solo il testo del pulsante.
  • Per pulsanti solo icona (senza label né slot di default) il nome va dato con aria-label (o aria-labelledby / title) come attributo nativo: l'icona non lo fornisce più. In sviluppo un pulsante di sola icona senza nome emette un console.warn (una volta per icona).
  • L'attributo disabled impedisce anche il focus: per spiegare perché un pulsante è disabilitato usare un testo visibile vicino, oppure v-tooltip (che funziona anche sui disabilitati, ma solo col mouse).
  • Il componente è nativamente navigabile da tastiera: Enter e Space attivano il click.

TypeScript

import type { ButtonProps, ButtonEmits } from '@pzeta/vue-components'
import type { Severity, Size, ButtonType, IconPos } from '@pzeta/vue-components'