reflex/pynecone/components/navigation/breadcrumb.py
2023-05-09 23:01:25 -07:00

76 lines
2.0 KiB
Python

"""Breadcrumb components."""
from pynecone.components.component import Component
from pynecone.components.libs.chakra import ChakraComponent
from pynecone.vars import Var
class Breadcrumb(ChakraComponent):
"""The parent container for breadcrumbs."""
tag = "Breadcrumb"
# The visual separator between each breadcrumb item
separator: Var[str]
# The left and right margin applied to the separator
separator_margin: Var[str]
@classmethod
def create(cls, *children, items=None, **props) -> Component:
"""Create a breadcrumb component.
If the kw-args `items` is provided and is a list, they will be added as children.
Args:
children: The children of the component.
items (list): The items of the breadcrumb: (label, link)
props: The properties of the component.
Returns:
The breadcrumb component.
"""
if len(children) == 0:
children = []
for label, link in items or []:
children.append(
BreadcrumbItem.create(BreadcrumbLink.create(label, href=link))
)
return super().create(*children, **props)
class BreadcrumbItem(ChakraComponent):
"""Individual breadcrumb element containing a link and a divider."""
tag = "BreadcrumbItem"
# Is the current page of the breadcrumb.
is_current_page: Var[bool]
# Is the last child of the breadcrumb.
is_last_child: Var[bool]
# The visual separator between each breadcrumb item
separator: Var[str]
# The left and right margin applied to the separator
spacing: Var[str]
# The href of the item.
href: Var[str]
class BreadcrumbSeparator(ChakraComponent):
"""The visual separator between each breadcrumb."""
tag = "BreadcrumbSeparator"
class BreadcrumbLink(ChakraComponent):
"""The breadcrumb link."""
tag = "BreadcrumbLink"
# Is the current page of the breadcrumb.
is_current_page: Var[bool]