Add Chakra Stepper Component (#1142)

This commit is contained in:
Aidan Rauscher 2023-06-06 15:05:48 -04:00 committed by GitHub
parent d793e7a4dd
commit 64fc12a5b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 131 additions and 0 deletions

View File

@ -183,6 +183,15 @@ link = Link.create
link_box = LinkBox.create link_box = LinkBox.create
link_overlay = LinkOverlay.create link_overlay = LinkOverlay.create
next_link = NextLink.create next_link = NextLink.create
step = Step.create
step_description = StepDescription.create
step_icon = StepIcon.create
step_indicator = StepIndicator.create
step_number = StepNumber.create
step_separator = StepSeparator.create
step_status = StepStatus.create
step_title = StepTitle.create
stepper = Stepper.create
alert_dialog = AlertDialog.create alert_dialog = AlertDialog.create
alert_dialog_body = AlertDialogBody.create alert_dialog_body = AlertDialogBody.create
alert_dialog_content = AlertDialogContent.create alert_dialog_content = AlertDialogContent.create

View File

@ -4,5 +4,16 @@ from .breadcrumb import Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbSe
from .link import Link from .link import Link
from .linkoverlay import LinkBox, LinkOverlay from .linkoverlay import LinkBox, LinkOverlay
from .nextlink import NextLink from .nextlink import NextLink
from .stepper import (
Step,
StepDescription,
StepIcon,
StepIndicator,
StepNumber,
Stepper,
StepSeparator,
StepStatus,
StepTitle,
)
__all__ = [f for f in dir() if f[0].isupper()] # type: ignore __all__ = [f for f in dir() if f[0].isupper()] # type: ignore

View File

@ -0,0 +1,111 @@
"""A component to indicate progress through a multi-step process."""
from typing import List, Optional, Tuple
from pynecone.components.component import Component
from pynecone.components.libs.chakra import ChakraComponent
from pynecone.vars import Var
class Stepper(ChakraComponent):
"""The parent container for a stepper."""
tag = "Stepper"
# The color scheme to use for the stepper; default is blue.
colorScheme: Var[str]
# Chakra provides a useSteps hook to control the stepper.
# Instead, use an integer state value to set progress in the stepper.
# The index of the current step.
index: Var[int]
# The size of the steps in the stepper.
size: Var[str]
@classmethod
def create(
cls, *children, items: Optional[List[Tuple]] = None, **props
) -> Component:
"""Create a Stepper 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 child components for each step.
props: The properties of the component.
Returns:
The stepper component.
"""
if len(children) == 0:
children = []
for indicator, layout, separator in items or []:
children.append(
Step.create(
StepIndicator.create(indicator),
layout,
StepSeparator.create(separator),
)
)
return super().create(*children, **props)
class Step(ChakraComponent):
"""A component for an individual step in the stepper."""
tag = "Step"
class StepDescription(ChakraComponent):
"""The description text for a step component."""
tag = "StepDescription"
class StepIcon(ChakraComponent):
"""The icon displayed in a step indicator component."""
tag = "StepIcon"
class StepIndicator(ChakraComponent):
"""The component displaying the status of a step."""
tag = "StepIndicator"
class StepNumber(ChakraComponent):
"""The number of a step displayed in a step indicator component."""
tag = "StepNumber"
class StepSeparator(ChakraComponent):
"""The component separting steps."""
tag = "StepSeparator"
class StepStatus(ChakraComponent):
"""A component that displays a number or icon based on the status of a step."""
# [not working yet]
# active, complete, and incomplete should also be able to accept StepIcon or StepNumber components
# currently, these props only support strings
active: Var[str]
complete: Var[str]
incomplete: Var[str]
tag = "StepStatus"
class StepTitle(ChakraComponent):
"""The title text for a step component."""
tag = "StepTitle"