---
name: sparkline
kind: component
lang: cpp
domain: viz
version: "1.0.0"
purity: pure
signature: "void sparkline(const char* id, const float* values, int count, float width = 100.0f, float height = 20.0f)"
description: "Renderiza un mini grafico de lineas inline para uso en tablas, headers y KPI cards"
tags: [imgui, visualization, sparkline, inline, dashboard]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [imgui]
tested: true
tests:
  - "compiles and links against Catch2 (placeholder, visual cubierto en 0048)"
test_file_path: "cpp/tests/test_sparkline.cpp"
file_path: "cpp/functions/viz/sparkline.cpp"
framework: imgui
params:
  - name: id
    desc: "Identificador unico del widget, usado con PushID/PopID para garantizar unicidad en tablas"
  - name: values
    desc: "Array de valores float del sparkline (serie temporal)"
  - name: count
    desc: "Numero de valores en el array"
  - name: width
    desc: "Ancho en pixels del sparkline (default 100.0)"
  - name: height
    desc: "Alto en pixels del sparkline (default 20.0)"
output: "Renderiza el sparkline inline en el frame ImGui actual, reservando espacio con ImGui::Dummy"
notes: "scaffolding/demo en primitives_gallery"
---

# sparkline

Mini grafico de lineas inline construido sobre ImGui draw primitives. No requiere ImPlot.

Auto-escala el eje Y al rango minimo/maximo de los valores. Dibuja una polyline con relleno semitransparente bajo la curva. Disenado para encajar en celdas de tablas, headers y tarjetas KPI.

Ofrece dos overloads:
- Sin color: usa verde suave por defecto (`ImVec4(0.35, 0.85, 0.45, 1.0)`)
- Con color: acepta cualquier `ImVec4` para personalizar la linea y el relleno

Debe llamarse dentro del render callback de `fn::run_app` (o cualquier contexto con un frame ImGui activo).

## Ejemplo

```cpp
// En una celda de tabla
ImGui::TableNextColumn();
sparkline("##revenue_spark", revenue.data(), (int)revenue.size(), 80.0f, 18.0f);

// Con color personalizado (rojo para valores negativos)
sparkline("##pnl", pnl.data(), (int)pnl.size(),
          ImVec4(0.9f, 0.3f, 0.3f, 1.0f), 100.0f, 20.0f);

// KPI card inline con label
ImGui::Text("Revenue"); ImGui::SameLine();
sparkline("kpi_rev", data, count);
```

## Notas

- El relleno bajo la curva usa alpha 40/255 del mismo color de la linea.
- Si todos los valores son iguales (rango < 1e-6), la linea se dibuja en el centro verticalmente.
- El grosor de linea es 1.5px para que sea legible a alturas de 16-24px.
- `id` no se muestra visualmente; solo se pasa a `PushID` para que ImGui diferencie widgets con los mismos datos en la misma tabla.
