Skip to main content

ansiq_widgets/
monthly.rs

1use ansiq_core::{Element, ElementKind, Layout, Length, MonthlyProps, Style};
2
3pub struct Monthly<Message = ()> {
4    element: Element<Message>,
5}
6
7impl<Message> Monthly<Message> {
8    pub fn new() -> Self {
9        Self {
10            element: Element::new(ElementKind::Monthly(MonthlyProps {
11                year: 2026,
12                month: 1,
13                selected_day: None,
14            }))
15            .with_layout(Layout {
16                width: Length::Fill,
17                height: Length::Fixed(8),
18            }),
19        }
20    }
21
22    pub fn year(mut self, year: i32) -> Self {
23        if let ElementKind::Monthly(props) = &mut self.element.kind {
24            props.year = year;
25        }
26        self
27    }
28
29    pub fn month(mut self, month: u8) -> Self {
30        if let ElementKind::Monthly(props) = &mut self.element.kind {
31            props.month = month.clamp(1, 12);
32        }
33        self
34    }
35
36    pub fn selected_day(mut self, day: u8) -> Self {
37        if let ElementKind::Monthly(props) = &mut self.element.kind {
38            props.selected_day = Some(day.max(1));
39        }
40        self
41    }
42
43    pub fn layout(mut self, layout: Layout) -> Self {
44        self.element.layout = layout;
45        self
46    }
47
48    pub fn style(mut self, style: Style) -> Self {
49        self.element.style = style;
50        self
51    }
52
53    pub fn build(self) -> Element<Message> {
54        self.element
55    }
56}