# llimphi-widget-router *Read this in English: [README.md](README.md).* Navegación por **pila de rutas** con transiciones de página. Es el análogo del `Navigator` de Flutter, resuelto a la Elm: - La pila (`RouteStack`) vive en el `Model` del App — pura, testeable, serializable si `R` lo es. El widget no retiene nada. - `router_view` pinta **sólo la ruta actual** y compone `View::animated_switch_from` (compositor) para la transición: al cambiar la ruta, la página vieja sale como fantasma direccional y la nueva entra desde el lado opuesto. La dirección la decide el último op de la pila: **push entra desde la derecha, pop desde la izquierda** (LTR clásico). - Los **Hero** cruzan rutas gratis: un nodo con `View::hero(key, dur)` (o `hero_view` del widget hero) presente en la página saliente y en la entrante con la misma `key` **vuela** entre sus dos rects — el `HeroRegistry` del runtime ya enlaza identidad entre frames. ## Uso ```ignore // Model struct Model { nav: RouteStack } #[derive(Clone, PartialEq, Hash)] enum Ruta { Lista, Detalle(u32), Config } // update Msg::Abrir(id) => m.nav.push(Ruta::Detalle(id)), Msg::Volver => { m.nav.pop(); } // view router_view(1, &m.nav, PageTransition::Slide, motion::SLOW, move |r| { match r { Ruta::Lista => lista_view(m), Ruta::Detalle(i) => detalle_view(m, *i), Ruta::Config => config_view(m), } }) ``` ## Limitaciones honestas - ~~El fantasma se pinta encima del contenido nuevo~~ → resuelto con el **scene-split de fantasmas** (`SwitchStyle::exit_under`): la página saliente se pinta DEBAJO de la entrante, en su posición z real. Eso habilita `PageTransition::Cover` — push opaco estilo UIKit (la nueva tapa sin fade; el pop desliza la vieja por encima, revelando). - `router_view` usa el seam `LayoutBuilder` para conocer el slot; el límite v1 del seam es **sin anidamiento** — si una página contiene otro `layout_builder` (p. ej. `fitted_box`), usar `router_view_sized` con el tamaño que la app ya trackea por `on_resize`. - Una transición en curso no se "revierte" al conmutar de nuevo: la variante cambia y arranca la nueva (el fantasma anterior sigue su fade). --- Parte de **llimphi** — ver [llimphi](../../LEEME.md).