diff --git a/crates/librqbit/webui/src/components/Header.tsx b/crates/librqbit/webui/src/components/Header.tsx index bd97241..f16d732 100644 --- a/crates/librqbit/webui/src/components/Header.tsx +++ b/crates/librqbit/webui/src/components/Header.tsx @@ -7,7 +7,7 @@ import Logo from "../../assets/logo.svg?react"; export const Header = ({ title }: { title: string }) => { const [name, version] = title.split("-"); return ( -
+

diff --git a/crates/librqbit/webui/src/components/TorrentsList.tsx b/crates/librqbit/webui/src/components/TorrentsList.tsx index abbac57..b84ee2f 100644 --- a/crates/librqbit/webui/src/components/TorrentsList.tsx +++ b/crates/librqbit/webui/src/components/TorrentsList.tsx @@ -22,7 +22,7 @@ export const TorrentsList = (props: { ); } return ( -
+
{props.torrents.map((t: TorrentId) => ( ))} diff --git a/crates/librqbit/webui/src/components/buttons/DarkModeToggle.tsx b/crates/librqbit/webui/src/components/buttons/DarkModeToggle.tsx deleted file mode 100644 index 51c6b80..0000000 --- a/crates/librqbit/webui/src/components/buttons/DarkModeToggle.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useState, useEffect } from "react"; - -const DarkModeToggle = () => { - const getInitialState = () => { - const storedDarkMode = localStorage.getItem("darkMode"); - return storedDarkMode ? JSON.parse(storedDarkMode) : false; - }; - const [isDarkMode, setIsDarkMode] = useState(getInitialState); - - useEffect(() => { - document.body.classList.toggle("dark", isDarkMode); - localStorage.setItem("darkMode", JSON.stringify(isDarkMode)); - }, [isDarkMode]); - - return ( -
- -
- ); -}; - -export default DarkModeToggle; diff --git a/crates/librqbit/webui/src/helper/darkMode.ts b/crates/librqbit/webui/src/helper/darkMode.ts new file mode 100644 index 0000000..5c30d95 --- /dev/null +++ b/crates/librqbit/webui/src/helper/darkMode.ts @@ -0,0 +1,21 @@ +let darkMode = window.matchMedia("(prefers-color-scheme: dark)").matches; + +window + .matchMedia("(prefers-color-scheme: dark)") + .addEventListener("change", (event) => { + DarkMode.setDark(event.matches); + }); + +export const DarkMode = { + isDark: () => darkMode, + setDark: (value: boolean) => { + darkMode = value; + document.body.classList.toggle("dark", darkMode); + return darkMode; + }, + toggle: () => { + DarkMode.setDark(!darkMode); + }, +}; + +DarkMode.setDark(darkMode); diff --git a/crates/librqbit/webui/src/rqbit-web.tsx b/crates/librqbit/webui/src/rqbit-web.tsx index a3c5346..9d37c94 100644 --- a/crates/librqbit/webui/src/rqbit-web.tsx +++ b/crates/librqbit/webui/src/rqbit-web.tsx @@ -4,10 +4,10 @@ import { AppContext, APIContext } from "./context"; import { RootContent } from "./components/RootContent"; import { customSetInterval } from "./helper/customSetInterval"; import { IconButton } from "./components/buttons/IconButton"; -import { BsBodyText } from "react-icons/bs"; +import { BsBodyText, BsMoon } from "react-icons/bs"; import { LogStreamModal } from "./components/modal/LogStreamModal"; import { Header } from "./components/Header"; -import DarkModeToggle from "./components/buttons/DarkModeToggle"; +import { DarkMode } from "./helper/darkMode"; export interface ErrorWithLabel { text: string; @@ -68,7 +68,7 @@ export const RqbitWebUI = (props: { return (
-
+
{/* Menu buttons */}
{props.menuButtons && @@ -76,6 +76,9 @@ export const RqbitWebUI = (props: { setLogsOpened(true)}> + + +
setLogsOpened(false)} /> - ); }; diff --git a/desktop/src-tauri/Cargo.lock b/desktop/src-tauri/Cargo.lock index 38d09b7..5150bbb 100644 --- a/desktop/src-tauri/Cargo.lock +++ b/desktop/src-tauri/Cargo.lock @@ -1867,7 +1867,7 @@ dependencies = [ [[package]] name = "librqbit" -version = "5.1.0" +version = "5.2.0" dependencies = [ "anyhow", "axum", @@ -3012,7 +3012,7 @@ dependencies = [ [[package]] name = "rqbit-desktop" -version = "5.1.0" +version = "5.2.0" dependencies = [ "anyhow", "base64 0.21.5",