`Route` resuelve URLs sensibles al `Context`/idioma en propiedades de
componentes; `RoutePath` (renombrado desde html/route.rs) es el valor
concreto de ruta + query. `Waypoint` transporta la URL de retorno entre
pantallas de listado/alta/edición vía query string.
Ajusta `Context::route()`, `Redirect` y los componentes que aceptan
rutas para integrarse con el nuevo tipo `Route`.
- Los errores controlados (403, 404, fatales) se renderizan con el tema
activo; un `panic!` no controlado se intercepta con un HTML mínimo y
autónomo, sin depender del tema ni de los componentes.
- Corrige además que `Context::template()` no seguía los cambios de tema
hechos con `with_theme()` después de crear la página.
- Renombra `DefaultRegion(s)`/`DefaultTemplate(s)`, añade
`Theme::admin_template()` y `Page::admin()`, y documenta la creación
de temas e `InRegion` en `core/theme.rs`.
`prepare()` de `Component`, `render()` de `Region` y `Template`, y la
implementación de `ComponentRender` pasan a ser funciones async. Se
actualizan todos los componentes base, helpers, tests y ejemplos.
`async_trait` se re-exporta desde `pagetop` y se añade al preludio; ya
no es necesario declararlo como dependencia en las extensiones.
`initialize()` es ahora verdaderamente `async` (con `.await`), y
`Application::new()` y `prepare()` pasan también a ser funciones
`async`.
- Nuevo módulo `auth` que exporta `CurrentUser`, `CheckPermission` y
`has_permission()`.
- `Context` y `Page` exponen `current_user()` vía `Contextual`.
- `HttpRequest` accede a extensiones de middleware con `extension<T>()`.
- `Extension` incluye nuevo método `configure_middleware`.
- `try_dispatch_actions` para despachar acciones con control del flujo.
- `configure_service` como `configure_router(Router) -> Router`.
- Macro `static_files_service!` como `serve_static_files!`.
- `ResultPage<M, E>` eliminado; handlers devuelven `Result<M, E>`.
- `ErrorPage` implementa `IntoResponse` en lugar de `ResponseError`.
- Registro con `OnceLock`; eliminados `drop_extensions` y `app.welcome`.
- `Redirect` devuelve `Response`; docs y ejemplos actualizados.
Sustituye el módulo `service` por `web` y adapta toda la API al modelo
de Axum: router inmutable, extractores via `FromRequestParts` y
servicios Tower para archivos estáticos.
- `HttpRequest` pasa a ser un tipo propio, mínimo y clonable.
- `configure_services` pasa a `configure_routes`.
- `EmbeddedFilesService` pasa a `ServeEmbedded`.
- Elimina `session_lifetime` de `Server` (va a `pagetop-auth`).
- Actualiza tests y ejemplos a la nueva API.
- Modulariza la lógica de localización.
- Actualiza la estructura de `Locale` para mejorar la resolución y
gestión de idiomas.
- Introduce `RequestLocale` para manejar la negociación de idioma basada
en las peticiones HTTP.
- Mejora `L10n` para ofrecer una gestión más flexible de traducciones
con argumentos dinámicos.
- Actualiza la implementación de `LangId` en `Page` para garantizar una
identificación de idioma coherente.
- Elimina código obsoleto y simplifica la gestión de identificadores de
idioma.
Como `String::from()` y `.to_string()` son equivalentes, se sustituyen
todas las ocurrencias de `String::from()` por `to_string()` para mayor
coherencia y legibilidad.
Añade el interfaz común que debe implementar cualquier extensión de
PageTop para añadir nuevas funcionalidades a la aplicación en forma de
servicios web y API de uso.
- Soporta jerarquía de ficheros TOML que mapean ajustes a estructuras
fuertemente tipadas con valores predefinidos.
- Permite definir configuraciones distintas para cada entorno.
- Añade la macro `include_config!` para facilitar la asignación modular
de ajustes de configuración.
- Añade documentación detallada y tests de verificación.
- Crea el crate raíz `pagetop` y configura el workspace con
`helpers/pagetop-macros`.
- Añade las macros #[pagetop::main] y #[pagetop::test] que envuelven
Actix-web para crear aplicaciones y pruebas asíncronas sin depender
explícitamente del framework.
- Reexporta, mediante el módulo `service`, los tipos esenciales de
Actix-web para gestionar servidores y servicios web.
- Implementa `Application::{new, run, test}` para simplificar el
arranque y la ejecución de tests.
- Expone `pagetop::prelude` con las macros, `service` y `Application`
para una API pública coherente.
- Incorpora ejemplo `examples/app-basic.rs` que levanta un servidor web
vacío con el código mínimo para hacerlo.