# llimphi-workspace *Read this in English: [README.md](README.md).* Chasis genérico estilo tmux. Paso 2 de la visión "montar cualquier componente de tawasuyu en un layout intercambiable con splits resizables". Donde `llimphi_widget_panes` aporta el **árbol** (estructura + render + drag), este crate aporta la **máquina de estados** (qué panel está enfocado, cómo se parte/cierra, el contador de ids) + el **chrome estándar** (toolbar split/cerrar). ## Cómo lo usa una app La app guarda un `Workspace` en su `Model` y un `HashMap` con el estado de cada panel. Su `Msg` envuelve dos cosas: ```ignore enum Msg { Ws(WsMsg), // mensajes del chasis (focus/split/…) Panel(PaneId, PanelMsg), // mensajes de un panel concreto } ``` En `update`, los `Ws` se aplican con `Workspace::apply`, que devuelve un `WsEffect` indicando si hay que **crear** el estado de un panel nuevo o **borrar** el de uno cerrado. En `view`, `workspace_view` arma el chrome + el árbol; la app sólo provee el contenido de cada hoja (ya lifteado a su propio `Msg` — el chasis no toca los `PanelMsg`). El lift se hace al construir la vista (igual que `shuma-module`), así sorteamos la falta de `View::map` sin `Box`: el chasis es genérico sobre el `Msg` del host y nunca downcastea. --- Parte de **llimphi** — ver [llimphi](../LEEME.md).