48 lines
1.3 KiB
Python
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
|