Data

PickList

Componente a doppia lista per il trasferimento di elementi da source a target (e viceversa), con pulsanti di spostamento, riordinamento interno e selezione multipla.

Import

import { PickList } from '@pzeta/vue-components'

Esempio Base

Props

PropTipoDefaultDescrizione
modelValue[PickListItem[], PickListItem[]] | nullnullTupla [source, target] (v-model)
selection[PickListItem[], PickListItem[]] | nullnullTupla [sourceSelection, targetSelection] (v-model:selection)
dataKeystring | nullnullProprietà usata come chiave univoca per gli elementi oggetto
scrollHeightstring'14rem'Altezza massima di ogni lista con scroll
listStylestring | Record<string, string | number> | nullnullStile inline aggiuntivo per i contenitori lista
breakpointstring'960px'Larghezza viewport sotto la quale il layout diventa verticale
stripedbooleanfalseAlterna il colore di sfondo delle righe
showSourceControlsbooleantrueMostra i pulsanti di riordinamento nella lista source
showTargetControlsbooleantrueMostra i pulsanti di riordinamento nella lista target
metaKeySelectionbooleanfalseRichiede Ctrl/Meta per la selezione multipla
autoOptionFocusbooleantrueMette il focus automaticamente sul primo elemento
focusOnHoverbooleantrueSposta il focus sull'elemento al passaggio del mouse
disabledbooleanfalseDisabilita il componente
moveUpButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta su"
moveTopButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta in cima"
moveDownButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta giù"
moveBottomButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta in fondo"
moveToTargetButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta selezionati a destra"
moveAllToTargetButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta tutti a destra"
moveToSourceButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta selezionati a sinistra"
moveAllToSourceButtonPropsRecord<string, unknown> | nullnullAttributi aggiuntivi per il pulsante "sposta tutti a sinistra"
ariaLabelstring | nullnullPrefisso etichetta accessibilità per le liste
ariaLabelledbystring | nullnullID elemento che etichetta le liste

Emits

EventoPayloadDescrizione
update:modelValue[PickListItem[], PickListItem[]]Aggiornamento tupla [source, target] dopo trasferimento o riordinamento
update:selection[PickListItem[], PickListItem[]]Aggiornamento selezione corrente
reorderPickListReorderEventRiordinamento interno a una lista
selection-changePickListSelectionChangeEventCambio della selezione
move-to-targetPickListMoveEventElementi selezionati spostati da source a target
move-to-sourcePickListMoveEventElementi selezionati spostati da target a source
move-all-to-targetPickListMoveAllEventTutti gli elementi di source spostati a target
move-all-to-sourcePickListMoveAllEventTutti gli elementi di target spostati a source
focusFocusEventFocus su una delle liste
blurFocusEventBlur da una delle liste

Struttura eventi

interface PickListReorderEvent {
  originalEvent: Event
  value: PickListItem[]
  direction: 'up' | 'down' | 'top' | 'bottom'
  listType: 'source' | 'target'
}

interface PickListMoveEvent {
  originalEvent: Event
  items: PickListItem[]           // Elementi spostati
}

interface PickListMoveAllEvent {
  originalEvent: Event
  items: PickListItem[]           // Tutti gli elementi spostati
}

Slot

SlotScopeDescrizione
option{ option: PickListItem; index: number; selected: boolean }Template per ogni elemento in entrambe le liste
sourceheader{ items: PickListItem[] }Intestazione della lista source
targetheader{ items: PickListItem[] }Intestazione della lista target
sourcecontrolsstartContenuto inserito prima dei pulsanti di controllo source
sourcecontrolsendContenuto inserito dopo i pulsanti di controllo source
targetcontrolsstartContenuto inserito prima dei pulsanti di controllo target
targetcontrolsendContenuto inserito dopo i pulsanti di controllo target
movecontrolsstartContenuto inserito prima dei pulsanti di trasferimento centrali
movecontrolsendContenuto inserito dopo i pulsanti di trasferimento centrali
moveupiconIcona "sposta su" personalizzata
movetopiconIcona "sposta in cima" personalizzata
movedowniconIcona "sposta giù" personalizzata
movebottomiconIcona "sposta in fondo" personalizzata
movetotargeticonIcona "sposta a target" personalizzata
movealltotargeticonIcona "sposta tutto a target" personalizzata
movetosourceiconIcona "sposta a source" personalizzata
movealltosourceiconIcona "sposta tutto a source" personalizzata

Esempi

Template personalizzato con conteggio in header

Senza controlli di riordinamento

Ascolto eventi di trasferimento

Accessibilità

  • Entrambe le liste usano role="listbox" con aria-multiselectable="true".
  • Ogni elemento ha role="option" e aria-selected.
  • Navigazione da tastiera nella lista source: ArrowRight trasferisce gli elementi selezionati a target; nella lista target: ArrowLeft li riporta a source.
  • Ctrl+ArrowUp/Ctrl+ArrowDown riordina gli elementi all'interno della lista; Ctrl+Home/Ctrl+End sposta in cima/fondo.
  • Doppio click su un elemento lo trasferisce immediatamente nell'altra lista.
  • Ctrl+A seleziona tutti gli elementi della lista corrente.

TypeScript

import type {
  PickListProps,
  PickListItem,
  PickListMoveEvent,
  PickListMoveAllEvent,
  PickListReorderEvent,
  PickListSelectionChangeEvent,
} from '@pzeta/vue-components'

// Il v-model è una tupla di due array
type PickListValue = [PickListItem[], PickListItem[]]