allow dynamic icons name
This commit is contained in:
parent
f69be58f59
commit
6d86dff09d
@ -2,13 +2,14 @@
|
|||||||
|
|
||||||
from reflex.components.component import Component
|
from reflex.components.component import Component
|
||||||
from reflex.utils import format
|
from reflex.utils import format
|
||||||
|
from reflex.utils.imports import ImportVar
|
||||||
from reflex.vars.base import Var
|
from reflex.vars.base import Var
|
||||||
|
|
||||||
|
|
||||||
class LucideIconComponent(Component):
|
class LucideIconComponent(Component):
|
||||||
"""Lucide Icon Component."""
|
"""Lucide Icon Component."""
|
||||||
|
|
||||||
library = "lucide-react@0.469.0"
|
library = "lucide-react@0.471.1"
|
||||||
|
|
||||||
|
|
||||||
class Icon(LucideIconComponent):
|
class Icon(LucideIconComponent):
|
||||||
@ -47,6 +48,10 @@ class Icon(LucideIconComponent):
|
|||||||
if "tag" not in props:
|
if "tag" not in props:
|
||||||
raise AttributeError("Missing 'tag' keyword-argument for Icon")
|
raise AttributeError("Missing 'tag' keyword-argument for Icon")
|
||||||
|
|
||||||
|
if isinstance(props["tag"], Var):
|
||||||
|
icon_name = props.pop("tag")
|
||||||
|
return DynamicIcon.create(name=icon_name, **props)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
not isinstance(props["tag"], str)
|
not isinstance(props["tag"], str)
|
||||||
or format.to_snake_case(props["tag"]) not in LUCIDE_ICON_LIST
|
or format.to_snake_case(props["tag"]) not in LUCIDE_ICON_LIST
|
||||||
@ -67,6 +72,21 @@ class Icon(LucideIconComponent):
|
|||||||
return super().create(*children, **props)
|
return super().create(*children, **props)
|
||||||
|
|
||||||
|
|
||||||
|
class DynamicIcon(LucideIconComponent):
|
||||||
|
"""A DynamicIcon component."""
|
||||||
|
|
||||||
|
tag = "DynamicIcon"
|
||||||
|
|
||||||
|
name: Var[str]
|
||||||
|
|
||||||
|
def _get_imports(self):
|
||||||
|
_imports = super()._get_imports()
|
||||||
|
if self.library:
|
||||||
|
_imports.pop(self.library)
|
||||||
|
_imports["lucide-react/dynamic"] = [ImportVar("DynamicIcon", install=False)]
|
||||||
|
return _imports
|
||||||
|
|
||||||
|
|
||||||
LUCIDE_ICON_LIST = [
|
LUCIDE_ICON_LIST = [
|
||||||
"a_arrow_down",
|
"a_arrow_down",
|
||||||
"a_arrow_up",
|
"a_arrow_up",
|
||||||
@ -846,6 +866,7 @@ LUCIDE_ICON_LIST = [
|
|||||||
"house",
|
"house",
|
||||||
"house_plug",
|
"house_plug",
|
||||||
"house_plus",
|
"house_plus",
|
||||||
|
"house_wifi",
|
||||||
"ice_cream_bowl",
|
"ice_cream_bowl",
|
||||||
"ice_cream_cone",
|
"ice_cream_cone",
|
||||||
"id_card",
|
"id_card",
|
||||||
@ -1534,6 +1555,7 @@ LUCIDE_ICON_LIST = [
|
|||||||
"trending_up_down",
|
"trending_up_down",
|
||||||
"triangle",
|
"triangle",
|
||||||
"triangle_alert",
|
"triangle_alert",
|
||||||
|
"triangle_dashed",
|
||||||
"triangle_right",
|
"triangle_right",
|
||||||
"trophy",
|
"trophy",
|
||||||
"truck",
|
"truck",
|
||||||
|
@ -110,6 +110,53 @@ class Icon(LucideIconComponent):
|
|||||||
"""
|
"""
|
||||||
...
|
...
|
||||||
|
|
||||||
|
class DynamicIcon(LucideIconComponent):
|
||||||
|
@overload
|
||||||
|
@classmethod
|
||||||
|
def create( # type: ignore
|
||||||
|
cls,
|
||||||
|
*children,
|
||||||
|
name: Optional[Union[Var[str], str]] = 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_blur: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_click: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_double_click: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_focus: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mount: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_scroll: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
on_unmount: Optional[EventType[[], BASE_STATE]] = None,
|
||||||
|
**props,
|
||||||
|
) -> "DynamicIcon":
|
||||||
|
"""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
|
||||||
|
custom_attrs: custom attribute
|
||||||
|
**props: The props of the component.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The component.
|
||||||
|
"""
|
||||||
|
...
|
||||||
|
|
||||||
LUCIDE_ICON_LIST = [
|
LUCIDE_ICON_LIST = [
|
||||||
"a_arrow_down",
|
"a_arrow_down",
|
||||||
"a_arrow_up",
|
"a_arrow_up",
|
||||||
@ -889,6 +936,7 @@ LUCIDE_ICON_LIST = [
|
|||||||
"house",
|
"house",
|
||||||
"house_plug",
|
"house_plug",
|
||||||
"house_plus",
|
"house_plus",
|
||||||
|
"house_wifi",
|
||||||
"ice_cream_bowl",
|
"ice_cream_bowl",
|
||||||
"ice_cream_cone",
|
"ice_cream_cone",
|
||||||
"id_card",
|
"id_card",
|
||||||
@ -1577,6 +1625,7 @@ LUCIDE_ICON_LIST = [
|
|||||||
"trending_up_down",
|
"trending_up_down",
|
||||||
"triangle",
|
"triangle",
|
||||||
"triangle_alert",
|
"triangle_alert",
|
||||||
|
"triangle_dashed",
|
||||||
"triangle_right",
|
"triangle_right",
|
||||||
"trophy",
|
"trophy",
|
||||||
"truck",
|
"truck",
|
||||||
|
Loading…
Reference in New Issue
Block a user