feat(yahweh-widget-card): container card-shape compartido para timeline entries

Iter 3 de integración nakui↔yahweh. El card visual pattern (padding
consistente + rounded + flex_col + gap) que vivía duplicado en cada
timeline entry de nakui-explorer ahora es un widget yahweh reusable.

crates/modules/ui_engine/widgets/card/:
- pub fn card() -> Div: flex_col + px(12) + py(8) + mb(4) +
  rounded(4) + gap(2). Sin colores (caller decide via builder).
- 1 test smoke.

nakui-explorer:
- Los 2 timeline entry patterns (Seed/Morphism) pasan de ~7
  calls a ~3, intención "card with accent" emerge del nombre.

Tests stack: 111 → 112. App-agnostic — el widget no impone paleta,
permite themes diversos.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-05-10 10:02:23 +00:00
parent 715cf6be03
commit 1be7bf9b1e
7 changed files with 133 additions and 16 deletions
+44
View File
@@ -6,6 +6,50 @@ ratio/diff ver `git show <sha>`.
## 2026-05-10
### feat(yahweh-widget-card): container card-shape compartido para timeline entries
Iteración 3 de la integración nakui ↔ yahweh. El "card visual"
pattern (padding consistente + rounded + flex_col + gap) que vivía
duplicado en cada timeline entry de `nakui-explorer` ahora es un
widget yahweh reusable. Sin acoplamiento a colores: el caller
decide bg/border/accent.
Crate nuevo: `crates/modules/ui_engine/widgets/card/`
(`yahweh-widget-card`):
- **Dep**: solo `gpui`. App-agnostic.
- **`pub fn card() -> Div`**: container con `flex_col` + `px(12)`
+ `py(8)` + `mb(4)` + `rounded(4)` + `gap(2)`. Sin colores
aplicados.
- El return es `Div` GPUI — el caller compone con `.bg(...)`,
`.border_l_4()`, `.border_color(...)`, `.child(...)`, hover,
on_click, etc., según necesite.
- 1 test smoke (constructor no panicea).
Migración de `nakui-explorer`:
- Nueva dep `yahweh-widget-card`.
- Los 2 patterns de timeline entry (Seed y Morphism) pasan de:
```rust
div().flex().flex_col().px(12).py(8).mb(4).bg(card_bg)
.rounded(4).border_l_4().border_color(accent).gap(2)...
```
a:
```rust
card().bg(card_bg).border_l_4().border_color(accent)...
```
- Reducción ~7 calls → ~3 por entry; legibilidad mejor (la
intención "card with accent" emerge del nombre `card()`).
Tests stack: 111 → **112 verdes** (+1 del crate card). Cada crate
afectado compila y testea individualmente.
Beneficio operativo:
- Si `MetaApp` o cualquier futura app necesita un container
card-shape (ej. info card, expanded list row), `card()` está
ya disponible.
- Cambiar el padding/rounded/gap canónico = un cambio en un solo
lugar.
- El widget no impone colores → no fuerza una paleta y permite
themes diversos por app/contexto.
### feat(yahweh-widget-banner): widget compartido para toasts/errores cross-app
Patrón visual común a `yahweh-widget-meta-form` (toast success +
error_banner) y `nakui-explorer` (error_banner): un `div` con bg