feat(nakui-ui): inputs reales + click handlers funcionales

Cierra dos limitaciones documentadas del commit anterior: los
formularios ahora aceptan teclado real, y los clicks en menus +
botones mutan estado correctamente.

Cambios:
- Cada FieldSpec del Form materializa un Entity<TextInput> de
  yahweh-widget-text-input al entrar a la vista. Los entities se
  reemplazan al cambiar (drop limpio). Soporta: escribir caracteres,
  Backspace, Enter (Confirmed event no usado todavia), Escape.
  Cursor renderea como "|" al final.
- Click handlers wired via cx.listener: menus invocan select_view,
  botones invocan apply_action. Tienen acceso real al
  Context<MetaUi> y mutan el modelo + cx.notify.
- commit_seed reemplaza el buffer ad-hoc por
  input.read(cx).text() por cada field. El value parseado va al
  MemoryStore con tipo correcto.
- Reset de inputs tras submit (set_text("")) si no hay next_view —
  flujo de alta consecutiva sin re-tipear.
- Hover states en sidebar y botones.
- Theme::install_default(cx) al inicio (requerido por text_input).

Wire: deps nuevas yahweh-widget-text-input + yahweh-theme.

Limitaciones que siguen:
- Action::Morphism: requiere cargar Manifest de nakui-core.
- Sin persistencia entre runs (wire con EventLog cuando daemon Nakui
  exista).
- Widget input es simple (sin cursor positioning, selection, IME,
  multilinea, copy/paste).
- Enter no envia (TextInputEvent::Confirmed no suscrito; submit va
  por click). Trivial de wirear si se necesita.

Tests: 6 unit verdes. Visual requiere cargo run + manual.

Activacion:
  NAKUI_MODULES_DIR=examples/nakui-modules cargo run -p nakui-ui
This commit is contained in:
Sergio
2026-05-09 20:11:33 +00:00
parent 06c4fb9130
commit 5d584ff815
3 changed files with 238 additions and 229 deletions
+61
View File
@@ -6,6 +6,67 @@ ratio/diff ver `git show <sha>`.
## 2026-05-09
### feat(nakui-ui): inputs reales con yahweh-widget-text-input + click handlers funcionales
Cierra dos limitaciones documentadas en el commit anterior de la
metainterfaz: los formularios ahora aceptan teclado real, y los
clicks en menús + botones mutan estado correctamente.
Cambios:
- **Inputs vivos**: cada `FieldSpec` del Form view materializa un
`Entity<TextInput>` (de `yahweh-widget-text-input`) al entrar a la
vista. Los entities se reemplazan al cambiar de view (drop limpio).
El widget soporta: escribir caracteres, Backspace, Enter (Confirmed
event — no usado todavía; el submit va por botón), Escape
(Cancelled). El cursor se renderea como `|` al final.
- **Click handlers wired vía `cx.listener`**: menús del sidebar
invocan `select_view`; botones de acción (header de list, submit
de form) invocan `apply_action`. Los handlers tienen acceso real
al `Context<MetaUi>` y mutan el modelo + emiten `cx.notify()`.
- **Submit lee texto de los inputs**: `commit_seed` reemplaza el
buffer ad-hoc anterior por `input.read(cx).text()` por cada
field. El value parseado va al `MemoryStore` con su tipo correcto
(text/number/boolean/date).
- **Reset de inputs tras submit**: si la acción no tiene `next_view`,
los inputs se vacían (`set_text("")`) para alta consecutiva sin
re-tipear.
- **Hover states**: items del sidebar y botones cambian de bg al
pasar el mouse, feedback visual consistente con el resto del
ecosistema yahweh.
- **Theme global**: `Theme::install_default(cx)` al inicio (lo
requiere el text_input para sus colores).
Wire en Cargo:
- Deps nuevas: `yahweh-widget-text-input`, `yahweh-theme` (paths
relativos al monorepo).
Limitaciones que **siguen abiertas** (próximos iters):
- **`Action::Morphism`** sigue como TODO: requiere cargar el
`Manifest` de nakui-core junto al `Module` UI para conocer los
inputs/params declarados.
- **Sin persistencia entre runs**: `MemoryStore` en RAM. Wire con
`EventLog` o `SurrealStore` queda para cuando exista el daemon
Nakui.
- **Inputs simples**: el widget no soporta cursor positioning,
selection, copy/paste, IME, multilínea. Para edits serios habrá
que portar `gpui::examples::input` o adoptar `gpui-input` cuando
exista upstream.
- **Enter no envía**: el `TextInputEvent::Confirmed` que emite el
widget no está suscrito todavía; el submit va por click. Trivial
de wirear si lo necesitamos.
Tests: los 6 unit del runtime siguen verdes (parse_field_value para
los 5 kinds, lookup_field nested, render_value). El comportamiento
visual requiere correr el binario con `cargo run -p nakui-ui` y
probar a mano — GPUI no provee harness de UI testing en CI hoy.
Activación full:
```sh
NAKUI_MODULES_DIR=examples/nakui-modules cargo run -p nakui-ui
# Click en un menú → carga vista. Click en "Nuevo" → form.
# Tipear en cada campo → ver el `|` al final. Click "Crear customer"
# → record aparece en la lista.
```
### feat(nakui): metainterfaz declarativa + 6 módulos ERP estándar
Salto cualitativo: Nakui pasa de "library + demos + read-only viewer
del event log" a **plataforma ERP con UI dirigida por datos**. Cada