diff --git a/reflex/__init__.pyi b/reflex/__init__.pyi index 488e9625c..81557a034 100644 --- a/reflex/__init__.pyi +++ b/reflex/__init__.pyi @@ -94,6 +94,7 @@ from reflex.components.component import NoSSRComponent as NoSSRComponent from reflex.components.component import memo as memo from reflex.components import chakra as chakra from reflex.components import el as el +from reflex.components import lucide as lucide from reflex.components import next as next from reflex.components import radix as radix from reflex.components import recharts as recharts diff --git a/reflex/components/radix/themes/components/__init__.py b/reflex/components/radix/themes/components/__init__.py index 462e2e88a..30efe0d65 100644 --- a/reflex/components/radix/themes/components/__init__.py +++ b/reflex/components/radix/themes/components/__init__.py @@ -13,7 +13,6 @@ from .dialog import dialog as dialog from .dropdownmenu import dropdown_menu as dropdown_menu from .hovercard import hover_card as hover_card from .iconbutton import icon_button as icon_button -from .icons import icon as icon from .inset import inset as inset from .popover import popover as popover from .radiogroup import radio_group as radio_group @@ -44,7 +43,6 @@ __all__ = [ "dropdown_menu", "hover_card", "icon_button", - "icon", "input", "inset", "popover", diff --git a/reflex/components/radix/themes/components/callout.py b/reflex/components/radix/themes/components/callout.py index a388f423e..6b0600d04 100644 --- a/reflex/components/radix/themes/components/callout.py +++ b/reflex/components/radix/themes/components/callout.py @@ -1,11 +1,12 @@ """Interactive components provided by @radix-ui/themes.""" + from types import SimpleNamespace from typing import Literal, Union import reflex as rx from reflex import el from reflex.components.component import Component -from reflex.components.radix.themes.components.icons import Icon +from reflex.components.lucide.icon import Icon from reflex.vars import Var from ..base import ( @@ -70,9 +71,11 @@ class Callout(CalloutRoot): The callout component. """ return CalloutRoot.create( - CalloutIcon.create(Icon.create(tag=props["icon"])) - if "icon" in props - else rx.fragment(), + ( + CalloutIcon.create(Icon.create(tag=props["icon"])) + if "icon" in props + else rx.fragment() + ), CalloutText.create(text), **props, ) diff --git a/reflex/components/radix/themes/components/callout.pyi b/reflex/components/radix/themes/components/callout.pyi index 3e96ffd1a..05e86e714 100644 --- a/reflex/components/radix/themes/components/callout.pyi +++ b/reflex/components/radix/themes/components/callout.pyi @@ -12,7 +12,7 @@ from typing import Literal, Union import reflex as rx from reflex import el from reflex.components.component import Component -from reflex.components.radix.themes.components.icons import Icon +from reflex.components.lucide.icon import Icon from reflex.vars import Var from ..base import LiteralAccentColor, RadixThemesComponent diff --git a/reflex/components/radix/themes/components/icons.py b/reflex/components/radix/themes/components/icons.py deleted file mode 100644 index 05f7cf5ca..000000000 --- a/reflex/components/radix/themes/components/icons.py +++ /dev/null @@ -1,404 +0,0 @@ -"""Radix Icons.""" - - -from typing import List - -from reflex.components.component import Component -from reflex.utils import format - - -class RadixIconComponent(Component): - """A component used as basis for Radix icons.""" - - library = "@radix-ui/react-icons@^1.3.0" - - -class Icon(RadixIconComponent): - """An image Icon.""" - - tag = "None" - - @classmethod - def create(cls, *children, **props) -> Component: - """Initialize the Icon component. - - Run some additional checks on Icon component. - - Args: - *children: The positional arguments - **props: The keyword arguments - - Raises: - AttributeError: The errors tied to bad usage of the Icon component. - ValueError: If the icon tag is invalid. - - Returns: - The created component. - """ - if children: - raise AttributeError( - f"Passing children to Icon component is not allowed: remove positional arguments {children} to fix" - ) - if "tag" not in props.keys(): - raise AttributeError("Missing 'tag' keyword-argument for Icon") - if type(props["tag"]) != str or props["tag"].lower() not in ICON_LIST: - raise ValueError( - f"Invalid icon tag: {props['tag']}. Please use one of the following: {sorted(ICON_LIST)}" - ) - props["tag"] = format.to_title_case(props["tag"]) + "Icon" - props["alias"] = f"RadixThemes{props['tag']}" - return super().create(*children, **props) - - -icon = Icon.create - - -ICON_ABSTRACT: List[str] = [ - "hamburger_menu", - "cross_1", - "dots_vertical", - "dots_horizontal", - "plus", - "minus", - "check", - "cross_2", - "check_circled", - "cross_circled", - "plus_circled", - "minus_circled", - "question_mark", - "question_mark_circled", - "info_circled", - "accessibility", - "exclamation_triangle", - "share_1", - "share_2", - "external_link", - "open_in_new_window", - "enter", - "exit", - "download", - "upload", - "reset", - "reload", - "update", - "enter_full_screen", - "exit_full_screen", - "drag_handle_vertical", - "drag_handle_horizontal", - "drag_handle_dots_1", - "drag_handle_dots_2", - "dot", - "dot_filled", - "commit", - "slash", - "circle", - "circle_backslash", - "half_1", - "half_2", - "view_none", - "view_horizontal", - "view_vertical", - "view_grid", - "copy", - "square", -] -ICON_ALIGNS: List[str] = [ - "align_top", - "align_center_vertically", - "align_bottom", - "stretch_vertically", - "align_left", - "align_center_horizontally", - "align_right", - "stretch_horizontally", - "space_between_horizontally", - "space_evenly_horizontally", - "space_between_vertically", - "space_evenly_vertically", - "pin_left", - "pin_right", - "pin_top", - "pin_bottom", -] -ICON_ARROWS: List[str] = [ - "arrow_left", - "arrow_right", - "arrow_up", - "arrow_down", - "arrow_top_left", - "arrow_top_right", - "arrow_bottom_left", - "arrow_bottom_right", - "chevron_left", - "chevron_right", - "chevron_up", - "chevron_down", - "double_arrow_down", - "double_arrow_right", - "double_arrow_left", - "double_arrow_up", - "thick_arrow_up", - "thick_arrow_down", - "thick_arrow_right", - "thick_arrow_left", - "triangle_right", - "triangle_left", - "triangle_down", - "triangle_up", - "caret_down", - "caret_up", - "caret_left", - "caret_right", - "caret_sort", - "width", - "height", - "size", - "move", - "all_sides", -] -ICON_BORDERS: List[str] = [ - "border_all", - "border_split", - "border_none", - "border_left", - "border_right", - "border_top", - "border_bottom", - "border_width", - "corners", - "corner_top_left", - "corner_top_right", - "corner_bottom_right", - "corner_bottom_left", - "border_style", - "border_solid", - "border_dashed", - "border_dotted", -] -ICON_COMPONENTS: List[str] = [ - "box", - "aspect_ratio", - "container", - "section", - "layout", - "grid", - "table", - "image", - "switch", - "checkbox", - "radiobutton", - "avatar", - "button", - "badge", - "input", - "slider", - "quote", - "code", - "list_bullet", - "dropdown_menu", - "video", - "pie_chart", - "calendar", - "dashboard", - "activity_log", - "bar_chart", - "divider_horizontal", - "divider_vertical", -] -ICON_DESIGN: List[str] = [ - "frame", - "crop", - "layers", - "stack", - "tokens", - "component_1", - "component_2", - "component_instance", - "component_none", - "component_boolean", - "component_placeholder", - "opacity", - "blending_mode", - "mask_on", - "mask_off", - "color_wheel", - "shadow", - "shadow_none", - "shadow_inner", - "shadow_outer", - "value", - "value_none", - "zoom_in", - "zoom_out", - "transparency_grid", - "group", - "dimensions", - "rotate_counter_clockwise", - "columns", - "rows", - "transform", - "box_model", - "padding", - "margin", - "angle", - "cursor_arrow", - "cursor_text", - "column_spacing", - "row_spacing", -] -ICON_LOGOS: List[str] = [ - "modulz_logo", - "stitches_logo", - "figma_logo", - "framer_logo", - "sketch_logo", - "twitter_logo", - "icon_jar_logo", - "git_hub_logo", - "code_sandbox_logo", - "notion_logo", - "discord_logo", - "instagram_logo", - "linked_in_logo", -] -ICON_MUSIC: List[str] = [ - "play", - "resume", - "pause", - "stop", - "track_previous", - "track_next", - "loop", - "shuffle", - "speaker_loud", - "speaker_moderate", - "speaker_quiet", - "speaker_off", -] -ICON_OBJECTS: List[str] = [ - "magnifying_glass", - "gear", - "bell", - "home", - "lock_closed", - "lock_open_1", - "lock_open_2", - "backpack", - "camera", - "paper_plane", - "rocket", - "envelope_closed", - "envelope_open", - "chat_bubble", - "link_1", - "link_2", - "link_break_1", - "link_break_2", - "link_none_1", - "link_none_2", - "trash", - "pencil_1", - "pencil_2", - "bookmark", - "bookmark_filled", - "drawing_pin", - "drawing_pin_filled", - "sewing_pin", - "sewing_pin_filled", - "cube", - "archive", - "crumpled_paper", - "mix", - "mixer_horizontal", - "mixer_vertical", - "file", - "file_minus", - "file_plus", - "file_text", - "reader", - "card_stack", - "card_stack_plus", - "card_stack_minus", - "id_card", - "crosshair_1", - "crosshair_2", - "target", - "globe", - "disc", - "sun", - "moon", - "clock", - "timer", - "counter_clockwise_clock", - "countdown_timer", - "stopwatch", - "lap_timer", - "lightning_bolt", - "magic_wand", - "face", - "person", - "eye_open", - "eye_none", - "eye_closed", - "hand", - "ruler_horizontal", - "ruler_square", - "clipboard", - "clipboard_copy", - "desktop", - "laptop", - "mobile", - "keyboard", - "star", - "star_filled", - "heart", - "heart_filled", - "scissors", - "hobby_knife", - "eraser", - "cookie", -] -ICON_TYPOGRAPHY: List[str] = [ - "font_style", - "font_italic", - "font_roman", - "font_bold", - "letter_case_lowercase", - "letter_case_capitalize", - "letter_case_uppercase", - "letter_case_toggle", - "letter_spacing", - "align_baseline", - "font_size", - "font_family", - "heading", - "text", - "text_none", - "line_height", - "underline", - "strikethrough", - "overline", - "pilcrow", - "text_align_left", - "text_align_center", - "text_align_right", - "text_align_justify", - "text_align_top", - "text_align_middle", - "text_align_bottom", - "dash", -] - -ICON_LIST: List[str] = [ - *ICON_ABSTRACT, - *ICON_ALIGNS, - *ICON_ARROWS, - *ICON_BORDERS, - *ICON_COMPONENTS, - *ICON_DESIGN, - *ICON_LOGOS, - *ICON_MUSIC, - *ICON_OBJECTS, - *ICON_TYPOGRAPHY, -] diff --git a/reflex/components/radix/themes/components/icons.pyi b/reflex/components/radix/themes/components/icons.pyi deleted file mode 100644 index 3fabc6e71..000000000 --- a/reflex/components/radix/themes/components/icons.pyi +++ /dev/null @@ -1,190 +0,0 @@ -"""Stub file for reflex/components/radix/themes/components/icons.py""" -# ------------------- DO NOT EDIT ---------------------- -# This file was generated by `scripts/pyi_generator.py`! -# ------------------------------------------------------ - -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 typing import List -from reflex.components.component import Component -from reflex.utils import format - -class RadixIconComponent(Component): - @overload - @classmethod - def create( # type: ignore - cls, - *children, - style: Optional[Style] = None, - key: Optional[Any] = None, - id: Optional[Any] = None, - class_name: Optional[Any] = None, - autofocus: Optional[bool] = None, - _rename_props: Optional[Dict[str, str]] = 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_scroll: Optional[ - Union[EventHandler, EventSpec, list, function, BaseVar] - ] = None, - on_unmount: Optional[ - Union[EventHandler, EventSpec, list, function, BaseVar] - ] = None, - **props - ) -> "RadixIconComponent": - """Create the component. - - Args: - *children: The children of the component. - 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 - _rename_props: props to change the name of - custom_attrs: custom attribute - **props: The props of the component. - - Returns: - The component. - - Raises: - TypeError: If an invalid child is passed. - """ - ... - -class Icon(RadixIconComponent): - @overload - @classmethod - def create( # type: ignore - cls, - *children, - style: Optional[Style] = None, - key: Optional[Any] = None, - id: Optional[Any] = None, - class_name: Optional[Any] = None, - autofocus: Optional[bool] = None, - _rename_props: Optional[Dict[str, str]] = 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_scroll: Optional[ - Union[EventHandler, EventSpec, list, function, BaseVar] - ] = None, - on_unmount: Optional[ - Union[EventHandler, EventSpec, list, function, BaseVar] - ] = None, - **props - ) -> "Icon": - """Initialize the Icon component. - - Run some additional checks on Icon component. - - Args: - *children: The positional arguments - 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 - _rename_props: props to change the name of - custom_attrs: custom attribute - **props: The keyword arguments - - Raises: - AttributeError: The errors tied to bad usage of the Icon component. - ValueError: If the icon tag is invalid. - - Returns: - The created component. - """ - ... - -icon = Icon.create -ICON_ABSTRACT: List[str] -ICON_ALIGNS: List[str] -ICON_ARROWS: List[str] -ICON_BORDERS: List[str] -ICON_COMPONENTS: List[str] -ICON_DESIGN: List[str] -ICON_LOGOS: List[str] -ICON_MUSIC: List[str] -ICON_OBJECTS: List[str] -ICON_TYPOGRAPHY: List[str] -ICON_LIST: List[str] diff --git a/reflex/components/radix/themes/components/textfield.py b/reflex/components/radix/themes/components/textfield.py index 63d0bdfed..08ea90c19 100644 --- a/reflex/components/radix/themes/components/textfield.py +++ b/reflex/components/radix/themes/components/textfield.py @@ -1,4 +1,5 @@ """Interactive components provided by @radix-ui/themes.""" + from types import SimpleNamespace from typing import Any, Dict, Literal @@ -6,7 +7,7 @@ import reflex as rx from reflex.components import el from reflex.components.component import Component from reflex.components.core.debounce import DebounceInput -from reflex.components.radix.themes.components.icons import Icon +from reflex.components.lucide.icon import Icon from reflex.constants import EventTriggers from reflex.vars import Var diff --git a/reflex/components/radix/themes/components/textfield.pyi b/reflex/components/radix/themes/components/textfield.pyi index 4989626cf..b12e732ef 100644 --- a/reflex/components/radix/themes/components/textfield.pyi +++ b/reflex/components/radix/themes/components/textfield.pyi @@ -13,7 +13,7 @@ import reflex as rx from reflex.components import el from reflex.components.component import Component from reflex.components.core.debounce import DebounceInput -from reflex.components.radix.themes.components.icons import Icon +from reflex.components.lucide.icon import Icon from reflex.constants import EventTriggers from reflex.vars import Var from ..base import LiteralAccentColor, LiteralRadius, LiteralSize, RadixThemesComponent