patternfly_yew/components/
description_list.rs1use crate::core::WithBreakpoints;
3use crate::prelude::{AsClasses, ExtendClasses};
4use yew::prelude::*;
5
6#[derive(Properties, Clone, Debug, PartialEq)]
8pub struct DescriptionListProperties {
9 #[prop_or_default]
10 pub id: AttrValue,
11
12 #[prop_or_default]
13 pub style: Option<AttrValue>,
14
15 #[prop_or_default]
16 pub children: Html,
17
18 #[prop_or_default]
19 pub mode: WithBreakpoints<DescriptionListMode>,
20
21 #[prop_or_default]
22 pub compact: bool,
23
24 #[prop_or_default]
25 pub auto_column_widths: bool,
26
27 #[prop_or_default]
28 pub fill_columns: bool,
29
30 #[prop_or_default]
31 pub inline_grid: bool,
32
33 #[prop_or_default]
34 pub auto_fit: bool,
35
36 #[prop_or_default]
37 pub columns: WithBreakpoints<DescriptionListColumns>,
38}
39
40#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
41pub enum DescriptionListColumns {
42 #[default]
43 One,
44 Two,
45 Three,
46}
47
48impl AsClasses for DescriptionListColumns {
49 fn extend_classes(&self, classes: &mut Classes) {
50 match self {
51 Self::One => classes.extend(classes!("pf-m-1-col")),
52 Self::Two => classes.extend(classes!("pf-m-2-col")),
53 Self::Three => classes.extend(classes!("pf-m-3-col")),
54 }
55 }
56}
57
58#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
59pub enum DescriptionListMode {
60 #[default]
61 Vertical,
62 Horizontal,
63 Fluid,
64}
65
66impl AsClasses for DescriptionListMode {
67 fn extend_classes(&self, classes: &mut Classes) {
68 match self {
69 Self::Vertical => {}
70 Self::Horizontal => classes.extend(classes!("pf-m-horizontal")),
71 Self::Fluid => classes.extend(classes!("pf-m-horizontal", "pf-m-fluid")),
72 }
73 }
74}
75
76#[function_component(DescriptionList)]
102pub fn dl(props: &DescriptionListProperties) -> Html {
103 let mut class = Classes::from("pf-v6-c-description-list");
104
105 class.extend_from(&props.mode);
106
107 if props.compact {
108 class.extend(classes!("pf-m-compact"));
109 }
110
111 if props.auto_column_widths {
112 class.extend(classes!("pf-m-auto-column-widths"));
113 }
114
115 if props.fill_columns {
116 class.extend(classes!(
117 "pf-m-2-col",
118 "pf-m-3-col-on-lg",
119 "pf-m-fill-columns"
120 ));
121 }
122
123 if props.inline_grid {
124 class.extend(classes!("pf-m-inline-grid"));
125 }
126
127 if props.auto_fit {
128 class.extend(classes!("pf-m-auto-fit"));
129 }
130
131 class.extend_from(&props.columns);
132
133 html! (<dl id={&props.id} {class} style={props.style.clone()}>{ props.children.clone() }</dl>)
134}
135
136#[derive(Properties, Clone, Debug, PartialEq)]
138pub struct DescriptionGroupProperties {
139 pub term: AttrValue,
141 #[prop_or_default]
143 pub children: Html,
144}
145
146#[function_component(DescriptionGroup)]
148pub fn desc_group(props: &DescriptionGroupProperties) -> Html {
149 html! (
150 <div class="pf-v6-c-description-list__group">
151 <dt class="pf-v6-c-description-list__term">
152 <span class="pf-v6-c-description-list__text">{ &props.term }</span>
153 </dt>
154 <dd class="pf-v6-c-description-list__description">
155 <div class="pf-v6-c-description-list__text">{ props.children.clone() }</div>
156 </dd>
157 </div>
158 )
159}