59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
"""List components."""
|
|
|
|
from pynecone.components import Component
|
|
from pynecone.components.layout.foreach import Foreach
|
|
from pynecone.components.libs.chakra import ChakraComponent
|
|
from pynecone.vars import Var
|
|
|
|
|
|
class List(ChakraComponent):
|
|
"""Display a list of items."""
|
|
|
|
tag = "List"
|
|
|
|
# The space between each list item
|
|
spacing: Var[str]
|
|
|
|
# Shorthand prop for listStylePosition
|
|
style_position: Var[str]
|
|
|
|
# Shorthand prop for listStyleType
|
|
style_type: Var[str]
|
|
|
|
@classmethod
|
|
def create(cls, *children, items=None, **props) -> Component:
|
|
"""Create a list component.
|
|
|
|
Args:
|
|
children: The children of the component.
|
|
items: A list of items to add to the list.
|
|
props: The properties of the component.
|
|
|
|
Returns:
|
|
The list component.
|
|
"""
|
|
if len(children) == 0:
|
|
if isinstance(items, Var):
|
|
children = [Foreach.create(items, ListItem.create)]
|
|
else:
|
|
children = [ListItem.create(item) for item in items or []]
|
|
return super().create(*children, **props)
|
|
|
|
|
|
class ListItem(ChakraComponent):
|
|
"""A single list item."""
|
|
|
|
tag = "ListItem"
|
|
|
|
|
|
class OrderedList(List):
|
|
"""An ordered list component with numbers."""
|
|
|
|
tag = "OrderedList"
|
|
|
|
|
|
class UnorderedList(List):
|
|
"""An unordered list component with bullets."""
|
|
|
|
tag = "UnorderedList"
|