gioser

tawasuyu/brahman

Rust 334TOML 129Markdown 40JSON 174772 Definiciones

⎇ 1be7bf9b1e381ac503609b4d77d385fee6c31ca0 crates/modules/ui_engine/widgets/card/src/lib.rs Rust · 67 líneas · 2.0 KB Historia Quién tocó qué crudo

feat(yahweh-widget-card): container card-shape compartido para timeline entries 1be7bf9b1 · Sergio ·

1//! `yahweh-widget-card` — container card-shape para entries de
2//! timeline, info cards y similares.
3//!
4//! Aporta la **forma**: padding consistente (12/8), `rounded(4)`,
5//! `flex_col` con `gap(2)`. NO aporta colores — el caller decide
6//! `bg`, `border_color`, etc. via builder calls. Esto permite que
7//! distintos consumers (timeline con accent por kind, info card
8//! con bg uniforme) compartan la misma proporción visual sin
9//! acoplarse a una paleta fija.
10//!
11//! # Ejemplo
12//!
13//! ```ignore
14//! use yahweh_widget_card::card;
15//! use gpui::{rgb, prelude::*, px};
16//!
17//! // Card con accent border-l (típico timeline entry):
18//! let entry = card()
19//!     .bg(rgb(0x1d2128))
20//!     .border_l_4()
21//!     .border_color(rgb(0x88c0d0))
22//!     .child(div().child("header"))
23//!     .child(div().child("body"));
24//!
25//! // Card sin border (info card uniforme):
26//! let info = card()
27//!     .bg(rgb(0x1d2128))
28//!     .child("contenido");
29//! ```
30
31#![forbid(unsafe_code)]
32
33use gpui::{div, prelude::*, px, Div};
34
35/// Container card-shape: `flex_col` con padding `12/8`, `rounded(4)`,
36/// `gap(2)` interno entre children y `mb(4)` para separación
37/// vertical de cards apiladas.
38///
39/// Sin colores aplicados — el caller agrega `.bg(...)`,
40/// `.border_color(...)`, `.border_l_4()`, etc. según necesite.
41///
42/// El return es un `Div` GPUI — todas las builder methods de div
43/// están disponibles (children, hover, on_click, ids, etc.).
44pub fn card() -> Div {
45    div()
46        .flex()
47        .flex_col()
48        .px(px(12.))
49        .py(px(8.))
50        .mb(px(4.))
51        .rounded(px(4.))
52        .gap(px(2.))
53}
54
55#[cfg(test)]
56mod tests {
57    use super::*;
58
59    /// Sanity smoke: el constructor devuelve un Div sin panic. No
60    /// podemos asertar las property de styling sin renderear (que
61    /// requiere TestAppContext + window). Si la signature cambia,
62    /// el código no compila — eso es la real garantía.
63    #[test]
64    fn card_returns_div_without_panic() {
65        let _d = card();
66    }
67}