<div class="rtds-input-field rtds-gap-1 ">
<label for="textareaId" class="rtds-input-field__label">
Text label
</label>
<div class="rtds-input rtds-textarea">
<textarea id="textareaId" class=" rtds-text-sm rtds-input-placeholder" aria-describedBy="idTextareaDescription"></textarea>
</div>
<span class="rtds-input-field__hint">
<span class="rtds-input-field__description" id="idTextareaDescription">
descrizione
</span>
</span>
</div>
<div class="rtds-input-field{% if gap %} {{ gap }}{% else %} rtds-gap-1{% endif %}{% if classes %} {{ classes }}{% endif %}{% if textareaDisabled %} rtds-input-field--disabled{% endif %} {% if textareaHasError %} has-error{% endif %}">
<label for="{{ textareaId }}" class="rtds-input-field__label{% if hiddenLabel %} rtds-sr-only{% endif %}{% if labelClasses %} {{ labelClasses }}{% endif %}">
{{ label }}
{% if textareaRequired %}
<abbr class="rtds-font-bold rtds-no-underline" title="obbligatorio">*</abbr>
{% endif %}
</label>
{% block input %}
{% render '@textarea', { id: textareaId, shortLabel: textareaShortLabel, padding: textareaPadding, border: textareaBorder, radius: textareaRadius, rows: textareaRows, cols: textareaCols, classes: textareaClasses, placeholder: textareaPlaceholder, fieldRequired: textareaRequired, autocomplete: textareaAutocomplete, ariaDescribedBy: textareaAriaDescribedBy, hasErrorControl: textareaHasErrorControl, ariaInvalid: textareaAriaInvalid, iconAlert: textareaIconAlert, hasError: textareaHasError, disabled: textareaDisabled, readonly: textareaReadonly }, true %}
{% endblock %}
{% if textareaRequired or textareaAriaDescribedBy or textareaHasErrorControl %}
<span class="rtds-input-field__hint">
{% if textareaRequired or textareaHasErrorControl %}
<span class="rtds-input-field__error" id="{{ textareaId }}Error" aria-live="assertive">
{{ textareaErrorDescription }}
</span>
{% endif %}
{% if textareaDescription %}
<span class="rtds-input-field__description" id="{{ textareaAriaDescribedBy }}">
{{ textareaDescription }}
</span>
{% endif %}
</span>
{% endif %}
</div>
{
"label": "Text label",
"textareaId": "textareaId",
"textareaAriaDescribedBy": "idTextareaDescription",
"textareaDescription": "descrizione"
}
/**
* INPUT FIELD
*
*/
.rtds-input-field.has-error textarea {
border-width: 2px;
border-color: var(--color-error-dark);
}
/**
* INPUT FIELD
*
*/
@layer components {
.rtds-input-field.has-error textarea {
@apply rtds-border-2 rtds-border-error-dark;
}
}
Componente per la gestione di input di tipo textarea con supporto per accessibilità, validazione e gestione degli errori.
Il componente è renderizzato come <div class="rtds-input-field"> contenente una <label> e il componente @textarea annidato. Supporta stati di errore, descrizione e obbligatorietà.
default: Configurazione base del textareais-required: Textarea obbligatoriohas-error-markup: Textarea con markup per la gestione degli errorihas-description: Textarea con descrizione aggiuntivahas-error: Textarea con stato di errorehas-error-and-description: Textarea con stato di errore e descrizionedisabled: Textarea non disponibile — escluso dal tab order, non inviato nel form; label appare mutedreadonly: Textarea non modificabile ma navigabile e inviato nel formContesto di sviluppo Fractal/Nunjucks — Questa sezione riguarda esclusivamente i parametri del context
.config.ymlusati durante lo sviluppo nella libreria. Non descrive attributi HTML o proprietà da usare nei temi, CMS o ambienti di implementazione: per quello, fare riferimento alla sezione Esempi di utilizzo.
label (stringa, obbligatorio): Etichetta del textareatextareaId (stringa, obbligatorio): ID univoco per il textarealabelClasses (stringa, opzionale): Classi CSS aggiuntive per l’etichettahiddenLabel (booleano, opzionale): Se true, nasconde visivamente l’etichetta (rimane disponibile per screen reader)textareaShortLabel (stringa, opzionale): Versione abbreviata dell’etichetta per l’attributo data-labelgap (stringa, opzionale): Regolazione della spaziatura interna (default: gap-1)textareaPadding (stringa, opzionale): Personalizzazione del padding del textareatextareaBorder (stringa, opzionale): Personalizzazione del bordo del textareatextareaRadius (stringa, opzionale): Personalizzazione del raggio del bordo del textareatextareaClasses (stringa, opzionale): Classi CSS aggiuntive per il textareatextareaRows (numero, opzionale): Numero di righe del textareatextareaCols (numero, opzionale): Numero di colonne del textareatextareaPlaceholder (stringa, opzionale): Placeholder del textarea (evitare quando possibile)textareaRequired (booleano, opzionale): Se true, stampa aria-required="true" invece dell’attributo requiredtextareaAutocomplete (stringa, opzionale): Valore per l’autocompletamento (valori: MDN Web Docs)textareaAriaDescribedBy (stringa, opzionale): ID della descrizione del campotextareaDescription (stringa, opzionale): Testo descrittivo del campo (richiede textareaAriaDescribedBy)textareaHasErrorControl (booleano, opzionale): Se true, attiva la validazione del textareatextareaAriaDescribedError (stringa, opzionale): ID dell’elemento con il messaggio di errore (collegato tramite aria-describedby)textareaAriaInvalid (booleano, opzionale): Se true, aggiunge aria-invalid="true" al textareatextareaIconPlaceholder (stringa, opzionale): ID dell’icona placeholdertextareaIconAlert (booleano, opzionale): Se true, mostra l’icona di errore (⚠) a destra del textareatextareaHasError (booleano, opzionale): Applica lo stile di errore al textareatextareaErrorDescription (stringa, opzionale): Testo del messaggio di errore (richiede textareaAriaDescribedError)textareaDisabled (booleano, opzionale): Se true, aggiunge disabled al textarea e la classe rtds-input-field--disabled al wrapper — label appare mutedtextareaReadonly (booleano, opzionale): Se true, aggiunge readonly al textarea — nessuno stile aggiuntivo, label invariata, valore inviato nel formLivello AA — criteri pertinenti:
<label> è sempre associata al <textarea> tramite for / id; i messaggi di errore e le descrizioni sono collegati tramite aria-describedbyaria-invalid e annunciati con aria-live="assertive"<label> visibile o nascosta disponibile per screen readeraria-required, aria-describedby e aria-invalid comunicano lo stato del campo (gestiti sul <textarea> interno)<div class="rtds-input-field"> contenente una <label> e il componente @textarea annidato<label> è associata al textarea tramite for="" e rimane disponibile anche quando nascosta visivamente tramite rtds-sr-only<abbr title="obbligatorio">*</abbr> nella label<span aria-live="assertive"> per garantire l’annuncio immediato agli screen reader| Attributo | Valori | Condizione |
|---|---|---|
aria-required |
"true" |
quando textareaRequired è true (gestito sul <textarea> interno) |
aria-describedby |
ID del messaggio di errore e/o descrizione | quando presenti errori o descrizione (gestito sul <textarea> interno) |
aria-invalid |
"true" |
quando textareaAriaInvalid è true (gestito sul <textarea> interno) |
aria-live |
"assertive" |
sullo span del messaggio di errore |
hiddenLabel: true), rimane disponibile per screen reader tramite rtds-sr-onlyaria-live="assertive"*) è leggibile tramite l’attributo title="obbligatorio" sull’<abbr><!-- Esempio base -->
<div class="rtds-input-field rtds-gap-1">
<label for="message" class="rtds-input-field__label">Messaggio</label>
<textarea id="message" name="message" rows="4"></textarea>
</div>
<!-- Esempio obbligatorio con errore -->
<div class="rtds-input-field rtds-gap-1 rtds-input-field--has-error">
<label for="message-req" class="rtds-input-field__label">
Messaggio <abbr title="obbligatorio">*</abbr>
</label>
<textarea id="message-req" name="message" rows="4"
aria-required="true" aria-invalid="true" aria-describedby="message-error"></textarea>
<span class="rtds-input-field__hint">
<span id="message-error" aria-live="assertive" class="rtds-input-field__error">
Il campo messaggio non può essere vuoto
</span>
</span>
</div>data-label