Skip to main content

Button

Il componente Button è un elemento di interazione fondamentale che permette agli utenti di eseguire azioni con un semplice click.

Importazione

import { Button } from 'pkg-fe-react-goblin-system';

Utilizzo di base

<Button>Pulsante predefinito</Button>
<Button variant="primary">Pulsante primario</Button>
<Button variant="secondary">Pulsante secondario</Button>
<Button variant="outline">Pulsante outline</Button>
<Button variant="text">Pulsante testuale</Button>

Proprietà

ProprietàTipoDefaultDescrizione
variant'primary' | 'secondary' | 'outline' | 'text''primary'Definisce lo stile visivo del pulsante
size'small' | 'medium' | 'large''medium'Dimensione del pulsante
disabledbooleanfalseDisabilita il pulsante
loadingbooleanfalseMostra un indicatore di caricamento
fullWidthbooleanfalseFa occupare al pulsante l'intera larghezza disponibile
startIconReactNode-Icona da mostrare all'inizio del pulsante
endIconReactNode-Icona da mostrare alla fine del pulsante
onClick(event: React.MouseEvent<HTMLButtonElement>) => void-Funzione callback richiamata al click
type'button' | 'submit' | 'reset''button'Tipo di pulsante HTML

Varianti

Varianti di stile

<Button variant="primary">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="text">Text</Button>

Dimensioni

<Button size="small">Small</Button>
<Button size="medium">Medium</Button>
<Button size="large">Large</Button>

Con icone

import { InfoIcon, ArrowIcon } from 'pkg-fe-react-goblin-system';

<Button startIcon={<InfoIcon />}>Con icona iniziale</Button>
<Button endIcon={<ArrowIcon />}>Con icona finale</Button>
<Button startIcon={<InfoIcon />} endIcon={<ArrowIcon />}>Con entrambe</Button>

Stati

<Button disabled>Disabilitato</Button>
<Button loading>Caricamento</Button>

Full width

<Button fullWidth>Pulsante a larghezza piena</Button>

Esempi

Pulsante di submit in un form

<form onSubmit={handleSubmit}>
{/* Altri campi del form */}
<Button type="submit" variant="primary">Invia</Button>
</form>

Pulsante di caricamento con gestione dello stato

function LoadingButtonExample() {
const [isLoading, setIsLoading] = React.useState(false);

const handleClick = async () => {
setIsLoading(true);
try {
await someAsyncFunction();
} finally {
setIsLoading(false);
}
};

return (
<Button
onClick={handleClick}
loading={isLoading}
disabled={isLoading}
>
{isLoading ? 'Caricamento...' : 'Clicca qui'}
</Button>
);
}

Accessibilità

Il componente Button è conforme alle linee guida di accessibilità:

  • Supporta la navigazione da tastiera e il focus visibile
  • Comunica correttamente lo stato disabled agli screen reader
  • Mantiene un contrasto di colore adeguato in tutte le varianti
  • Conserva la funzionalità di focus anche quando disabilitato visivamente

Personalizzazione

È possibile personalizzare l'aspetto dei pulsanti attraverso il tema:

const customTheme = {
components: {
Button: {
borderRadius: '8px',
fontWeight: 600,
// Personalizzazioni delle varianti
variants: {
primary: {
backgroundColor: '#1a73e8',
color: 'white',
'&:hover': {
backgroundColor: '#1765cc'
}
},
// Altre varianti...
}
}
}
};

<ThemeProvider theme={customTheme}>
<Button variant="primary">Pulsante personalizzato</Button>
</ThemeProvider>