use dioxus::prelude::*;
use dioxus_primitives::dioxus_attributes::attributes;
use dioxus_primitives::dropdown_menu::{
self, DropdownMenuContentProps, DropdownMenuItemProps, DropdownMenuProps,
DropdownMenuTriggerProps,
};
use dioxus_primitives::merge_attributes;
#[css_module("/src/components/dropdown_menu/style.css")]
struct Styles;
#[component]
pub fn DropdownMenu(props: DropdownMenuProps) -> Element {
let base = attributes!(div {
class: Styles::dx_dropdown_menu,
});
let merged = merge_attributes(vec![base, props.attributes.clone()]);
rsx! {
dropdown_menu::DropdownMenu {
open: props.open,
default_open: props.default_open,
on_open_change: props.on_open_change,
disabled: props.disabled,
roving_loop: props.roving_loop,
attributes: merged,
{props.children}
}
}
}
#[component]
pub fn DropdownMenuTrigger(props: DropdownMenuTriggerProps) -> Element {
let base = attributes!(button {
class: Styles::dx_dropdown_menu_trigger,
});
let merged = merge_attributes(vec![base, props.attributes]);
rsx! {
dropdown_menu::DropdownMenuTrigger { as: props.r#as, attributes: merged, {props.children} }
}
}
#[component]
pub fn DropdownMenuContent(props: DropdownMenuContentProps) -> Element {
let base = attributes!(div {
class: Styles::dx_dropdown_menu_content,
});
let merged = merge_attributes(vec![base, props.attributes.clone()]);
rsx! {
dropdown_menu::DropdownMenuContent { id: props.id, attributes: merged, {props.children} }
}
}
#[component]
pub fn DropdownMenuItem<T: Clone + PartialEq + 'static>(
props: DropdownMenuItemProps<T>,
) -> Element {
let base = attributes!(div {
class: Styles::dx_dropdown_menu_item,
});
let merged = merge_attributes(vec![base, props.attributes.clone()]);
rsx! {
dropdown_menu::DropdownMenuItem {
disabled: props.disabled,
value: props.value,
index: props.index,
on_select: props.on_select,
attributes: merged,
{props.children}
}
}
}