Forms

Checkbox

Casella di spunta con supporto per modalità binaria, selezione multipla tramite array, stato indeterminato e loading.

Import

import { Checkbox } from '@pzeta/vue-components'

Esempio Base

Props

PropTipoDefaultDescrizione
modelValueboolean | unknown[] | nullfalseValore del checkbox (v-model). Boolean in modalità binaria, array in modalità gruppo.
valueunknownundefinedValore associato al checkbox in modalità array; viene aggiunto/rimosso dall'array.
binarybooleanfalseAbilita la modalità binaria (true/false) invece di array.
indeterminatebooleanfalseStato intermedio, né selezionato né deselezionato. Utile per "seleziona tutto" con selezione parziale.
indeterminateIconstring'pi pi-minus' (da config)Icona CSS per lo stato indeterminato.
checkIconstring'pi pi-check' (da config)Icona CSS di spunta.
trueValuebooleantrueValore emesso quando selezionato (modalità binaria custom).
falseValuebooleanfalseValore emesso quando deselezionato (modalità binaria custom).
defaultValueboolean | unknown[] | nullnullValore predefinito se modelValue non è fornito.
labelstringundefinedEtichetta del checkbox.
helperTextstringundefinedTesto di aiuto visualizzato sotto il label.
errorstringundefinedMessaggio di errore; attiva lo stato di errore visivo.
size'small' | 'medium' | 'large''medium'Dimensione del checkbox.
severity'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'help' | 'contrast''primary'Colore/severità visiva.
variant'default' | 'outlined' | 'filled''default'Variante stilistica del checkbox.
disabledbooleanfalseDisabilita il componente.
readonlybooleanfalseRende il componente non modificabile.
loadingbooleanfalseMostra il loading spinner al posto dell'icona di spunta.
loadingIconstringDa configIcona personalizzata per il loading.
requiredbooleanfalseMarca il campo come obbligatorio.
namestringnullAttributo name del campo (per form HTML).
inputIdstringnullID dell'input nascosto (per associazione a label).
inputClassstring | objectClasse CSS aggiuntiva sull'input.
inputStylestring | objectStyle inline sull'input.
ariaLabelstringLabel accessibile per screen reader.
ariaLabelledbystringRiferimento a elemento label esterno.
tabindexnumbernullIndice tab per navigazione da tastiera.
autofocusbooleanFocus automatico al mount.

Emits

EventoPayloadDescrizione
update:modelValueboolean | unknown[]Emesso al cambio valore (per v-model).
update:indeterminatebooleanEmesso al cambio dello stato indeterminato.
change{ originalEvent: Event; value: boolean | unknown[]; checked: boolean }Emesso al cambio con dettagli completi sull'evento.
focusFocusEventEmesso quando il componente riceve il focus.
blurFocusEventEmesso quando il componente perde il focus.

Slot

SlotScopeDescrizione
defaultContenuto alternativo al prop label.
icon{ checked: boolean; indeterminate: boolean; class: string[] }Icona di spunta personalizzata.

Esempi

Gruppo con Array

Stato Indeterminato (Seleziona Tutto)

<template>
  <Checkbox
    v-model="selectAll"
    label="Seleziona tutto"
    :indeterminate="isIndeterminate"
    binary
    @change="handleSelectAll"
  />
  <div class="ml-6 space-y-2">
    <Checkbox v-model="items" value="item1" label="Item 1" />
    <Checkbox v-model="items" value="item2" label="Item 2" />
    <Checkbox v-model="items" value="item3" label="Item 3" />
  </div>
</template>

<script setup lang="ts">
import { ref, computed, watch } from 'vue'

const selectAll = ref(false)
const items = ref<string[]>(['item1'])

const isIndeterminate = computed(() => items.value.length > 0 && items.value.length < 3)

watch(items, newValue => {
  selectAll.value = newValue.length === 3
})

const handleSelectAll = (event: { checked: boolean }) => {
  items.value = event.checked ? ['item1', 'item2', 'item3'] : []
}
</script>

Varianti

Con Helper Text ed Errore

Icona Personalizzata tramite Slot

Accessibilità

  • L'input <input type="checkbox"> è nascosto visivamente (sr-only) ma rimane accessibile agli screen reader.
  • inputId associa il checkbox a un elemento <label> esterno.
  • ariaLabel e ariaLabelledby forniscono descrizioni accessibili aggiuntive.
  • Quando required è true, viene aggiunta * visivamente e un testo (obbligatorio) per screen reader.
  • La navigazione da tastiera è supportata tramite tabindex e il comportamento nativo del checkbox.

TypeScript

import type { CheckboxProps, CheckboxEmits } from '@pzeta/vue-components'