feat(yahweh): caret blinking + slots ornament en theme + MetaApp full themed
Iters 8-9 combinadas. Tres mejoras pequeñas que cierran la integración del theme: 1) text-input caret blinking: caret_visible bool toggea cada 500ms via cx.spawn loop. _blink_task se mantiene en self para que drop cancele. render dibuja | sólo si focused && caret_visible. 2) yahweh-theme: 5 slots ornament secundario como methods (no fields) derivados de is_dark via ornament_slots() helper: bg_input/bg_button/bg_button_hover/accent_destructive/ bg_destructive_hover. No requiere modificar los 6 presets. 3) MetaApp ornament cleanup: 11 rgb(0x...) hardcoded → slots del theme. Sidebar menu items, list row separator/buttons, icon ✕ delete y su hover, EntityRef selector hovers, form submit button + fallback input bg, confirm modal hint y hovers. Pattern: let X = theme.slot() antes de las closures + move |d| d.bg(X) en hover/when para tomar ownership. Antes MetaApp tenía la paleta principal themed (iter 5) pero el ornament secundario seguía hardcoded. Ahora el theme switcher cambia absolutamente todo el chrome. Tests: 117 verdes. Downstream compila. Smoke nakui-ui: bootstrap OK. Limitación: nouser-explorer todavía hardcoded — próxima iter. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,62 @@ ratio/diff ver `git show <sha>`.
|
||||
|
||||
## 2026-05-10
|
||||
|
||||
### feat(yahweh): caret blinking + slots ornament en theme + MetaApp full themed
|
||||
Iters 8-9 combinadas. Tres mejoras pequeñas que cierran la
|
||||
integración del theme:
|
||||
|
||||
**1. Caret blinking en text-input** (`yahweh-widget-text-input`):
|
||||
- Nuevo field `caret_visible: bool` que toggea cada 500ms.
|
||||
- Nuevo field `_blink_task: Task<()>` mantiene el loop de blink
|
||||
vivo y lo cancela al drop del widget.
|
||||
- En `new()`, `cx.spawn(...)` arranca el loop: `timer.timer(500ms)`
|
||||
+ `this.update(...)` que toggea + `cx.notify()`. Si el update
|
||||
falla (entity drop), break.
|
||||
- En `render()`, caret `|` se dibuja sólo si
|
||||
`is_focused && self.caret_visible`. Familiar feel del SO.
|
||||
|
||||
**2. Slots ornament en yahweh-theme** (5 nuevos):
|
||||
- `bg_input() -> Hsla` — bg sutil para fields editables.
|
||||
- `bg_button() -> Hsla` + `bg_button_hover() -> Hsla` — controls
|
||||
clickable secundarios.
|
||||
- `accent_destructive() -> Hsla` — rojo para acciones peligrosas.
|
||||
- `bg_destructive_hover() -> Hsla` — bg de hover sobre destructive.
|
||||
- Implementados como **methods** del `Theme` (no fields del
|
||||
struct), derivados via `ornament_slots(self.is_dark)`. Esto
|
||||
evita modificar los 6 presets — el slot vive donde uno lo
|
||||
invoca.
|
||||
|
||||
**3. MetaApp ornament cleanup** (`yahweh-widget-meta-form`):
|
||||
- 11 colores hardcoded `gpui::rgb(0x...)` migrados a slots del
|
||||
theme:
|
||||
- Sidebar menu items (selected/hover) → `bg_row_active` /
|
||||
`bg_row_hover`.
|
||||
- List row separator + button bgs → `bg_row_active` /
|
||||
`bg_button()` / `bg_button_hover()`.
|
||||
- Icon ✕ delete + hover → `accent_destructive()` /
|
||||
`bg_destructive_hover()`.
|
||||
- EntityRef selector hover/selected → `bg_row_active` /
|
||||
`bg_row_hover`.
|
||||
- EntityRef selector border → `theme.border` (slot existente).
|
||||
- Form fallback input bg + submit button → `bg_input()` /
|
||||
`bg_button()` / `bg_button_hover()`.
|
||||
- Confirm modal hint subtitle + hovers de Cancel/Confirm →
|
||||
`theme.fg_muted` / `bg_button_hover()` / `bg_destructive_hover()`.
|
||||
- Pattern: `let X = theme.slot()` antes de las closures + `move |d|
|
||||
d.bg(X)` en hover/when para que el cierre tome ownership.
|
||||
|
||||
Antes de este commit MetaApp tenía la **paleta principal** themed
|
||||
(iter 5) pero el ornament secundario (hovers, separators, botones
|
||||
inline) seguía hardcoded. Ahora el theme switcher cambia
|
||||
**absolutamente todo** el chrome del MetaApp en runtime.
|
||||
|
||||
Tests: 117 verdes (sin cambios numéricos, pero downstream sigue
|
||||
compilando). Smoke run de nakui-ui: bootstrap completo OK.
|
||||
|
||||
Limitación restante: `nouser-explorer` todavía no migra al stack
|
||||
yahweh themed — patrón idéntico a `nakui-explorer` aplicado pero
|
||||
más nuevo. Próxima iter.
|
||||
|
||||
### feat(yahweh-widget-text-input): focus-aware border + caret sólo on focus
|
||||
Iter 7 (mini-iter — el text-input ya estaba themed, faltaba sólo
|
||||
el polish de focus visibility). Antes el border era siempre
|
||||
|
||||
Reference in New Issue
Block a user