gioser

tawasuyu/brahman

Rust 570TOML 215Markdown 68JSON 198261 Definiciones

feat(cosmobiologia): perfil del rectificador — barras clicables

Cada barra de la curva del barrido se vuelve clicable: un clic lleva
la carta a esa hora candidata, reusando el scrub de tiempo del
jog-dial (CanvasEvent::TimeOffsetChanged, ya cableado en el shell).

Cierra el lazo del rectificador: ahora se puede inspeccionar sobre el
wheel cualquier hora del barrido, no sólo leer la ganadora.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

5fdae159f05267f3be9b158c10f67582e485247e · por sergio · (hace 5 meses) · padre 208dc1556 · ver el árbol en este commit

Delta semántico · 2

crates/modules/cosmobiologia/cosmobiologia-canvas/src/lib.rs

1 archivos · +18 −2

diff --git a/crates/modules/cosmobiologia/cosmobiologia-canvas/src/lib.rs b/crates/modules/cosmobiologia/cosmobiologia-canvas/src/lib.rs
index 200facb..026a224 100644
--- a/crates/modules/cosmobiologia/cosmobiologia-canvas/src/lib.rs
+++ b/crates/modules/cosmobiologia/cosmobiologia-canvas/src/lib.rs
@@ -1797,7 +1797,7 @@ fn render_wheel(
     // la hora de nacimiento que mejor explica los eventos conocidos.
     if let Some(r) = rectificacion {
         if !r.perfil.is_empty() {
-            footer = footer.child(render_rectify_profile(theme, palette, r));
+            footer = footer.child(render_rectify_profile(theme, palette, r, entity.clone()));
         }
     }
 
@@ -2046,10 +2046,14 @@ fn render_harmonic_spectrum(
 /// de nacimiento candidata; su altura crece cuanto MEJOR explica los
 /// eventos conocidos (menor puntaje de convergencia). La barra más alta
 /// —el valle del puntaje— es la hora rectificada, y va resaltada.
+///
+/// Cada barra es clicable: un clic lleva la carta a esa hora candidata
+/// (emite `TimeOffsetChanged`), para inspeccionarla sobre el wheel.
 fn render_rectify_profile(
     theme: &Theme,
     palette: &AstroPalette,
     r: &Rectificacion,
+    entity: gpui::Entity<AstrologyCanvas>,
 ) -> gpui::Div {
     const BAR_AREA_H: f32 = 46.0;
 
@@ -2083,10 +2087,12 @@ fn render_rectify_profile(
             String::new()
         };
         let column = div()
+            .id(SharedString::from(format!("tts-rectify-bar-{offset}")))
             .flex()
             .flex_col()
             .items_center()
             .gap(px(2.0))
+            .cursor_pointer()
             .child(
                 div()
                     .h(px(BAR_AREA_H))
@@ -2104,7 +2110,17 @@ fn render_rectify_profile(
                         theme.fg_disabled
                     })
                     .child(SharedString::from(label)),
-            );
+            )
+            .on_click({
+                // Un clic lleva la carta a esta hora candidata reusando
+                // el scrub de tiempo del jog-dial (`TimeOffsetChanged`).
+                let entity = entity.clone();
+                move |_: &gpui::ClickEvent, _w, cx: &mut gpui::App| {
+                    entity.update(cx, |_this, cx| {
+                        cx.emit(CanvasEvent::TimeOffsetChanged(offset));
+                    });
+                }
+            });
         bars = bars.child(column);
     }