1# llimphi-widget-rag-sidebar
2
3*Read this in English: [README.md](README.md).*
4
5El **chrome reusable** de un sidebar acoplable ("rag sidebar"): la barra con **buscador jerárquico** + **control mutable**, el **cabezal uniforme** de panel, y el **popover multiswitch** de disposición.
6
7Render-only y agnóstico del `Msg`. El widget NO conoce el dominio: el host
8(pata, wawa-panel, cualquier app) aporta
9
10- los **dientes** del rail (con `llimphi_widget_dock_rail`, aparte),
11- el **cuerpo** del panel abierto (una `View<Msg>` ya pintada por el host),
12- los **grupos** del multiswitch (cada uno un `segmented` con su callback),
13
14y el widget pinta el chrome uniforme alrededor. Así **un solo dueño** pinta el
15header/buscador/control en todas las apps, en vez de que cada una lo re-derive.
16
17(No confundir con `pata-llimphi/src/rag.rs`, que es un *diente* concreto —
18preguntarle al correo con RAG—; aquí "rag" es el nombre del sidebar.)
19```ignore
20let body = mi_panel(...); // el host pinta el cuerpo
21let spec = RagSidebarSpec {
22 title: "Archivos".into(), no_header: false, accessory: Some(toggle), body,
23 search: nav.search.clone(), search_focused: nav.focused, search_hits: hay,
24 on_search_focus: Arc::new(|f| Msg::SearchFocus(f)),
25 control_open: nav.control_open, t, on_control_toggle: Msg::ControlToggle,
26 groups: vec![RagSwitchGroup::new("Rail", &["Adentro","Afuera"], outside as usize,
27 move |i| Msg::SetOutside(i==1))],
28};
29rag_drawer_view(spec, w, h, &RagSidebarPalette::from_theme(&theme))
30```
31
32---
33
34Parte de **llimphi** — ver [llimphi](../../LEEME.md).
LEEME.md
llimphi-widget-rag-sidebar
Read this in English: README.md.
El chrome reusable de un sidebar acoplable ("rag sidebar"): la barra con buscador jerárquico + control mutable, el cabezal uniforme de panel, y el popover multiswitch de disposición.
Render-only y agnóstico del Msg. El widget NO conoce el dominio: el host
(pata, wawa-panel, cualquier app) aporta
- los dientes del rail (con
llimphi_widget_dock_rail, aparte),
- el cuerpo del panel abierto (una
View<Msg> ya pintada por el host),
- los grupos del multiswitch (cada uno un
segmented con su callback),
y el widget pinta el chrome uniforme alrededor. Así un solo dueño pinta el
header/buscador/control en todas las apps, en vez de que cada una lo re-derive.
(No confundir con pata-llimphi/src/rag.rs, que es un diente concreto —
preguntarle al correo con RAG—; aquí "rag" es el nombre del sidebar.)
let body = mi_panel(...); // el host pinta el cuerpo
let spec = RagSidebarSpec {
title: "Archivos".into(), no_header: false, accessory: Some(toggle), body,
search: nav.search.clone(), search_focused: nav.focused, search_hits: hay,
on_search_focus: Arc::new(|f| Msg::SearchFocus(f)),
control_open: nav.control_open, t, on_control_toggle: Msg::ControlToggle,
groups: vec![RagSwitchGroup::new("Rail", &["Adentro","Afuera"], outside as usize,
move |i| Msg::SetOutside(i==1))],
};
rag_drawer_view(spec, w, h, &RagSidebarPalette::from_theme(&theme))
Parte de llimphi — ver llimphi.