def test_card_style_fasthtml_examples():
"""Test card style variations from daisyUI v5 documentation."""
from fasthtml.common import Div, H2, P, Button
from cjm_fasthtml_tailwind.utilities.sizing import w
from cjm_fasthtml_tailwind.utilities.effects import shadow
from cjm_fasthtml_tailwind.utilities.flexbox_and_grid import justify
from cjm_fasthtml_daisyui.utilities.semantic_colors import bg_dui
from cjm_fasthtml_daisyui.components.actions.button import btn, btn_colors
# Card sizes - Extra Small
xs_card = Div(
Div(
H2("Xsmall Card", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(justify.end, card_actions)
),
cls=str(card_body)
),
cls=combine_classes(card, w._96, bg_dui.base_100, card_sizes.xs, shadow.sm)
)
assert "card" in xs_card.attrs['class']
assert "card-xs" in xs_card.attrs['class']
assert "w-96" in xs_card.attrs['class']
assert xs_card.children[0].children[0].children[0] == "Xsmall Card"
# Card sizes - Small
sm_card = Div(
Div(
H2("Small Card", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(justify.end, card_actions)
),
cls=str(card_body)
),
cls=combine_classes(card, w._96, bg_dui.base_100, card_sizes.sm, shadow.sm)
)
assert "card-sm" in sm_card.attrs['class']
assert sm_card.children[0].children[0].children[0] == "Small Card"
# Card sizes - Medium
md_card = Div(
Div(
H2("Medium Card", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(justify.end, card_actions)
),
cls=str(card_body)
),
cls=combine_classes(card, w._96, bg_dui.base_100, card_sizes.md, shadow.sm)
)
assert "card-md" in md_card.attrs['class']
assert md_card.children[0].children[0].children[0] == "Medium Card"
# Card sizes - Large
lg_card = Div(
Div(
H2("Large Card", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(justify.end, card_actions)
),
cls=str(card_body)
),
cls=combine_classes(card, w._96, bg_dui.base_100, card_sizes.lg, shadow.sm)
)
assert "card-lg" in lg_card.attrs['class']
assert lg_card.children[0].children[0].children[0] == "Large Card"
# Card sizes - Extra Large
xl_card = Div(
Div(
H2("Xlarge Card", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(justify.end, card_actions)
),
cls=str(card_body)
),
cls=combine_classes(card, w._96, bg_dui.base_100, card_sizes.xl, shadow.sm)
)
assert "card-xl" in xl_card.attrs['class']
assert xl_card.children[0].children[0].children[0] == "Xlarge Card"
# Card with border
border_card = Div(
Div(
H2("Card Title", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(card_actions, justify.end)
),
cls=str(card_body)
),
cls=combine_classes(card, card_styles.border, bg_dui.base_100, w._96)
)
assert "card" in border_card.attrs['class']
assert "card-border" in border_card.attrs['class']
assert "shadow" not in border_card.attrs['class'] # No shadow for border variant
# Card with dash border
dash_card = Div(
Div(
H2("Card Title", cls=str(card_title)),
P("A card component has a figure, a body part, and inside body there are title and actions parts"),
Div(
Button("Buy Now", cls=combine_classes(btn, btn_colors.primary)),
cls=combine_classes(card_actions, justify.end)
),
cls=str(card_body)
),
cls=combine_classes(card, card_styles.dash, bg_dui.base_100, w._96)
)
assert "card" in dash_card.attrs['class']
assert "card-dash" in dash_card.attrs['class']
assert "shadow" not in dash_card.attrs['class'] # No shadow for dash variant
# Return all card style variations in a Div
return Div(
xs_card,
sm_card,
md_card,
lg_card,
xl_card,
border_card,
dash_card
)
# Run the tests
test_card_style_fasthtml_examples()