1# modules/pineal/ — Data-viz agnóstica (era lapaloma)
2
3**Propósito.** Motor de gráficos con backends pluggables. Los crates
4de visualización no conocen `gpui` ni `wgpu`: hablan contra el trait
5`Canvas`, y producen un `RenderPlan` que cada backend ejecuta.
6
7## Crates
8
9| crate | tipo | rol |
10| ------------------ | ---- | ---------------------------------------------------- |
11| `pineal-core` | lib | Datos: Series, Point, Rect, Color, RingBuffer |
12| `pineal-render` | lib | Trait `Canvas` + `RenderPlan` + backend GPUI (feat) |
13| `pineal-cartesian` | lib | Axes + viewport + series sobre coord cartesiano |
14| `pineal-financial` | lib | Candlestick, OHLC sobre cartesian |
15| `pineal-stream` | lib | Streaming a 60Hz desde RingBuffer |
16| `pineal-phosphor` | lib | Trail CRT con alpha decay sobre stream |
17| `pineal-polar` | lib | Coord polar (stub) |
18| `pineal-heatmap` | lib | Grid 2D color-mapped (stub) |
19| `pineal-treemap` | lib | Rectangular treemap (stub) |
20| `pineal-flow` | lib | Sankey/flow diagrams (stub) |
21| `pineal-mesh` | lib | Triangle mesh + barycentric (stub) |
22| `pineal-export` | lib | SVG/PNG export del RenderPlan |
23| `pineal-umbrella` | lib | Re-export con features `core/render/cartesian/...` |
24
25## Dependencias
26
27- Todos ← `pineal-core`. Render-dependientes ← `pineal-render`.
28- Backend GPUI: feature gate `gpui` en pineal-render activa
29 `gpui_backend.rs` (consumido por widgets en `apps/pineal-*-demo`).
30
31## Estado
32
33LOC ~4,000. **5 charts implementados** (LOC reales):
34- `core` 878, `render` 386, `cartesian` 1397, `financial` 688,
35 `stream` 231, `phosphor` 312, `umbrella` 53.
36
37**6 stubs (<30 LOC c/u)** — completar:
38- `polar` 16, `heatmap` 21, `treemap` 12, `flow` 16, `mesh` 28,
39 `export` 23 (SVG exporter no implementado pese a depender de él
40 el roadmap; verificar si export depende de los charts o vice versa).
41
42Roadmap: cerrar los 6 stubs. Orden sugerido: polar → heatmap →
43treemap → flow → mesh → export (este último porque depende del
44renderer común).
SDD.md
modules/pineal/ — Data-viz agnóstica (era lapaloma)
Propósito. Motor de gráficos con backends pluggables. Los crates
de visualización no conocen gpui ni wgpu: hablan contra el trait
Canvas, y producen un RenderPlan que cada backend ejecuta.
Crates
| crate | tipo | rol |
pineal-core | lib | Datos: Series, Point, Rect, Color, RingBuffer |
pineal-render | lib | Trait Canvas + RenderPlan + backend GPUI (feat) |
pineal-cartesian | lib | Axes + viewport + series sobre coord cartesiano |
pineal-financial | lib | Candlestick, OHLC sobre cartesian |
pineal-stream | lib | Streaming a 60Hz desde RingBuffer |
pineal-phosphor | lib | Trail CRT con alpha decay sobre stream |
pineal-polar | lib | Coord polar (stub) |
pineal-heatmap | lib | Grid 2D color-mapped (stub) |
pineal-treemap | lib | Rectangular treemap (stub) |
pineal-flow | lib | Sankey/flow diagrams (stub) |
pineal-mesh | lib | Triangle mesh + barycentric (stub) |
pineal-export | lib | SVG/PNG export del RenderPlan |
pineal-umbrella | lib | Re-export con features core/render/cartesian/... |
Dependencias
- Todos ←
pineal-core. Render-dependientes ← pineal-render.
- Backend GPUI: feature gate
gpui en pineal-render activa
gpui_backend.rs (consumido por widgets en apps/pineal-*-demo).
Estado
LOC ~4,000. 5 charts implementados (LOC reales):
core 878, render 386, cartesian 1397, financial 688,
stream 231, phosphor 312, umbrella 53.
6 stubs (<30 LOC c/u) — completar:
polar 16, heatmap 21, treemap 12, flow 16, mesh 28,
export 23 (SVG exporter no implementado pese a depender de él
el roadmap; verificar si export depende de los charts o vice versa).
Roadmap: cerrar los 6 stubs. Orden sugerido: polar → heatmap →
treemap → flow → mesh → export (este último porque depende del
renderer común).