<div class="rtds-input rtds-input-field rtds-input-radio">
<div class="rtds-flex rtds-gap-2 rtds-items-center">
<input id="radioId" name="" class=" " type="radio">
<label class="rtds-input-radio__label" for="radioId">
label radiobutton
</label>
</div>
</div>
<div class="rtds-input rtds-input-field rtds-input-radio{% block size %}{% endblock size %}{% if classes %} {{ classes }}{% endif %}{% if hasError %} has-error{% endif %}">
{% if errorId is not defined %}
{% set errorId = id ~ 'Error' %} {% endif %}
{%- if iconPlaceholder %}
{% render '@icon', {id: iconPlaceholder, classes: 'rtds-absolute rtds-left-4 rtds-content-placeholder', size: 'rtds-w-6 rtds-h-6'}, true %}
{% endif -%}
<div class="rtds-flex rtds-gap-2 rtds-items-center">
<input
id="{{ id }}"
name="{{ name }}"
{% if shortLabel %} data-label="{{ shortLabel }}"{% endif %}
class="{{ padding }} {{ radius }} {{ border }}{% if inputClasses %} {{ inputClasses }}{% endif %}"
type="radio"
{% if fieldRequired %} aria-required="true"{% endif %}
{% if ariaDescribedBy or hasErrorControl or fieldRequired %} aria-describedBy="
{%- if hasErrorControl or fieldRequired -%}
{{- errorId -}}
{%- if ariaDescribedBy %} {{ ariaDescribedBy -}}{%- endif -%}
{% elseif ariaDescribedBy -%}
{{- ariaDescribedBy -}}
{% endif %}"
{% endif %}
{% if ariaInvalid %} aria-invalid="true"{% endif %}
{% if checked %} checked{% endif %}
{% if disabled %} disabled{% endif %}
>
<label class="rtds-input-radio__label{% if labelClasses %} {{ labelClasses }}{% endif %}" for="{{ id }}">
{{ label | safe }}
{% if fieldRequired %}<abbr class="rtds-font-bold rtds-no-underline" title="obbligatorio">*</abbr>{% endif %}
{%- if iconAlert %}
{% render '@icon', {id: 'outline--exclamation-circle', classes: 'rtds-absolute rtds-right-4 rtds-content-placeholder rtds-content-error', size: 'rtds-w-6 rtds-h-6'}, true %}
{% endif -%}
</label>
</div>
{% if inFieldset == false %}
{% if fieldRequired or ariaDescribedBy or hasErrorControl %}
<span class="rtds-input-field__hint">
{% if fieldRequired or hasErrorControl %}
<span class="rtds-input-field__error" id="{{ id }}Error" aria-live="assertive">
{{ errorDescription }}
</span>
{% endif %}
{% if inputDescription %}
<span class="rtds-input-field__description" id="{{ ariaDescribedBy }}">
{{ inputDescription }}
</span>
{% endif %}
</span>
{% endif %}
{% endif %}
</div>
{
"label": "label radiobutton",
"id": "radioId",
"inFieldset": false
}
/**
* INPUT
*
*
*/
.rtds-input-radio input[type="radio"] {
border-radius: 9999px;
border-color: var(--color-border-input);
width: var(--spacing-5);
height: var(--spacing-5);
}
.rtds-input-radio__label {
font-size: var(--fontsize-text-base);
font-weight: 500;
}
/* SIZES */
.rtds-input--sm input[type="radio"] {
width: var(--spacing-4);
height: var(--spacing-4);
}
:where(.rtds-input--sm) .rtds-input-radio__label {
font-size: var(--fontsize-text-sm);
}
.rtds-input--lg input[type="radio"] {
width: var(--spacing-6);
height: var(--spacing-6);
}
.has-error input[type="radio"] {
border-width: 2px;
border-color: var(--color-error-dark);
}
/* DISABLED STATE */
:where(.rtds-input-radio) input[type="radio"]:disabled {
border-color: var(--color-border-gray-03);
cursor: not-allowed;
}
:where(.rtds-input-radio) input[type="radio"]:disabled ~ .rtds-input-radio__label {
color: var(--color-content-disabled);
cursor: not-allowed;
}
/**
* INPUT
*
*
*/
@layer components {
.rtds-input-radio input[type="radio"] {
@apply rtds-w-5 rtds-h-5 rtds-border-input rtds-rounded-full;
}
.rtds-input-radio__label {
@apply rtds-text-base rtds-font-medium;
}
/* SIZES */
.rtds-input--sm input[type="radio"] {
@apply rtds-w-4 rtds-h-4;
}
:where(.rtds-input--sm) .rtds-input-radio__label {
@apply rtds-text-sm;
}
.rtds-input--lg input[type="radio"] {
@apply rtds-w-6 rtds-h-6;
}
.has-error input[type="radio"]{
@apply rtds-border-error-dark rtds-border-2;
}
/* DISABLED STATE */
:where(.rtds-input-radio) input[type="radio"]:disabled {
border-color: var(--color-border-gray-03);
cursor: not-allowed;
}
:where(.rtds-input-radio) input[type="radio"]:disabled ~ .rtds-input-radio__label {
color: var(--color-content-disabled);
cursor: not-allowed;
}
}
Componente per la gestione di input di tipo radio button con supporto per accessibilità, validazione e gestione degli errori.
Il componente renderizza un <input type="radio"> con la relativa <label> associata. L’attributo name raggruppa logicamente i radio button in un gruppo a selezione singola. Quando usato all’interno di un <fieldset> (inFieldset: true), i messaggi di errore e descrizione sono gestiti dal componente parent radio-fieldset.
default: Configurazione base del radio buttonis-required: Radio button obbligatoriohas-error-markup: Radio button con markup per la gestione degli errorihas-description: Radio button con descrizione aggiuntivahas-error: Radio button con stato di errorehas-error-and-description: Radio button con stato di errore e descrizionedisabled: Radio button non disponibile — escluso dal tab order, non inviato nel form; label e controllo appaiono mutedContesto 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 radio buttonid (stringa, obbligatorio): Identificatore univoco dell’inputname (stringa, obbligatorio): Nome per il gruppo di radio buttonshortLabel (stringa, opzionale): Versione abbreviata dell’etichetta per l’attributo data-labellabelClasses (stringa, opzionale): Classi CSS aggiuntive per l’etichettapadding (stringa, opzionale): Padding dell’inputborder (stringa, opzionale): Stile del bordo dell’inputradius (stringa, opzionale): Raggio del bordo dell’inputclasses (stringa, opzionale): Classi CSS aggiuntive per l’inputchecked (booleano, opzionale): Se true, il radio button è selezionatofieldRequired (booleano, opzionale): Se true, stampa aria-required="true" e aggiunge il wrapper del messaggio di erroreariaDescribedBy (stringa, opzionale): ID dell’elemento che descrive il campohasErrorControl (booleano, opzionale): Se true, attiva la validazione dell’inputariaInvalid (booleano, opzionale): Se true, aggiunge aria-invalid="true" all’inputalertIcon (stringa, opzionale): ID per l’icona di alert posizionata a destrainFieldset (booleano, opzionale): Se true, indica che l’input è contenuto in un fieldsetdisabled (booleano, opzionale): Se true, aggiunge l’attributo disabled — il radio button è non interattivo, escluso dal tab order e non inviato nel form. La label appare muted tramite color: --color-content-disabledLivello AA — criteri pertinenti:
<label> è sempre associata all’<input> tramite for / id; quando usato in un gruppo, il <fieldset> con <legend> del componente parent radio-fieldset fornisce il contesto del gruppoaria-invalid e annunciati con aria-live="assertive"<label> visibile associataaria-required, aria-describedby e aria-invalid comunicano lo stato del campo<div> contenente un <input type="radio"> e la relativa <label> associata tramite for / idname raggruppa logicamente i radio button in un gruppo a selezione singola<abbr title="obbligatorio">*</abbr> nella label<fieldset> (inFieldset: true), i messaggi di errore e descrizione sono gestiti dal componente parent radio-fieldset| Attributo | Valori | Condizione |
|---|---|---|
aria-required |
"true" |
quando fieldRequired è true |
aria-describedby |
ID del messaggio di errore e/o descrizione | quando presenti errori o descrizione |
aria-invalid |
"true" |
quando ariaInvalid è true |
aria-live |
"assertive" |
sullo span del messaggio di errore (solo se non in fieldset) |
pulsante di opzione), lo stato selezionato/deselezionato e la posizione nel gruppoaria-live="assertive"*) è leggibile tramite l’attributo title="obbligatorio" sull’<abbr><!-- Esempio base (gruppo di radio) -->
<fieldset>
<legend>Seleziona un'opzione</legend>
<div class="rtds-input rtds-input-radio">
<div class="rtds-flex rtds-gap-2 rtds-items-center">
<input id="option1" name="my-group" type="radio">
<label class="rtds-input-radio__label" for="option1">Opzione 1</label>
</div>
</div>
<div class="rtds-input rtds-input-radio">
<div class="rtds-flex rtds-gap-2 rtds-items-center">
<input id="option2" name="my-group" type="radio">
<label class="rtds-input-radio__label" for="option2">Opzione 2</label>
</div>
</div>
</fieldset>
<!-- Esempio con errore -->
<div class="rtds-input rtds-input-field rtds-input-radio">
<div class="rtds-flex rtds-gap-2 rtds-items-center">
<input id="radio-err" name="radio-group" type="radio"
aria-required="true" aria-invalid="true" aria-describedby="radio-error">
<label class="rtds-input-radio__label" for="radio-err">
Opzione <abbr title="obbligatorio">*</abbr>
</label>
</div>
<span class="rtds-input-field__hint">
<span id="radio-error" aria-live="assertive" class="rtds-input-field__error">
Selezionare un'opzione
</span>
</span>
</div>--sm e --lgdata-label