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
defaultContenuto del pulsante (sostituisce label)
iconIcona personalizzata nella posizione sinistra/top/bottom
icon-rightIcona personalizzata nella posizione destra
loadingiconIcona 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

<script setup lang="ts">
const isSubmitting = ref(false)

async function onSubmit() {
  isSubmitting.value = true
  // ...
  isSubmitting.value = false
}
</script>

<template>
  <form @submit.prevent="onSubmit">
    <Button label="Invia" type="submit" severity="primary" :loading="isSubmitting" />
  </form>
</template>

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.
  • Per pulsanti solo icona (senza label), aggiungere sempre un aria-label tramite attributo nativo per la compatibilità con screen reader.
  • 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'