This commit is contained in:
z0ccc 2023-09-12 21:52:50 -04:00
parent 2e92e4a54b
commit bcec293acc
75 changed files with 1097 additions and 132 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,5 @@
{
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" },
"extName": { "message": "Vytal - Privacy & VPN Companion" },
"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."
}

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,5 @@
{
"extName": { "message": "Vytal - Spoof Timezone, Geolocation & Locale" },
"extName": { "message": "Vytal - Privacy & VPN Companion" },
"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."
}

View file

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

View file

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

View file

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

@ -2,6 +2,7 @@ import { useState } from 'react'
import { ThemeProvider, Flex, Box } from 'theme-ui'
import { theme } from 'theme'
import {
Home,
Wifi,
MessageSquare,
FileText,
@ -13,12 +14,19 @@ import {
} from 'react-feather'
import VpnIcon from '../assets/vpnIcon.svg'
import TabItem from './TabItem'
import HomePage from './pages/homePage'
import LocationPage from './pages/locationPage'
import AutofillPage from './pages/autofillPage'
import WebRtcPage from './pages/webRtcPage'
import UserAgentPage from './pages/userAgentPage'
import OptionsPage from './pages/optionsPage'
import VpnPage from './pages/vpnPage'
import SettingsPage from './pages/settingsPage'
import InfoPage from './pages/infoPage'
import '../assets/global.css'
import Logo from '../assets/logo-no-bg.svg'
const Popup = () => {
const [tab, setTab] = useState('location')
@ -34,51 +42,80 @@ const Popup = () => {
}}
>
{/* <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} />}
active={tab === 'vpn'}
onClick={() => setTab('vpn')}
/> */}
/>
<TabItem
title="Location Data"
Icon={<MapPin size={20} />}
active={tab === '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
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} />}
active={tab === 'userAgent'}
onClick={() => setTab('userAgent')}
/>
<TabItem
title="Other Options"
Icon={<Sliders size={20} />}
active={tab === 'options'}
onClick={() => setTab('options')}
/>
{/* <TabItem
Icon={<img src={VpnIcon} className="App-logo" alt="logo" />}
title="VPN Recommendations"
Icon={<img src={VpnIcon} alt="VPN Icon" />}
active={tab === 'vpn'}
onClick={() => setTab('vpn')}
/> */}
{/* <TabItem
Icon={<Sliders size={20} />}
active={tab === 'settings'}
onClick={() => setTab('settings')}
/> */}
<TabItem
Icon={<Info size={20} />}
title="Settings"
Icon={<Settings size={20} />}
active={tab === '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>
<Box sx={{ m: '16px', width: '100%' }}>
<HomePage tab={tab} setTab={setTab} />
<LocationPage tab={tab} setTab={setTab} />
<AutofillPage tab={tab} />
<WebRtcPage tab={tab} />
<UserAgentPage tab={tab} />
<OptionsPage tab={tab} />
{/* <VpnPage tab={tab} /> */}
<SettingsPage tab={tab} setTab={setTab} />
<InfoPage tab={tab} setTab={setTab} />
</Box>
</Flex>
</ThemeProvider>

View file

@ -1,14 +1,16 @@
import React from 'react'
import { Button } from 'theme-ui'
interface IconProps {
title: string
Icon: React.ReactNode
active?: boolean
onClick: () => void
}
const TabItem = ({ Icon, onClick, active }: IconProps) => {
const TabItem = ({ title, Icon, onClick, active }: IconProps) => {
return (
<Button
title={title}
sx={{
cursor: 'pointer',
width: '36px',

View file

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

View file

@ -1,5 +1,5 @@
import { useState, useEffect, ChangeEvent, useCallback } from 'react'
import { Box, Button, Flex, Label, Select } from 'theme-ui'
import { Box, Flex, Label, Select } from 'theme-ui'
import Page from 'popup/components/Page'
import Checkbox from 'popup/components/CheckBox'
import DebouncedInput from 'popup/components/DebouncedInput'
@ -151,7 +151,7 @@ const LocationPage = ({ tab, setTab }: LocationPageProps) => {
return (
<Page isCurrentTab={tab === 'location'} title={'Location Data'}>
<Checkbox
title="Use browser default"
title="Use Browser Defaults"
onChange={changeBrowserDefault}
checked={browserDefault}
/>
@ -161,6 +161,11 @@ const LocationPage = ({ tab, setTab }: LocationPageProps) => {
pointerEvents: browserDefault ? 'none' : 'auto',
}}
>
<Checkbox
title="Use Debugger API"
onChange={changeBrowserDefault}
checked={browserDefault}
/>
<Flex
sx={{
border: '1px solid',

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,6 +1,6 @@
import { Button, Link, Text } from 'theme-ui'
import { Button, Link, Text, Box, Label, Select } from 'theme-ui'
import Page from 'popup/components/Page'
import InfoItem from './InfoItem'
import Checkbox from 'popup/components/CheckBox'
interface SettingsPageProps {
tab: string
@ -9,65 +9,41 @@ interface SettingsPageProps {
const SettingsPage = ({ tab, setTab }: SettingsPageProps) => {
return (
<Page isCurrentTab={tab === 'settings'} title={'Info'}>
<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"
<Page isCurrentTab={tab === 'settings'} title={'Settings'}>
<Checkbox
title="Dark Mode"
// onChange={changeBrowserDefault}
// checked={browserDefault}
/>
<Box sx={{ width: '100%' }}>
<Label
htmlFor="type
"
>
Instructions on how to run chrome with flags
</Link>
.
</InfoItem>
<InfoItem title={'Change IP Address'}>
Vytal does not change your IP address. To change your IP address you
will need a VPN or proxy.
{/* <Button variant="text" onClick={() => setTab('vpn')}>
VPN or proxy
</Button>
. */}
</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"
Default Popup Page
</Label>
<Select
name="type"
id="type"
// value={userAgentInfo}
// onChange={changeUserAgentInfo}
mb={'8px'}
>
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={'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>
{/* <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>
)
}

View file

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

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,10 @@ export const theme: Theme = {
cursor: 'pointer',
p: '4px 8px',
borderColor: 'grey',
'&:focus': {
'&:hover': {
borderColor: 'primaryDark',
},
'&:focus': {
outline: 'none',
},
},