use crate::prelude::{AsClasses, ChildrenProperties, ExtendClasses};
use yew::prelude::*;
#[derive(Clone, Debug, PartialEq, Properties)]
pub struct PanelProperties {
pub children: Html,
#[prop_or_default]
pub variant: PanelVariant,
#[prop_or_default]
pub scrollable: bool,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum PanelVariant {
#[default]
Default,
Bordered,
Raised,
}
impl AsClasses for PanelVariant {
fn extend_classes(&self, classes: &mut Classes) {
match self {
Self::Default => {}
Self::Bordered => classes.push(classes!("pf-m-bordered")),
Self::Raised => classes.push(classes!("pf-m-raised")),
}
}
}
#[function_component(Panel)]
pub fn panel(props: &PanelProperties) -> Html {
let mut class = classes!("pf-v5-c-panel");
class.extend_from(&props.variant);
if props.scrollable {
class.push(classes!("pf-m-scrollable"));
}
html!(
<div {class}>
{ props.children.clone() }
</div>
)
}
#[function_component(PanelMain)]
pub fn panel_main(props: &ChildrenProperties) -> Html {
html!(
<div class="pf-v5-c-panel__main">
{ props.children.clone() }
</div>
)
}
#[function_component(PanelMainBody)]
pub fn panel_main_body(props: &ChildrenProperties) -> Html {
html!(
<div class="pf-v5-c-panel__main-body">
{ props.children.clone() }
</div>
)
}
#[function_component(PanelHeader)]
pub fn panel_header(props: &ChildrenProperties) -> Html {
html!(
<div class="pf-v5-c-panel__header">
{ props.children.clone() }
</div>
)
}
#[function_component(PanelFooter)]
pub fn panel_footer(props: &ChildrenProperties) -> Html {
html!(
<div class="pf-v5-c-panel__footer">
{ props.children.clone() }
</div>
)
}