add particles translation and icons for dropdowns
BIN
src/assets/automatic.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
src/assets/bing.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
src/assets/ddg.png
Normal file
|
After Width: | Height: | Size: 152 KiB |
BIN
src/assets/dynamic.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
BIN
src/assets/english.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
src/assets/google.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
src/assets/japanese.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
src/assets/rammerhead.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
src/assets/spanish.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
src/assets/ultraviolet.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
|
@ -80,6 +80,7 @@
|
||||||
"themes": {
|
"themes": {
|
||||||
"main": "Main",
|
"main": "Main",
|
||||||
"hacker": "Hacker",
|
"hacker": "Hacker",
|
||||||
|
"crismas": "Crismas🐴🎄",
|
||||||
"catppuccinMocha": "Catppuccin Mocha",
|
"catppuccinMocha": "Catppuccin Mocha",
|
||||||
"catppuccinMacchiato": "Catppuccin Macchiato",
|
"catppuccinMacchiato": "Catppuccin Macchiato",
|
||||||
"catppuccinFrappe": "Catppuccin Frappe",
|
"catppuccinFrappe": "Catppuccin Frappe",
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@
|
||||||
"themes": {
|
"themes": {
|
||||||
"main": "Por defecto",
|
"main": "Por defecto",
|
||||||
"hacker": "Hacker",
|
"hacker": "Hacker",
|
||||||
|
"crismas": "Naidad🐴🎄",
|
||||||
"catppuccinMocha": "Catppuccin Mocha",
|
"catppuccinMocha": "Catppuccin Mocha",
|
||||||
"catppuccinMacchiato": "Catppuccin Macchiato",
|
"catppuccinMacchiato": "Catppuccin Macchiato",
|
||||||
"catppuccinFrappe": "Catppuccin Frappe",
|
"catppuccinFrappe": "Catppuccin Frappe",
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@
|
||||||
"themes": {
|
"themes": {
|
||||||
"main": "デフォルト",
|
"main": "デフォルト",
|
||||||
"hacker": "ハッカー",
|
"hacker": "ハッカー",
|
||||||
|
"crismas": "クリマス🐴🎄",
|
||||||
"catppuccinMocha": "Catppuccin Mocha",
|
"catppuccinMocha": "Catppuccin Mocha",
|
||||||
"catppuccinMacchiato": "Catppuccin Macchiato",
|
"catppuccinMacchiato": "Catppuccin Macchiato",
|
||||||
"catppuccinFrappe": "Catppuccin Frappe",
|
"catppuccinFrappe": "Catppuccin Frappe",
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ function Customization({ id, active }) {
|
||||||
|
|
||||||
const particles = [
|
const particles = [
|
||||||
{ id: "none", label: "None" },
|
{ id: "none", label: "None" },
|
||||||
{ id: "/crismas.json", label: "Crismas 🐴🎄" }
|
{ id: "/crismas.json", label: t("themes.crismas") }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import { FaAngleDown } from "react-icons/fa";
|
||||||
interface Option {
|
interface Option {
|
||||||
id: string;
|
id: string;
|
||||||
label: string; // Translations CAN be passed
|
label: string; // Translations CAN be passed
|
||||||
|
image?: any;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Dropdown = ({
|
const Dropdown = ({
|
||||||
|
|
@ -36,7 +37,13 @@ const Dropdown = ({
|
||||||
>
|
>
|
||||||
<div className="flex h-full w-full select-none flex-row items-center">
|
<div className="flex h-full w-full select-none flex-row items-center">
|
||||||
<div className="h-full w-1/4"></div>
|
<div className="h-full w-1/4"></div>
|
||||||
<div className="flex w-2/4 flex-col items-center text-input-text">
|
<div className="flex w-2/4 flex-row items-center justify-center text-input-text">
|
||||||
|
{options.find((o) => o.id === choice)?.image && (
|
||||||
|
<img
|
||||||
|
src={options.find((o) => o.id === choice)?.image}
|
||||||
|
className="mr-2 h-6 w-6"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
{options.find((o) => o.id === choice)?.label}
|
{options.find((o) => o.id === choice)?.label}
|
||||||
</div>
|
</div>
|
||||||
<div className="flex w-1/4 flex-col items-center text-input-text">
|
<div className="flex w-1/4 flex-col items-center text-input-text">
|
||||||
|
|
@ -48,7 +55,7 @@ const Dropdown = ({
|
||||||
{options.map((option, index) => (
|
{options.map((option, index) => (
|
||||||
<div
|
<div
|
||||||
key={option.id}
|
key={option.id}
|
||||||
className={`border border-input-border-color bg-input p-2 text-input-text hover:bg-dropdown-option-hover-color ${
|
className={`flex flex-row justify-center border border-input-border-color bg-input p-2 text-input-text hover:bg-dropdown-option-hover-color ${
|
||||||
index === options.length - 1 ? "rounded-b-2xl" : ""
|
index === options.length - 1 ? "rounded-b-2xl" : ""
|
||||||
}`}
|
}`}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
|
|
@ -60,6 +67,13 @@ const Dropdown = ({
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
{option.image && (
|
||||||
|
<img
|
||||||
|
src={option.image}
|
||||||
|
alt="Option Image"
|
||||||
|
className="mr-2 h-6 w-6"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
{option.label}
|
{option.label}
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|
|
||||||
|
|
@ -2,14 +2,17 @@ import { motion } from "framer-motion";
|
||||||
import { tabContentVariant, settingsPageVariant } from "./Variants";
|
import { tabContentVariant, settingsPageVariant } from "./Variants";
|
||||||
import Dropdown from "./Dropdown";
|
import Dropdown from "./Dropdown";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import EnglishFlag from "../../assets/english.png";
|
||||||
|
import SpanishFlag from "../../assets/spanish.png";
|
||||||
|
import JapaneseFlag from "../../assets/japanese.png";
|
||||||
|
|
||||||
const Misc = ({ id, active }) => {
|
const Misc = ({ id, active }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
const languages = [
|
const languages = [
|
||||||
{ id: "en-US", label: "English" },
|
{ id: "en-US", label: "English", image: EnglishFlag },
|
||||||
{ id: "es", label: "Español" },
|
{ id: "es", label: "Español", image: SpanishFlag },
|
||||||
{ id: "ja", label: "日本語" }
|
{ id: "ja", label: "日本語", image: JapaneseFlag }
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -7,16 +7,28 @@ import ProxyInput from "./ProxyInput";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import TransportDropdown from "./transportDropdown";
|
import TransportDropdown from "./transportDropdown";
|
||||||
|
|
||||||
|
import RammerheadLogo from "../../assets/rammerhead.png";
|
||||||
|
import UltravioletLogo from "../../assets/ultraviolet.png";
|
||||||
|
import AutomaticLogo from "../../assets/automatic.png";
|
||||||
|
import DynamicLogo from "../../assets/dynamic.png";
|
||||||
|
import GoogleLogo from "../../assets/google.png";
|
||||||
|
import BingLogo from "../../assets/bing.png";
|
||||||
|
import DuckDuckGoLogo from "../../assets/ddg.png";
|
||||||
|
|
||||||
const Proxy = ({ id, active }) => {
|
const Proxy = ({ id, active }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const transport = localStorage.getItem("transport") || "libcurl";
|
const transport = localStorage.getItem("transport") || "libcurl";
|
||||||
const proccy = localStorage.getItem("proxy") || "automatic";
|
const proccy = localStorage.getItem("proxy") || "automatic";
|
||||||
|
|
||||||
const engines = [
|
const engines = [
|
||||||
{ id: "automatic", label: t("settings.proxy.automatic") },
|
{
|
||||||
{ id: "ultraviolet", label: "Ultraviolet" },
|
id: "automatic",
|
||||||
{ id: "rammerhead", label: "Rammerhead" },
|
label: t("settings.proxy.automatic"),
|
||||||
{ id: "dynamic", label: "Dynamic" }
|
image: AutomaticLogo
|
||||||
|
},
|
||||||
|
{ id: "ultraviolet", label: "Ultraviolet", image: UltravioletLogo },
|
||||||
|
{ id: "rammerhead", label: "Rammerhead", image: RammerheadLogo },
|
||||||
|
{ id: "dynamic", label: "Dynamic", image: DynamicLogo }
|
||||||
];
|
];
|
||||||
|
|
||||||
const proxyModes = [
|
const proxyModes = [
|
||||||
|
|
@ -26,9 +38,17 @@ const Proxy = ({ id, active }) => {
|
||||||
];
|
];
|
||||||
|
|
||||||
const searchEngines = [
|
const searchEngines = [
|
||||||
{ id: "https://duckduckgo.com/?q=%s", label: "DuckDuckGo" },
|
{
|
||||||
{ id: "https://google.com/search?q=%s", label: "Google" },
|
id: "https://duckduckgo.com/?q=%s",
|
||||||
{ id: "https://bing.com/search?q=%s", label: "Bing" }
|
label: "DuckDuckGo",
|
||||||
|
image: DuckDuckGoLogo
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "https://google.com/search?q=%s",
|
||||||
|
label: "Google",
|
||||||
|
image: GoogleLogo
|
||||||
|
},
|
||||||
|
{ id: "https://bing.com/search?q=%s", label: "Bing", image: BingLogo }
|
||||||
];
|
];
|
||||||
|
|
||||||
const wispUrl =
|
const wispUrl =
|
||||||
|
|
|
||||||