use crate::core::WithBreakpoints;
use crate::prelude::{AsClasses, ExtendClasses};
use yew::prelude::*;
#[derive(Properties, Clone, Debug, PartialEq)]
pub struct DescriptionListProperties {
#[prop_or_default]
pub id: AttrValue,
#[prop_or_default]
pub style: Option<AttrValue>,
#[prop_or_default]
pub children: Html,
#[prop_or_default]
pub mode: WithBreakpoints<DescriptionListMode>,
#[prop_or_default]
pub compact: bool,
#[prop_or_default]
pub auto_column_widths: bool,
#[prop_or_default]
pub fill_columns: bool,
#[prop_or_default]
pub inline_grid: bool,
#[prop_or_default]
pub auto_fit: bool,
#[prop_or_default]
pub columns: WithBreakpoints<DescriptionListColumns>,
}
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
pub enum DescriptionListColumns {
#[default]
One,
Two,
Three,
}
impl AsClasses for DescriptionListColumns {
fn extend_classes(&self, classes: &mut Classes) {
match self {
Self::One => classes.extend(classes!("pf-m-1-col")),
Self::Two => classes.extend(classes!("pf-m-2-col")),
Self::Three => classes.extend(classes!("pf-m-3-col")),
}
}
}
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
pub enum DescriptionListMode {
#[default]
Vertical,
Horizontal,
Fluid,
}
impl AsClasses for DescriptionListMode {
fn extend_classes(&self, classes: &mut Classes) {
match self {
Self::Vertical => {}
Self::Horizontal => classes.extend(classes!("pf-m-horizontal")),
Self::Fluid => classes.extend(classes!("pf-m-horizontal", "pf-m-fluid")),
}
}
}
#[function_component(DescriptionList)]
pub fn dl(props: &DescriptionListProperties) -> Html {
let mut class = Classes::from("pf-v5-c-description-list");
class.extend_from(&props.mode);
if props.compact {
class.extend(classes!("pf-m-compact"));
}
if props.auto_column_widths {
class.extend(classes!("pf-m-auto-column-widths"));
}
if props.fill_columns {
class.extend(classes!("pf-m-fill-columns"));
}
if props.inline_grid {
class.extend(classes!("pf-m-inline-grid"));
}
if props.auto_fit {
class.extend(classes!("pf-m-auto-fit"));
}
class.extend_from(&props.columns);
html! (
<dl
id={ &props.id }
{class}
style={ props.style.clone() }
>
{ props.children.clone() }
</dl>
)
}
#[derive(Properties, Clone, Debug, PartialEq)]
pub struct DescriptionGroupProperties {
pub term: AttrValue,
#[prop_or_default]
pub children: Html,
}
#[function_component(DescriptionGroup)]
pub fn desc_group(props: &DescriptionGroupProperties) -> Html {
html! (
<div class="pf-v5-c-description-list__group">
<dt class="pf-v5-c-description-list__term">
<span class="pf-v5-c-description-list__text">
{ &props.term }
</span>
</dt>
<dd class="pf-v5-c-description-list__description">
<div class="pf-v5-c-description-list__text">
{ props.children.clone() }
</div>
</dd>
</div>
)
}