<div class="rtds-input-field rtds-select-field">
<label for="selectId" class="rtds-input-field__label">
Text label
</label>
<div class="rtds-select rtds-select--light">
<select id="selectId" class="">
<option value="1">Text</option>
<option value="2">Option 1</option>
<option value="3">Option 2</option>
<option value="4">Option 3</option>
<option value="5">Option 4</option>
<option value="6">Option 5</option>
</select>
</div>
</div>
<div class="rtds-input-field rtds-select-field{% if gap %} {{ gap }}{% endif %}{% if inline %} rtds-field-inline{% endif %}{% block classes %}{% if classes %} {{ classes }}{% endif %}{% endblock classes %}{% if hasError %} has-error{% endif %}">
<label for="{{ selectId }}" class="rtds-input-field__label{% if hiddenLabel %} rtds-sr-only{% endif %}{% if labelClasses %} {{ labelClasses }}{% endif %}">
{{ label }}
{% if selectRequired %}
<abbr class="rtds-font-bold rtds-no-underline" title="obbligatorio">*</abbr>
{% endif %}
</label>
{% block input %}
{% render '@select' + variant, { id: selectId, shortLabel: selectShortLabel, padding: selectPadding, border: selectBorder, radius: selectRadius, classes: selectClasses, type: selectType, placeholder: selectPlaceholder, iconPlaceholder: selectIconPlaceholder, fieldRequired: selectRequired, ariaDescribedBy: selectAriaDescribedBy, hasErrorControl: selectHasErrorControl, ariaInvalid: selectAriaInvalid, iconAlert: selectIconAlert, hasError: selectHasError }, true %}
{% endblock input %}
{% if selectRequired or selectAriaDescribedBy or selectHasErrorControl %}
<span class="rtds-input-field__hint">
{% if selectRequired or selectHasErrorControl %}
<span class="rtds-input-field__error" id="{{ selectId }}Error" aria-live="assertive">
{{ errorDescription }}
</span>
{% endif %}
{% if selectDescription %}
<span class="rtds-input-field__description" id="{{ selectAriaDescribedBy }}">
{{ selectDescription }}
</span>
{% endif %}
</span>
{% endif %}
</div>
{
"label": "Text label",
"selectId": "selectId",
"variant": "--light"
}
/**
* SELECT COMPONENT
*
*
*/
@layer components {
.rtds-select-field:where(:not(.rtds-field-inline)) {
@apply rtds-gap-1;
}
/* Sizes */
:where(.rtds-select-field--sm) .rtds-select select {
@apply rtds-h-8 rtds-py-0.5 rtds-pl-2 rtds-pr-8 rtds-bg-[right_0.25rem_center];
}
:where(.rtds-select-field--lg) select {
@apply rtds-h-14 rtds-py-3 rtds-pl-3 rtds-pr-12 rtds-bg-[right_0.75rem_center];
}
:where(.rtds-select-field--sm) .rtds-input-field__label {
@apply rtds-text-xs;
}
:where(.rtds-select-field--lg) .rtds-input-field__label {
@apply rtds-text-lg;
}
}
Componente composito per campi di selezione. Include un componente select personalizzabile con vari parametri.
Il componente Select Field è progettato per gestire campi di selezione con supporto completo per l’accessibilità e la validazione. Include:
Il componente è stato progettato seguendo le best practice di accessibilità WCAG 2.1:
<label>) visibile o nascostartds-sr-onlyfor che corrisponde all’id del selectaria-live="assertive"aria-invalid="true"aria-describedbyaria-describedbytitle="obbligatorio"aria-required="true" invece dell’attributo required per una migliore compatibilità con gli screen readerIl componente è strutturato come segue:
<div class="rtds-input-field rtds-select-field [gap] [classes] [has-error]">
<label for="[selectId]" class="rtds-input-field__label [hidden] [labelClasses]">
[label]
[asterisco se required]
</label>
[select component]
<span class="rtds-input-field__hint">
[messaggi di errore]
[descrizioni]
</span>
</div>label: Testo dell’etichetta del campolabelClasses: Classi CSS aggiuntive per l’etichettahiddenLabel: Se impostato a true, nasconde visivamente l’etichetta (rimane disponibile per screen reader)selectShortLabel: Versione abbreviata dell’etichetta per la gestione degli errori JavaScriptselectId: ID univoco per il campo selectgap: Personalizzazione dello spazio interno (default: gap-1)selectPadding: Override del padding del selectselectBorder: Override del bordo del selectselectRadius: Override del border-radius del selectselectClasses: Classi CSS aggiuntive per il selectinline: Se impostato a true, attiva il layout inlineselectPlaceholder: Testo del placeholder (da usare con moderazione)selectRequired: Se impostato a true, il campo è obbligatorioselectIconPlaceholder: ID dell’icona da mostrare come placeholderselectAlertIcon: ID dell’icona di alertselectAriaDescribedBy: ID dell’elemento che descrive il camposelectDescription: Descrizione testuale del camposelectAriaInvalid: Indica se il campo contiene un erroreselectHasErrorControl: Se il campo necessita di validazioneerrorDescription: Descrizione dell’erroreselectHasError: Stile di errore per il selectIl componente include diverse varianti preconfigurate nel file select-field.config.yml:
Ogni variante può essere utilizzata come base per personalizzazioni specifiche, mantenendo la coerenza con il design system.