dioxus_element_plug/components/
descriptions.rs1use dioxus::prelude::*;
2
3#[derive(Clone, PartialEq)]
5pub enum DescriptionsDirection {
6 Horizontal,
7 Vertical,
8}
9
10#[derive(Clone, PartialEq)]
12pub enum DescriptionsBorder {
13 None,
14 Default,
15 Always,
16}
17
18#[derive(Props, Clone, PartialEq)]
20pub struct DescriptionsProps {
21 #[props(default)]
22 pub children: Element,
23
24 #[props(default)]
25 pub title: Option<String>,
26
27 #[props(default = "default".to_string())]
28 pub size: String,
29
30 #[props(default = 3)]
31 pub column: u32,
32
33 #[props(default = DescriptionsDirection::Horizontal)]
34 pub direction: DescriptionsDirection,
35
36 #[props(default = false)]
37 pub border: bool,
38
39 #[props(default)]
40 pub class: Option<String>,
41
42 #[props(default)]
43 pub style: Option<String>,
44}
45
46#[component]
48pub fn Descriptions(props: DescriptionsProps) -> Element {
49 let mut class_names = vec!["el-descriptions".to_string()];
50 if props.border { class_names.push("is-bordered".to_string()); }
51 class_names.push(format!("el-descriptions--{}", props.size));
52 if let Some(ref c) = props.class { class_names.push(c.clone()); }
53
54 rsx! {
55 div {
56 class: "{class_names.join(\" \")}",
57 style: props.style.clone().unwrap_or_default(),
58 if let Some(ref title) = props.title {
59 div {
60 class: "el-descriptions__header",
61 div { class: "el-descriptions__title", "{title}" }
62 }
63 }
64 div {
65 class: "el-descriptions__body",
66 {props.children}
67 }
68 }
69 }
70}