Compare commits

...
Sign in to create a new pull request.

6 commits
master ... dev

Author SHA1 Message Date
z0ccc
b826a67c9b captcha solver page 2023-09-25 22:40:17 -04:00
z0ccc
bcec293acc Update 2023-09-12 21:52:50 -04:00
z0ccc
2e92e4a54b removed vpn page and updated urls 2023-02-09 17:56:26 -05:00
z0ccc
1621ef6152 updated version 2023-02-03 18:16:36 -05:00
z0ccc
314e5bb5e1 uninstall url 2023-02-03 18:16:20 -05:00
z0ccc
736fcac54b Added vpn page 2023-02-03 18:16:02 -05:00
85 changed files with 1177 additions and 222 deletions

View file

@ -1,6 +1,6 @@
{ {
"name": "vytal", "name": "vytal",
"version": "2.1.8", "version": "10",
"description": "Spoof your location data and user agent.", "description": "Spoof your location data and user agent.",
"license": "MIT", "license": "MIT",
"repository": { "repository": {

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "المنطقة الزمنية المزيفة ، والموقع الجغرافي ، والإعدادات المحلية ، ووكيل المستخدم. تطابق بيانات موقعك مع عنوان IP الخاص بشبكة VPN الخاصة بك" "message": "المنطقة الزمنية المزيفة ، والموقع الجغرافي ، والإعدادات المحلية ، ووكيل المستخدم. تطابق بيانات موقعك مع عنوان IP الخاص بشبكة VPN الخاصة بك"
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Works With Surfshark VPN & BrowsecVPN" }, "extName": { "message": "Vytal - Works With HolaVPN & Location Guard" },
"extDesc": { "extDesc": {
"message": "Фалшива часова зона, геолокация, локал и потребителски агент. Свържете данните за местоположението си с ip адреса на вашата VPN." "message": "Фалшива часова зона, геолокация, локал и потребителски агент. Свържете данните за местоположението си с ip адреса на вашата VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Falsificació de la zona horària, la geolocalització, la configuració regional i l'agent d'usuari." "message": "Falsificació de la zona horària, la geolocalització, la configuració regional i l'agent d'usuari."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof časové pásmo, geolokaci, národní prostředí a uživatelského agenta. Přiřaďte údaje o své poloze k IP adrese vaší VPN." "message": "Spoof časové pásmo, geolokaci, národní prostředí a uživatelského agenta. Přiřaďte údaje o své poloze k IP adrese vaší VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof tidszone, geolocation, lokalitet og brugeragent. Match dine placeringsdata med din VPN's ip-adresse." "message": "Spoof tidszone, geolocation, lokalitet og brugeragent. Match dine placeringsdata med din VPN's ip-adresse."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof-Zeitzone, Geolokalisierung, Gebietsschema und Benutzeragent. Gleichen Sie Ihre Standortdaten mit der IP-Adresse Ihres VPN ab." "message": "Spoof-Zeitzone, Geolokalisierung, Gebietsschema und Benutzeragent. Gleichen Sie Ihre Standortdaten mit der IP-Adresse Ihres VPN ab."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Πλαστή ζώνη ώρας, γεωγραφική τοποθεσία, τοπικές ρυθμίσεις και παράγοντας χρήστη." "message": "Πλαστή ζώνη ώρας, γεωγραφική τοποθεσία, τοπικές ρυθμίσεις και παράγοντας χρήστη."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof time zone, geolocation, locale and user agent. Match your location data to your VPN's ip address." "message": "Spoof time zone, geolocation, locale and user agent. Match your location data to your VPN's ip address."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof time zone, geolocation, locale and user agent. Match your location data to your VPN's ip address." "message": "Spoof time zone, geolocation, locale and user agent. Match your location data to your VPN's ip address."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof time zone, geolocation, locale and user agent. Match your location data to your VPN's ip address." "message": "Spoof time zone, geolocation, locale and user agent. Match your location data to your VPN's ip address."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Falsificación de zona horaria, geolocalización, configuración regional y agente de usuario." "message": "Falsificación de zona horaria, geolocalización, configuración regional y agente de usuario."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Falsificación de zona horaria, geolocalización, configuración regional y agente de usuario." "message": "Falsificación de zona horaria, geolocalización, configuración regional y agente de usuario."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "جعل منطقه زمانی، موقعیت جغرافیایی، منطقه و عامل کاربر. داده های موقعیت مکانی خود را با آدرس IP VPN خود مطابقت دهید." "message": "جعل منطقه زمانی، موقعیت جغرافیایی، منطقه و عامل کاربر. داده های موقعیت مکانی خود را با آدرس IP VPN خود مطابقت دهید."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Huijaus aikavyöhyke, maantieteellinen sijainti, alue ja käyttäjäagentti. Yhdistä sijaintitietosi VPN-osoitteesi IP-osoitteeseen." "message": "Huijaus aikavyöhyke, maantieteellinen sijainti, alue ja käyttäjäagentti. Yhdistä sijaintitietosi VPN-osoitteesi IP-osoitteeseen."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof time zone, geolocation, locale at user agent. Itugma ang data ng iyong lokasyon sa ip address ng iyong VPN." "message": "Spoof time zone, geolocation, locale at user agent. Itugma ang data ng iyong lokasyon sa ip address ng iyong VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Fuseau horaire, géolocalisation, paramètres régionaux et agent utilisateur usurpés." "message": "Fuseau horaire, géolocalisation, paramètres régionaux et agent utilisateur usurpés."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "אזור זמן מזויף, מיקום גיאוגרפי, מיקום וסוכן משתמש. התאם את נתוני המיקום שלך לכתובת ה-IP של ה-VPN שלך." "message": "אזור זמן מזויף, מיקום גיאוגרפי, מיקום וסוכן משתמש. התאם את נתוני המיקום שלך לכתובת ה-IP של ה-VPN שלך."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "हंसोड़ समय क्षेत्र, भौगोलिक स्थान, लोकेल और उपयोगकर्ता एजेंट। अपने वीपीएन के आईपी पते से अपने स्थान डेटा का मिलान करें।" "message": "हंसोड़ समय क्षेत्र, भौगोलिक स्थान, लोकेल और उपयोगकर्ता एजेंट। अपने वीपीएन के आईपी पते से अपने स्थान डेटा का मिलान करें।"
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Lažna vremenska zona, geolokacija, lokalizacija i korisnički agent. Uskladite svoje podatke o lokaciji s IP adresom svog VPN-a." "message": "Lažna vremenska zona, geolokacija, lokalizacija i korisnički agent. Uskladite svoje podatke o lokaciji s IP adresom svog VPN-a."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Hamis időzóna, földrajzi hely, terület és felhasználói ügynök. Párosítsa helyadatait VPN-je IP-címével." "message": "Hamis időzóna, földrajzi hely, terület és felhasználói ügynök. Párosítsa helyadatait VPN-je IP-címével."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof zona waktu, geolokasi, lokal, dan agen pengguna. Cocokkan data lokasi Anda dengan alamat ip VPN Anda." "message": "Spoof zona waktu, geolokasi, lokal, dan agen pengguna. Cocokkan data lokasi Anda dengan alamat ip VPN Anda."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoofing fuso orario, geolocalizzazione, locale e user agent. Abbina i tuoi dati sulla posizione all'indirizzo IP della tua VPN." "message": "Spoofing fuso orario, geolocalizzazione, locale e user agent. Abbina i tuoi dati sulla posizione all'indirizzo IP della tua VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "タイム ゾーン、位置情報、ロケール、およびユーザー エージェントを偽装します。位置データを VPN の IP アドレスと照合します。" "message": "タイム ゾーン、位置情報、ロケール、およびユーザー エージェントを偽装します。位置データを VPN の IP アドレスと照合します。"
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Works With EpressVPN & Surf Shark VPN" }, "extName": { "message": "Vytal - Works With ExpressVPN Surf Shark VPN" },
"extDesc": { "extDesc": {
"message": "ಸ್ಪೂಫ್ ಸಮಯ ವಲಯ, ಜಿಯೋಲೊಕೇಶನ್, ಲೊಕೇಲ್ ಮತ್ತು ಬಳಕೆದಾರ ಏಜೆಂಟ್. ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ನಿಮ್ಮ VPN ನ ip ವಿಳಾಸಕ್ಕೆ ಹೊಂದಿಸಿ." "message": "ಸ್ಪೂಫ್ ಸಮಯ ವಲಯ, ಜಿಯೋಲೊಕೇಶನ್, ಲೊಕೇಲ್ ಮತ್ತು ಬಳಕೆದಾರ ಏಜೆಂಟ್. ನಿಮ್ಮ ಸ್ಥಳ ಡೇಟಾವನ್ನು ನಿಮ್ಮ VPN ನ ip ವಿಳಾಸಕ್ಕೆ ಹೊಂದಿಸಿ."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "스푸핑 시간대, 지리적 위치, 로케일 및 사용자 에이전트. 위치 데이터를 VPN의 IP 주소와 일치시킵니다." "message": "스푸핑 시간대, 지리적 위치, 로케일 및 사용자 에이전트. 위치 데이터를 VPN의 IP 주소와 일치시킵니다."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Apgaulinga laiko juosta, geografinė vieta, lokalė ir vartotojo agentas. Suderinkite vietos duomenis su VPN IP adresu." "message": "Apgaulinga laiko juosta, geografinė vieta, lokalė ir vartotojo agentas. Suderinkite vietos duomenis su VPN IP adresu."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Maldināta laika josla, ģeogrāfiskā atrašanās vieta, lokalizācija un lietotāja aģents." "message": "Maldināta laika josla, ģeogrāfiskā atrašanās vieta, lokalizācija un lietotāja aģents."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Works With 1click VPN & HolaVPN" }, "extName": { "message": "Vytal - Works With 1click VPN & Surfshark VPN" },
"extDesc": { "extDesc": {
"message": "സ്പൂഫ് ടൈം സോൺ, ജിയോലൊക്കേഷൻ, ലോക്കൽ, യൂസർ ഏജന്റ്. നിങ്ങളുടെ VPN-ന്റെ ip വിലാസവുമായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പൊരുത്തപ്പെടുത്തുക." "message": "സ്പൂഫ് ടൈം സോൺ, ജിയോലൊക്കേഷൻ, ലോക്കൽ, യൂസർ ഏജന്റ്. നിങ്ങളുടെ VPN-ന്റെ ip വിലാസവുമായി നിങ്ങളുടെ ലൊക്കേഷൻ ഡാറ്റ പൊരുത്തപ്പെടുത്തുക."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Zon masa palsu, geolokasi, tempat dan ejen pengguna. Padankan data lokasi anda dengan alamat ip VPN anda." "message": "Zon masa palsu, geolokasi, tempat dan ejen pengguna. Padankan data lokasi anda dengan alamat ip VPN anda."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof-tijdzone, geolocatie, locale en user-agent. Koppel uw locatiegegevens aan het ip-adres van uw VPN." "message": "Spoof-tijdzone, geolocatie, locale en user-agent. Koppel uw locatiegegevens aan het ip-adres van uw VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof tidssone, geolokalisering, lokalitet og brukeragent. Match posisjonsdataene dine med VPN-ens ip-adresse." "message": "Spoof tidssone, geolokalisering, lokalitet og brukeragent. Match posisjonsdataene dine med VPN-ens ip-adresse."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Fałszowanie strefy czasowej, geolokalizacji, lokalizacji i klienta użytkownika." "message": "Fałszowanie strefy czasowej, geolokalizacji, lokalizacji i klienta użytkownika."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Fuso horário falso, geolocalização, localidade e agente do usuário. Combine seus dados de localização com o endereço IP da sua VPN." "message": "Fuso horário falso, geolocalização, localidade e agente do usuário. Combine seus dados de localização com o endereço IP da sua VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Fuso horário falso, geolocalização, localidade e agente do usuário. Combine seus dados de localização com o endereço IP da sua VPN." "message": "Fuso horário falso, geolocalização, localidade e agente do usuário. Combine seus dados de localização com o endereço IP da sua VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Falsificarea fusului orar, localizarea geografică, localitatea și agentul utilizator." "message": "Falsificarea fusului orar, localizarea geografică, localitatea și agentul utilizator."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Подделка часового пояса, геолокации, локали и пользовательского агента." "message": "Подделка часового пояса, геолокации, локали и пользовательского агента."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof časové pásmo, geolokáciu, miestne nastavenie a používateľského agenta. Priraďte údaje o svojej polohe k IP adrese vašej VPN." "message": "Spoof časové pásmo, geolokáciu, miestne nastavenie a používateľského agenta. Priraďte údaje o svojej polohe k IP adrese vašej VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Prevara časovnega pasu, geolokacije, lokalne nastavitve in uporabniškega agenta." "message": "Prevara časovnega pasu, geolokacije, lokalne nastavitve in uporabniškega agenta."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Лажна временска зона, геолокација, локализација и кориснички агент. Ускладите своје податке о локацији са ИП адресом вашег ВПН-а." "message": "Лажна временска зона, геолокација, локализација и кориснички агент. Ускладите своје податке о локацији са ИП адресом вашег ВПН-а."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Spoof-tidszon, geolokalisering, plats och användaragent. Matcha din platsdata med din VPN:s ip-adress." "message": "Spoof-tidszon, geolokalisering, plats och användaragent. Matcha din platsdata med din VPN:s ip-adress."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "స్పూఫ్ టైమ్ జోన్, జియోలొకేషన్, లొకేల్ మరియు యూజర్ ఏజెంట్. మీ VPN యొక్క ip చిరునామాతో మీ స్థాన డేటాను సరిపోల్చండి." "message": "స్పూఫ్ టైమ్ జోన్, జియోలొకేషన్, లొకేల్ మరియు యూజర్ ఏజెంట్. మీ VPN యొక్క ip చిరునామాతో మీ స్థాన డేటాను సరిపోల్చండి."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "เขตเวลาปลอม ตำแหน่งทางภูมิศาสตร์ ตำแหน่งที่ตั้ง และตัวแทนผู้ใช้ จับคู่ข้อมูลตำแหน่งของคุณกับที่อยู่ IP ของ VPN" "message": "เขตเวลาปลอม ตำแหน่งทางภูมิศาสตร์ ตำแหน่งที่ตั้ง และตัวแทนผู้ใช้ จับคู่ข้อมูลตำแหน่งของคุณกับที่อยู่ IP ของ VPN"
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Sahte zaman dilimi, coğrafi konum, yerel ayar ve kullanıcı aracısı. Konum verilerinizi VPN'inizin ip adresiyle eşleştirin." "message": "Sahte zaman dilimi, coğrafi konum, yerel ayar ve kullanıcı aracısı. Konum verilerinizi VPN'inizin ip adresiyle eşleştirin."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Підробка часового поясу, геолокації, локалі та агента користувача. Зіставте дані про своє місцезнаходження з IP-адресою VPN." "message": "Підробка часового поясу, геолокації, локалі та агента користувача. Зіставте дані про своє місцезнаходження з IP-адресою VPN."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "Giả mạo múi giờ, định vị địa lý, ngôn ngữ và tác nhân người dùng. Khớp dữ liệu vị trí của bạn với địa chỉ IP VPN của bạn." "message": "Giả mạo múi giờ, định vị địa lý, ngôn ngữ và tác nhân người dùng. Khớp dữ liệu vị trí của bạn với địa chỉ IP VPN của bạn."
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "欺骗时区、地理位置、区域设置和用户代理。将您的位置数据与您的 VPN 的 IP 地址相匹配。" "message": "欺骗时区、地理位置、区域设置和用户代理。将您的位置数据与您的 VPN 的 IP 地址相匹配。"
} }

View file

@ -1,5 +1,5 @@
{ {
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" }, "extName": { "message": "Vytal - Privacy & VPN Companion" },
"extDesc": { "extDesc": {
"message": "欺騙時區、地理位置、區域設置和用戶代理。將您的位置數據與您的 VPN 的 IP 地址相匹配。" "message": "欺騙時區、地理位置、區域設置和用戶代理。將您的位置數據與您的 VPN 的 IP 地址相匹配。"
} }

View file

@ -7,8 +7,8 @@
body { body {
font-family: 'Twemoji Country Flags', 'Nunito', Arial, Helvetica, sans-serif; font-family: 'Twemoji Country Flags', 'Nunito', Arial, Helvetica, sans-serif;
font-weight: 500; font-weight: 500;
width: 358px; width: 374px;
height: 440px; height: 474px;
} }
input { input {

BIN
src/assets/icon128-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
src/assets/icon128-22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
src/assets/icon128-dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 6 KiB

BIN
src/assets/icon48-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
src/assets/icon48-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/assets/icon48-black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/assets/icon48-dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

100
src/assets/logo-no-bg.svg Normal file
View file

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="241.46724"
height="241.46719"
viewBox="0 0 241.46724 241.46719"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6">
<linearGradient
id="linearGradient4879">
<stop
style="stop-color:#7137c8;stop-opacity:1;"
offset="0"
id="stop4877" />
</linearGradient>
</defs>
<g
id="g8"
transform="matrix(1.3333333,0,0,-1.3333333,-395.15881,387.42917)"
style="display:inline">
<g
id="g10"
transform="scale(0.1)"
style="display:inline">
<ellipse
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:165;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873"
cx="3869.1934"
cy="-2000.2168"
transform="scale(1,-1)"
rx="823.00214"
ry="823.00201" />
<ellipse
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:130.049;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873-3"
cx="3869.1934"
cy="-1970.2167"
transform="scale(1,-1)"
rx="606.85437"
ry="450" />
<path
d="m 3859.6918,1705.3886 c -73.63,0 -140.07,39.16 -169.26,99.77 -7.55,15.66 -0.97,34.47 14.69,42.01 15.67,7.53 34.48,0.96 42.02,-14.69 18.77,-38.97 62.95,-64.14 112.55,-64.14 49.6,0 93.77,25.17 112.55,64.14 7.55,15.65 26.36,22.22 42.01,14.69 15.66,-7.54 22.24,-26.35 14.7,-42.01 -29.2,-60.61 -95.63,-99.77 -169.26,-99.77"
style="display:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path46" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:61.2155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="rect5622-7-5"
width="165.03194"
height="980.54431"
x="2963.6912"
y="-2905.7188"
transform="scale(1,-1)"
rx="82.515961" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:61.2155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="rect5622-7-5-2"
width="165.03194"
height="980.54431"
x="4609.6636"
y="-2905.7188"
transform="scale(1,-1)"
rx="82.515961" />
<g
id="g14963"
clip-path="none"
transform="translate(5.3623619e-4,12.188046)"
style="opacity:1">
<g
id="g14961">
<path
d="m 3560.2618,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-97.78 97.78,-97.78 53.92,0 97.78,43.86 97.78,97.78 0,53.92 -43.86,97.78 -97.78,97.78"
style="display:inline;fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42" />
<path
d="m 4178.1238,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-97.78 97.78,-97.78 53.91,0 97.78,43.86 97.78,97.78 0,53.92 -43.87,97.78 -97.78,97.78"
style="display:inline;fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44" />
<path
d="m 3869.1974,1669.7587 c -94.664,0 -171.6727,70.0387 -171.6727,156.1273 0,13.1035 11.6736,23.7205 26.0728,23.7205 h 291.1833 c 14.3993,0 26.0811,-10.617 26.0811,-23.7205 0,-86.0886 -77.0087,-156.1273 -171.6645,-156.1273"
style="fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.790115"
id="path84" />
</g>
</g>
<use
x="0"
y="0"
xlink:href="#g14961"
id="use14967"
transform="translate(5.3623619e-4,12.188046)"
width="100%"
height="100%" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4 KiB

117
src/assets/logo-reverse.svg Normal file
View file

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="234.46722"
height="234.46719"
viewBox="0 0 234.46722 234.46719"
sodipodi:docname="robot4-reverse.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
inkscape:export-filename="/home/user/projects/vytal-extension/src/assets/icon48.png"
inkscape:export-xdpi="19.653069"
inkscape:export-ydpi="19.653069"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6">
<linearGradient
id="linearGradient4879"
inkscape:swatch="solid">
<stop
style="stop-color:#7137c8;stop-opacity:1;"
offset="0"
id="stop4877" />
</linearGradient>
</defs>
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:pageshadow="2"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="1.8101934"
inkscape:cx="179.53883"
inkscape:cy="170.14757"
inkscape:window-width="1920"
inkscape:window-height="1012"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g10" />
<g
id="g8"
inkscape:groupmode="layer"
inkscape:label="ink_ext_XXXXXX"
transform="matrix(1.3333333,0,0,-1.3333333,-398.65882,383.92917)"
style="display:inline">
<g
id="g10"
transform="scale(0.1)"
style="display:inline">
<ellipse
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:112.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873"
cx="3869.1934"
cy="-2000.2168"
transform="scale(1,-1)"
rx="823.00214"
ry="823.00201" />
<ellipse
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:137.156;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873-3"
cx="3869.1934"
cy="-1955.2168"
transform="scale(1,-1)"
rx="675"
ry="450" />
<path
d="m 3560.2618,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-97.78 97.78,-97.78 53.92,0 97.78,43.86 97.78,97.78 0,53.92 -43.86,97.78 -97.78,97.78"
style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42" />
<path
d="m 4178.1238,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-97.78 97.78,-97.78 53.91,0 97.78,43.86 97.78,97.78 0,53.92 -43.87,97.78 -97.78,97.78"
style="display:inline;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44" />
<path
d="m 3859.6918,1705.3886 c -73.63,0 -140.07,39.16 -169.26,99.77 -7.55,15.66 -0.97,34.47 14.69,42.01 15.67,7.53 34.48,0.96 42.02,-14.69 18.77,-38.97 62.95,-64.14 112.55,-64.14 49.6,0 93.77,25.17 112.55,64.14 7.55,15.65 26.36,22.22 42.01,14.69 15.66,-7.54 22.24,-26.35 14.7,-42.01 -29.2,-60.61 -95.63,-99.77 -169.26,-99.77"
style="display:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path46" />
<rect
style="display:inline;fill:#ffffff;stroke:none;stroke-width:49.462;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000;fill-opacity:1"
id="rect5622-7"
width="112.47218"
height="939.31287"
x="4635.9731"
y="-2879.5088"
transform="scale(1,-1)"
rx="56.236088" />
<rect
style="display:inline;fill:#ffffff;stroke:none;stroke-width:49.462;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000;fill-opacity:1"
id="rect5622-7-5"
width="112.47218"
height="939.31287"
x="2989.9412"
y="-2879.4688"
transform="scale(1,-1)"
rx="56.236088" />
<path
d="m 3869.1974,1669.7587 c -94.664,0 -171.6727,70.0387 -171.6727,156.1273 0,13.1035 11.6736,23.7205 26.0728,23.7205 h 291.1833 c 14.3993,0 26.0811,-10.617 26.0811,-23.7205 0,-86.0886 -77.0087,-156.1273 -171.6645,-156.1273"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.790115"
id="path84"
sodipodi:nodetypes="cssssc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

108
src/assets/logo.svg Normal file
View file

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="325"
height="325"
viewBox="0 0 325 325"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6">
<linearGradient
id="linearGradient4879">
<stop
style="stop-color:#7137c8;stop-opacity:1;"
offset="0"
id="stop4877" />
</linearGradient>
</defs>
<rect
style="opacity:1;fill:#a55eea;fill-opacity:1;stroke:none;stroke-width:34.7388;stop-color:#000000"
id="rect858"
width="325"
height="325"
x="0"
y="0"
rx="60.611404" />
<g
id="g8"
transform="matrix(1.3333333,0,0,-1.3333333,-353.39243,429.19557)"
style="display:inline">
<g
id="g10"
transform="scale(0.1)"
style="display:inline">
<ellipse
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:165;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873"
cx="3869.1934"
cy="-2000.2168"
transform="scale(1,-1)"
rx="823.00214"
ry="823.00201" />
<ellipse
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:130.049;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873-3"
cx="3869.1934"
cy="-1970.2167"
transform="scale(1,-1)"
rx="606.85437"
ry="450" />
<path
d="m 3859.6918,1705.3886 c -73.63,0 -140.07,39.16 -169.26,99.77 -7.55,15.66 -0.97,34.47 14.69,42.01 15.67,7.53 34.48,0.96 42.02,-14.69 18.77,-38.97 62.95,-64.14 112.55,-64.14 49.6,0 93.77,25.17 112.55,64.14 7.55,15.65 26.36,22.22 42.01,14.69 15.66,-7.54 22.24,-26.35 14.7,-42.01 -29.2,-60.61 -95.63,-99.77 -169.26,-99.77"
style="display:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path46" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:61.2155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="rect5622-7-5"
width="165.03194"
height="980.54431"
x="2963.6912"
y="-2905.7188"
transform="scale(1,-1)"
rx="82.515961" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:61.2155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="rect5622-7-5-2"
width="165.03194"
height="980.54431"
x="4609.6636"
y="-2905.7188"
transform="scale(1,-1)"
rx="82.515961" />
<g
id="g14963"
clip-path="none"
transform="translate(5.3623619e-4,12.188046)"
style="opacity:1">
<g
id="g14961">
<path
d="m 3560.2618,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-97.78 97.78,-97.78 53.92,0 97.78,43.86 97.78,97.78 0,53.92 -43.86,97.78 -97.78,97.78"
style="display:inline;fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42" />
<path
d="m 4178.1238,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-97.78 97.78,-97.78 53.91,0 97.78,43.86 97.78,97.78 0,53.92 -43.87,97.78 -97.78,97.78"
style="display:inline;fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path44" />
<path
d="m 3869.1974,1669.7587 c -94.664,0 -171.6727,70.0387 -171.6727,156.1273 0,13.1035 11.6736,23.7205 26.0728,23.7205 h 291.1833 c 14.3993,0 26.0811,-10.617 26.0811,-23.7205 0,-86.0886 -77.0087,-156.1273 -171.6645,-156.1273"
style="fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.790115"
id="path84" />
</g>
</g>
<use
x="0"
y="0"
xlink:href="#g14961"
id="use14967"
transform="translate(5.3623619e-4,12.188046)"
width="100%"
height="100%" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

102
src/assets/logoHover.svg Normal file
View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="325"
height="325"
viewBox="0 0 325 325"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6">
<linearGradient
id="linearGradient4879">
<stop
style="stop-color:#7137c8;stop-opacity:1;"
offset="0"
id="stop4877" />
</linearGradient>
</defs>
<rect
style="opacity:1;fill:#a55eea;fill-opacity:1;stroke:none;stroke-width:34.7388;stop-color:#000000"
id="rect858"
width="325"
height="325"
x="0"
y="0"
rx="60.611404" />
<g
id="g8"
transform="matrix(1.3333333,0,0,-1.3333333,-353.39243,429.19557)"
style="display:inline">
<g
id="g10"
transform="scale(0.1)"
style="display:inline">
<ellipse
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:165;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873"
cx="3869.1934"
cy="-2000.2168"
transform="scale(1,-1)"
rx="823.00214"
ry="823.00201" />
<ellipse
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:130.049;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path4873-3"
cx="3869.1934"
cy="-2030.2167"
transform="scale(1,-1)"
rx="606.85437"
ry="450" />
<path
d="m 3859.6918,1705.3886 c -73.63,0 -140.07,39.16 -169.26,99.77 -7.55,15.66 -0.97,34.47 14.69,42.01 15.67,7.53 34.48,0.96 42.02,-14.69 18.77,-38.97 62.95,-64.14 112.55,-64.14 49.6,0 93.77,25.17 112.55,64.14 7.55,15.65 26.36,22.22 42.01,14.69 15.66,-7.54 22.24,-26.35 14.7,-42.01 -29.2,-60.61 -95.63,-99.77 -169.26,-99.77"
style="display:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path46" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:61.2155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="rect5622-7-5"
width="165.03194"
height="980.54431"
x="2963.6912"
y="-2905.7188"
transform="scale(1,-1)"
rx="82.515961" />
<rect
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:61.2155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="rect5622-7-5-2"
width="165.03194"
height="980.54431"
x="4609.6636"
y="-2905.7188"
transform="scale(1,-1)"
rx="82.515961" />
<g
id="g14963"
clip-path="none"
transform="translate(5.3623619e-4,72.188046)"
style="opacity:1"
mask="none">
<g
id="g14961">
<path
d="m 3560.2618,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-14.6029 97.78,-14.6029 53.92,0 97.78,-39.3171 97.78,14.6029 0,53.92 -43.86,97.78 -97.78,97.78"
style="display:inline;fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path42"
mask="none" />
<path
d="m 3869.1974,1669.7587 c -94.664,0 -171.6727,70.0387 -171.6727,156.1273 0,13.1035 11.6736,23.7205 26.0728,23.7205 h 291.1833 c 14.3993,0 26.0811,-10.617 26.0811,-23.7205 0,-86.0886 -77.0087,-156.1273 -171.6645,-156.1273"
style="fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.790115"
id="path84" />
<path
d="m 4178.1238,2126.2986 c -53.92,0 -97.78,-43.86 -97.78,-97.78 0,-53.92 43.86,-14.6029 97.78,-14.6029 53.92,0 97.78,-39.3171 97.78,14.6029 0,53.92 -43.86,97.78 -97.78,97.78"
style="display:inline;fill:#a55eea;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path2301"
mask="none" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4 KiB

69
src/assets/logoText.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="28.742722mm"
height="6.6145835mm"
viewBox="0 0 28.742718 6.6145835"
version="1.1"
id="svg2591"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="logoText.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview2593"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
inkscape:document-units="mm"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="0.77682379"
inkscape:cx="243.94206"
inkscape:cy="197.59951"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="1920"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2588" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-49.891827,-60.233696)">
<g
aria-label="VYTAL"
id="text3864"
style="font-weight:bold;font-size:35.2778px;line-height:2.95;font-family:Quicksand;-inkscape-font-specification:'Quicksand Bold';letter-spacing:0.804333px;fill:#333333;stroke-width:0.264583"
transform="matrix(0.26434209,0,0,0.26434209,36.703317,44.311395)">
<path
d="m 69.506288,60.315107 q 0.881945,0 1.516945,0.599723 0.670278,0.564445 0.670278,1.44639 0,0.458611 -0.211666,0.9525 l -8.713617,20.39057 q -0.317501,0.705556 -0.917223,1.058334 -0.564445,0.3175 -1.164168,0.3175 -0.564444,-0.03528 -1.093611,-0.352778 -0.529167,-0.352778 -0.81139,-0.987779 L 50.068219,63.278443 q -0.105833,-0.211667 -0.141111,-0.423334 -0.03528,-0.246945 -0.03528,-0.458611 0,-1.023057 0.740834,-1.552224 0.740834,-0.564445 1.411112,-0.564445 1.340556,0 1.940279,1.375835 l 7.725839,18.168067 -1.234723,0.03528 7.090838,-18.203345 q 0.599722,-1.340557 1.940279,-1.340557 z"
id="path52266" />
<path
d="m 91.935895,60.279829 q 0.811389,0 1.446389,0.635001 0.670279,0.599722 0.670279,1.552223 0,0.3175 -0.105834,0.670278 -0.07055,0.317501 -0.282222,0.635001 l -8.008061,11.465285 0.635,-2.434168 v 10.124729 q 0,0.917223 -0.635,1.552223 -0.599723,0.599723 -1.411112,0.599723 -0.881945,0 -1.516946,-0.599723 -0.599722,-0.635 -0.599722,-1.552223 v -9.842507 l 0.282222,1.12889 -7.620005,-10.124729 q -0.352778,-0.458611 -0.493889,-0.881945 -0.141111,-0.423334 -0.141111,-0.776112 0,-0.9525 0.740833,-1.552223 0.740834,-0.599723 1.516946,-0.599723 0.987778,0 1.728612,0.987779 l 6.773338,9.348617 -0.987778,-0.141111 6.24417,-9.136951 q 0.740834,-1.058334 1.763891,-1.058334 z"
id="path52268" />
<path
d="m 106.74541,85.080124 q -0.98778,0 -1.62278,-0.599723 -0.635,-0.635 -0.635,-1.552223 V 62.467053 h 4.58612 v 20.461125 q 0,0.917223 -0.67028,1.552223 -0.635,0.599723 -1.65806,0.599723 z M 98.949019,64.44261 q -0.917223,0 -1.552223,-0.564445 -0.599723,-0.564445 -0.599723,-1.481667 0,-0.917223 0.599723,-1.44639 0.635,-0.564445 1.552223,-0.564445 h 15.663341 q 0.91723,0 1.51695,0.564445 0.635,0.564444 0.635,1.481667 0,0.917223 -0.635,1.481668 -0.59972,0.529167 -1.51695,0.529167 z"
id="path52270" />
<path
d="m 128.57525,65.924278 -7.62,17.921123 c -0.16463,0.446852 -0.42334,0.79963 -0.77611,1.058334 -0.32926,0.235185 -0.6938,0.352778 -1.09362,0.352778 -0.635,0 -1.10537,-0.176389 -1.41111,-0.529167 -0.30574,-0.352778 -0.45861,-0.787871 -0.45861,-1.305279 0,-0.211667 0.0353,-0.435093 0.10583,-0.670278 l 8.78418,-21.096125 c 0.18815,-0.470371 0.47037,-0.834908 0.84666,-1.093612 0.39982,-0.258704 0.82315,-0.364537 1.27,-0.3175 0.42333,0 0.81139,0.129352 1.16417,0.388055 0.3763,0.235185 0.64676,0.576204 0.81139,1.023057 l 8.67834,20.672791 c 0.11759,0.305741 0.17639,0.587964 0.17639,0.846668 0,0.635 -0.21167,1.140648 -0.635,1.516945 -0.39981,0.376297 -0.84667,0.564445 -1.34056,0.564445 -0.42333,0 -0.81139,-0.129352 -1.16417,-0.388056 -0.32925,-0.258704 -0.58796,-0.611482 -0.77611,-1.058334 L 127.5522,66.135944 Z"
id="path52272"
sodipodi:nodetypes="cccssscccccccscscccc" />
<path
d="m 156.47294,80.952621 q 0.91722,0 1.51694,0.599723 0.635,0.564445 0.635,1.481667 0,0.881945 -0.635,1.481668 -0.59972,0.564445 -1.51694,0.564445 h -11.46529 q -0.91722,0 -1.55222,-0.599723 -0.59973,-0.635 -0.59973,-1.552223 V 62.537609 q 0,-0.917223 0.635,-1.516946 0.63501,-0.635 1.62278,-0.635 0.84667,0 1.48167,0.635 0.67028,0.599723 0.67028,1.516946 v 19.014735 l -0.77611,-0.599723 z"
id="path52274" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View file

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 4520 787" style="enable-background:new 0 0 4520 787;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_00000101076283012793058550000013277607966434688140_);}
.st1{fill:#6D4AFF;}
.st2{fill:#1B1340;}
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#6D4AFF;}
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:url(#SVGID_00000143612414778509468690000005354010894178983867_);}
.st5{fill:url(#SVGID_00000164510369689970512730000008890151008062097281_);}
</style>
<g>
<defs>
<rect id="SVGID_1_" width="4520" height="787"/>
</defs>
<clipPath id="SVGID_00000124143326424118090040000000686822535870151078_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g style="clip-path:url(#SVGID_00000124143326424118090040000000686822535870151078_);">
<path class="st1" d="M3909.1,150h-223.4v483.9h88.5V513.4c0-11.7,4.7-23,13-31.3c8.3-8.3,19.5-12.9,31.2-12.9h90.7
c42.2,0,82.7-16.8,112.6-46.6c29.9-29.9,46.7-70.4,46.7-112.6c0.1-21-4-41.8-11.9-61.2c-8-19.4-19.7-37-34.5-51.9
c-14.8-14.9-32.4-26.7-51.8-34.7C3950.8,154.1,3930,150,3909.1,150L3909.1,150z M3978.7,308.8c0,9.9-1.9,19.7-5.8,28.9
c-3.8,9.2-9.4,17.5-16.4,24.5c-7,7-15.4,12.6-24.5,16.3c-9.2,3.8-19,5.7-28.9,5.7h-129.4V233.4h129.4c10,0,19.8,2,29,5.8
c9.2,3.8,17.5,9.4,24.5,16.5c7,7,12.6,15.4,16.3,24.6c3.8,9.2,5.7,19.1,5.6,29L3978.7,308.8z"/>
<path class="st1" d="M3374.9,632.1l-178.3-483.5h100.7l117.3,346c4.6,12.4,7.9,25.2,9.9,38.2h1c1.4-13.2,4.8-26,9.9-38.2
l117.6-346h101.3l-179.2,483.5H3374.9z"/>
<path class="st1" d="M4101.3,632.1V148.6h77.5l228.3,299.9c8.2,10.3,15.3,21.5,21.3,33.2h1.4c-1.5-14.6-2.3-29.2-2.2-43.9V148.6
h91.5v483.5h-77.5l-228.9-299.9c-8.1-10.4-15.2-21.5-21.2-33.2h-0.8c1.2,14.6,1.7,29.2,1.5,43.9v289.3H4101.3z"/>
<path class="st2" d="M1434.2,147.2h-223.4v483.9h88.5V510.6c0-11.7,4.7-23,12.9-31.3c8.3-8.3,19.5-12.9,31.2-12.9h90.7
c42.2,0,82.7-16.8,112.6-46.6s46.6-70.4,46.6-112.6c0.1-21-4-41.8-11.9-61.2c-8-19.4-19.7-37-34.5-51.9
c-14.8-14.9-32.4-26.7-51.8-34.7C1475.9,151.3,1455.2,147.2,1434.2,147.2L1434.2,147.2z M1503.9,306c0,9.9-1.9,19.7-5.8,28.9
c-3.8,9.2-9.4,17.5-16.4,24.5c-7,7-15.3,12.6-24.5,16.3c-9.2,3.8-19,5.7-28.9,5.7h-129.4V230.6h129.4c9.9,0,19.8,2,29,5.8
c9.2,3.8,17.5,9.4,24.5,16.5c7,7,12.6,15.4,16.3,24.6c3.8,9.2,5.7,19.1,5.6,29L1503.9,306z"/>
<path class="st2" d="M1607.4,631.3v-192c0-78.3,45.8-140.6,137.3-140.6c14.7-0.2,29.4,1.4,43.7,4.8v79
c-10.4-0.7-19.9-0.7-23.6-0.7c-48.5,0-69.7,22.2-69.7,67.2v182.4H1607.4z"/>
<path class="st2" d="M1814.6,468.3c0-96.3,72.8-169.7,174-169.7c101.2,0,173.9,73.5,173.9,169.7c0,96.3-72.8,170.5-173.9,170.5
S1814.6,564.7,1814.6,468.3z M2075.9,468.3c0-54.7-36.7-93.6-87.3-93.6c-50.6,0-87.4,38.8-87.4,93.6c0,54.7,36.7,93.6,87.4,93.6
C2039.3,561.9,2075.9,523.8,2075.9,468.3L2075.9,468.3z"/>
<path class="st2" d="M2417.5,375.4h-94.9v121.3c0,42.3,15.2,61.6,58.8,61.6c4.2,0,14.6,0,27.8-0.7v71.5
c-16.7,4.8-33.9,7.3-51.3,7.6c-73.5,0-123.4-44.3-123.4-128.2V375.4h-58.8v-69.7h14.6c11.7,0,23-4.7,31.2-12.9
c8.3-8.3,12.9-19.5,12.9-31.2v-66.3h88.1v110.2h94.9V375.4z"/>
<path class="st2" d="M2443.9,468.3c0-96.3,72.8-169.7,173.9-169.7c101.1,0,174,73.5,174,169.7c0,96.3-72.8,170.5-174,170.5
S2443.9,564.7,2443.9,468.3z M2705.2,468.3c0-54.7-36.7-93.6-87.4-93.6s-87.3,38.8-87.3,93.6c0,54.7,36.7,93.6,87.3,93.6
C2668.4,561.9,2705.2,523.8,2705.2,468.3z"/>
<path class="st2" d="M2837.5,631.3V445.8c0-86,54.8-147.6,152.5-147.6c97.8,0,151.8,62,151.8,147.6v185h-87.3V453.1
c0-47.8-21.5-77.6-64.5-77.6s-64.4,29.9-64.4,77.6v178.2H2837.5z"/>
<path class="st3" d="M346.1,740.3c32.8,59.3,116.9,62.6,154,5.9l346.7-528.4c36.8-56,1.6-131.2-65-138.8L100.4,0.9
C27.7-7.5-24,69.8,11.3,133.8L346.1,740.3z"/>
<linearGradient id="SVGID_00000083796956185287615240000010885015769944861357_" gradientUnits="userSpaceOnUse" x1="536.4819" y1="1113.179" x2="292.8189" y2="64.084" gradientTransform="matrix(1 0 0 -1 0 788)">
<stop offset="0.4799" style="stop-color:#24ECC6;stop-opacity:0"/>
<stop offset="0.9944" style="stop-color:#24ECC6"/>
</linearGradient>
<path style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#SVGID_00000083796956185287615240000010885015769944861357_);" d="
M346.1,740.3c32.8,59.3,116.9,62.6,154,5.9l346.7-528.4c36.8-56,1.6-131.2-65-138.8L100.4,0.8C27.8-7.5-24,69.7,11.4,133.7
L346.1,740.3z"/>
<linearGradient id="SVGID_00000005978595599017039650000002259067875620926859_" gradientUnits="userSpaceOnUse" x1="759.6771" y1="79.3122" x2="219.4247" y2="1003.199" gradientTransform="matrix(1 0 0 -1 0 788)">
<stop offset="6.601250e-02" style="stop-color:#ABFFEF"/>
<stop offset="0.4499" style="stop-color:#CAC9FF"/>
<stop offset="1" style="stop-color:#6D4AFF"/>
</linearGradient>
<path style="fill:url(#SVGID_00000005978595599017039650000002259067875620926859_);" d="M396.4,638.7L365.6,685
c-12.5,18.7-40.4,17.6-51.2-2.1l31.7,57.5c5.7,10.2,12.8,18.8,21.1,25.7l0,0c39.3,33,102.2,27.1,133-19.8l346.7-528.4
c36.8-56,1.6-131.2-65-138.8L100.4,0.9C27.7-7.5-24,69.8,11.3,133.8l2.7,4.9l580.1,67.1c37,4.3,56.5,46,36,77.1L396.4,638.7z"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.3 KiB

14
src/assets/surfShark.svg Normal file
View file

@ -0,0 +1,14 @@
<svg width="138" height="32" viewBox="0 0 138 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M131.601 9.89524C131.601 11.6485 133.023 13.0909 134.792 13.0909C136.561 13.0909 138 11.6485 138 9.89524C138 8.13329 136.561 6.69092 134.792 6.69092C133.023 6.69092 131.601 8.13329 131.601 9.89524ZM132.338 9.89524C132.338 8.47877 133.413 7.37324 134.792 7.37324C136.17 7.37324 137.246 8.47877 137.246 9.89524C137.246 11.3031 136.17 12.4086 134.792 12.4086C133.413 12.4086 132.338 11.3031 132.338 9.89524ZM135.312 11.5967H136.222L135.529 10.2666C135.928 10.0939 136.196 9.7225 136.196 9.26474C136.196 8.64288 135.676 8.14193 135.009 8.14193H133.638V11.5967H134.462V10.3962H134.714L135.312 11.5967ZM134.462 9.7225V8.81561H134.861C135.173 8.81561 135.364 8.98835 135.364 9.27337C135.364 9.54976 135.173 9.7225 134.861 9.7225H134.462Z" fill="#222E3A"/>
<path d="M129.761 13.4249H125.658L121.648 17.737V6.69092H118.512V25.0182H121.648V21.9549L122.946 20.5882L126.011 25.0182H129.856L125.115 18.3026L129.761 13.4249Z" fill="#222E3A"/>
<path d="M117.348 13.3923C117.115 13.3688 116.89 13.3923 116.634 13.3923C115.656 13.3923 114.067 13.6276 113.369 15.1574V13.3923H110.367V25.0182H113.462V19.723C113.462 17.2284 114.764 16.3018 116.346 16.3018C116.626 16.3018 117.348 16.3018 117.348 16.3018V13.3923Z" fill="#222E3A"/>
<path d="M98.4417 21.6324C98.4417 23.3939 99.9395 25.0182 102.397 25.0182C104.105 25.0182 105.205 24.5228 105.79 23.6306L105.896 25.0182H108.622V23.196V17.6598C108.622 15.395 107.265 13.3818 103.614 13.3818C100.525 13.3818 98.8629 15.3264 98.6757 17.0879L101.437 17.6598C101.531 16.6761 102.28 15.8296 103.637 15.8296C104.948 15.8296 105.58 16.4931 105.58 17.2938C105.58 17.6827 105.369 17.7205 104.714 17.812L101.882 18.2238C99.9629 18.4983 98.4417 19.6193 98.4417 21.6324ZM103.052 22.7534C102.046 22.7534 101.554 22.1128 101.554 21.4494C101.554 20.5801 102.186 20.1454 102.982 20.0311L105.58 19.6422V20.4279C105.58 22.4182 104.363 22.7534 103.052 22.7534Z" fill="#222E3A"/>
<path d="M89.9086 18.2083C89.9786 16.9359 90.7482 15.9462 92.0542 15.9462C93.5468 15.9462 94.1765 16.9594 94.1765 18.2554V25.0182H97.2782V17.7135C97.2782 15.1686 95.9256 13.4095 93.0104 13.4095C91.9143 13.4095 90.6549 13.4956 89.9086 14.391V6.69092H86.8069V25.0182H89.9086V18.2083Z" fill="#222E3A"/>
<path d="M76.3354 21.672C76.4765 22.9267 77.6517 25.0182 81.1304 25.0182C84.1625 25.0182 85.6433 23.2404 85.6433 21.4479C85.6433 19.8347 84.4916 18.5128 82.2116 18.0646L80.5663 17.7286C79.9317 17.6165 79.5086 17.2804 79.5086 16.7427C79.5086 16.1153 80.1667 15.6448 80.9894 15.6448C82.3056 15.6448 82.7992 16.4738 82.8933 17.1236L85.5023 16.5635C85.3613 15.3759 84.2565 13.3818 80.9659 13.3818C78.4744 13.3818 76.641 15.0175 76.641 16.9892C76.641 18.5352 77.6517 19.8123 79.8847 20.2828L81.4125 20.6189C82.3057 20.7982 82.6582 21.2015 82.6582 21.6944C82.6582 22.2769 82.1646 22.7923 81.1304 22.7923C79.7671 22.7923 79.0855 21.9857 79.015 21.1118L76.3354 21.672Z" fill="#222E3A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M73.1867 11.3243C73.1863 11.3085 73.1861 11.2926 73.1861 11.2766C73.1861 10.2323 74.0326 9.38572 75.0768 9.38572H75.7538V6.69092H74.2274C71.8662 6.69092 70.0876 8.4657 70.0876 10.9972V13.3934H68.1912V16.3027H70.0876V25.0182H73.1867V16.3027H75.7538V13.3934H73.1867V11.3352C73.1867 11.3316 73.1867 11.3279 73.1867 11.3243Z" fill="#222E3A"/>
<path d="M67.0275 13.3923C66.7948 13.3688 66.5692 13.3923 66.3132 13.3923C65.3359 13.3923 63.7465 13.6276 63.0484 15.1574V13.3923H60.0466V25.0182H63.1415V19.723C63.1415 17.2284 64.4436 16.3018 66.0259 16.3018C66.3052 16.3018 67.0275 16.3018 67.0275 16.3018V13.3923Z" fill="#222E3A"/>
<path d="M55.4684 25.0182H58.3014V22.9218V13.3818H55.213V20.1658C55.213 21.5084 54.3784 22.1444 53.0084 22.1444C51.5687 22.1444 50.9185 21.108 50.9185 19.8125V13.3818H47.8301V20.4485C47.8301 22.9689 49.4091 25.0182 52.1724 25.0182C53.3799 25.0182 54.7486 24.8533 55.3755 23.7698L55.4684 25.0182Z" fill="#222E3A"/>
<path d="M46.418 11.1817C46.02 9.22919 44.3786 6.69092 40.101 6.69092C36.7684 6.69092 33.9581 9.03394 33.9581 12.1092C33.9581 14.7206 35.7736 16.5023 38.5839 17.0637L41.0461 17.5518C42.4139 17.8203 43.1849 18.8922 43.1849 19.8928C43.1849 21.1132 42.1652 22.0162 40.3248 22.0162C37.8378 22.0162 36.6192 20.4786 36.47 18.7701L33.2866 19.6C33.5602 22.065 35.6244 25.0182 40.3 25.0182C44.4035 25.0182 46.6667 22.3335 46.6667 19.6732C46.6667 17.2325 44.9506 14.8915 41.7424 14.2813L39.2803 13.8176C37.987 13.5735 37.3653 12.8169 37.3653 11.8651C37.3653 10.718 38.4596 9.6685 40.1259 9.6685C42.3642 9.6685 43.16 11.1573 43.3341 12.1092L46.418 11.1817Z" fill="#222E3A"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.266 0.00279935C20.2294 0.00187183 20.1927 0.000941714 20.156 0H12.8113C8.0034 0.259382 5.98238 3.05263 5.44016 4.54022C3.33323 10.8557 2.02219 19.0357 1.07579 24.9405C1.05733 25.0557 1.03901 25.17 1.02083 25.2834L0.713349 28.0899C0.695109 28.533 0.736508 29.0128 0.855903 29.4787C1.44645 31.1909 3.22706 32.6333 7.14993 31.1963L7.15035 31.1987C10.856 29.5826 15.2333 27.5744 19.76 25.3215C22.3371 23.8312 26.1122 20.4051 26.3058 16.0775C26.2709 12.8677 26.1634 9.50253 25.9454 6.22756L25.9441 6.23004L25.944 6.2074C25.9261 5.9384 25.9074 5.62713 25.888 5.3031C25.8506 4.68082 25.8104 4.01145 25.7672 3.50396C25.7032 3.15213 25.6213 2.83407 25.5202 2.5467C24.8914 1.14372 23.6596 0.467181 22.3602 0.143657C21.7676 0.0409009 21.0396 0.0224302 20.266 0.00279935ZM19.9857 6.53458C19.9857 6.17157 19.6914 5.87729 19.3284 5.87729C15.1537 5.87729 11.7695 9.26152 11.7695 13.4362V15.9662C11.7695 18.2101 9.95044 20.0292 7.70654 20.0292C7.33255 20.0292 7.02938 20.3324 7.02938 20.7063V22.7745C7.02938 23.1375 7.32366 23.4318 7.68667 23.4318C11.8613 23.4318 15.2456 20.0476 15.2456 15.8729V13.3429C15.2456 11.099 17.0646 9.27993 19.3085 9.27993C19.6825 9.27993 19.9857 8.97675 19.9857 8.60277V6.53458Z" fill="#178A9E"/>
<path d="M19.3283 5.8772C19.6913 5.8772 19.9856 6.17148 19.9856 6.53449V8.60268C19.9856 8.97666 19.6824 9.27984 19.3084 9.27984V9.27984C17.0645 9.27984 15.2455 11.0989 15.2455 13.3428V16.0275C15.2455 20.2022 11.8613 23.5864 7.68659 23.5864V23.5864C7.32358 23.5864 7.0293 23.2921 7.0293 22.9291L7.0293 20.8609C7.0293 20.4869 7.33247 20.1838 7.70646 20.1838V20.1838C9.95036 20.1838 11.7694 18.3647 11.7694 16.1208V13.4361C11.7694 9.26143 15.1536 5.8772 19.3283 5.8772V5.8772Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View file

@ -20,3 +20,5 @@ chrome.tabs.onActivated.addListener((tab) => {
chrome.tabs.onUpdated.addListener((tabId) => { chrome.tabs.onUpdated.addListener((tabId) => {
attachTab(tabId) attachTab(tabId)
}) })
chrome.runtime.setUninstallURL('https://vytal.io/scan')

View file

@ -1,6 +1,6 @@
{ {
"manifest_version": 3, "manifest_version": 3,
"version": "2.1.8", "version": "2.1.10",
"name": "__MSG_extName__", "name": "__MSG_extName__",
"description": "__MSG_extDesc__", "description": "__MSG_extDesc__",
"author": "__MSG_extName__", "author": "__MSG_extName__",

View file

@ -2,6 +2,7 @@ import { useState } from 'react'
import { ThemeProvider, Flex, Box } from 'theme-ui' import { ThemeProvider, Flex, Box } from 'theme-ui'
import { theme } from 'theme' import { theme } from 'theme'
import { import {
Home,
Wifi, Wifi,
MessageSquare, MessageSquare,
FileText, FileText,
@ -10,15 +11,23 @@ import {
Info, Info,
Settings, Settings,
Sliders, Sliders,
UserCheck,
} from 'react-feather' } from 'react-feather'
import VpnIcon from '../assets/vpnIcon.svg' import VpnIcon from '../assets/vpnIcon.svg'
import TabItem from './TabItem' import TabItem from './TabItem'
import HomePage from './pages/homePage'
import LocationPage from './pages/locationPage' import LocationPage from './pages/locationPage'
import AutofillPage from './pages/autofillPage'
import WebRtcPage from './pages/webRtcPage'
import UserAgentPage from './pages/userAgentPage' import UserAgentPage from './pages/userAgentPage'
import OptionsPage from './pages/optionsPage'
import VpnPage from './pages/vpnPage' import VpnPage from './pages/vpnPage'
import SettingsPage from './pages/settingsPage' import SettingsPage from './pages/settingsPage'
import InfoPage from './pages/infoPage'
import '../assets/global.css' import '../assets/global.css'
import Logo from '../assets/logo-no-bg.svg'
const Popup = () => { const Popup = () => {
const [tab, setTab] = useState('location') const [tab, setTab] = useState('location')
@ -34,51 +43,86 @@ const Popup = () => {
}} }}
> >
{/* <TabItem {/* <TabItem
title="Home"
Icon={<Home size={20} />}
// Icon={<img src={Logo} height="20" width="20" alt="logo" />}
active={tab === 'home'}
onClick={() => setTab('home')}
/> */}
<TabItem
title="Connection Info"
Icon={<Wifi size={20} />} Icon={<Wifi size={20} />}
active={tab === 'vpn'} active={tab === 'vpn'}
onClick={() => setTab('vpn')} onClick={() => setTab('vpn')}
/> */} />
<TabItem <TabItem
title="Location Data"
Icon={<MapPin size={20} />} Icon={<MapPin size={20} />}
active={tab === 'location'} active={tab === 'location'}
onClick={() => setTab('location')} onClick={() => setTab('location')}
/> />
{/* <TabItem
Icon={<FileText size={20} />}
active={tab === 'vpn'}
onClick={() => setTab('vpn')}
/> */}
{/* <TabItem
Icon={<MessageSquare size={20} />}
active={tab === 'vpn'}
onClick={() => setTab('vpn')}
/> */}
<TabItem <TabItem
title="Captcha Solver"
Icon={<UserCheck size={20} />}
active={tab === 'vpn'}
onClick={() => setTab('vpn')}
/>
<TabItem
title="Autofill Data"
Icon={<FileText size={20} />}
active={tab === 'autofill'}
onClick={() => setTab('autofill')}
/>
<TabItem
title="WebRTC Policy"
Icon={<MessageSquare size={20} />}
active={tab === 'webRtc'}
onClick={() => setTab('webRtc')}
/>
<TabItem
title="User Agent"
Icon={<Globe size={20} />} Icon={<Globe size={20} />}
active={tab === 'userAgent'} active={tab === 'userAgent'}
onClick={() => setTab('userAgent')} onClick={() => setTab('userAgent')}
/> />
<TabItem
title="Other Options"
Icon={<Sliders size={20} />}
active={tab === 'options'}
onClick={() => setTab('options')}
/>
{/* <TabItem {/* <TabItem
Icon={<img src={VpnIcon} className="App-logo" alt="logo" />} title="VPN Recommendations"
Icon={<img src={VpnIcon} alt="VPN Icon" />}
active={tab === 'vpn'} active={tab === 'vpn'}
onClick={() => setTab('vpn')} onClick={() => setTab('vpn')}
/> */} /> */}
{/* <TabItem
Icon={<Sliders size={20} />}
active={tab === 'settings'}
onClick={() => setTab('settings')}
/> */}
<TabItem <TabItem
Icon={<Info size={20} />} title="Settings"
Icon={<Settings size={20} />}
active={tab === 'settings'} active={tab === 'settings'}
onClick={() => setTab('settings')} onClick={() => setTab('settings')}
/> />
<Flex sx={{ flexGrow: 1, alignItems: 'flex-end' }}>
<TabItem
title="info"
// Icon={<img src={Logo} height="20" width="20" alt="logo" />}
Icon={<Info size={20} />}
active={tab === 'info'}
onClick={() => setTab('info')}
/>
</Flex>
</Flex> </Flex>
<Box sx={{ m: '16px', width: '100%' }}> <Box sx={{ m: '16px', width: '100%' }}>
<LocationPage tab={tab} /> <HomePage tab={tab} setTab={setTab} />
<LocationPage tab={tab} setTab={setTab} />
<AutofillPage tab={tab} />
<WebRtcPage tab={tab} />
<UserAgentPage tab={tab} /> <UserAgentPage tab={tab} />
<OptionsPage tab={tab} />
{/* <VpnPage tab={tab} /> */} {/* <VpnPage tab={tab} /> */}
<SettingsPage tab={tab} /> <SettingsPage tab={tab} setTab={setTab} />
<InfoPage tab={tab} setTab={setTab} />
</Box> </Box>
</Flex> </Flex>
</ThemeProvider> </ThemeProvider>

View file

@ -1,14 +1,16 @@
import React from 'react' import React from 'react'
import { Button } from 'theme-ui' import { Button } from 'theme-ui'
interface IconProps { interface IconProps {
title: string
Icon: React.ReactNode Icon: React.ReactNode
active?: boolean active?: boolean
onClick: () => void onClick: () => void
} }
const TabItem = ({ Icon, onClick, active }: IconProps) => { const TabItem = ({ title, Icon, onClick, active }: IconProps) => {
return ( return (
<Button <Button
title={title}
sx={{ sx={{
cursor: 'pointer', cursor: 'pointer',
width: '36px', width: '36px',
@ -18,6 +20,7 @@ const TabItem = ({ Icon, onClick, active }: IconProps) => {
justifyContent: 'center', justifyContent: 'center',
color: 'background', color: 'background',
backgroundColor: active ? 'primaryDark' : 'primary', backgroundColor: active ? 'primaryDark' : 'primary',
transition: '0.2s',
':hover': { ':hover': {
backgroundColor: 'primaryDark', backgroundColor: 'primaryDark',
}, },

View file

@ -2,7 +2,7 @@ import { Box } from 'theme-ui'
interface PageProps { interface PageProps {
isCurrentTab: boolean isCurrentTab: boolean
title: string title?: string
children: React.ReactNode children: React.ReactNode
} }
@ -13,9 +13,11 @@ const Page = ({ isCurrentTab, title, children }: PageProps) => {
display: isCurrentTab ? 'block' : 'none', display: isCurrentTab ? 'block' : 'none',
}} }}
> >
<Box sx={{ fontSize: '21px', mb: '12px', fontWeight: '600' }}> {title && (
{title} <Box sx={{ fontSize: '21px', mb: '12px', fontWeight: '600' }}>
</Box> {title}
</Box>
)}
{children} {children}
</Box> </Box>
) )

View file

@ -0,0 +1,27 @@
import { Button, Link, Text } from 'theme-ui'
import Checkbox from 'popup/components/CheckBox'
import Page from 'popup/components/Page'
interface AutofillPageProps {
tab: string
}
const AutofillPage = ({ tab }: AutofillPageProps) => {
return (
<Page isCurrentTab={tab === 'autofill'} title={'Autofill Data'}>
<Checkbox
title="Autofill Address Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Autofill Credit Card Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
</Page>
)
}
export default AutofillPage

View file

@ -0,0 +1,19 @@
import { Box, Flex } from 'theme-ui'
interface InfoItemProps {
title: string
children: React.ReactNode
}
const InfoItem = ({ title, children }: InfoItemProps) => {
return (
<Box sx={{ mb: '12px' }}>
<Flex sx={{ fontWeight: '700', mb: '2px', fontSize: '14px' }}>
{title}
</Flex>
{children}
</Box>
)
}
export default InfoItem

View file

@ -0,0 +1,110 @@
import { useState } from 'react'
import { Image, Flex, Link, Text, Select, Box, Label } from 'theme-ui'
import Page from 'popup/components/Page'
import InfoItem from './InfoItem'
import Logo from 'assets/logo.svg'
import LogoHover from 'assets/logoHover.svg'
import LogoText from 'assets/logoText.svg'
interface HomePageProps {
tab: string
setTab: (tab: string) => void
}
const HomePage = ({ tab, setTab }: HomePageProps) => {
const [isHovered, setIsHovered] = useState(false)
return (
<Page isCurrentTab={tab === 'home'} title={''}>
<Flex
onMouseOver={() => setIsHovered(true)}
onMouseOut={() => setIsHovered(false)}
sx={{
alignItems: 'center',
justifyContent: 'center',
gap: '12px',
mb: '18px',
}}
>
<Image
src={isHovered ? LogoHover : Logo}
height="40"
width="40"
alt="logo"
/>
<Image src={LogoText} height="50" width="auto" alt="logo text" />
</Flex>
{/* <InfoItem title={'Hide Debugging Notification Bar'}>
While spoofing data a notification bar becomes visible. Hiding the bar
can be done by using the{' '}
<Text sx={{ fontStyle: 'italic', mr: '2px' }}>
--silent-debugger-extension-api
</Text>{' '}
flag.{' '}
<Link
variant="hover"
href={`https://www.chromium.org/developers/how-tos/run-chromium-with-flags`}
target="_blank"
>
Instructions on how to run chrome with flags
</Link>
.
</InfoItem> */}
<InfoItem title={'What is Vytal?'}>
Vytal does not change your IP address.
</InfoItem>
<InfoItem title={'Does Vytal change your IP address?'}>
Vytal does not change your IP address. To change your IP address you
will need a VPN or proxy.
</InfoItem>
<InfoItem title={'How to test the extension?'}>
You can test and compare Vytal and other spoofing extensions on{' '}
<Link variant="hover" href={`https://vytal.io/scan`} target="_blank">
vytal.io
</Link>
.
</InfoItem>
<InfoItem title={'Support Us'}>
If you like this extension and wish to support us you can{' '}
<Link
variant="hover"
href={`https://chrome.google.com/webstore/detail/vytal-spoof-timezone-loca/ncbknoohfjmcfneopnfkapmkblaenokb?utm_source=rate`}
target="_blank"
>
rate the extension
</Link>{' '}
or{' '}
<Link variant="hover" href={`https://vytal.io/donate`} target="_blank">
donate
</Link>
.
</InfoItem>
<Box sx={{ width: '100%' }}>
<Label htmlFor="type">Default Popup Page</Label>
<Select
name="type"
id="type"
// value={userAgentInfo}
// onChange={changeUserAgentInfo}
mb={'8px'}
>
{/* <option value="custom">Custom</option>
{Object.keys(userAgents).map((key) => (
<optgroup key={key} label={userAgents[key].title}>
{userAgents[key].values.map((key: any) => (
<option key={key.value} value={JSON.stringify(key)}>
{key.title}
</option>
))}
</optgroup>
))} */}
<option>Home</option>
<option>Location Data</option>
<option>Other Settings</option>
</Select>
</Box>
</Page>
)
}
export default HomePage

View file

@ -0,0 +1,103 @@
import { Button, Link, Text } from 'theme-ui'
import Page from 'popup/components/Page'
import InfoItem from './InfoItem'
interface InfoPageProps {
tab: string
setTab: (tab: string) => void
}
const InfoPage = ({ tab, setTab }: InfoPageProps) => {
return (
<Page isCurrentTab={tab === 'info'} title={'Info'}>
<InfoItem title={'Change IP Address'}>
Vytal does not change your IP address. To change your IP you will need a
VPN or proxy.
{/* <Button variant="text" onClick={() => setTab('vpn')}>
VPN or proxy
</Button>
. */}
</InfoItem>
<InfoItem title={'Hide Debugging Notification Bar'}>
While spoofing data a notification bar becomes visible. Hiding the bar
can be done by using the{' '}
<Text sx={{ fontStyle: 'italic', mr: '2px', whiteSpace: 'nowrap' }}>
--silent-debugger-extension-api
</Text>{' '}
flag.{' '}
<Link
variant="hover"
href={`https://www.chromium.org/developers/how-tos/run-chromium-with-flags`}
target="_blank"
>
Instructions on how to run chrome with flags
</Link>
.
</InfoItem>
{/* <InfoItem title={'Vytal vs Similar Extensions'}>
Vytal utilizes the debugger API to spoof data which is completely
undetectable. Other similar extensions rely on{' '}
<Link
variant="hover"
href={`https://palant.info/2020/12/10/how-anti-fingerprinting-extensions-tend-to-make-fingerprinting-easier/`}
target="_blank"
>
inferior script tag injections
</Link>
.
</InfoItem> */}
{/* <InfoItem title={'Test Extension'}>
You can test and compare Vytal and other spoofing extensions on{' '}
<Link variant="hover" href={`https://vytal.io/scan`} target="_blank">
vytal.io
</Link>
.
</InfoItem> */}
<InfoItem title={'Open Source'}>
Vytal is open source and the code can be viewed on{' '}
<Link
variant="hover"
href={'https://github.com/vytal-io'}
target="_blank"
>
Github
</Link>
.
</InfoItem>
<InfoItem title={'Support Us'}>
If you like this extension and wish to support us you can{' '}
<Link
variant="hover"
href={
'https://chrome.google.com/webstore/detail/vytal-spoof-timezone-loca/ncbknoohfjmcfneopnfkapmkblaenokb?utm_source=rate'
}
target="_blank"
>
rate the extension
</Link>{' '}
or{' '}
<Link variant="hover" href={'https://vytal.io/donate'} target="_blank">
donate
</Link>
.
</InfoItem>
<InfoItem title={'Contact Us'}>
You can reach us at{' '}
<Link variant="hover" href={'mailto:contact@vytal.io'} target="_blank">
contact@vytal.io
</Link>{' '}
or on{' '}
<Link
variant="hover"
href={'https://reddit.com/r/Vytal'}
target="_blank"
>
r/Vytal
</Link>
.
</InfoItem>
</Page>
)
}
export default InfoPage

View file

@ -9,13 +9,14 @@ import configurations from 'utils/configurations'
import getIp from 'utils/getIp' import getIp from 'utils/getIp'
import { ipData } from 'types' import { ipData } from 'types'
import { RotateCw } from 'react-feather' import { RotateCw } from 'react-feather'
import { polyfillCountryFlagEmojis } from "country-flag-emoji-polyfill"; import { polyfillCountryFlagEmojis } from 'country-flag-emoji-polyfill'
interface LocationPageProps { interface LocationPageProps {
tab: string tab: string
setTab: (tab: string) => void
} }
const LocationPage = ({ tab }: LocationPageProps) => { const LocationPage = ({ tab, setTab }: LocationPageProps) => {
const [browserDefault, setBrowserDefault] = useState(true) const [browserDefault, setBrowserDefault] = useState(true)
const [ipData, setIpData] = useState<ipData>() const [ipData, setIpData] = useState<ipData>()
const [ipInfo, setIpInfo] = useState('loading...') const [ipInfo, setIpInfo] = useState('loading...')
@ -25,7 +26,7 @@ const LocationPage = ({ tab }: LocationPageProps) => {
const [lon, setLongitude] = useState('') const [lon, setLongitude] = useState('')
const [configuration, setConfiguration] = useState('custom') const [configuration, setConfiguration] = useState('custom')
polyfillCountryFlagEmojis(); polyfillCountryFlagEmojis()
const reloadIp = useCallback(() => { const reloadIp = useCallback(() => {
setIpInfo('loading...') setIpInfo('loading...')
@ -150,7 +151,7 @@ const LocationPage = ({ tab }: LocationPageProps) => {
return ( return (
<Page isCurrentTab={tab === 'location'} title={'Location Data'}> <Page isCurrentTab={tab === 'location'} title={'Location Data'}>
<Checkbox <Checkbox
title="Use browser default" title="Use Browser Defaults"
onChange={changeBrowserDefault} onChange={changeBrowserDefault}
checked={browserDefault} checked={browserDefault}
/> />
@ -160,6 +161,11 @@ const LocationPage = ({ tab }: LocationPageProps) => {
pointerEvents: browserDefault ? 'none' : 'auto', pointerEvents: browserDefault ? 'none' : 'auto',
}} }}
> >
<Checkbox
title="Use Debugger API"
onChange={changeBrowserDefault}
checked={browserDefault}
/>
<Flex <Flex
sx={{ sx={{
border: '1px solid', border: '1px solid',
@ -257,6 +263,10 @@ const LocationPage = ({ tab }: LocationPageProps) => {
> >
Vytal does not change your IP address. To change your IP address you Vytal does not change your IP address. To change your IP address you
will need a VPN or proxy. will need a VPN or proxy.
{/* <Button variant="text" onClick={() => setTab('vpn')}>
VPN or proxy
</Button>
. */}
</Box> </Box>
</Page> </Page>
) )

View file

@ -0,0 +1,97 @@
import { Button, Link, Text } from 'theme-ui'
import Checkbox from 'popup/components/CheckBox'
import Page from 'popup/components/Page'
interface OptionsPageProps {
tab: string
}
const OptionsPage = ({ tab }: OptionsPageProps) => {
return (
<Page isCurrentTab={tab === 'options'} title={'Other Options'}>
{/* <Checkbox
title="Network Prediction Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Alternate Error Pages Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Password Saving Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/> */}
<Checkbox
title="Safe Browsing Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Safe Browsing Extended Reporting Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Search Suggest Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Spelling Service Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Translation Service Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Ad Measurement Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Do Not Track Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Fledge Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Hyperlink Auditing Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Protected Content Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Referrers Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Third Party Cookies Allowed"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Checkbox
title="Topics Enabled"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
</Page>
)
}
export default OptionsPage

View file

@ -1,72 +1,49 @@
import { Link, Text } from 'theme-ui' import { Button, Link, Text, Box, Label, Select } from 'theme-ui'
import Page from 'popup/components/Page' import Page from 'popup/components/Page'
import InfoItem from './InfoItem' import Checkbox from 'popup/components/CheckBox'
interface SettingsPageProps { interface SettingsPageProps {
tab: string tab: string
setTab: (tab: string) => void
} }
const SettingsPage = ({ tab }: SettingsPageProps) => { const SettingsPage = ({ tab, setTab }: SettingsPageProps) => {
return ( return (
<Page isCurrentTab={tab === 'settings'} title={'Info'}> <Page isCurrentTab={tab === 'settings'} title={'Settings'}>
<InfoItem title={'Hide Debugging Notification Bar'}> <Checkbox
While spoofing data a notification bar becomes visible. Hiding the bar title="Dark Mode"
can be done by using the{' '} // onChange={changeBrowserDefault}
<Text sx={{ fontStyle: 'italic', mr: '2px' }}> // checked={browserDefault}
--silent-debugger-extension-api />
</Text>{' '} <Box sx={{ width: '100%' }}>
flag.{' '} <Label
<Link htmlFor="type
variant="hover" "
href={`https://www.chromium.org/developers/how-tos/run-chromium-with-flags`}
target="_blank"
> >
Instructions on how to run chrome with flags Default Popup Page
</Link> </Label>
. <Select
</InfoItem> name="type"
<InfoItem title={'Change IP Address'}> id="type"
Vytal does not change your IP address. To change your IP address you // value={userAgentInfo}
will need a VPN or proxy. // onChange={changeUserAgentInfo}
</InfoItem> mb={'8px'}
{/* <InfoItem title={'Vytal vs Similar Extensions'}>
Vytal utilizes the debugger API to spoof data which is completely
undetectable. Other similar extensions rely on{' '}
<Link
variant="hover"
href={`https://palant.info/2020/12/10/how-anti-fingerprinting-extensions-tend-to-make-fingerprinting-easier/`}
target="_blank"
> >
inferior script tag injections {/* <option value="custom">Custom</option>
</Link> {Object.keys(userAgents).map((key) => (
. <optgroup key={key} label={userAgents[key].title}>
</InfoItem> */} {userAgents[key].values.map((key: any) => (
<InfoItem title={'Test Extension'}> <option key={key.value} value={JSON.stringify(key)}>
You can test and compare Vytal and other spoofing extensions on{' '} {key.title}
<Link variant="hover" href={`https://vytal.io/#/scan`} target="_blank"> </option>
vytal.io ))}
</Link> </optgroup>
. ))} */}
</InfoItem> <option>Home</option>
<InfoItem title={'Support Us'}> <option>Location Data</option>
If you like this extension and wish to support us you can{' '} <option>Other Settings</option>
<Link </Select>
variant="hover" </Box>
href={`https://chrome.google.com/webstore/detail/vytal-spoof-timezone-loca/ncbknoohfjmcfneopnfkapmkblaenokb?utm_source=rate`}
target="_blank"
>
rate the extension
</Link>{' '}
or{' '}
<Link
variant="hover"
href={`https://vytal.io/#/donate`}
target="_blank"
>
donate
</Link>
.
</InfoItem>
</Page> </Page>
) )
} }

View file

@ -67,7 +67,7 @@ const UserAgentPage = ({ tab }: UserAgentPageProps) => {
return ( return (
<Page isCurrentTab={tab === 'userAgent'} title={'User Agent'}> <Page isCurrentTab={tab === 'userAgent'} title={'User Agent'}>
<Checkbox <Checkbox
title="Use browser default" title="Use Browser Defaults"
onChange={changeBrowserDefault} onChange={changeBrowserDefault}
checked={browserDefault} checked={browserDefault}
/> />
@ -77,6 +77,11 @@ const UserAgentPage = ({ tab }: UserAgentPageProps) => {
pointerEvents: browserDefault ? 'none' : 'auto', pointerEvents: browserDefault ? 'none' : 'auto',
}} }}
> >
<Checkbox
title="Use Debugger API"
onChange={changeBrowserDefault}
checked={browserDefault}
/>
<Box sx={{ width: '100%' }}> <Box sx={{ width: '100%' }}>
<Label htmlFor="type">Type</Label> <Label htmlFor="type">Type</Label>
<Select <Select

View file

@ -2,10 +2,11 @@ import { Box, Link } from 'theme-ui'
interface VpnItemProps { interface VpnItemProps {
url: string url: string
linkText: string
children: React.ReactNode children: React.ReactNode
} }
const VpnItem = ({ url, children }: VpnItemProps) => { const VpnItem = ({ url, linkText, children }: VpnItemProps) => {
return ( return (
<Link <Link
href={url} href={url}
@ -18,6 +19,7 @@ const VpnItem = ({ url, children }: VpnItemProps) => {
display: 'block', display: 'block',
textDecoration: 'none', textDecoration: 'none',
color: 'text', color: 'text',
transition: '0.2s',
'&:hover': { '&:hover': {
borderColor: 'primary', borderColor: 'primary',
}, },
@ -34,7 +36,7 @@ const VpnItem = ({ url, children }: VpnItemProps) => {
}, },
}} }}
> >
Learn more {linkText}
</Box> </Box>
</Link> </Link>
) )

View file

@ -1,8 +1,8 @@
import { Box, Image } from 'theme-ui' import { Box } from 'theme-ui'
import Page from 'popup/components/Page' import Page from 'popup/components/Page'
import VpnItem from './VpnItem' import VpnItem from './VpnItem'
import nordLogo from 'assets/nord.svg' // import nordLogo from 'assets/nord.svg'
import protonLogo from 'assets/proton.svg' // import surfSharkLogo from 'assets/surfShark.svg'
interface VpnPageProps { interface VpnPageProps {
tab: string tab: string
@ -11,18 +11,24 @@ interface VpnPageProps {
const VpnPage = ({ tab }: VpnPageProps) => { const VpnPage = ({ tab }: VpnPageProps) => {
return ( return (
<Page isCurrentTab={tab === 'vpn'} title={'VPN Recommendations'}> <Page isCurrentTab={tab === 'vpn'} title={'VPN Recommendations'}>
<VpnItem url="https://go.nordvpn.net/aff_c?offer_id=658&aff_id=79520"> <VpnItem
<Image src={nordLogo} alt="Vpn logo" variant="vpnLogo" /> url="https://go.nordvpn.net/aff_c?offer_id=658&aff_id=79520&source=v"
linkText="Click for 63% off discount"
>
{/* <Image src={nordLogo} alt="NordVPN logo" variant="vpnLogo" /> */}
<li>Verified zero-logs policy & no IP leaks</li> <li>Verified zero-logs policy & no IP leaks</li>
<li>5,600+ servers in 59 countries</li> <li>5,600+ servers in 59 countries</li>
<li>24/7 live chat support</li> <li>24/7 live chat support</li>
</VpnItem> </VpnItem>
<VpnItem url="https://go.getproton.me/aff_c?offer_id=26&aff_id=3825"> <VpnItem
<Image src={protonLogo} alt="Proton logo" variant="vpnLogo" /> url="https://get.surfshark.net/aff_c?offer_id=926&aff_id=17240&source=v"
linkText="Click for 82% off + 2 mo. FREE"
>
{/* <Image src={surfSharkLogo} alt="Surf Shark logo" variant="vpnLogo" /> */}
<Box> <Box>
<li>Verified zero-logs policy & no IP leaks</li> <li>Verified zero-logs policy & no IP leaks</li>
<li>1,885 servers in 67 countries</li> <li>3200+ servers in 100 countries</li>
<li>All apps are open-source & audited</li> <li>Unlimited device connections</li>
</Box> </Box>
</VpnItem> </VpnItem>
</Page> </Page>

View file

@ -0,0 +1,35 @@
import { ChangeEvent } from 'react'
import { Box, Label, Radio, Text } from 'theme-ui'
interface RadioButtonProps {
value: string
name: string
description: string
webRtcPolicy: string
onChange: (e: ChangeEvent<HTMLInputElement>) => void
}
const RadioButton = ({
value,
name,
description,
webRtcPolicy,
onChange,
}: RadioButtonProps) => {
return (
<>
<Label sx={{ cursor: 'pointer' }}>
<Radio
name="webRtcPolicy"
value={value}
onChange={onChange}
checked={webRtcPolicy === value}
/>
<Text sx={{ fontWeight: '700' }}>{name}</Text>
</Label>
<Box sx={{ ml: '32px', mb: '12px', fontSize: '12px' }}>{description}</Box>
</>
)
}
export default RadioButton

View file

@ -0,0 +1,68 @@
import { Button, Link, Text } from 'theme-ui'
import { useState, useEffect, ChangeEvent } from 'react'
// import handleWebRtcPolicy from './handleWebRtcPolicy'
import RadioButton from './RadioButton'
import Page from 'popup/components/Page'
interface WebRtcPageProps {
tab: string
}
const WebRtcPage = ({ tab }: WebRtcPageProps) => {
const [webRtcPolicy, setWebRtcPolicy] = useState('default')
useEffect(() => {
chrome.storage.local.get(['webRtcPolicy'], (storage) => {
storage.webRtcPolicy && setWebRtcPolicy(storage.webRtcPolicy)
})
}, [])
const changeRadioValue = (e: ChangeEvent<HTMLInputElement>) => {
// handleWebRtcPolicy(e.target.value)
setWebRtcPolicy(e.target.value)
}
return (
<Page isCurrentTab={tab === 'webRtc'} title={'WebRTC Policy'}>
<RadioButton
value={'default'}
name={'Default'}
description={
'Will use all available interfaces when searching for the best path.'
}
webRtcPolicy={webRtcPolicy}
onChange={changeRadioValue}
/>
<RadioButton
value={'default_public_and_private_interfaces'}
name={'Default Public And Private Interfaces'}
description={
'Will only use interface connecting to the public Internet, but may connect using private IP.'
}
webRtcPolicy={webRtcPolicy}
onChange={changeRadioValue}
/>
<RadioButton
value={'default_public_interface_only'}
name={'Default Public Interface Only'}
description={
'Will only use interface connecting to the public Internet, and will not connect using private IP.'
}
webRtcPolicy={webRtcPolicy}
onChange={changeRadioValue}
/>
<RadioButton
value={'disable_non_proxied_udp'}
name={'Disable Non-Proxied UDP (Force Proxy)'}
description={
'Will use TCP on the public-facing interface, and will only use UDP if supported by a configured proxy.'
}
webRtcPolicy={webRtcPolicy}
onChange={changeRadioValue}
/>
</Page>
)
}
export default WebRtcPage

View file

@ -39,8 +39,11 @@ export const theme: Theme = {
cursor: 'pointer', cursor: 'pointer',
p: '4px 8px', p: '4px 8px',
borderColor: 'grey', borderColor: 'grey',
'&:focus': { transition: '0.2s',
'&:hover': {
borderColor: 'primaryDark', borderColor: 'primaryDark',
},
'&:focus': {
outline: 'none', outline: 'none',
}, },
}, },
@ -58,6 +61,7 @@ export const theme: Theme = {
borderRadius: '0', borderRadius: '0',
width: '100%', width: '100%',
display: 'block', display: 'block',
transition: '0.2s',
'&:hover': { '&:hover': {
bg: 'primaryDark', bg: 'primaryDark',
}, },