1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
//! # Router
//!
//! Freya supports the official [Dioxus Router](https://docs.rs/dioxus-router/latest/dioxus_router/), which means you can declare different pages for your app. The only difference is that you will need to use Freya's custom `Link` component.
//!
//! ### Example
//!
//! ```rust
//! # use freya::prelude::*;
//! # use dioxus_router::prelude::{
//! # Outlet,
//! # Routable,
//! # Router,
//! # };
//! fn app() -> Element {
//! /// We place the router renderer in the root component
//! rsx!(Router::<Route> {})
//! }
//!
//! // Declare your Routes tree as an enum
//! // Every route must have a component with the same name
//! // So for example, `Home` needs to have a `fn Home(...` component
//! // the `Routable` macro will pick it up automatically
//! // so it must be in the scope.
//! #[derive(Routable, Clone, PartialEq)]
//! #[rustfmt::skip]
//! pub enum Route {
//! #[layout(AppSidebar)]
//! #[route("/")]
//! Home,
//! #[route("/other")]
//! Other,
//! #[end_layout]
//! #[route("/..route")]
//! PageNotFound { }, // Handle 404 routes.
//! }
//!
//! // This component is used as container for the router (as it was marked with `#[layout(AppSidebar)]`), which means
//! // That we can render something here that will be rendered no matter what route you are in
//! // Useful for navigation bars.
//! fn AppSidebar() -> Element {
//! rsx!(
//! Body {
//! Link {
//! // Specify to what destination you want this Link you point when clicking.
//! to: Route::Home,
//! label {
//! "Home"
//! }
//! },
//! Link {
//! to: Route::Other,
//! label {
//! "Other"
//! }
//! },
//! rect {
//! main_align: "center",
//! cross_align: "center",
//! width: "100%",
//! height: "100%",
//! // This is the place where the routes content will actually be showed.
//! Outlet::<Route> { }
//! }
//! }
//! )
//! }
//!
//! #[component]
//! fn Home() -> Element {
//! rsx!(
//! label {
//! "Home Page"
//! }
//! )
//! }
//!
//! #[component]
//! fn Other() -> Element {
//! rsx!(
//! label {
//! "Other Page"
//! }
//! )
//! }
//!
//! #[component]
//! fn PageNotFound() -> Element {
//! rsx!(
//! label {
//! "404"
//! }
//! )
//! }
//! ```
pub mod animated_transitions;
pub mod native_router;