mirror of
https://github.com/adoyle0/thaw.git
synced 2025-03-13 22:19:49 -04:00
76 lines
2.8 KiB
Rust
76 lines
2.8 KiB
Rust
use leptos::*;
|
|
use stylers::style_sheet;
|
|
|
|
#[component]
|
|
pub fn Card(
|
|
cx: Scope,
|
|
#[prop(default = None)] title: Option<String>,
|
|
#[prop(default = None)] header: Option<Children>,
|
|
#[prop(default = None)] header_extra: Option<Children>,
|
|
children: Children,
|
|
#[prop(default = None)] footer: Option<Children>,
|
|
) -> impl IntoView {
|
|
let class_name = style_sheet!("./src/card/card.css");
|
|
view! {
|
|
cx, class=class_name,
|
|
<div class="melt-card">
|
|
{
|
|
if header.is_some() || title.is_some() {
|
|
view! {
|
|
cx, class=class_name,
|
|
<div class="melt-card__header">
|
|
<div class="melt-card__header-content">
|
|
{
|
|
if let Some(header) = header {
|
|
view! {
|
|
cx,
|
|
<>
|
|
{ header(cx) }
|
|
</>
|
|
}
|
|
} else {
|
|
view! {
|
|
cx,
|
|
<>
|
|
{ title }
|
|
</>
|
|
}
|
|
}
|
|
}
|
|
</div>
|
|
{
|
|
if let Some(header_extra) = header_extra {
|
|
view! {
|
|
cx, class=class_name,
|
|
<div class="melt-card__header-extra">
|
|
{ header_extra(cx)}
|
|
</div>
|
|
}.into()
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
</div>
|
|
}.into()
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
<div class="melt-card__content">
|
|
{ children(cx) }
|
|
</div>
|
|
{
|
|
if let Some(footer) = footer {
|
|
view! {
|
|
cx, class=class_name,
|
|
<div class="melt-card__footer">
|
|
{ footer(cx) }
|
|
</div>
|
|
}.into()
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
</div>
|
|
}
|
|
}
|