From a5302f1866cda697f7401effb6984366659a49a8 Mon Sep 17 00:00:00 2001 From: Masen Furer Date: Wed, 31 Jan 2024 11:39:13 -0800 Subject: [PATCH] [0.4.0] Namespace the Drawer primitive subcomponents (#2492) --- .../components/radix/primitives/__init__.py | 11 +- reflex/components/radix/primitives/drawer.py | 23 ++-- reflex/components/radix/primitives/drawer.pyi | 124 ++++++++++++++++-- scripts/pyi_generator.py | 9 +- 4 files changed, 135 insertions(+), 32 deletions(-) diff --git a/reflex/components/radix/primitives/__init__.py b/reflex/components/radix/primitives/__init__.py index e23c09d47..23070044e 100644 --- a/reflex/components/radix/primitives/__init__.py +++ b/reflex/components/radix/primitives/__init__.py @@ -1,16 +1,7 @@ """Radix primitive components (https://www.radix-ui.com/primitives).""" from .accordion import accordion +from .drawer import drawer from .form import form -from .drawer import ( - drawer_close, - drawer_content, - drawer_description, - drawer_overlay, - drawer_portal, - drawer_root, - drawer_title, - drawer_trigger, -) from .progress import progress from .slider import slider diff --git a/reflex/components/radix/primitives/drawer.py b/reflex/components/radix/primitives/drawer.py index 6b310a25f..b9223c1f2 100644 --- a/reflex/components/radix/primitives/drawer.py +++ b/reflex/components/radix/primitives/drawer.py @@ -3,6 +3,7 @@ # Style based on https://ui.shadcn.com/docs/components/drawer from __future__ import annotations +from types import SimpleNamespace from typing import Any, Dict, List, Literal, Optional, Union from reflex.components.radix.primitives.base import RadixPrimitiveComponentWithClassName @@ -230,11 +231,17 @@ class DrawerDescription(DrawerComponent): return self.style -drawer_root = DrawerRoot.create -drawer_trigger = DrawerTrigger.create -drawer_portal = DrawerPortal.create -drawer_content = DrawerContent.create -drawer_overlay = DrawerOverlay.create -drawer_close = DrawerClose.create -drawer_title = DrawerTitle.create -drawer_description = DrawerDescription.create +class Drawer(SimpleNamespace): + """A namespace for Drawer components.""" + + root = __call__ = staticmethod(DrawerRoot.create) + trigger = staticmethod(DrawerTrigger.create) + portal = staticmethod(DrawerPortal.create) + content = staticmethod(DrawerContent.create) + overlay = staticmethod(DrawerOverlay.create) + close = staticmethod(DrawerClose.create) + title = staticmethod(DrawerTitle.create) + description = staticmethod(DrawerDescription.create) + + +drawer = Drawer() diff --git a/reflex/components/radix/primitives/drawer.pyi b/reflex/components/radix/primitives/drawer.pyi index 73b1df355..352460f87 100644 --- a/reflex/components/radix/primitives/drawer.pyi +++ b/reflex/components/radix/primitives/drawer.pyi @@ -7,6 +7,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload from reflex.vars import Var, BaseVar, ComputedVar from reflex.event import EventChain, EventHandler, EventSpec from reflex.style import Style +from types import SimpleNamespace from typing import Any, Dict, List, Literal, Optional, Union from reflex.components.radix.primitives.base import RadixPrimitiveComponentWithClassName from reflex.constants import EventTriggers @@ -786,11 +787,118 @@ class DrawerDescription(DrawerComponent): """ ... -drawer_root = DrawerRoot.create -drawer_trigger = DrawerTrigger.create -drawer_portal = DrawerPortal.create -drawer_content = DrawerContent.create -drawer_overlay = DrawerOverlay.create -drawer_close = DrawerClose.create -drawer_title = DrawerTitle.create -drawer_description = DrawerDescription.create +class Drawer(SimpleNamespace): + root = staticmethod(DrawerRoot.create) + trigger = staticmethod(DrawerTrigger.create) + portal = staticmethod(DrawerPortal.create) + content = staticmethod(DrawerContent.create) + overlay = staticmethod(DrawerOverlay.create) + close = staticmethod(DrawerClose.create) + title = staticmethod(DrawerTitle.create) + description = staticmethod(DrawerDescription.create) + + @staticmethod + def __call__( + *children, + open: Optional[Union[Var[bool], bool]] = None, + should_scale_background: Optional[Union[Var[bool], bool]] = None, + close_threshold: Optional[Union[Var[float], float]] = None, + snap_points: Optional[List[Union[str, float]]] = None, + fade_from_index: Optional[Union[Var[int], int]] = None, + scroll_lock_timeout: Optional[Union[Var[int], int]] = None, + modal: Optional[Union[Var[bool], bool]] = None, + direction: Optional[ + Union[ + Var[Literal["top", "bottom", "left", "right"]], + Literal["top", "bottom", "left", "right"], + ] + ] = None, + preventScrollRestoration: Optional[Union[Var[bool], bool]] = None, + as_child: 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, str]]] = None, + on_blur: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_click: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_context_menu: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_double_click: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_focus: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mount: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_down: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_enter: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_leave: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_move: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_out: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_over: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_mouse_up: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_open_change: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_scroll: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + on_unmount: Optional[ + Union[EventHandler, EventSpec, list, function, BaseVar] + ] = None, + **props + ) -> "DrawerRoot": + """Create the component. + + Args: + *children: The children of the component. + open: Whether the drawer is open or not. + should_scale_background: Enable background scaling, it requires an element with [vaul-drawer-wrapper] data attribute to scale its background. + close_threshold: Number between 0 and 1 that determines when the drawer should be closed. + snap_points: Array of numbers from 0 to 100 that corresponds to % of the screen a given snap point should take up. Should go from least visible. Also Accept px values, which doesn't take screen height into account. + fade_from_index: Index of a snapPoint from which the overlay fade should be applied. Defaults to the last snap point. TODO: will it accept -1 then? + scroll_lock_timeout: Duration for which the drawer is not draggable after scrolling content inside of the drawer. Defaults to 500ms + modal: When `False`, it allows to interact with elements outside of the drawer without closing it. Defaults to `True`. + direction: Direction of the drawer. Defaults to `"bottom"` + preventScrollRestoration: When `True`, it prevents scroll restoration when the drawer is closed after a navigation happens inside of it. Defaults to `True`. + as_child: Change the default rendered element for the one passed as a child. + 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 props of the component. + + Returns: + The component. + + Raises: + TypeError: If an invalid child is passed. + """ + ... + +drawer = Drawer() diff --git a/scripts/pyi_generator.py b/scripts/pyi_generator.py index 8bdf3fcd8..51dbdb463 100644 --- a/scripts/pyi_generator.py +++ b/scripts/pyi_generator.py @@ -516,18 +516,15 @@ def _generate_namespace_call_functiondef( clz = classes[clz_name] # Determine which class is wrapped by the namespace __call__ method - component_class_name, dot, func_name = clz.__call__.__func__.__qualname__.partition( - "." - ) - component_clz = classes[component_class_name] + component_clz = clz.__call__.__self__ # Only generate for create functions - if func_name != "create": + if clz.__call__.__func__.__name__ != "create": return None definition = _generate_component_create_functiondef( node=None, - clz=component_clz, + clz=component_clz, # type: ignore type_hint_globals=type_hint_globals, ) definition.name = "__call__"