# 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 ~3,900. 5 charts implementados (cartesian/financial/stream/phosphor /export). 5 stubs (<50 LOC c/u: polar, heatmap, treemap, flow, mesh). Roadmap: completar los 5 stubs en orden polar → heatmap → treemap.