Interaction states
La grammatica condivisa che compone stato persistente, validazione, disponibilità e feedback transiente senza perdere semantica.
@qoovex/ui/styles/base.cssFamiglie di stato
Gli alias qv-* normalizzano i selettori nativi, ARIA e Base UI. Non assegnano globalmente colori o stili arbitrari, ma garantiscono coerenza e prevedibilità su tutte le primitive del catalogo.
Composizione e precedenza
Gli stati si compongono a livelli: il focus-visible è additivo su ogni controllo focusabile, mentre hover e pressed si attivano solo se il controllo è disponibile e la modalità di input lo supporta.
Matrice di prova
Tutte le primitive sotto sono reali e interattive. Usa mouse, tastiera (Tab, Spazio, Invio) o touch per verificare come gli stati si compongono senza perdita di semantica.
Feedback transiente (Hover & Press)
Pulsante di Azione (rest → hover → pressed)
Toggle Button (selected specifico)
Stati persistenti (Selected, Checked, Open)
Tabs (selected + hover / focus-visible)
Checkbox (checked + focus-visible)
Checkbox Indeterminate (Selezione Parziale)
Collapsible (open + rapid interaction)
Lo stato resta nel DOM durante il lifecycle previsto da Base UI.
Validazione, Sistema & Disponibilità
Input Invalido (invalid + focus-visible)
Inserisci il codice completo.
Stato Loading (attesa asincrona)
Sola Lettura (readonly + focus-visible)
Controllo Disattivato (disabled)
Alias di stato Tailwind (qv-*)
I variant plugin di Tailwind esportati da @qoovex/ui normalizzano gli stati tra Base UI, selector ARIA e pseudo-classi standard.
| Alias Tailwind | Target Selettore | Scopo e Regola |
|---|---|---|
| qv-hover: | :hover (fine pointer) | Hover condizionato a pointer fine (mouse) |
| qv-pressed: | :active, [data-pressed] | Feedback di pressione elastica locale |
| qv-selected: | [aria-selected='true'], [data-selected] | Selezione persistente in tab e liste |
| qv-checked: | [aria-checked='true'], [data-checked] | Stato checked di checkbox e radio |
| qv-indeterminate: | [data-indeterminate] | Selezione parziale o mista |
| qv-open: | [data-state='open'], [open] | Pannelli e collapsible espansi |
| qv-invalid: | [aria-invalid='true'], :invalid | Controllo in errore di validazione |
| qv-readonly: | [readonly], [aria-readonly='true'] | Dato in sola lettura selezionabile |
| qv-disabled: | :disabled, [aria-disabled='true'] | Controllo disattivato non interattivo |
| qv-loading: | [data-loading], [aria-busy='true'] | Attesa asincrona con stato visibile |