tawasuyu

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 660Markdown 302TOML 157RON 312382 Definiciones

⎇ main widgets/panes/LEEME.md Markdown · 38 líneas · 1.5 KB Historia crudo

chore: refresco desde el monorepo — 27 crates nuevos (anim, lottie, svg, mesh, image, layer, test, wire-view, widgets rag-sidebar/router/lazy-list/rive-button) y sync de los 95 existentes 93253cc22 · Sergio ·

1# llimphi-widget-panes
2
3*Read this in English: [README.md](README.md).*
4
5Árbol de paneles BSP estilo tmux.
6
7La pieza que faltaba para "montar cualquier componente de tawasuyu en un
8layout intercambiable con splits resizables". El widget NO conoce los
9dominios: hospeda hojas opacas (`View<Msg>`) en un árbol binario que el
10usuario parte (horizontal/vertical), cierra, enfoca (click) y
11redimensiona (arrastrando los divisores). tmux, pero in-process y sobre
12el bucle Elm de Llimphi.
13
14No confundir con `llimphi-widget-panel` (el chrome de UN panel con
15título): esto es el árbol de N panes.
16
17## Modelo
18
19- `Layout` es la **estructura** del árbol (qué hoja vive dónde, con
20  qué ratio cada split). Vive en el `Model` del host y se manipula con
21  `Layout::split`, `Layout::without` y `Layout::resize`.
22- El **contenido** de cada hoja lo provee el host vía un closure
23  `FnMut(PaneId) -> View<Msg>` que se invoca al construir la vista —
24  por eso puede tomar prestado el `Model` (no necesita ser `'static`).
25- El handler de resize sí se guarda en el árbol de vistas (lo agarra el
26  divisor draggable), así que ése debe ser `'static + Send + Sync`. El
27  de focus se evalúa al construir (porque `on_click` toma el `Msg` por
28  valor), así que no tiene esa restricción.
29
30## Por qué no `Box<dyn Any>`
31
32Igual que el resto del repo: el host mantiene un `enum` de sus tipos de
33panel y hace dispatch estático. El widget es genérico sobre `Msg`; el
34host decide cómo materializar cada hoja. Cero downcasting.
35
36---
37
38Parte de **llimphi** — ver [llimphi](../../LEEME.md).

LEEME.md

llimphi-widget-panes

Read this in English: README.md.

Árbol de paneles BSP estilo tmux.

La pieza que faltaba para "montar cualquier componente de tawasuyu en un layout intercambiable con splits resizables". El widget NO conoce los dominios: hospeda hojas opacas (View<Msg>) en un árbol binario que el usuario parte (horizontal/vertical), cierra, enfoca (click) y redimensiona (arrastrando los divisores). tmux, pero in-process y sobre el bucle Elm de Llimphi.

No confundir con llimphi-widget-panel (el chrome de UN panel con título): esto es el árbol de N panes.

Modelo

Por qué no Box<dyn Any>

Igual que el resto del repo: el host mantiene un enum de sus tipos de panel y hace dispatch estático. El widget es genérico sobre Msg; el host decide cómo materializar cada hoja. Cero downcasting.


Parte de llimphi — ver llimphi.