tawasuyu

tawasuyu/llimphi

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

Rust 484Markdown 258TOML 131RON 38118 Definiciones

⎇ main widgets/dock-rail/LEEME.md Markdown · 40 líneas · 1.6 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-dock-rail
2
3*Read this in English: [README.md](README.md).*
4
5Rail vertical de **dientes** para sidebars acoplables.
6
7Cada diente es una pestaña vertical: una **barra de acento** de 3px
8pegada al borde interno (encendida cuando el item está activo) + un
9**icono** centrado. Los dientes apilan en una columna redondeada que
10se pinta como una franja flotante al borde del centro — el patrón del
11dock de cosmos, ahora reutilizable.
12
13Render-only y agnóstico del `Msg`: el item se identifica por un `u64`
14opaco. El clic (en el *press*, para no pelear con el arrastre) activa
15vía `on_activate(id)`; el diente es **arrastrable** con su `id` como
16payload, y el rail entero es **drop target** (`on_drop(payload)`) —
17así una app puede mover un diente de un sidebar a otro soltándolo
18sobre el rail opuesto. El icono lo dibuja el caller (`make_icon`), que
19recibe el color ya resuelto según el estado activo/inactivo.
20
21Opcionalmente un diente lleva un **distintivo** ("bubble number") en su
22esquina externa: `dock_rail_view_badged` toma `make_badge(id)` que
23devuelve un `DockBadge` (chip con número o punto de estado, reusando
24`llimphi_widget_badge`). Como se deriva del `id`, basta cambiar el modelo
25y re-pintar para que el contador cambie en vivo.
26```ignore
27let items = [DockRailItem { id: 0, active: true }, DockRailItem { id: 1, active: false }];
28dock_rail_view(
29    &items,
30    44.0,
31    &DockRailPalette::from_theme(&theme),
32    |id, size, color| my_icon_view(id, size, color),
33    |id| Msg::DockActivate(side, id),
34    move |payload| Some(Msg::DockDrop(side, payload)),
35)
36```
37
38---
39
40Parte de **llimphi** — ver [llimphi](../../LEEME.md).

LEEME.md

llimphi-widget-dock-rail

Read this in English: README.md.

Rail vertical de dientes para sidebars acoplables.

Cada diente es una pestaña vertical: una barra de acento de 3px pegada al borde interno (encendida cuando el item está activo) + un icono centrado. Los dientes apilan en una columna redondeada que se pinta como una franja flotante al borde del centro — el patrón del dock de cosmos, ahora reutilizable.

Render-only y agnóstico del Msg: el item se identifica por un u64 opaco. El clic (en el press, para no pelear con el arrastre) activa vía on_activate(id); el diente es arrastrable con su id como payload, y el rail entero es drop target (on_drop(payload)) — así una app puede mover un diente de un sidebar a otro soltándolo sobre el rail opuesto. El icono lo dibuja el caller (make_icon), que recibe el color ya resuelto según el estado activo/inactivo.

Opcionalmente un diente lleva un distintivo ("bubble number") en su esquina externa: dock_rail_view_badged toma make_badge(id) que devuelve un DockBadge (chip con número o punto de estado, reusando llimphi_widget_badge). Como se deriva del id, basta cambiar el modelo y re-pintar para que el contador cambie en vivo.

let items = [DockRailItem { id: 0, active: true }, DockRailItem { id: 1, active: false }];
dock_rail_view(
    &items,
    44.0,
    &DockRailPalette::from_theme(&theme),
    |id, size, color| my_icon_view(id, size, color),
    |id| Msg::DockActivate(side, id),
    move |payload| Some(Msg::DockDrop(side, payload)),
)

Parte de llimphi — ver llimphi.