diff --git a/nicegui/element.py b/nicegui/element.py index b65242a5f..fa059c23b 100644 --- a/nicegui/element.py +++ b/nicegui/element.py @@ -70,15 +70,34 @@ def __init_subclass__(cls, *, exposed_libraries: List[Union[str, Path]] = [], extra_libraries: List[Union[str, Path]] = [], ) -> None: - def abs_path(file: Union[str, Path]) -> Path: - p = Path(file) - return p if p.is_absolute() else base / p super().__init_subclass__() base = Path(inspect.getfile(cls)).parent - cls.component = register_vue_component(abs_path(component)) if component else None - cls.libraries = [register_library(abs_path(library)) for library in libraries] - cls.extra_libraries = [register_library(abs_path(library)) for library in extra_libraries] - cls.exposed_libraries = [register_library(abs_path(library), expose=True) for library in exposed_libraries] + + def glob_absolute_paths(file: Union[str, Path]) -> List[Path]: + path = Path(file) + if not path.is_absolute(): + path = base / path + return sorted(path.parent.glob(path.name), key=lambda p: p.stem) + + cls.component = None + if component: + for path in glob_absolute_paths(component): + cls.component = register_vue_component(path) + + cls.libraries = [] + for library in libraries: + for path in glob_absolute_paths(library): + cls.libraries.append(register_library(path)) + + cls.extra_libraries = [] + for library in extra_libraries: + for path in glob_absolute_paths(library): + cls.extra_libraries.append(register_library(path)) + + cls.exposed_libraries = [] + for library in exposed_libraries: + for path in glob_absolute_paths(library): + cls.exposed_libraries.append(register_library(path, expose=True)) def add_slot(self, name: str, template: Optional[str] = None) -> Slot: """Add a slot to the element. diff --git a/nicegui/elements/chart.py b/nicegui/elements/chart.py index 0325c1d5a..bfb1f3a34 100644 --- a/nicegui/elements/chart.py +++ b/nicegui/elements/chart.py @@ -1,14 +1,12 @@ -from pathlib import Path from typing import Dict, List from ..element import Element -base = Path(__file__).parent -libraries = [p.relative_to(base) for p in sorted((base / 'lib' / 'highcharts').glob('*.js'), key=lambda p: p.stem)] -modules = {p.stem: p.relative_to(base) for p in sorted((base / 'lib' / 'highcharts' / 'modules').glob('*.js'))} - -class Chart(Element, component='chart.js', libraries=libraries, extra_libraries=list(modules.values())): +class Chart(Element, + component='chart.js', + libraries=['lib/highcharts/*.js'], + extra_libraries=['lib/highcharts/modules/*.js']): def __init__(self, options: Dict, *, type: str = 'chart', extras: List[str] = []) -> None: """Chart diff --git a/nicegui/elements/mermaid.py b/nicegui/elements/mermaid.py index 8806688a9..46f458eb3 100644 --- a/nicegui/elements/mermaid.py +++ b/nicegui/elements/mermaid.py @@ -1,14 +1,10 @@ -from pathlib import Path - from .mixins.content_element import ContentElement -base = Path(__file__).parent - class Mermaid(ContentElement, component='mermaid.js', exposed_libraries=['lib/mermaid/mermaid.esm.min.mjs'], - extra_libraries=[p.relative_to(base) for p in (base / 'lib' / 'mermaid').glob('*.js')]): + extra_libraries=['lib/mermaid/*.js']): CONTENT_PROP = 'content' def __init__(self, content: str) -> None: