From fe88d5620d2bcea0069e727a264279cec807da36 Mon Sep 17 00:00:00 2001 From: Philipp Rudiger Date: Fri, 7 Feb 2025 21:47:48 +0100 Subject: [PATCH] Ensure _bundle_css is added as resource and resolved on baseclass (#7691) * Ensure _bundle_css is added as resource and resolved on baseclass * Ignore type * Small fixes --- panel/custom.py | 11 +++++++---- panel/io/resources.py | 8 +++++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/panel/custom.py b/panel/custom.py index 66074593de..22d88c7d21 100644 --- a/panel/custom.py +++ b/panel/custom.py @@ -308,11 +308,14 @@ def _bundle_path(cls) -> os.PathLike | None: @classproperty def _bundle_css(cls): - esm_path = cls._esm_path(compiled=True) + try: + esm_path = cls._esm_path(compiled=True) + except ValueError: + return [] css_path = esm_path.with_suffix('.css') if css_path.is_file(): - return css_path - return None + return [css_path] + return [] @classmethod def _esm_path(cls, compiled: bool = True) -> os.PathLike | None: @@ -698,7 +701,7 @@ class CounterButton(pn.custom.ReactComponent): _react_version = '18.3.1' @classproperty # type: ignore - def _exports__(cls) -> ExportSpec: + def _exports__(cls) -> ExportSpec: # type: ignore imports = cls._importmap.get('imports', {}) exports: dict[str, list[str | tuple[str, ...]]] = { "react": ["*React"], diff --git a/panel/io/resources.py b/panel/io/resources.py index dd7d233611..7d72914c27 100644 --- a/panel/io/resources.py +++ b/panel/io/resources.py @@ -663,8 +663,13 @@ def extra_resources(self, resources, resource_type): """ from ..reactive import ReactiveCustomBase for model in param.concrete_descendents(ReactiveCustomBase).values(): - if not (getattr(model, resource_type, None) and model._loaded()): + cls_files = getattr(model, resource_type, None) + if not (cls_files and model._loaded()): continue + for cls in model.__mro__[1:]: + supcls_files = getattr(cls, resource_type, []) + if supcls_files == cls_files: + model = cls for resource in getattr(model, resource_type, []): if state.rel_path: resource = resource.lstrip(state.rel_path+'/') @@ -740,6 +745,7 @@ def css_files(self): files = super().css_files self.extra_resources(files, '__css__') + self.extra_resources(files, '_bundle_css') css_files = self.adjust_paths([ css for css in files if self.mode != 'inline' or not is_cdn_url(css) ])