use crate::class::Class;
use dioxus::prelude::*;
use zino_core::SharedString;
pub fn Dropdown(props: DropdownProps) -> Element {
let title = props.title;
rsx! {
div {
class: "{props.class}",
class: if props.active { "is-active" },
class: if props.hoverable { "is-hoverable" },
class: if props.dropup { "is-up" },
class: if props.align == "right" { "is-right" },
if let Some(trigger) = props.trigger {
div {
class: props.trigger_class,
title: if !title.is_empty() { "{title}" },
{ trigger }
}
}
div {
class: props.menu_class,
div {
class: props.content_class,
for item in props.items.iter() {
{ item }
}
}
}
}
}
}
#[derive(Clone, PartialEq, Props)]
pub struct DropdownProps {
#[props(into, default = "dropdown")]
pub class: Class,
#[props(into, default = "dropdown-trigger")]
pub trigger_class: Class,
#[props(into, default = "dropdown-menu")]
pub menu_class: Class,
#[props(into, default = "dropdown-content")]
pub content_class: Class,
#[props(default)]
pub active: bool,
#[props(default)]
pub hoverable: bool,
#[props(default)]
pub dropup: bool,
#[props(into, default)]
pub align: SharedString,
#[props(into, default)]
pub title: SharedString,
pub trigger: Option<Element>,
#[props(into)]
pub items: Vec<Element>,
}