瀏覽代碼

high level api for checkbox (#2406)

Tom Gotsman 1 年之前
父節點
當前提交
035fc8e15a

+ 1 - 0
reflex/components/markdown/markdown.py

@@ -41,6 +41,7 @@ _REHYPE_PLUGINS = Var.create_safe([_REHYPE_KATEX, _REHYPE_RAW])
 # These tags do NOT get props passed to them
 # These tags do NOT get props passed to them
 NO_PROPS_TAGS = ("ul", "ol", "li")
 NO_PROPS_TAGS = ("ul", "ol", "li")
 
 
+
 # Component Mapping
 # Component Mapping
 @lru_cache
 @lru_cache
 def get_base_component_map() -> dict[str, Callable]:
 def get_base_component_map() -> dict[str, Callable]:

+ 2 - 1
reflex/components/radix/themes/components/__init__.py

@@ -15,7 +15,7 @@ from .badge import Badge
 from .button import Button
 from .button import Button
 from .callout import CalloutIcon, CalloutRoot, CalloutText
 from .callout import CalloutIcon, CalloutRoot, CalloutText
 from .card import Card
 from .card import Card
-from .checkbox import Checkbox
+from .checkbox import Checkbox, HighLevelCheckbox
 from .contextmenu import (
 from .contextmenu import (
     ContextMenuContent,
     ContextMenuContent,
     ContextMenuItem,
     ContextMenuItem,
@@ -108,6 +108,7 @@ card = Card.create
 
 
 # Checkbox
 # Checkbox
 checkbox = Checkbox.create
 checkbox = Checkbox.create
+checkbox_hl = HighLevelCheckbox.create
 
 
 # Context Menu
 # Context Menu
 contextmenu_root = ContextMenuRoot.create
 contextmenu_root = ContextMenuRoot.create

+ 37 - 4
reflex/components/radix/themes/components/checkbox.py

@@ -1,12 +1,15 @@
 """Interactive components provided by @radix-ui/themes."""
 """Interactive components provided by @radix-ui/themes."""
 from typing import Any, Dict, Literal
 from typing import Any, Dict, Literal
 
 
+from reflex.components.component import Component
+from reflex.components.radix.themes.layout.flex import Flex
+from reflex.components.radix.themes.typography.text import Text
 from reflex.vars import Var
 from reflex.vars import Var
 
 
 from ..base import (
 from ..base import (
     CommonMarginProps,
     CommonMarginProps,
     LiteralAccentColor,
     LiteralAccentColor,
-    LiteralRadius,
+    LiteralSize,
     LiteralVariant,
     LiteralVariant,
     RadixThemesComponent,
     RadixThemesComponent,
 )
 )
@@ -34,9 +37,6 @@ class Checkbox(CommonMarginProps, RadixThemesComponent):
     # Whether to render the button with higher contrast color against background
     # Whether to render the button with higher contrast color against background
     high_contrast: Var[bool]
     high_contrast: Var[bool]
 
 
-    # Override theme radius for button: "none" | "small" | "medium" | "large" | "full"
-    radius: Var[LiteralRadius]
-
     # Whether the checkbox is checked by default
     # Whether the checkbox is checked by default
     default_checked: Var[bool]
     default_checked: Var[bool]
 
 
@@ -65,3 +65,36 @@ class Checkbox(CommonMarginProps, RadixThemesComponent):
             **super().get_event_triggers(),
             **super().get_event_triggers(),
             "on_checked_change": lambda e0: [e0],
             "on_checked_change": lambda e0: [e0],
         }
         }
+
+
+class HighLevelCheckbox(Checkbox):
+    """A checkbox component with a label."""
+
+    @classmethod
+    def create(
+        cls,
+        text: str = "",
+        gap: Var[LiteralSize] = Var.create_safe("2"),
+        size: Var[LiteralCheckboxSize] = Var.create_safe("2"),
+        **props
+    ) -> Component:
+        """Create a checkbox with a label.
+
+        Args:
+            text: The text of the label.
+            gap: The gap between the checkbox and the label.
+            size: The size of the checkbox.
+            **props: Additional properties to apply to the checkbox item.
+
+        Returns:
+            The checkbox component with a label.
+        """
+        return Text.create(
+            Flex.create(
+                Checkbox.create(size=size, **props),
+                text,
+                gap=gap,
+            ),
+            as_="label",
+            size=size,
+        )

+ 224 - 8
reflex/components/radix/themes/components/checkbox.pyi

@@ -8,11 +8,14 @@ from reflex.vars import Var, BaseVar, ComputedVar
 from reflex.event import EventChain, EventHandler, EventSpec
 from reflex.event import EventChain, EventHandler, EventSpec
 from reflex.style import Style
 from reflex.style import Style
 from typing import Any, Dict, Literal
 from typing import Any, Dict, Literal
+from reflex.components.component import Component
+from reflex.components.radix.themes.layout.flex import Flex
+from reflex.components.radix.themes.typography.text import Text
 from reflex.vars import Var
 from reflex.vars import Var
 from ..base import (
 from ..base import (
     CommonMarginProps,
     CommonMarginProps,
     LiteralAccentColor,
     LiteralAccentColor,
-    LiteralRadius,
+    LiteralSize,
     LiteralVariant,
     LiteralVariant,
     RadixThemesComponent,
     RadixThemesComponent,
 )
 )
@@ -100,12 +103,6 @@ class Checkbox(CommonMarginProps, RadixThemesComponent):
             ]
             ]
         ] = None,
         ] = None,
         high_contrast: Optional[Union[Var[bool], bool]] = None,
         high_contrast: Optional[Union[Var[bool], bool]] = None,
-        radius: Optional[
-            Union[
-                Var[Literal["none", "small", "medium", "large", "full"]],
-                Literal["none", "small", "medium", "large", "full"],
-            ]
-        ] = None,
         default_checked: Optional[Union[Var[bool], bool]] = None,
         default_checked: Optional[Union[Var[bool], bool]] = None,
         checked: Optional[Union[Var[bool], bool]] = None,
         checked: Optional[Union[Var[bool], bool]] = None,
         disabled: Optional[Union[Var[bool], bool]] = None,
         disabled: Optional[Union[Var[bool], bool]] = None,
@@ -223,7 +220,6 @@ class Checkbox(CommonMarginProps, RadixThemesComponent):
             size: Button size "1" - "3"
             size: Button size "1" - "3"
             variant: Variant of button: "solid" | "soft" | "outline" | "ghost"
             variant: Variant of button: "solid" | "soft" | "outline" | "ghost"
             high_contrast: Whether to render the button with higher contrast color against background
             high_contrast: Whether to render the button with higher contrast color against background
-            radius: Override theme radius for button: "none" | "small" | "medium" | "large" | "full"
             default_checked: Whether the checkbox is checked by default
             default_checked: Whether the checkbox is checked by default
             checked: Whether the checkbox is checked
             checked: Whether the checkbox is checked
             disabled: Whether the checkbox is disabled
             disabled: Whether the checkbox is disabled
@@ -249,3 +245,223 @@ class Checkbox(CommonMarginProps, RadixThemesComponent):
             A new component instance.
             A new component instance.
         """
         """
         ...
         ...
+
+class HighLevelCheckbox(Checkbox):
+    @overload
+    @classmethod
+    def create(  # type: ignore
+        cls,
+        *children,
+        as_child: Optional[Union[Var[bool], bool]] = None,
+        size: Optional[
+            Union[Var[Literal["1", "2", "3"]], Literal["1", "2", "3"]]
+        ] = None,
+        variant: Optional[
+            Union[
+                Var[Literal["classic", "solid", "soft", "surface", "outline", "ghost"]],
+                Literal["classic", "solid", "soft", "surface", "outline", "ghost"],
+            ]
+        ] = None,
+        color: Optional[
+            Union[
+                Var[
+                    Literal[
+                        "tomato",
+                        "red",
+                        "ruby",
+                        "crimson",
+                        "pink",
+                        "plum",
+                        "purple",
+                        "violet",
+                        "iris",
+                        "indigo",
+                        "blue",
+                        "cyan",
+                        "teal",
+                        "jade",
+                        "green",
+                        "grass",
+                        "brown",
+                        "orange",
+                        "sky",
+                        "mint",
+                        "lime",
+                        "yellow",
+                        "amber",
+                        "gold",
+                        "bronze",
+                        "gray",
+                    ]
+                ],
+                Literal[
+                    "tomato",
+                    "red",
+                    "ruby",
+                    "crimson",
+                    "pink",
+                    "plum",
+                    "purple",
+                    "violet",
+                    "iris",
+                    "indigo",
+                    "blue",
+                    "cyan",
+                    "teal",
+                    "jade",
+                    "green",
+                    "grass",
+                    "brown",
+                    "orange",
+                    "sky",
+                    "mint",
+                    "lime",
+                    "yellow",
+                    "amber",
+                    "gold",
+                    "bronze",
+                    "gray",
+                ],
+            ]
+        ] = None,
+        high_contrast: Optional[Union[Var[bool], bool]] = None,
+        default_checked: Optional[Union[Var[bool], bool]] = None,
+        checked: Optional[Union[Var[bool], bool]] = None,
+        disabled: Optional[Union[Var[bool], bool]] = None,
+        required: Optional[Union[Var[bool], bool]] = None,
+        name: Optional[Union[Var[str], str]] = None,
+        value: Optional[Union[Var[str], str]] = None,
+        m: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = None,
+        mx: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = None,
+        my: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = None,
+        mt: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = None,
+        mr: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = None,
+        mb: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = None,
+        ml: Optional[
+            Union[
+                Var[Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]],
+                Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"],
+            ]
+        ] = 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_checked_change: 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_scroll: Optional[
+            Union[EventHandler, EventSpec, list, function, BaseVar]
+        ] = None,
+        on_unmount: Optional[
+            Union[EventHandler, EventSpec, list, function, BaseVar]
+        ] = None,
+        **props
+    ) -> "HighLevelCheckbox":
+        """Create a checkbox with a label.
+
+        Args:
+            text: The text of the label.
+            gap: The gap between the checkbox and the label.
+            size: The size of the checkbox.
+            as_child: Change the default rendered element for the one passed as a child, merging their props and behavior.
+            size: Button size "1" - "3"
+            variant: Variant of button: "solid" | "soft" | "outline" | "ghost"
+            color: Override theme color for button
+            high_contrast: Whether to render the button with higher contrast color against background
+            default_checked: Whether the checkbox is checked by default
+            checked: Whether the checkbox is checked
+            disabled: Whether the checkbox is disabled
+            required: Whether the checkbox is required
+            name: The name of the checkbox control when submitting the form.
+            value: The value of the checkbox control when submitting the form.
+            m: Margin: "0" - "9"
+            mx: Margin horizontal: "0" - "9"
+            my: Margin vertical: "0" - "9"
+            mt: Margin top: "0" - "9"
+            mr: Margin right: "0" - "9"
+            mb: Margin bottom: "0" - "9"
+            ml: Margin left: "0" - "9"
+            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: Additional properties to apply to the checkbox item.
+
+        Returns:
+            The checkbox component with a label.
+        """
+        ...