1
0
Fork 0
mirror of https://github.com/Nutomic/ibis.git synced 2024-11-22 17:21:08 +00:00

Persistent storage for dark mode

This commit is contained in:
Felix Ableitner 2024-11-07 12:05:54 +01:00
parent 684f4d07a7
commit 2fd3999341
4 changed files with 28 additions and 3 deletions

11
Cargo.lock generated
View file

@ -1796,6 +1796,7 @@ dependencies = [
"leptos", "leptos",
"leptos-use", "leptos-use",
"leptos_axum", "leptos_axum",
"leptos_darkmode",
"leptos_meta", "leptos_meta",
"leptos_router", "leptos_router",
"log", "log",
@ -2069,6 +2070,16 @@ dependencies = [
"typed-builder", "typed-builder",
] ]
[[package]]
name = "leptos_darkmode"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35ec7c7c56b312da0a739680cc2cb70d641eb82adbc1f83a565c2e9562a96253"
dependencies = [
"leptos",
"web-sys",
]
[[package]] [[package]]
name = "leptos_dom" name = "leptos_dom"
version = "0.6.15" version = "0.6.15"

View file

@ -108,6 +108,7 @@ markdown-it-footnote = "0.2.0"
markdown-it-sub = "1.0.0" markdown-it-sub = "1.0.0"
markdown-it-sup = "1.0.0" markdown-it-sup = "1.0.0"
leptos-use = "0.13.6" leptos-use = "0.13.6"
leptos_darkmode = "0.2.0"
[dev-dependencies] [dev-dependencies]
pretty_assertions = "1.4.1" pretty_assertions = "1.4.1"

View file

@ -37,6 +37,7 @@ use leptos::{
SignalGetUntracked, SignalGetUntracked,
SignalUpdate, SignalUpdate,
}; };
use leptos_darkmode::Darkmode;
use leptos_meta::{provide_meta_context, *}; use leptos_meta::{provide_meta_context, *};
use leptos_router::{Route, Router, Routes}; use leptos_router::{Route, Router, Routes};
use reqwest::Client; use reqwest::Client;
@ -90,8 +91,18 @@ pub fn App() -> impl IntoView {
GlobalState::update_my_profile(); GlobalState::update_my_profile();
provide_context(create_rw_signal(global_state)); provide_context(create_rw_signal(global_state));
let darkmode = Darkmode::init();
provide_context(darkmode.clone());
let theme = move || {
if darkmode.is_light() {
"emerald"
} else {
"dim"
}
};
view! { view! {
<Html attr:data-theme="emerald" class="h-full" /> <Html attr:data-theme=theme class="h-full" />
<Body class="min-h-full flex max-sm:flex-col md:divide-x divide-slate-400 divide-solid" /> <Body class="min-h-full flex max-sm:flex-col md:divide-x divide-slate-400 divide-solid" />
<> <>
<Stylesheet id="ibis" href="/pkg/ibis.css" /> <Stylesheet id="ibis" href="/pkg/ibis.css" />

View file

@ -1,5 +1,6 @@
use crate::frontend::app::GlobalState; use crate::frontend::app::GlobalState;
use leptos::{component, use_context, view, IntoView, RwSignal, SignalWith, *}; use leptos::{component, use_context, view, IntoView, RwSignal, SignalWith, *};
use leptos_darkmode::Darkmode;
use leptos_router::*; use leptos_router::*;
#[component] #[component]
@ -124,8 +125,9 @@ pub fn Nav() -> impl IntoView {
<span class="label-text">Light</span> <span class="label-text">Light</span>
<input <input
type="checkbox" type="checkbox"
value="dim" class="toggle"
class="toggle theme-controller select-none" checked=move || { expect_context::<Darkmode>().is_dark() }
on:click=move |_| { expect_context::<Darkmode>().toggle() }
/> />
<span class="label-text">Dark</span> <span class="label-text">Dark</span>
</label> </label>