Add theme feature
This commit is contained in:
parent
0c6bdf66f0
commit
c4007c8436
8 changed files with 111 additions and 40 deletions
28
public/themes/catppucinMocha.css
Normal file
28
public/themes/catppucinMocha.css
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Dongle&family=Roboto:wght@100&display=swap");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--background-primary: #1e1e2e;
|
||||||
|
--background-lighter: #11111b;
|
||||||
|
--navbar-color: #11111b;
|
||||||
|
--navbar-height: 60px;
|
||||||
|
--navbar-text-color: #cba6f7;
|
||||||
|
--navbar-link-color: #89b4fa;
|
||||||
|
--navbar-link-hover-color: #cba6f7;
|
||||||
|
--navbar-font: "Roboto";
|
||||||
|
--input-text-color: #cdd6f4;
|
||||||
|
--input-placeholder-color: #bac2de;
|
||||||
|
--input-background-color: #181825;
|
||||||
|
--input-border-color: #cba6f7;
|
||||||
|
--input-border-size: 1.3px;
|
||||||
|
--navbar-logo-filter: none;
|
||||||
|
--dropdown-option-hover-color: #11111b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.font-inter {
|
||||||
|
font-family: "Inter", sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
}
|
||||||
|
|
||||||
|
.font-roboto {
|
||||||
|
font-family: "Roboto";
|
||||||
|
}
|
||||||
|
|
@ -1,15 +1,24 @@
|
||||||
import { render } from "preact";
|
import { render } from "preact";
|
||||||
import { Suspense, lazy } from "preact/compat";
|
import { Suspense, lazy } from "preact/compat";
|
||||||
import { LoadSuspense } from "./LoadSuspense";
|
import { LoadSuspense } from "./LoadSuspense";
|
||||||
|
import { Helmet } from "react-helmet";
|
||||||
|
|
||||||
const Routes = lazy(() => import("./routes"));
|
const Routes = lazy(() => import("./routes"));
|
||||||
|
|
||||||
|
const theme = localStorage.getItem("theme") || "main";
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
return (
|
return (
|
||||||
|
<div>
|
||||||
|
<Helmet>
|
||||||
|
<link rel="stylesheet" href={"/themes/" + theme + ".css"}></link>
|
||||||
|
</Helmet>
|
||||||
<Suspense fallback={<LoadSuspense />}>
|
<Suspense fallback={<LoadSuspense />}>
|
||||||
<div>
|
<div>
|
||||||
<Routes />
|
<Routes />
|
||||||
</div>
|
</div>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,10 @@
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Search Engine",
|
"title": "Search Engine",
|
||||||
"subtitle": "Choose your search engine"
|
"subtitle": "Choose your search engine"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"title": "Theme",
|
||||||
|
"subtitle": "Choose a theme so your eyes don't hate us"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"titles": {
|
"titles": {
|
||||||
|
|
@ -59,5 +63,9 @@
|
||||||
"discord": "Nebula - Discord",
|
"discord": "Nebula - Discord",
|
||||||
"404": "Nebula - 404"
|
"404": "Nebula - 404"
|
||||||
},
|
},
|
||||||
"comingsoon": "Coming soon!"
|
"comingsoon": "Coming soon!",
|
||||||
|
"themes": {
|
||||||
|
"main": "Por defecto",
|
||||||
|
"catppucinMocha": "Catppucin Mocha"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,10 @@
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Buscador",
|
"title": "Buscador",
|
||||||
"subtitle": "Elige tu motor de búsqueda."
|
"subtitle": "Elige tu motor de búsqueda."
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"title": "Mirar",
|
||||||
|
"subtitle": "Elige una mirada para que tus ojos no nos odienn"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"titles": {
|
"titles": {
|
||||||
|
|
@ -59,5 +63,9 @@
|
||||||
"discord": "Nebula - Discord",
|
"discord": "Nebula - Discord",
|
||||||
"404": "Nebula - 404"
|
"404": "Nebula - 404"
|
||||||
},
|
},
|
||||||
"comingsoon": "¡Próximamente!"
|
"comingsoon": "¡Próximamente!",
|
||||||
|
"themes": {
|
||||||
|
"main": "Por defecto",
|
||||||
|
"catppucinMocha": "Catppucin Mocha"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,10 @@
|
||||||
"search": {
|
"search": {
|
||||||
"title": "検索エンジン",
|
"title": "検索エンジン",
|
||||||
"subtitle": "ネビュラの検索エンジンを選択してください"
|
"subtitle": "ネビュラの検索エンジンを選択してください"
|
||||||
|
},
|
||||||
|
"theme": {
|
||||||
|
"title": "テーマ",
|
||||||
|
"subtitle": "目が嫌いにならないようにテーマを選んでください"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"titles": {
|
"titles": {
|
||||||
|
|
@ -59,5 +63,9 @@
|
||||||
"discord": "ネブラ - Discord",
|
"discord": "ネブラ - Discord",
|
||||||
"404": "ネブラ - 404"
|
"404": "ネブラ - 404"
|
||||||
},
|
},
|
||||||
"comingsoon": "近日公開"
|
"comingsoon": "近日公開",
|
||||||
|
"themes": {
|
||||||
|
"main": "デフォルト",
|
||||||
|
"catppucinMocha": "Catppucin Mocha"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,17 @@
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
import { tabContentVariant, settingsPageVariant } from "./Variants";
|
import { tabContentVariant, settingsPageVariant } from "./Variants";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import Dropdown from "./Dropdown";
|
||||||
|
|
||||||
|
|
||||||
function Customization({ id, active }) {
|
function Customization({ id, active }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const themes = [
|
||||||
|
{ id: "main", label: "Main" },
|
||||||
|
{ id: "catppucinMocha", label: "Catppucin Mocha" }
|
||||||
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<motion.div
|
<motion.div
|
||||||
role="tabpanel"
|
role="tabpanel"
|
||||||
|
|
@ -17,8 +25,11 @@ function Customization({ id, active }) {
|
||||||
variants={settingsPageVariant}
|
variants={settingsPageVariant}
|
||||||
className="content-card flex w-full flex-col items-center justify-center text-center"
|
className="content-card flex w-full flex-col items-center justify-center text-center"
|
||||||
>
|
>
|
||||||
<img src="/comingsoonsnake.png" class="h-72 w-72"></img>
|
<div class="flex h-64 w-80 flex-col flex-wrap content-center items-center rounded-lg border border-input-border-color bg-lighter p-7 text-center">
|
||||||
<h1 class="font-roboto text-3xl">{t("comingsoon")}</h1>
|
<div class="p-2 text-3xl">{t("settings.theme.title")}</div>
|
||||||
|
<div class="text-md p-4">{t("settings.theme.subtitle")}</div>
|
||||||
|
<Dropdown storageKey="theme" options={themes} refresh={true} />
|
||||||
|
</div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</motion.div>
|
</motion.div>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,8 @@ import { ProxyFrame } from "./pages/ProxyFrame.js";
|
||||||
import { Radon } from "./pages/Radon";
|
import { Radon } from "./pages/Radon";
|
||||||
import { Settings } from "./pages/Settings/";
|
import { Settings } from "./pages/Settings/";
|
||||||
import { AboutBlank } from "./AboutBlank";
|
import { AboutBlank } from "./AboutBlank";
|
||||||
import AutocompleteInput from "./Autocomplete";
|
|
||||||
import "./style.css";
|
import "./style.css";
|
||||||
import "./themes/main.css";
|
|
||||||
import "./i18n";
|
import "./i18n";
|
||||||
|
|
||||||
export default function Routes() {
|
export default function Routes() {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue