b9716a7cd6
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
77 lines
3.2 KiB
Markdown
77 lines
3.2 KiB
Markdown
---
|
|
name: sparkline
|
|
kind: component
|
|
lang: cpp
|
|
domain: viz
|
|
version: "1.2.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, data-table-renderers, cpp-dashboard-viz]
|
|
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.
|
|
|
|
## Capability growth log
|
|
|
|
- v1.1.0 (2026-05-18) — Overloads con `y_min, y_max` explicitos. Cuando la metrica tiene dominio conocido (CPU%/RAM% -> 0,100) varias cards comparten escala y son comparables visualmente. Outliers se clampan al rango. Variant sin bounds preserva auto-scale historico.
|
|
- v1.2.0 (2026-05-18) — Alpha fade gradient default: segmento i pinta con alpha lerp(0.2, 1.0, i/(count-1)). Older -> faded, newest -> bright. Efecto "trail" hacia el numero actual. Fill bajo curva tambien fade (alpha 4..28). Cambio visual sin cambio de API.
|