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}