Add Chakra Card component (#1030)
This commit is contained in:
parent
bb1cf4322e
commit
6dc2778a15
@ -65,6 +65,10 @@ alert = Alert.create
|
|||||||
alert_description = AlertDescription.create
|
alert_description = AlertDescription.create
|
||||||
alert_icon = AlertIcon.create
|
alert_icon = AlertIcon.create
|
||||||
alert_title = AlertTitle.create
|
alert_title = AlertTitle.create
|
||||||
|
card = Card.create
|
||||||
|
card_body = CardBody.create
|
||||||
|
card_footer = CardFooter.create
|
||||||
|
card_header = CardHeader.create
|
||||||
circular_progress = CircularProgress.create
|
circular_progress = CircularProgress.create
|
||||||
circular_progress_label = CircularProgressLabel.create
|
circular_progress_label = CircularProgressLabel.create
|
||||||
progress = Progress.create
|
progress = Progress.create
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
from .aspect_ratio import AspectRatio
|
from .aspect_ratio import AspectRatio
|
||||||
from .box import Box
|
from .box import Box
|
||||||
|
from .card import Card, CardBody, CardFooter, CardHeader
|
||||||
from .center import Center, Circle, Square
|
from .center import Center, Circle, Square
|
||||||
from .cond import Cond, cond
|
from .cond import Cond, cond
|
||||||
from .container import Container
|
from .container import Container
|
||||||
|
95
pynecone/components/layout/card.py
Normal file
95
pynecone/components/layout/card.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
"""Chakra Card component."""
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from pynecone.components.component import Component
|
||||||
|
from pynecone.components.libs.chakra import ChakraComponent
|
||||||
|
from pynecone.vars import Var
|
||||||
|
|
||||||
|
|
||||||
|
class CardHeader(ChakraComponent):
|
||||||
|
"""The wrapper that contains a card's header."""
|
||||||
|
|
||||||
|
tag = "CardHeader"
|
||||||
|
|
||||||
|
|
||||||
|
class CardBody(ChakraComponent):
|
||||||
|
"""The wrapper that houses the card's main content."""
|
||||||
|
|
||||||
|
tag = "CardBody"
|
||||||
|
|
||||||
|
|
||||||
|
class CardFooter(ChakraComponent):
|
||||||
|
"""The footer that houses the card actions."""
|
||||||
|
|
||||||
|
tag = "CardFooter"
|
||||||
|
|
||||||
|
|
||||||
|
class Card(ChakraComponent):
|
||||||
|
"""The parent wrapper that provides context for its children."""
|
||||||
|
|
||||||
|
tag = "Card"
|
||||||
|
|
||||||
|
# [required] The flex alignment of the card
|
||||||
|
align: Var[str]
|
||||||
|
|
||||||
|
# [required] The flex direction of the card
|
||||||
|
direction: Var[str]
|
||||||
|
|
||||||
|
# [required] The flex distribution of the card
|
||||||
|
justify: Var[str]
|
||||||
|
|
||||||
|
# The visual color appearance of the component.
|
||||||
|
# options: "whiteAlpha" | "blackAlpha" | "gray" | "red" | "orange" | "yellow" |
|
||||||
|
# "green" | "teal" | "blue" | "cyan" | "purple" | "pink" | "linkedin" |
|
||||||
|
# "facebook" | "messenger" | "whatsapp" | "twitter" | "telegram"
|
||||||
|
# default: "gray"
|
||||||
|
color_scheme: Var[str]
|
||||||
|
|
||||||
|
# The size of the Card
|
||||||
|
# options: "sm" | "md" | "lg"
|
||||||
|
# default: "md"
|
||||||
|
size: Var[str]
|
||||||
|
|
||||||
|
# The variant of the Card
|
||||||
|
# options: "elevated" | "outline" | "filled" | "unstyled"
|
||||||
|
# default: "elevated"
|
||||||
|
variant: Var[str]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def create(
|
||||||
|
cls,
|
||||||
|
body: Component,
|
||||||
|
*,
|
||||||
|
header: Optional[Component] = None,
|
||||||
|
footer: Optional[Component] = None,
|
||||||
|
**props
|
||||||
|
) -> Component:
|
||||||
|
"""Creates a Chakra Card with a body and optionally header and/or footer, and returns it.
|
||||||
|
If header, body or footer are not already instances of Chead, Cbody or Cfoot respectively,
|
||||||
|
they will be wrapped as such for layout purposes. If you want to modify their props,
|
||||||
|
e.g. padding_left, you should wrap them yourself.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
body (Component): The main content of the Card that will be created.
|
||||||
|
header (Optional[Component]): The header of the Card.
|
||||||
|
footer (Optional[Component]): The footer of the Card.
|
||||||
|
props: The properties to be passed to the component.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The `create()` method returns a Card object.
|
||||||
|
"""
|
||||||
|
children = []
|
||||||
|
param_to_component_class = (
|
||||||
|
(header, CardHeader),
|
||||||
|
(body, CardBody),
|
||||||
|
(footer, CardFooter),
|
||||||
|
)
|
||||||
|
|
||||||
|
for param, component_class in param_to_component_class:
|
||||||
|
if isinstance(param, component_class):
|
||||||
|
children.append(param)
|
||||||
|
elif param is not None:
|
||||||
|
children.append(component_class.create(param))
|
||||||
|
|
||||||
|
return super().create(*children, **props)
|
Loading…
Reference in New Issue
Block a user