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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user