Skip to main content

showcase/pages/
feedback.rs

1use material::widget::page;
2use material_ui_rs as material;
3
4use super::super::{Message, Showcase};
5
6pub(super) fn view(state: &Showcase) -> material::Element<'_, Message> {
7    page::sections([
8        page::section("Progress", progress_indicators(state)).into(),
9        page::section("Badges", badges()).into(),
10        page::section("Snackbars", snackbars()).into(),
11        page::section("Dialogs", dialogs()).into(),
12        page::section("Tooltips", tooltips(state)).into(),
13    ])
14    .into()
15}
16
17fn progress_indicators(state: &Showcase) -> material::Element<'_, Message> {
18    use material::widget::progress_bar::{self, LinearProgressMode, LoadingIndicatorMode};
19
20    let progress = state.progress / 100.0;
21    let linear_phase = state.progress_animation.linear_phase();
22    let loading_phase = state.progress_animation.loading_phase();
23
24    page::dense_stack([
25        page::labeled_value_row("Determinate", format!("{:.0}%", state.progress)).into(),
26        material::widget::slider::continuous(0.0..=100.0, state.progress, Message::SliderChanged)
27            .step(1.0)
28            .into(),
29        progress_bar::linear(LinearProgressMode::determinate(progress, linear_phase)).into(),
30        progress_bar::linear(LinearProgressMode::indeterminate(linear_phase)).into(),
31        page::indicator_row([
32            progress_bar::loading(LoadingIndicatorMode::indeterminate(loading_phase)).into(),
33            progress_bar::loading(LoadingIndicatorMode::contained_indeterminate(loading_phase))
34                .into(),
35        ])
36        .into(),
37    ])
38    .into()
39}
40
41fn badges() -> material::Element<'static, Message> {
42    page::row([
43        material::text::body_large("Badges").into(),
44        material::widget::badge::small().into(),
45        material::widget::badge::large("3").into(),
46        material::widget::badge::large("99+").into(),
47    ])
48    .into()
49}
50
51fn snackbars() -> material::Element<'static, Message> {
52    use material::widget::button::{self, ButtonVariant};
53
54    page::row([button::action(
55        button::button("Show snackbar", ButtonVariant::Filled),
56        Message::ShowSnackbar,
57    )])
58    .into()
59}
60
61fn dialogs() -> material::Element<'static, Message> {
62    use material::widget::button::{self, ButtonVariant};
63
64    page::row([button::action(
65        button::button("Open alert dialog", ButtonVariant::Filled),
66        Message::DialogOpened,
67    )])
68    .into()
69}
70
71fn tooltips(state: &Showcase) -> material::Element<'_, Message> {
72    use material::widget::button::{self, ChipVariant};
73
74    page::row([
75        material::widget::tooltip::plain(
76            button::optional_action(
77                button::chip("Plain", ChipVariant::Assist),
78                state.enabled.then_some(Message::Increment),
79            ),
80            "Material 3 plain tooltip",
81            material::widget::tooltip::Position::Top,
82        )
83        .into(),
84        material::widget::tooltip::rich_with_title_action(
85            button::optional_action(
86                button::chip("Rich", ChipVariant::Assist),
87                state.enabled.then_some(Message::Increment),
88            ),
89            "Rich tooltip",
90            "Additional context and a related action can be shown together.",
91            material::widget::tooltip::rich_action_button("Action", Message::Increment),
92            material::widget::tooltip::Position::Top,
93        )
94        .into(),
95    ])
96    .into()
97}