Zwei Router: WorkspaceRoute (Workspace anlegen/oeffnen) und EditorRoute (Home/Editor), umgeschaltet ueber ein Signal in App. Die Navigationslinks werden nicht mehr einzeln ausgeschrieben, sondern aus dem Routen-Enum erzeugt (strum EnumIter). Die Beschriftung haengt per #[strum(message = "...")] an der Variante selbst, damit eine neue Route nur an einer Stelle gepflegt werden muss. CustomLink kapselt Link und markiert den aktiven Eintrag ueber active_class statt ueber eigenen Klick-Zustand - das funktioniert auch bei Deep-Links und dem Zurueck-Button.
44 lines
1.6 KiB
Rust
44 lines
1.6 KiB
Rust
mod views;
|
|
mod components;
|
|
|
|
use dioxus::prelude::*;
|
|
use crate::views::editor::dionotes_editor::EditorRoute;
|
|
use crate::views::workspace_selector::selector::WorkspaceRoute;
|
|
|
|
const FAVICON: Asset = asset!("/assets/favicon.ico");
|
|
|
|
// Linked individually rather than via @import in a single entry file: asset!()
|
|
// only emits files it is given by name, so an @import chain would 404 at runtime.
|
|
// Order matters — tokens, then baseline, then layout, then components.
|
|
const TAILWIND_CSS: Asset = asset!("/assets/tailwind.css");
|
|
const TOKENS_CSS: Asset = asset!("/assets/css/tokens.css");
|
|
const BASE_CSS: Asset = asset!("/assets/css/base.css");
|
|
const LAYOUT_CSS: Asset = asset!("/assets/css/layout.css");
|
|
const COMPONENTS_CSS: Asset = asset!("/assets/css/components.css");
|
|
|
|
fn main() {
|
|
launch(App);
|
|
}
|
|
|
|
#[component]
|
|
fn App() -> Element {
|
|
let workspace_selected: Signal<bool> = use_signal(|| false);
|
|
rsx! {
|
|
document::Link { rel: "icon", href: FAVICON }
|
|
// Tailwind first: its preflight lives in @layer base, our unlayered
|
|
// rules win the cascade regardless, but this keeps source order honest.
|
|
document::Link { rel: "stylesheet", href: TAILWIND_CSS }
|
|
document::Link { rel: "stylesheet", href: TOKENS_CSS }
|
|
document::Link { rel: "stylesheet", href: BASE_CSS }
|
|
document::Link { rel: "stylesheet", href: LAYOUT_CSS }
|
|
document::Link { rel: "stylesheet", href: COMPONENTS_CSS }
|
|
if workspace_selected() {
|
|
Router::<EditorRoute> {}
|
|
} else {
|
|
Router::<WorkspaceRoute> {}
|
|
}
|
|
}
|
|
}
|
|
|
|
|