|
@@ -8,13 +8,14 @@ from reflex.vars import Var, BaseVar, ComputedVar
|
|
|
from reflex.event import EventChain, EventHandler, EventSpec
|
|
|
from reflex.style import Style
|
|
|
import dataclasses
|
|
|
+from typing import Literal, get_args
|
|
|
from reflex.components.component import BaseComponent
|
|
|
-from reflex.components.core.cond import Cond, color_mode_cond
|
|
|
+from reflex.components.core.cond import Cond, color_mode_cond, cond
|
|
|
from reflex.components.lucide.icon import Icon
|
|
|
-from reflex.style import LIGHT_COLOR_MODE, color_mode, toggle_color_mode
|
|
|
-from reflex.vars import BaseVar
|
|
|
-from .components.button import Button
|
|
|
-from .components.switch import Switch
|
|
|
+from reflex.style import color_mode, toggle_color_mode
|
|
|
+from reflex.utils import console
|
|
|
+from reflex.vars import BaseVar, Var
|
|
|
+from .components.icon_button import IconButton
|
|
|
|
|
|
DEFAULT_LIGHT_ICON: Icon
|
|
|
DEFAULT_DARK_ICON: Icon
|
|
@@ -92,187 +93,23 @@ class ColorModeIcon(Cond):
|
|
|
"""
|
|
|
...
|
|
|
|
|
|
-class ColorModeSwitch(Switch):
|
|
|
- @overload
|
|
|
- @classmethod
|
|
|
- def create( # type: ignore
|
|
|
- cls,
|
|
|
- *children,
|
|
|
- as_child: 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,
|
|
|
- size: Optional[
|
|
|
- Union[Var[Literal["1", "2", "3"]], Literal["1", "2", "3"]]
|
|
|
- ] = None,
|
|
|
- variant: Optional[
|
|
|
- Union[
|
|
|
- Var[Literal["classic", "surface", "soft"]],
|
|
|
- Literal["classic", "surface", "soft"],
|
|
|
- ]
|
|
|
- ] = None,
|
|
|
- color_scheme: 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,
|
|
|
- radius: Optional[
|
|
|
- Union[
|
|
|
- Var[Literal["none", "small", "full"]], Literal["none", "small", "full"]
|
|
|
- ]
|
|
|
- ] = 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_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
|
|
|
- ) -> "ColorModeSwitch":
|
|
|
- """Create a switch component bound to color_mode.
|
|
|
-
|
|
|
- Args:
|
|
|
- *children: The children of the component.
|
|
|
- as_child: Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
|
- default_checked: Whether the switch is checked by default
|
|
|
- checked: Whether the switch is checked
|
|
|
- disabled: If true, prevent the user from interacting with the switch
|
|
|
- required: If true, the user must interact with the switch to submit the form
|
|
|
- name: The name of the switch (when submitting a form)
|
|
|
- value: The value associated with the "on" position
|
|
|
- size: Switch size "1" - "4"
|
|
|
- variant: Variant of switch: "classic" | "surface" | "soft"
|
|
|
- color_scheme: Override theme color for switch
|
|
|
- high_contrast: Whether to render the switch with higher contrast color against background
|
|
|
- radius: Override theme radius for switch: "none" | "small" | "full"
|
|
|
- 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 to pass to the component.
|
|
|
-
|
|
|
- Returns:
|
|
|
- The switch component.
|
|
|
- """
|
|
|
- ...
|
|
|
+LiteralPosition = Literal["top-left", "top-right", "bottom-left", "bottom-right"]
|
|
|
+position_values = get_args(LiteralPosition)
|
|
|
+position_map = {
|
|
|
+ "position": position_values,
|
|
|
+ "left": ["top-left", "bottom-left"],
|
|
|
+ "right": ["top-right", "bottom-right"],
|
|
|
+ "top": ["top-left", "top-right"],
|
|
|
+ "bottom": ["bottom-left", "bottom-right"],
|
|
|
+}
|
|
|
|
|
|
-class ColorModeButton(Button):
|
|
|
+class ColorModeIconButton(IconButton):
|
|
|
@overload
|
|
|
@classmethod
|
|
|
def create( # type: ignore
|
|
|
cls,
|
|
|
*children,
|
|
|
+ position: Optional[LiteralPosition | None] = None,
|
|
|
as_child: Optional[Union[Var[bool], bool]] = None,
|
|
|
size: Optional[
|
|
|
Union[Var[Literal["1", "2", "3", "4"]], Literal["1", "2", "3", "4"]]
|
|
@@ -470,14 +307,15 @@ class ColorModeButton(Button):
|
|
|
Union[EventHandler, EventSpec, list, function, BaseVar]
|
|
|
] = None,
|
|
|
**props
|
|
|
- ) -> "ColorModeButton":
|
|
|
- """Create a button component that calls toggle_color_mode on click.
|
|
|
+ ) -> "ColorModeIconButton":
|
|
|
+ """Create a icon button component that calls toggle_color_mode on click.
|
|
|
|
|
|
Args:
|
|
|
*children: The children of the component.
|
|
|
+ position: The position of the icon button. Follow document flow if None.
|
|
|
as_child: Change the default rendered element for the one passed as a child, merging their props and behavior.
|
|
|
size: Button size "1" - "4"
|
|
|
- variant: Variant of button: "solid" | "soft" | "outline" | "ghost"
|
|
|
+ variant: Variant of button: "classic" | "solid" | "soft" | "surface" | "outline" | "ghost"
|
|
|
color_scheme: Override theme color for button
|
|
|
high_contrast: Whether to render the button with higher contrast color against background
|
|
|
radius: Override theme radius for button: "none" | "small" | "medium" | "large" | "full"
|
|
@@ -524,7 +362,6 @@ class ColorModeButton(Button):
|
|
|
|
|
|
class ColorModeNamespace(BaseVar):
|
|
|
icon = staticmethod(ColorModeIcon.create)
|
|
|
- switch = staticmethod(ColorModeSwitch.create)
|
|
|
- button = staticmethod(ColorModeButton.create)
|
|
|
+ button = staticmethod(ColorModeIconButton.create)
|
|
|
|
|
|
color_mode_var_and_namespace = ColorModeNamespace(**dataclasses.asdict(color_mode))
|