# llimphi-workspace Generic tmux-style chassis. Step 2 of the "mount any tawasuyu component in an interchangeable layout with resizable splits" vision. Where `llimphi_widget_panes` contributes the **tree** (structure + render + drag), this crate contributes the **state machine** (which panel is focused, how it splits and closes, the id counter) plus the **standard chrome** (a split/close toolbar). ## How an app uses it The app keeps a `Workspace` in its `Model` and a `HashMap` with each panel's state. Its `Msg` wraps two things: ```ignore enum Msg { Ws(WsMsg), // chassis messages (focus/split/…) Panel(PaneId, PanelMsg), // messages of a concrete panel } ``` In `update`, the `Ws` ones are applied with `Workspace::apply`, which returns a `WsEffect` telling whether to **create** the state of a new panel or **delete** that of a closed one. In `view`, `workspace_view` assembles the chrome plus the tree; the app only provides each leaf's content (already lifted to its own `Msg` — the chassis never touches the `PanelMsg`s). The lift happens while building the view (like `shuma-module`), which sidesteps the lack of `View::map` without `Box`: the chassis is generic over the host's `Msg` and never downcasts. --- Part of **llimphi** — see [llimphi](../README.md).