# llimphi-widget-dock-rail Vertical rail of **teeth** (*dientes*) for dockable sidebars. Each tooth is a vertical tab: a 3px **accent bar** hugging the inner edge (lit when the item is active) plus a centred **icon**. The teeth stack into a rounded column painted as a strip floating at the edge of the centre — the cosmos dock pattern, now reusable. Render-only and `Msg`-agnostic: an item is identified by an opaque `u64`. The click (on *press*, so it does not fight the drag) activates through `on_activate(id)`; a tooth is **draggable** with its `id` as payload, and the whole rail is a **drop target** (`on_drop(payload)`) — so an app can move a tooth from one sidebar to another by dropping it on the opposite rail. The icon is drawn by the caller (`make_icon`), which receives the colour already resolved for the active/inactive state. Optionally a tooth carries a **badge** ("bubble number") on its outer corner: `dock_rail_view_badged` takes `make_badge(id)` returning a `DockBadge` (a chip with a number, or a status dot, reusing `llimphi_widget_badge`). Since it is derived from the `id`, changing the model and repainting is enough for the counter to change live. ```ignore 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)), ) ``` --- Part of **llimphi** — see [llimphi](../../README.md).