Skip to content

TimeSeriesLive ​

Gráfica de stream en tiempo real. Gestiona un buffer interno acotado por maxPoints — el consumidor solo hace append, el componente descarta los puntos más antiguos automáticamente. Ventana deslizante siempre anclada al último dato recibido. Sin zoom ni pan (por diseño).


Demo en vivo ​

tiempo real
TT601 ControlTT605 Load1TT606 Load2TT607 Load3SP TempPresiónSP Pres

Interacción ​

AcciónEfecto
HoverCursor badge con timestamp exacto
Click leyendaOculta / muestra la serie
ScrollIgnorado — sin zoom por diseño

La ventana se desplaza sola. El consumidor nunca necesita gestionar el tamaño del buffer.


Instalación ​

bash
pnpm add @bjaland/hiperbaric-chart
ts
import { TimeSeriesLive } from '@bjaland/hiperbaric-chart'
import '@bjaland/hiperbaric-chart/style.css'

Uso básico ​

vue
<template>
  <div style="height: 400px;">
    <TimeSeriesLive
      :timestamps="timestamps"
      :series="series"
      :left-axis="leftAxis"
      :right-axis="rightAxis"
      :window-secs="120"
      :max-points="600"
    />
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import { TimeSeriesLive, type ChartSeries, type AxisConfig } from '@bjaland/hiperbaric-chart'

const timestamps = ref<number[]>([])
const series = ref<ChartSeries[]>([
  {
    key: 'TT601',
    label: 'TT601',
    unit: '°C',
    color: '#f43f5e',
    axis: 'left',
    data: [],
    bold: true,
  },
  { key: 'Pres', label: 'Pres', unit: 'bar', color: '#60a5fa', axis: 'right', data: [] },
])

const leftAxis: AxisConfig = { label: 'Temperatura', unit: '°C', color: '#f43f5e' }
const rightAxis: AxisConfig = { label: 'Presión', unit: 'bar', color: '#60a5fa' }

// Append en tiempo real — el componente gestiona el cap internamente
function onNewPoint(ts: number, values: Record<string, number>) {
  timestamps.value.push(ts)
  series.value.forEach((s) => s.data.push(values[s.key]))
}
</script>

Props ​

PropTipoDefaultDescripción
timestampsnumber[]—Requerido. Unix timestamps en segundos. Solo append.
seriesChartSeries[]—Requerido. Array de series. Se puede hacer push en data.
leftAxisAxisConfig—Requerido. Configuración eje Y izquierdo.
rightAxisAxisConfig—Requerido. Configuración eje Y derecho.
windowSecsnumber420Segundos visibles en la ventana deslizante.
maxPointsnumber600Cap interno del buffer. Puntos más antiguos se descartan automáticamente.

Types ​

ts
interface ChartSeries {
  key: string // Identificador único de la serie
  label: string // Texto en la leyenda
  unit: string // Unidad (solo informativo)
  color: string // Color hex, ej. '#f43f5e'
  axis: 'left' | 'right' // Escala Y a la que se asocia
  data: number[] // Valores; mismo orden que timestamps
  bold?: boolean // Línea más gruesa y opaca
  visible?: boolean // false = oculta al init (usuario puede reactivar)
  type?: 'value' | 'setpoint' | 'band'
  bandPair?: string // key de la serie par al usar type: 'band'
}

interface AxisConfig {
  label: string // Nombre del eje
  unit: string // Unidad mostrada en el label
  color: string // Color del eje y su label
}

type de serie ​

ValorEfecto visual
'value'Línea continua (default)
'setpoint'Línea discontinua [6,3], alfa 0.85
'band'Área rellena entre esta serie y bandPair

Comportamiento del buffer ​

El componente mantiene internamente _ts[] y _data[][] con los últimos maxPoints puntos. El consumidor puede hacer push ilimitado — el componente nunca modifica los arrays de las props.

props.timestamps: [t0, t1, ..., tN]   ← crece sin límite en el padre
buffer interno:   [tN-599, ..., tN]   ← siempre ≤ maxPoints
uPlot recibe:     buffer interno