Data

HeatmapMatrix

Heatmap a matrice righe × colonne (es. categorie × settimane) resa come tabella accessibile, con i colori presi dai token della palette.

Import

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

I tipi (HeatmapMatrixCellClickEvent, HeatmapMatrixProps…) si importano dalla radice del pacchetto dalla 1.24.1: nella 1.24.0 non erano esportati.

Esempio Base

Per un solo indicatore lungo l'anno c'è HeatmapCalendar; per confronti fra serie, Chart.

Props

PropTipoDefaultDescrizione
rowsstring[]—Etichette delle righe (es. categorie)
columnsstring[]—Etichette delle colonne (es. settimane)
valuesArray<Array<number | null | undefined>>—Valori, una riga per ogni rows: values[r][c]. null = nessun dato
colorScalestring[]vedi sottoColori dal vuoto all'intensità massima, almeno due
maxValuenumbermassimo dei datiValore che corrisponde al colore più intenso
minValuenumber0Valore che corrisponde al colore vuoto
formatValue(value: number) => stringIntl.NumberFormatFormattazione dei valori in cella, legenda e lettura
showValuesbooleantrueMostra i valori dentro le celle
showLegendbooleantrueMostra la legenda della scala
clickablebooleanfalseCelle cliccabili (pulsanti) che emettono cellClick
captionstring—Didascalia della tabella, cioè il suo nome accessibile
showCaptionbooleanfalseMostra la didascalia sopra la tabella (altrimenti resta solo per gli screen reader)
rowHeaderstring''Intestazione della colonna delle etichette di riga

Emits

EventoPayloadDescrizione
cellClickHeatmapMatrixCellClickEventCella cliccata, solo con clickable
interface HeatmapMatrixCellClickEvent {
  row: string
  column: string
  value: number | null
  rowIndex: number
  columnIndex: number
}

Scala dei colori

colorScale va dal colore vuoto all'intensità massima. Ogni voce è un token di palette, risolto nella sua variabile CSS ('primary-300' → var(--color-primary-300)), oppure un colore CSS qualsiasi ('#eeeeee', 'var(--mio-colore)'). Il default è:

['surface-hover', 'primary-100', 'primary-300', 'primary-600', 'primary-800']

I colori sono stili inline: montata dalla shell del portale non servono utility da aggiungere alla safelist. Un valore uguale o sotto minValue, e un dato mancante, prendono il colore vuoto; gli altri si distribuiscono sui livelli successivi in proporzione a maxValue.

Il testo in cella è bianco sulla metà più intensa della scala e scuro sul resto; con la scala di default il contrasto è almeno 5:1. Con una scala propria conviene verificare che i colori intensi reggano il testo bianco.

Accessibilità

  • È una <table> vera: intestazioni di colonna e di riga con scope, valori come testo e caption come nome. Senza vedere i colori la si legge comunque, quindi non serve una tabella equivalente nascosta.
  • Un dato mancante mostra «—» e si legge «nessun dato»; con show-values spento i valori restano disponibili agli screen reader.
  • Con clickable ogni cella è un pulsante con nome «Divise, S39: 150».
  • La legenda è un'immagine con nome «Scala di intensità, da 0 a 162»; i campioni sono decorativi.
  • Stringhe nella sezione i18n heatmapMatrix dei cinque dizionari.

TypeScript

import type {
  HeatmapMatrixProps,
  HeatmapMatrixEmits,
  HeatmapMatrixCellClickEvent,
} from '@pzeta/vue-components'