patternfly_yew/components/panel/
mod.rs1use crate::prelude::{AsClasses, ChildrenProperties, ExtendClasses};
4use yew::prelude::*;
5
6#[derive(Clone, Debug, PartialEq, Properties)]
8pub struct PanelProperties {
9 pub children: Html,
10
11 #[prop_or_default]
12 pub variant: PanelVariant,
13 #[prop_or_default]
14 pub scrollable: bool,
15}
16
17#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
18pub enum PanelVariant {
19 #[default]
20 Default,
21 Bordered,
22 Raised,
23}
24
25impl AsClasses for PanelVariant {
26 fn extend_classes(&self, classes: &mut Classes) {
27 match self {
28 Self::Default => {}
29 Self::Bordered => classes.push(classes!("pf-m-bordered")),
30 Self::Raised => classes.push(classes!("pf-m-raised")),
31 }
32 }
33}
34
35#[function_component(Panel)]
64pub fn panel(props: &PanelProperties) -> Html {
65 let mut class = classes!("pf-v6-c-panel");
66
67 class.extend_from(&props.variant);
68
69 if props.scrollable {
70 class.push(classes!("pf-m-scrollable"));
71 }
72
73 html!(<div {class}>{ props.children.clone() }</div>)
74}
75
76#[function_component(PanelMain)]
77pub fn panel_main(props: &ChildrenProperties) -> Html {
78 html!(<div class="pf-v6-c-panel__main">{ props.children.clone() }</div>)
79}
80
81#[function_component(PanelMainBody)]
82pub fn panel_main_body(props: &ChildrenProperties) -> Html {
83 html!(<div class="pf-v6-c-panel__main-body">{ props.children.clone() }</div>)
84}
85
86#[function_component(PanelHeader)]
87pub fn panel_header(props: &ChildrenProperties) -> Html {
88 html!(<div class="pf-v6-c-panel__header">{ props.children.clone() }</div>)
89}
90
91#[function_component(PanelFooter)]
92pub fn panel_footer(props: &ChildrenProperties) -> Html {
93 html!(<div class="pf-v6-c-panel__footer">{ props.children.clone() }</div>)
94}