feat(tahuantinsuyu): fase 15 — badges de overlays activos en el footer
Cuando hay overlays activos, debajo del info_row aparecen pills con
los nombres de cada uno (Natal, Tránsito ahora, Progresión 38.2a,
Sinastría · Ana, Saturn return 29a) — el usuario ve de un vistazo qué
está mirando sin tener que mapear los anillos manualmente.
El border de cada pill toma color según a qué slot del wheel
pertenece: outer ring (transit/synastry/planetary_return) →
palette.angle_highlight (dorado), inner overlays (progression/
solar_arc) → palette.house_cusp (tono apagado), natal → neutro.
Permite leer la pila de izquierda a derecha y ubicar visualmente cada
glyph del wheel.
- engine: nuevo OverlayMeta { module_id, label } + campo overlays:
Vec<OverlayMeta> en RenderModel. build_render_model lo inicializa
vacío; bridge::compose pushea un OverlayMeta por cada
PipelineRequest después de su build_*_overlay correspondiente. Helper
push_overlay_meta(render, id, label). Labels: "Tránsito ahora",
"Progresión {age:.1}a", "Solar Arc {age:.1}a", "Sinastría · {name}"
(lee partner_chart.label antes de mover el Box al builder),
"{Body} return {age:.0}a" (usa eternal_sky body.name()).
- canvas: render_wheel separa el viejo footer en info_row (Asc/MC/ms +
offset + hotkeys) y un badges_row opcional. badges_row aparece solo
cuando render.overlays != empty. Pill helper centralizado: bg
panel_alt, border 1px, text size 10, rounded 10. Border color
decidido por module_id para correlacionar con el ring visual.
Compatible con compute_mock (que setea overlays = vec![] — ningún
mock badge). Persiste sin cambios — los configs siguen guardando su
estado, los OverlayMeta se reconstruyen en cada compose desde los
requests activos.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,21 @@ pub struct RenderModel {
|
||||
|
||||
/// Capas a pintar. Orden = z-order ascendente.
|
||||
pub layers: Vec<Layer>,
|
||||
/// Metadata humana por overlay activo (transit, progresión,
|
||||
/// sinastría, retorno...). Vacío para una carta natal pura. La UI
|
||||
/// la pinta como badges en el footer.
|
||||
#[serde(default)]
|
||||
pub overlays: Vec<OverlayMeta>,
|
||||
}
|
||||
|
||||
/// Etiqueta legible de un overlay para el footer del canvas. La engine
|
||||
/// la pushea desde cada `build_*_overlay`; el canvas solo lee y pinta.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct OverlayMeta {
|
||||
pub module_id: String,
|
||||
/// Etiqueta corta — ej. "Tránsito ahora", "Progresión 38.2a",
|
||||
/// "Sinastría · Ana", "Saturn return 29a".
|
||||
pub label: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
@@ -277,6 +292,7 @@ pub fn compute_mock(chart: &Chart) -> RenderModel {
|
||||
descendant_deg: 180.0,
|
||||
imum_coeli_deg: 90.0,
|
||||
layers: vec![sign_dial],
|
||||
overlays: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user