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.