Forms

FormLabel

Etichetta accessibile per campi form. Supporta stato di errore, indicatore di campo obbligatorio con testo nascosto per screen reader e personalizzazione tramite slot.

Import

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

Esempio Base

Props

PropTipoDefaultDescrizione
labelstringobbligatorioTesto della label
htmlForstringID dell'input associato (corrisponde all'attributo for)
idstringID della label (per aria-labelledby)
requiredbooleanfalseMostra asterisco e testo "obbligatorio" per screen reader
errorbooleanfalseStato di errore (cambia classe CSS)
componentPrefixstring'form'Prefisso per le classi CSS BEM (hs-{prefix}-label)
labelClassstring''Classe CSS aggiuntiva per la label

Slot

SlotScopeDescrizione
defaultTesto personalizzato della label (sovrascrive la prop label)

Esempi

Label standard

Campo obbligatorio

Con stato di errore

<template>
  <FormLabel
    label="Email"
    html-for="email"
    :error="!emailValida"
  />
</template>

Con slot personalizzato

Integrazione con input custom

<template>
  <div class="space-y-1">
    <FormLabel
      label="Codice Fiscale"
      html-for="cf-input"
      :required="true"
      :error="cfError"
      component-prefix="inputmask"
    />
    <input id="cf-input" type="text" />
    <p v-if="cfError" class="text-red-500 text-sm">Codice fiscale non valido</p>
  </div>
</template>

Classi CSS Generate

Le classi CSS seguono la convenzione BEM con prefisso hs-{componentPrefix}:

CondizioneClassi applicate
Stato normalehs-{prefix}-label hs-{prefix}-label-default
Stato errorehs-{prefix}-label hs-{prefix}-label-error

Accessibilità

  • L'elemento <label> è associato all'input tramite l'attributo for (prop htmlFor)
  • Per i campi required viene renderizzato:
    • <span aria-hidden="true">*</span> — asterisco visivo, ignorato dagli screen reader
    • <span class="sr-only">(obbligatorio)</span> — testo leggibile solo dagli screen reader
  • Gli attributi HTML aggiuntivi passati al componente vengono propagati all'elemento <label> tramite v-bind="attrs"

TypeScript

import type { FormLabelProps } from '@pzeta/vue-components'

// FormLabelProps è definita internamente al componente
// Non è esportata come tipo dedicato dal package
// Usare le prop direttamente nel template

Nota: FormLabel è usato internamente da tutti i componenti form della libreria (InputText, InputNumber, Password, Textarea, InputMask). Va usato direttamente solo quando si costruisce un campo form personalizzato.