109 lines
2.3 KiB
Python
109 lines
2.3 KiB
Python
"""An icon component."""
|
|
|
|
from pynecone import utils
|
|
from pynecone.components.component import Component
|
|
|
|
|
|
class ChakraIconComponent(Component):
|
|
"""A component that wraps a Chakra icon component."""
|
|
|
|
library = "@chakra-ui/icons"
|
|
|
|
|
|
class Icon(ChakraIconComponent):
|
|
"""An image icon."""
|
|
|
|
tag = "None"
|
|
|
|
@classmethod
|
|
def create(cls, *children, **props):
|
|
"""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: {ICON_LIST}"
|
|
)
|
|
props["tag"] = utils.to_title_case(props["tag"]) + "Icon"
|
|
return super().create(*children, **props)
|
|
|
|
|
|
# List of all icons.
|
|
ICON_LIST = [
|
|
"add",
|
|
"arrow_back",
|
|
"arrow_down",
|
|
"arrow_forward",
|
|
"arrow_left",
|
|
"arrow_right",
|
|
"arrow_up",
|
|
"arrow_up_down",
|
|
"at_sign",
|
|
"attachment",
|
|
"bell",
|
|
"calendar",
|
|
"check_circle",
|
|
"check",
|
|
"chevron_down",
|
|
"chevron_left",
|
|
"chevron_right",
|
|
"chevron_up",
|
|
"close",
|
|
"copy",
|
|
"delete",
|
|
"download",
|
|
"drag_handle",
|
|
"edit",
|
|
"email",
|
|
"external_link",
|
|
"hamburger",
|
|
"info",
|
|
"info_outline",
|
|
"link",
|
|
"lock",
|
|
"minus",
|
|
"moon",
|
|
"not_allowed",
|
|
"phone",
|
|
"plus_square",
|
|
"question",
|
|
"question_outline",
|
|
"repeat",
|
|
"repeat_clock",
|
|
"search",
|
|
"search2",
|
|
"settings",
|
|
"small_add",
|
|
"small_close",
|
|
"spinner",
|
|
"star",
|
|
"sun",
|
|
"time",
|
|
"triangle_down",
|
|
"triangle_up",
|
|
"unlock",
|
|
"up_down",
|
|
"view",
|
|
"view_off",
|
|
"warning",
|
|
"warning_two",
|
|
]
|