use dioxus::prelude::*;
use dioxus_icons::lucide::ChevronDown;
use dioxus_primitives::accordion::{
self, AccordionContentProps, AccordionItemProps, AccordionProps, AccordionTriggerProps,
};
#[css_module("/src/components/accordion/style.css")]
struct Styles;
#[component]
pub fn Accordion(props: AccordionProps) -> Element {
rsx! {
accordion::Accordion {
class: Styles::dx_accordion,
width: "15rem",
id: props.id,
allow_multiple_open: props.allow_multiple_open,
disabled: props.disabled,
collapsible: props.collapsible,
horizontal: props.horizontal,
attributes: props.attributes,
{props.children}
}
}
}
#[component]
pub fn AccordionItem(props: AccordionItemProps) -> Element {
rsx! {
accordion::AccordionItem {
class: Styles::dx_accordion_item,
disabled: props.disabled,
default_open: props.default_open,
on_change: props.on_change,
on_trigger_click: props.on_trigger_click,
index: props.index,
attributes: props.attributes,
{props.children}
}
}
}
#[component]
pub fn AccordionTrigger(props: AccordionTriggerProps) -> Element {
rsx! {
accordion::AccordionTrigger {
class: Styles::dx_accordion_trigger,
id: props.id,
attributes: props.attributes,
{props.children}
ChevronDown {
class: Styles::dx_accordion_expand_icon,
size: "20px",
stroke: "var(--secondary-color-4)",
}
}
}
}
#[component]
pub fn AccordionContent(props: AccordionContentProps) -> Element {
rsx! {
accordion::AccordionContent {
class: Styles::dx_accordion_content,
style: "--collapsible-content-width: 140px",
id: props.id,
attributes: props.attributes,
{props.children}
}
}
}