dark mode added
This commit is contained in:
parent
5a0568bec9
commit
f42e57d464
6 changed files with 44 additions and 13 deletions
2
crates/librqbit/webui/dist/assets/index.css
vendored
2
crates/librqbit/webui/dist/assets/index.css
vendored
File diff suppressed because one or more lines are too long
16
crates/librqbit/webui/dist/assets/index.js
vendored
16
crates/librqbit/webui/dist/assets/index.js
vendored
File diff suppressed because one or more lines are too long
6
crates/librqbit/webui/dist/manifest.json
vendored
6
crates/librqbit/webui/dist/manifest.json
vendored
|
|
@ -4,14 +4,14 @@
|
||||||
"src": "assets/logo.svg"
|
"src": "assets/logo.svg"
|
||||||
},
|
},
|
||||||
"index.css": {
|
"index.css": {
|
||||||
"file": "assets/index-458d2033.css",
|
"file": "assets/index-6a152703.css",
|
||||||
"src": "index.css"
|
"src": "index.css"
|
||||||
},
|
},
|
||||||
"index.html": {
|
"index.html": {
|
||||||
"css": [
|
"css": [
|
||||||
"assets/index-458d2033.css"
|
"assets/index-6a152703.css"
|
||||||
],
|
],
|
||||||
"file": "assets/index-1daa8daf.js",
|
"file": "assets/index-ba274e55.js",
|
||||||
"isEntry": true,
|
"isEntry": true,
|
||||||
"src": "index.html"
|
"src": "index.html"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { useState, useEffect } from "react";
|
||||||
|
|
||||||
|
const DarkModeToggle = () => {
|
||||||
|
const getInitialState = () => {
|
||||||
|
const storedDarkMode = localStorage.getItem("darkMode");
|
||||||
|
return storedDarkMode ? JSON.parse(storedDarkMode) : false;
|
||||||
|
};
|
||||||
|
const [isDarkMode, setIsDarkMode] = useState<boolean>(getInitialState);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
document.body.classList.toggle("dark", isDarkMode);
|
||||||
|
localStorage.setItem("darkMode", JSON.stringify(isDarkMode));
|
||||||
|
}, [isDarkMode]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="fixed bottom-5 right-5">
|
||||||
|
<button
|
||||||
|
onClick={() => setIsDarkMode((prev) => !prev)}
|
||||||
|
className="ml-2 text-gray-700 dark:text-gray-300"
|
||||||
|
>
|
||||||
|
Dark Mode
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DarkModeToggle;
|
||||||
|
|
@ -25,7 +25,9 @@ export const FormInput: React.FC<{
|
||||||
}) => {
|
}) => {
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-col gap-2 text-sm mb-2">
|
<div className="flex flex-col gap-2 text-sm mb-2">
|
||||||
<label htmlFor={name}>{label}</label>
|
<label htmlFor={name} className="dark:text-slate-500">
|
||||||
|
{label}
|
||||||
|
</label>
|
||||||
<input
|
<input
|
||||||
autoFocus={autoFocus}
|
autoFocus={autoFocus}
|
||||||
type={inputType}
|
type={inputType}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import { IconButton } from "./components/buttons/IconButton";
|
||||||
import { BsBodyText } from "react-icons/bs";
|
import { BsBodyText } from "react-icons/bs";
|
||||||
import { LogStreamModal } from "./components/modal/LogStreamModal";
|
import { LogStreamModal } from "./components/modal/LogStreamModal";
|
||||||
import { Header } from "./components/Header";
|
import { Header } from "./components/Header";
|
||||||
|
import DarkModeToggle from "./components/buttons/DarkModeToggle";
|
||||||
|
|
||||||
export interface ErrorWithLabel {
|
export interface ErrorWithLabel {
|
||||||
text: string;
|
text: string;
|
||||||
|
|
@ -86,6 +87,7 @@ export const RqbitWebUI = (props: {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<LogStreamModal show={logsOpened} onClose={() => setLogsOpened(false)} />
|
<LogStreamModal show={logsOpened} onClose={() => setLogsOpened(false)} />
|
||||||
|
<DarkModeToggle />
|
||||||
</AppContext.Provider>
|
</AppContext.Provider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue