Añade soporte a temas en la API de extensiones

- Incluye una opción de configuración para definir el tema por defecto.
- Añade un tema básico predeterminado.
This commit is contained in:
Manuel Cillero 2025-07-20 23:51:15 +02:00
parent f4e142a242
commit 86e4c4f110
13 changed files with 148 additions and 5 deletions

View file

@ -1,3 +1,4 @@
use crate::core::theme::ThemeRef;
use crate::core::AnyInfo;
use crate::locale::L10n;
use crate::service;
@ -36,6 +37,31 @@ pub trait ExtensionTrait: AnyInfo + Send + Sync {
L10n::default()
}
/// Los temas son extensiones que implementan [`ExtensionTrait`] y también
/// [`ThemeTrait`](crate::core::theme::ThemeTrait).
///
/// Si la extensión no es un tema, este método devuelve `None` por defecto.
///
/// En caso contrario, este método debe implementarse para devolver una referencia de sí mismo
/// como tema. Por ejemplo:
///
/// ```rust
/// use pagetop::prelude::*;
///
/// pub struct MyTheme;
///
/// impl ExtensionTrait for MyTheme {
/// fn theme(&self) -> Option<ThemeRef> {
/// Some(&Self)
/// }
/// }
///
/// impl ThemeTrait for MyTheme {}
/// ```
fn theme(&self) -> Option<ThemeRef> {
None
}
/// Otras extensiones que deben habilitarse **antes** de esta.
///
/// `PageTop` las resolverá automáticamente respetando el orden durante el arranque de la