Skip to main content

showcase/pages/
mod.rs

1mod controls;
2mod feedback;
3mod inputs;
4mod navigation;
5mod structure;
6mod surfaces;
7
8use iced::Length;
9use iced::widget::{Column, Space};
10use material::widget::{page, theme_picker};
11use material_ui_rs as material;
12
13use super::{Message, Showcase, ShowcasePage};
14
15pub(super) fn view(state: &Showcase) -> material::Element<'_, Message> {
16    let page = state.navigation.selected();
17    let content = match page {
18        ShowcasePage::Inputs => inputs::view(state),
19        ShowcasePage::Controls => controls::view(state),
20        ShowcasePage::Feedback => feedback::view(state),
21        ShowcasePage::Surfaces => surfaces::view(),
22        ShowcasePage::Navigation => navigation::view(state),
23        ShowcasePage::Structure => structure::view(state),
24    };
25    let content = Column::new()
26        .push(content)
27        .push(Space::new().height(Length::Fixed(floating_content_inset(state))));
28
29    page::surface(header(page), content).into()
30}
31
32pub(super) fn floating_content_inset(state: &Showcase) -> f32 {
33    (theme_picker::FLOATING_MARGIN
34        + state.theme_controller.floating_clearance()
35        + material::tokens::component::snackbar::BOTTOM_MARGIN
36        - page::PADDING)
37        .max(0.0)
38}
39
40fn header(page: ShowcasePage) -> material::Element<'static, Message> {
41    material::widget::page::header("material-ui-rs 0.5.3", page_label(page)).into()
42}
43
44fn page_label(page: ShowcasePage) -> &'static str {
45    match page {
46        ShowcasePage::Inputs => "Inputs",
47        ShowcasePage::Controls => "Controls",
48        ShowcasePage::Feedback => "Feedback",
49        ShowcasePage::Surfaces => "Surfaces",
50        ShowcasePage::Navigation => "Navigation",
51        ShowcasePage::Structure => "Structure",
52    }
53}