Data

Timeline

Visualizza una sequenza di eventi in layout verticale, orizzontale o alternato, con marcatori stilizzabili e supporto alla selezione.

Import

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

Esempio Base

Props

PropTipoDefaultDescrizione
eventsTimelineEvent[][]Array degli eventi da visualizzare
valuenumber | number[] | nullnullIndice/i degli eventi selezionati (supporta v-model)
layout'vertical' | 'horizontal' | 'both-sides''vertical'Layout della timeline
markerStyle'default' | 'outlined' | 'filled' | 'dot' | 'numbered''default'Stile visivo dei marcatori
activeIndexnumber-1Indice fino al quale gli eventi sono considerati attivi (usato per progress)
readonlybooleanfalseDisabilita la selezione degli eventi
selectablebooleanfalseAbilita la selezione degli eventi al click
severitySeverity'primary'Colore tema della timeline
sizeSize'medium'Dimensione della timeline

TimelineEvent

Proprieta'TipoDescrizione
idstring | numberIdentificatore univoco dell'evento
titlestringTitolo dell'evento
subtitlestringSottotitolo dell'evento
datestringData o etichetta temporale
contentstringTesto principale dell'evento
footerstringTesto nel footer dell'evento
iconstringClasse CSS dell'icona nel marcatore
status'success' | 'warn' | 'danger' | 'info'Stato visivo dell'evento per colorare il marcatore
oppositestringTesto per il lato opposto (layout both-sides)
customMarkerstringContenuto custom per il marcatore

Tipi

Severity: 'primary' | 'secondary' | 'success' | 'info' | 'warn' | 'danger' | 'contrast' | 'help'

Size: 'small' | 'medium' | 'large'

Emits

EventoPayloadDescrizione
update:valuenumber | number[]Emesso quando cambia la selezione (usabile con v-model)
select{ originalEvent: TimelineEvent, index: number, event: TimelineEvent }Emesso al click su un evento selezionabile

Slot

SlotScopeDescrizione
content{ event: TimelineEvent, index: number, active: boolean }Template custom per il contenuto dell'evento
marker{ event: TimelineEvent, index: number, active: boolean }Template custom per il marcatore dell'evento
footer{ event: TimelineEvent, index: number, active: boolean }Template custom per il footer dell'evento

Esempi

Layout Orizzontale

Layout Both-Sides

Marcatori Numerati

Con Selezione

Con Content Slot Custom

Note Comportamento

  • activeIndex e' usato per mostrare visivamente il progresso: tutti gli eventi fino a quell'indice risultano "attivi"
  • Con selectable: true, il click sugli eventi emette select e aggiorna value tramite update:value
  • value puo' essere un singolo indice (number) o un array di indici (number[]) per selezioni multiple
  • Lo slot marker sovrascrive completamente il contenuto del marcatore (icona e numero)
  • Il layout both-sides alterna visivamente il contenuto a sinistra e destra della linea centrale

Accessibilita'

  • Gli eventi selezionabili sono elementi <div> cliccabili
  • Lo stato attivo e' gestito tramite classi CSS (hs-timeline-item-active)
  • Per accessibilita' completa con selezione da tastiera, usa lo slot marker con un elemento <button>

TypeScript

import type { TimelineProps, TimelineEvent } from '@pzeta/vue-components'

const events: TimelineEvent[] = [
  {
    id: 1,
    title: 'Evento',
    date: '2024-01-15',
    content: 'Descrizione evento',
    icon: 'pi pi-calendar',
    status: 'success',
  },
]