From 8ddc26dae1f41c2081d7c58a70b5c403a865f00f Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Tue, 28 Jul 2026 09:19:50 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20(theme):=20Aclara=20alcance=20de?= =?UTF-8?q?=20la=20herencia=20de=20temas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/theme.rs | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/core/theme.rs b/src/core/theme.rs index fc54e3b3..f89746d9 100644 --- a/src/core/theme.rs +++ b/src/core/theme.rs @@ -11,11 +11,28 @@ //! [`Context`](crate::core::component::Context), donde mantiene el tema activo, la plantilla //! seleccionada y los componentes asociados a cada región a renderizar. //! -//! Además, PageTop permite crear **temas hijo** que refinan el comportamiento de su tema padre. Un -//! tema hijo hereda automáticamente todos los métodos del padre y puede sobrescribirlos -//! selectivamente. Por ejemplo, puede redefinir el renderizado de un componente a través de -//! [`Theme::handle_component()`] sin cambiar el resto del comportamiento heredado. Un tema hijo -//! puede ser a su vez padre de otro, basta declararlo cada vez con [`Theme::parent()`]. +//! # Temas hijo, herencia y componentes +//! +//! PageTop permite crear **temas hijo** que refinan el comportamiento de su tema padre. Un tema +//! hijo hereda automáticamente todos los métodos del padre y puede sobrescribirlos selectivamente. +//! Esta herencia sólo determina qué implementación de sus métodos se usa cuando el tema hijo no los +//! sobrescribe (como el renderizado del `` y del ``, los recursos incorporados, el uso +//! de [`Theme::handle_component()`], las páginas de error, etc.). Un tema hijo puede ser a su vez +//! padre de otro, basta declararlo cada vez con [`Theme::parent()`]. +//! +//! Sin embargo, no dice nada sobre los componentes. Aunque un tema puede exportar su propio +//! catálogo de componentes, realmente no pertenecen como tal a ningún tema ni dependen de esa +//! cadena de herencia. Una extensión puede existir únicamente para aportar un componente genérico +//! (por ejemplo, un editor de texto enriquecido) pensado para usarse en cualquier aplicación, con +//! independencia del tema activo. Que un tema decida capturar ese componente en +//! [`Theme::handle_component()`] para adaptarlo es una decisión propia del tema, no una relación de +//! parentesco: cualquier tema de la cadena de herencia puede interceptar cualquier componente, +//! venga de la extensión que venga, sin que exista ningún vínculo de diseño previo entre ambos. +//! +//! Lo que sí es responsabilidad del tema activo es garantizar que el componente disponga de los +//! recursos que necesita para verse y comportarse correctamente: sus propios estilos y JavaScript, +//! si los aporta, o los que ofrezca el tema. El componente genera su marcado igual aunque esos +//! recursos falten, pero el resultado seguramente no lucirá ni funcionará como se espera. //! //! # Cómo crear un tema nuevo //!