OrderList
Import
import { OrderList } from '@pzeta/vue-components'
Esempio Base
Props
| Prop | Tipo | Default | Descrizione |
|---|---|---|---|
modelValue | OrderListItem[] | null | null | Array degli elementi della lista (v-model) |
selection | OrderListItem[] | null | null | Array degli elementi selezionati (v-model:selection) |
dataKey | string | null | null | Proprietà usata come chiave univoca per gli elementi oggetto |
scrollHeight | string | '14rem' | Altezza massima della lista con scroll |
listStyle | string | Record<string, string | number> | null | null | Stile inline aggiuntivo per il contenitore lista |
breakpoint | string | '960px' | Larghezza viewport sotto la quale il layout diventa verticale |
striped | boolean | false | Alterna il colore di sfondo delle righe |
metaKeySelection | boolean | false | Richiede Ctrl/Meta per la selezione multipla; senza questa prop il click toglie/aggiunge alla selezione |
autoOptionFocus | boolean | true | Mette il focus automaticamente sul primo elemento |
focusOnHover | boolean | true | Sposta il focus sull'elemento al passaggio del mouse |
disabled | boolean | false | Disabilita il componente |
draggable | boolean | false | Riordino col trascinamento, col puntatore o da tastiera (dalla 1.22.0). Spazio afferra invece di selezionare: la selezione resta su Invio e click |
moveUpButtonProps | Record<string, unknown> | null | null | Attributi aggiuntivi per il pulsante "sposta su" |
moveTopButtonProps | Record<string, unknown> | null | null | Attributi aggiuntivi per il pulsante "sposta in cima" |
moveDownButtonProps | Record<string, unknown> | null | null | Attributi aggiuntivi per il pulsante "sposta giù" |
moveBottomButtonProps | Record<string, unknown> | null | null | Attributi aggiuntivi per il pulsante "sposta in fondo" |
ariaLabel | string | null | null | Etichetta accessibilità aria-label della lista |
ariaLabelledby | string | null | null | ID elemento che etichetta la lista |
Emits
| Evento | Payload | Descrizione |
|---|---|---|
update:modelValue | OrderListItem[] | Nuovo array dopo riordinamento (v-model) |
update:selection | OrderListItem[] | Aggiornamento della selezione corrente |
reorder | OrderListReorderEvent | Emesso dopo ogni operazione di riordinamento |
selection-change | OrderListSelectionChangeEvent | Emesso quando cambia la selezione |
focus | FocusEvent | Focus sulla lista |
blur | FocusEvent | Blur dalla lista |
Struttura eventi
interface OrderListReorderEvent {
originalEvent: Event
value: OrderListItem[] // Nuovo array ordinato
direction: 'up' | 'down' | 'top' | 'bottom' | 'drag' // 'drag' dalla 1.22.0
dragIndex?: number // Con 'drag': indice di partenza
dropIndex?: number // Con 'drag': indice finale
}
interface OrderListSelectionChangeEvent {
originalEvent: Event
value: OrderListItem[] // Elementi selezionati
}
Slot
| Slot | Scope | Descrizione |
|---|---|---|
option | { option: OrderListItem; index: number; selected: boolean } | Template per ogni elemento della lista. Il contenuto è avvolto in .hs-orderlist-option-content; con draggable occupa il resto della riga accanto alla maniglia (dalla 1.24.0) |
header | { value: OrderListItem[] } | Intestazione sopra la lista |
controlsstart | — | Contenuto inserito prima dei pulsanti di controllo |
controlsend | — | Contenuto inserito dopo i pulsanti di controllo |
moveupicon | — | Icona personalizzata per il pulsante "sposta su" |
movetopicon | — | Icona personalizzata per il pulsante "sposta in cima" |
movedownicon | — | Icona personalizzata per il pulsante "sposta giù" |
movebottomicon | — | Icona personalizzata per il pulsante "sposta in fondo" |
Esempi
Template personalizzato con prodotti
Ascolto evento reorder
Lista con righe alternate e disabled
Trascinamento
Con draggable (dalla 1.22.0) le voci mostrano una maniglia e si trascinano col puntatore; da
tastiera, con il focus sulla lista: Spazio afferra la voce, frecce, Home e Fine
scelgono la posizione, Spazio (o Invio) rilascia, Esc annulla. L'Escape che annulla non
chiude un Dialog contenitore. Ogni passo è annunciato agli screen reader e le istruzioni sono
collegate alla lista con aria-describedby. I pulsanti restano disponibili, anche come
alternativa al trascinamento su touch.
Con draggable la voce è una riga flex: la maniglia resta a sinistra, centrata in verticale, e
il contenuto dello slot option (avvolto in .hs-orderlist-option-content) occupa il resto
della riga. Funziona anche con uno slot a blocco, per esempio un div con titolo, tag e
pulsanti (dalla 1.24.0: prima la maniglia restava da sola su una riga e la voce raddoppiava
l'altezza). Senza draggable la voce resta un blocco come prima.
La stessa logica è disponibile come composable: useDragReorder.
Accessibilità
- La lista usa
role="listbox"conaria-multiselectable="true". - I quattro pulsanti di riordino hanno un
aria-label(i18nlist.moveUp,list.moveTop,list.moveDown,list.moveBottom) e l'icona èaria-hidden(dalla 1.22.0; prima lo screen reader leggeva il glifo). Unaria-labelpassato conmove*ButtonPropsvince. - Ogni elemento ha
role="option"earia-selected. - Navigazione da tastiera:
ArrowUp/ArrowDownper navigare,Ctrl+ArrowUp/Ctrl+ArrowDownper spostare gli elementi,Ctrl+Home/Ctrl+Endper spostare in cima/fondo,Ctrl+Aper selezionare tutto,Space/Enterper selezionare/deselezionare l'elemento con focus. Condraggable,Spaceafferra la voce e la selezione resta suEnter.
TypeScript
import type { OrderListProps, OrderListItem, OrderListReorderEvent } from '@pzeta/vue-components'
// Tipo per gli elementi della lista
type OrderListItem = Record<string, unknown> | string | number | boolean | null
Knob
Controllo rotante (dial) per la selezione di valori numerici tramite drag del mouse, touch o tastiera, con arco SVG personalizzabile per colori e spessore.
Paginator
Controllo di paginazione standalone con navigazione configurabile, dropdown righe per pagina, report pagina corrente e slot personalizzabili.