e65e9cc623
Motor gráfico Llimphi como workspace independiente: bucle Elm (input→update→view→layout→raster→present) sobre wgpu+vello+taffy+parley. Núcleo (hal/raster/layout/text/ui/theme/surface/motion/icons) + ~40 widgets + módulos, sin dependencias al resto del monorepo. cargo check --workspace pasa (64 crates). Puerta de entrada: cargo run -p llimphi-ui --example counter. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
llimphi
Framework de UI nativa: HAL · raster · layout · text · theme · ui — más widgets y módulos.
llimphi es el motor gráfico que comparten todas las apps del monorepo. Pipeline retained-mode declarativa sobre vello + wgpu + taffy, con shaping fontdue/harfbuzz, theme Dark/Light/Aurora/Sunset, HAL multiplataforma (Wayland · X11 · Win32 · Android · Wawa).
Manual de uso: MANUAL.md — referencia completa (bucle Elm, DSL View<Msg>, los ~44 widgets y 10 módulos, GPU directo, gotchas) para humanos e IA. Diseño y roadmap: SDD.md.
Filosofía: un widget no se diseña pensando en mockups; se diseña con lo que vello y taffy pueden hacer.
Instalación
# usar como dep en otro crate:
[dependencies]
llimphi-ui = { workspace = true }
llimphi-theme = { workspace = true }
llimphi-widget-... = { workspace = true }
Compatibilidad
- Linux/Wayland — backend principal.
- Linux/X11 — via XWayland (mediante
winit). - macOS / Windows —
winit+wgpu. - Android —
clear-screen-android,vello-hello-android,vello-text-androidpara validar el HAL móvil. - Wawa bare-metal — HAL alterno sobre framebuffer.
Crates: framework
| Crate | Rol |
|---|---|
llimphi-hal |
Abstracción de superficie (winit / framebuffer / android). |
llimphi-raster |
Rasterizer vello + cache de scenes. |
llimphi-layout |
Layout taffy + extensiones. |
llimphi-text |
Shaping + fonts (Fontdue/HarfBuzz). |
llimphi-theme |
Themes Dark/Light/Aurora/Sunset + paleta. |
llimphi-ui |
View<Msg> retained-mode + Elm-arch. |
Crates: widgets (visuales reactivos)
| Widget | Función |
|---|---|
button |
Botón con variantes. |
text-input |
Input single-line. |
text-area |
Textarea multi-line. |
text-editor |
Editor (rope · cursor · undo · highlight · clipboard · find). |
text-editor-lsp |
Editor + LSP. |
tree |
Árbol jerárquico. |
list |
Lista virtualizada. |
tabs |
Tabs con cierre. |
splitter |
Splitter horizontal/vertical. |
tiled |
Tiled window manager dentro de la app. |
slider |
Slider con tick marks. |
gallery |
Grid de cards. |
card |
Card base. |
stat-card |
Card para métricas. |
banner |
Banner / alerts. |
app-header |
Header común de app. |
context-menu |
Menú contextual (look distintivo). |
theme-switcher |
Selector de tema. |
nodegraph |
Lienzo de nodos + cables Bezier. |
Crates: modules (feature funcional con estado)
| Module | Función |
|---|---|
command-palette |
Paleta de comandos. |
diff-viewer |
Diff side-by-side. |
fif |
Find-in-files. |
file-picker |
Picker de archivos. |
mini-map |
Mini-mapa del editor. |
bookmarks |
Bookmarks por archivo. |
symbol-outline |
Outline de símbolos LSP. |
plugin-host |
Host para plugins WASM. |
shuma-term |
Terminal embebida (shell shuma). |
Crates: android
| Crate | Rol |
|---|---|
clear-screen-android |
Smoke test HAL Android. |
vello-hello-android |
Vello hello-world Android. |
vello-text-android |
Text shaping Android. |
Consideraciones
- Una sola API:
View<Msg>declarativa. Sin imperativo, sin DOM virtual ajeno. - El mismo árbol corre en Wayland y Wawa: HAL abstrae la superficie, el resto es idéntico.
- Los widgets son puramente visuales; los módulos encapsulan estado + comportamiento.