reflex/pynecone/el/element.py
2023-06-05 20:17:20 -07:00

48 lines
1.3 KiB
Python

"""Base class definition for raw HTML elements."""
from typing import Dict
from pynecone.components.component import Component
class Element(Component):
"""The base class for all raw HTML elements.
The key difference between `Element` and `Component` is that elements do not
use Chakra's `sx` prop, instead passing styles directly to the React style
prop.
"""
def render(self) -> Dict:
"""Render the element.
Returns:
The code to render the element.
"""
tag = self._render()
return dict(
tag.add_props(
**self.event_triggers,
key=self.key,
id=self.id,
style=self.style,
class_name=self.class_name,
**self.custom_attrs,
).set(
contents=str(tag.contents),
children=[child.render() for child in self.children],
props=tag.format_props(),
)
)
def __eq__(self, other):
"""Two elements are equal if they have the same tag.
Args:
other: The other element.
Returns:
True if the elements have the same tag, False otherwise.
"""
return isinstance(other, Element) and self.tag == other.tag