Browse Source

provide plotly subpackages (#4776)

Khaleel Al-Adhami 3 months ago
parent
commit
ee731a908d

+ 22 - 12
reflex/compiler/utils.py

@@ -119,24 +119,34 @@ def compile_imports(import_dict: ParsedImportDict) -> list[dict]:
     validate_imports(collapsed_import_dict)
     import_dicts = []
     for lib, fields in collapsed_import_dict.items():
-        default, rest = compile_import_statement(fields)
-
         # prevent lib from being rendered on the page if all imports are non rendered kind
         if not any(f.render for f in fields):
             continue
 
-        if not lib:
-            if default:
-                raise ValueError("No default field allowed for empty library.")
-            if rest is None or len(rest) == 0:
-                raise ValueError("No fields to import.")
-            import_dicts.extend(get_import_dict(module) for module in sorted(rest))
-            continue
+        lib_paths: dict[str, list[ImportVar]] = {}
+
+        for field in fields:
+            lib_paths.setdefault(field.package_path, []).append(field)
 
-        # remove the version before rendering the package imports
-        lib = format.format_library_name(lib)
+        compiled = {
+            path: compile_import_statement(fields) for path, fields in lib_paths.items()
+        }
+
+        for path, (default, rest) in compiled.items():
+            if not lib:
+                if default:
+                    raise ValueError("No default field allowed for empty library.")
+                if rest is None or len(rest) == 0:
+                    raise ValueError("No fields to import.")
+                import_dicts.extend(get_import_dict(module) for module in sorted(rest))
+                continue
+
+            # remove the version before rendering the package imports
+            formatted_lib = format.format_library_name(lib) + (
+                path if path != "/" else ""
+            )
 
-        import_dicts.append(get_import_dict(lib, default, rest))
+            import_dicts.append(get_import_dict(formatted_lib, default, rest))
     return import_dicts
 
 

+ 29 - 2
reflex/components/plotly/__init__.py

@@ -1,5 +1,32 @@
 """Plotly components."""
 
-from .plotly import Plotly
+from reflex.components.component import ComponentNamespace
 
-plotly = Plotly.create
+from .plotly import (
+    Plotly,
+    PlotlyBasic,
+    PlotlyCartesian,
+    PlotlyFinance,
+    PlotlyGeo,
+    PlotlyGl2d,
+    PlotlyGl3d,
+    PlotlyMapbox,
+    PlotlyStrict,
+)
+
+
+class PlotlyNamespace(ComponentNamespace):
+    """Plotly namespace."""
+
+    __call__ = Plotly.create
+    basic = PlotlyBasic.create
+    cartesian = PlotlyCartesian.create
+    geo = PlotlyGeo.create
+    gl2d = PlotlyGl2d.create
+    gl3d = PlotlyGl3d.create
+    finance = PlotlyFinance.create
+    mapbox = PlotlyMapbox.create
+    strict = PlotlyStrict.create
+
+
+plotly = PlotlyNamespace()

+ 235 - 0
reflex/components/plotly/plotly.py

@@ -10,6 +10,7 @@ from reflex.components.component import Component, NoSSRComponent
 from reflex.components.core.cond import color_mode_cond
 from reflex.event import EventHandler, no_args_event_spec
 from reflex.utils import console
+from reflex.utils.imports import ImportDict, ImportVar
 from reflex.vars.base import LiteralVar, Var
 
 try:
@@ -278,3 +279,237 @@ const extractPoints = (points) => {
             # Spread the figure dict over props, nothing to merge.
             tag.special_props.append(Var(_js_expr=f"{{...{figure!s}}}"))
         return tag
+
+
+CREATE_PLOTLY_COMPONENT: ImportDict = {
+    "react-plotly.js": [
+        ImportVar(
+            tag="createPlotlyComponent",
+            is_default=True,
+            package_path="/factory",
+        ),
+    ]
+}
+
+
+def dynamic_plotly_import(name: str, package: str) -> str:
+    """Create a dynamic import for a plotly component.
+
+    Args:
+        name: The name of the component.
+        package: The package path of the component.
+
+    Returns:
+        The dynamic import for the plotly component.
+    """
+    return f"""
+const {name} = dynamic(() => import('{package}').then(mod => createPlotlyComponent(mod)), {{ssr: false}})
+"""
+
+
+class PlotlyBasic(Plotly):
+    """Display a basic plotly graph."""
+
+    tag: str = "BasicPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-basic-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly basic component.
+
+        Returns:
+            The imports for the plotly basic component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly basic component.
+
+        Returns:
+            The dynamic imports for the plotly basic component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-basic-dist-min")
+
+
+class PlotlyCartesian(Plotly):
+    """Display a plotly cartesian graph."""
+
+    tag: str = "CartesianPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-cartesian-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly cartesian component.
+
+        Returns:
+            The imports for the plotly cartesian component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly cartesian component.
+
+        Returns:
+            The dynamic imports for the plotly cartesian component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-cartesian-dist-min")
+
+
+class PlotlyGeo(Plotly):
+    """Display a plotly geo graph."""
+
+    tag: str = "GeoPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-geo-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly geo component.
+
+        Returns:
+            The imports for the plotly geo component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly geo component.
+
+        Returns:
+            The dynamic imports for the plotly geo component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-geo-dist-min")
+
+
+class PlotlyGl3d(Plotly):
+    """Display a plotly 3d graph."""
+
+    tag: str = "Gl3dPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-gl3d-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly 3d component.
+
+        Returns:
+            The imports for the plotly 3d component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly 3d component.
+
+        Returns:
+            The dynamic imports for the plotly 3d component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-gl3d-dist-min")
+
+
+class PlotlyGl2d(Plotly):
+    """Display a plotly 2d graph."""
+
+    tag: str = "Gl2dPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-gl2d-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly 2d component.
+
+        Returns:
+            The imports for the plotly 2d component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly 2d component.
+
+        Returns:
+            The dynamic imports for the plotly 2d component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-gl2d-dist-min")
+
+
+class PlotlyMapbox(Plotly):
+    """Display a plotly mapbox graph."""
+
+    tag: str = "MapboxPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-mapbox-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly mapbox component.
+
+        Returns:
+            The imports for the plotly mapbox component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly mapbox component.
+
+        Returns:
+            The dynamic imports for the plotly mapbox component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-mapbox-dist-min")
+
+
+class PlotlyFinance(Plotly):
+    """Display a plotly finance graph."""
+
+    tag: str = "FinancePlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-finance-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly finance component.
+
+        Returns:
+            The imports for the plotly finance component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly finance component.
+
+        Returns:
+            The dynamic imports for the plotly finance component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-finance-dist-min")
+
+
+class PlotlyStrict(Plotly):
+    """Display a plotly strict graph."""
+
+    tag: str = "StrictPlotlyPlot"
+
+    library = "react-plotly.js@2.6.0"
+
+    lib_dependencies: list[str] = ["plotly.js-strict-dist-min@3.0.0"]
+
+    def add_imports(self) -> ImportDict | list[ImportDict]:
+        """Add imports for the plotly strict component.
+
+        Returns:
+            The imports for the plotly strict component.
+        """
+        return CREATE_PLOTLY_COMPONENT
+
+    def _get_dynamic_imports(self) -> str:
+        """Get the dynamic imports for the plotly strict component.
+
+        Returns:
+            The dynamic imports for the plotly strict component.
+        """
+        return dynamic_plotly_import(self.tag, "plotly.js-strict-dist-min")

+ 765 - 0
reflex/components/plotly/plotly.pyi

@@ -11,6 +11,7 @@ from reflex.components.component import NoSSRComponent
 from reflex.event import EventType
 from reflex.style import Style
 from reflex.utils import console
+from reflex.utils.imports import ImportDict
 from reflex.vars.base import Var
 
 try:
@@ -141,3 +142,767 @@ class Plotly(NoSSRComponent):
             The Plotly component.
         """
         ...
+
+CREATE_PLOTLY_COMPONENT: ImportDict
+
+def dynamic_plotly_import(name: str, package: str) -> str: ...
+
+class PlotlyBasic(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyBasic":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyCartesian(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyCartesian":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyGeo(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyGeo":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyGl3d(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyGl3d":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyGl2d(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyGl2d":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyMapbox(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyMapbox":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyFinance(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyFinance":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...
+
+class PlotlyStrict(Plotly):
+    def add_imports(self) -> ImportDict | list[ImportDict]: ...
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        data: Optional[Union[Figure, Var[Figure]]] = None,  # type: ignore
+        layout: Optional[Union[Dict, Var[Dict]]] = None,
+        template: Optional[Union[Template, Var[Template]]] = None,  # type: ignore
+        config: Optional[Union[Dict, Var[Dict]]] = None,
+        use_resize_handler: Optional[Union[Var[bool], bool]] = None,
+        style: Optional[Style] = None,
+        key: Optional[Any] = None,
+        id: Optional[Any] = None,
+        class_name: Optional[Any] = None,
+        autofocus: Optional[bool] = None,
+        custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
+        on_after_plot: Optional[EventType[()]] = None,
+        on_animated: Optional[EventType[()]] = None,
+        on_animating_frame: Optional[EventType[()]] = None,
+        on_animation_interrupted: Optional[EventType[()]] = None,
+        on_autosize: Optional[EventType[()]] = None,
+        on_before_hover: Optional[EventType[()]] = None,
+        on_blur: Optional[EventType[()]] = None,
+        on_button_clicked: Optional[EventType[()]] = None,
+        on_click: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_context_menu: Optional[EventType[()]] = None,
+        on_deselect: Optional[EventType[()]] = None,
+        on_double_click: Optional[EventType[()]] = None,
+        on_focus: Optional[EventType[()]] = None,
+        on_hover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_mount: Optional[EventType[()]] = None,
+        on_mouse_down: Optional[EventType[()]] = None,
+        on_mouse_enter: Optional[EventType[()]] = None,
+        on_mouse_leave: Optional[EventType[()]] = None,
+        on_mouse_move: Optional[EventType[()]] = None,
+        on_mouse_out: Optional[EventType[()]] = None,
+        on_mouse_over: Optional[EventType[()]] = None,
+        on_mouse_up: Optional[EventType[()]] = None,
+        on_redraw: Optional[EventType[()]] = None,
+        on_relayout: Optional[EventType[()]] = None,
+        on_relayouting: Optional[EventType[()]] = None,
+        on_restyle: Optional[EventType[()]] = None,
+        on_scroll: Optional[EventType[()]] = None,
+        on_selected: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_selecting: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_transition_interrupted: Optional[EventType[()]] = None,
+        on_transitioning: Optional[EventType[()]] = None,
+        on_unhover: Optional[Union[EventType[()], EventType[List[Point]]]] = None,
+        on_unmount: Optional[EventType[()]] = None,
+        **props,
+    ) -> "PlotlyStrict":
+        """Create the Plotly component.
+
+        Args:
+            *children: The children of the component.
+            data: The figure to display. This can be a plotly figure or a plotly data json.
+            layout: The layout of the graph.
+            template: The template for visual appearance of the graph.
+            config: The config of the graph.
+            use_resize_handler: If true, the graph will resize when the window is resized.
+            on_after_plot: Fired after the plot is redrawn.
+            on_animated: Fired after the plot was animated.
+            on_animating_frame: Fired while animating a single frame (does not currently pass data through).
+            on_animation_interrupted: Fired when an animation is interrupted (to start a new animation for example).
+            on_autosize: Fired when the plot is responsively sized.
+            on_before_hover: Fired whenever mouse moves over a plot.
+            on_button_clicked: Fired when a plotly UI button is clicked.
+            on_click: Fired when the plot is clicked.
+            on_deselect: Fired when a selection is cleared (via double click).
+            on_double_click: Fired when the plot is double clicked.
+            on_hover: Fired when a plot element is hovered over.
+            on_relayout: Fired after the plot is laid out (zoom, pan, etc).
+            on_relayouting: Fired while the plot is being laid out.
+            on_restyle: Fired after the plot style is changed.
+            on_redraw: Fired after the plot is redrawn.
+            on_selected: Fired after selecting plot elements.
+            on_selecting: Fired while dragging a selection.
+            on_transitioning: Fired while an animation is occurring.
+            on_transition_interrupted: Fired when a transition is stopped early.
+            on_unhover: Fired when a hovered element is no longer hovered.
+            style: The style of the component.
+            key: A unique key for the component.
+            id: The id for the component.
+            class_name: The class name for the component.
+            autofocus: Whether the component should take the focus once the page is loaded
+            custom_attrs: custom attribute
+            **props: The properties of the component.
+
+        Returns:
+            The Plotly component.
+        """
+        ...

+ 3 - 0
reflex/utils/imports.py

@@ -109,6 +109,9 @@ class ImportVar:
     # whether this import should be rendered or not
     render: Optional[bool] = True
 
+    # The path of the package to import from.
+    package_path: str = "/"
+
     # whether this import package should be added to transpilePackages in next.config.js
     # https://nextjs.org/docs/app/api-reference/next-config-js/transpilePackages
     transpile: Optional[bool] = False