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}