1use core::fmt::Display;
2
3use crate::{
4 el::El,
5 event::Event,
6 kit::{
7 button::{Button, ButtonStyler},
8 checkbox::{Checkbox, CheckboxStyler},
9 divider::Divider,
10 knob::{Knob, KnobStyler, KnobValue},
11 select::{Select, SelectStyler},
12 slider::{Slider, SliderPosition, SliderStyler},
13 text::Text,
14 },
15 render::Renderer,
16 value::Value,
17};
18
19pub fn button<'a, Message: Clone, R: Renderer, E: Event, S: ButtonStyler<R::Color>>(
20 content: impl Into<El<'a, Message, R, E, S>>,
21) -> Button<'a, Message, R, E, S> {
22 Button::new(content)
23}
24
25pub fn text<'a, T: Display, R: Renderer>(content: impl Into<Text<'a, T, R>>) -> Text<'a, T, R> {
26 content.into()
27}
28
29pub fn h_div<R: Renderer>() -> Divider<R> {
30 Divider::horizontal()
31}
32
33pub fn v_div<R: Renderer>() -> Divider<R> {
34 Divider::vertical()
35}
36
37#[macro_export]
38macro_rules! col {
39 ($($el: expr),* $(,)?) => [
40 $crate::kit::linear::Column::new([$($crate::el::El::from($el)),*])
41 ];
42}
43
44pub use col;
45
46#[macro_export]
47macro_rules! row {
48 ($($el: expr),* $(,)?) => [
49 $crate::kit::linear::Row::new([$($crate::el::El::from($el)),*])
50 ];
51}
52
53pub use row;
54
55pub fn checkbox<'a, Message, R: Renderer, S: CheckboxStyler<R::Color>>(
56 on_change: impl (Fn(bool) -> Message) + 'a,
57) -> Checkbox<'a, Message, R, S> {
58 Checkbox::new(on_change)
59}
60
61pub fn select<'a, Message: Clone, R: Renderer, E: Event, S: SelectStyler<R::Color>>(
62 options: impl IntoIterator<Item = impl Into<El<'a, Message, R, E, S>>>,
63) -> Select<'a, Message, R, E, S> {
64 Select::new(options.into_iter().map(Into::into).collect())
65}
66
67pub fn slider_v<'a, Message: Clone, R: Renderer, S: SliderStyler<R::Color>>(
68 on_change: impl (Fn(SliderPosition) -> Message) + 'a,
69) -> Slider<'a, Message, R, S> {
70 Slider::new(crate::align::Axis::Y, on_change)
71}
72
73pub fn slider_h<'a, Message: Clone, R: Renderer, S: SliderStyler<R::Color>>(
74 on_change: impl (Fn(SliderPosition) -> Message) + 'a,
75) -> Slider<'a, Message, R, S> {
76 Slider::new(crate::align::Axis::X, on_change)
77}
78
79pub fn knob<'a, Message: Clone, R: Renderer, E: Event, S: KnobStyler<R::Color>>(
86 value: impl Into<Value<KnobValue>>,
87) -> Knob<'a, Message, R, E, S> {
88 Knob::new(value.into())
89}