Skip to main content

basecoat_core/classes/
dropdown.rs

1use crate::props::dropdown::DropdownProps;
2
3/// Returns the canonical CSS class string for a dropdown root element.
4///
5/// Upstream: `.dropdown-menu` class on the `<details>` element.
6pub fn dropdown(p: &DropdownProps) -> String {
7    match &p.class {
8        Some(extra) if !extra.is_empty() => format!("dropdown-menu {extra}"),
9        _ => "dropdown-menu".to_string(),
10    }
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use crate::props::dropdown::DropdownProps;
17
18    #[test]
19    fn base_class() {
20        assert_eq!(dropdown(&DropdownProps::default()), "dropdown-menu");
21    }
22
23    #[test]
24    fn with_extra_class() {
25        let p = DropdownProps {
26            class: Some("w-56".into()),
27            ..Default::default()
28        };
29        assert_eq!(dropdown(&p), "dropdown-menu w-56");
30    }
31
32    #[test]
33    fn empty_extra_class_is_ignored() {
34        let p = DropdownProps {
35            class: Some("".into()),
36            ..Default::default()
37        };
38        assert_eq!(dropdown(&p), "dropdown-menu");
39    }
40}