This commit is contained in:
Alibek 2024-02-29 14:14:16 +06:00
commit e2db27b56f
27 changed files with 952 additions and 429 deletions

View File

@ -5,14 +5,15 @@
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
"start": "next start", "start": "next start -p 8004",
"lint": "next lint" "lint": "next lint"
}, },
"dependencies": { "dependencies": {
"@next/third-parties": "^14.1.0",
"axios": "^1.6.5", "axios": "^1.6.5",
"dotenv": "^16.4.1", "dotenv": "^16.4.1",
"leaflet": "^1.9.4", "leaflet": "^1.9.4",
"next": "14.1.0", "next": "^14.1.0",
"next-auth": "^4.24.5", "next-auth": "^4.24.5",
"next-intl": "^3.9.0", "next-intl": "^3.9.0",
"react": "^18", "react": "^18",

View File

@ -7,7 +7,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | О нас", title: "KG ROAD | О нас",
description: description:
'Страница "О Нас" Kyrgyzstan Transperency International', 'Страница "О Нас" KG ROAD',
}; };
const AboutUs = () => { const AboutUs = () => {
@ -16,53 +16,19 @@ const AboutUs = () => {
<Typography element="h2">О нас</Typography> <Typography element="h2">О нас</Typography>
<Image src={header} alt="Header Image" /> <Image src={header} alt="Header Image" />
<h3>Dont wait. The purpose of our lives is to be happy!</h3>
<div className="about-us__descriptions"> <div className="about-us__descriptions">
<p> <p>Transparency International-Кыргызстан - филиал международной организации Transparency International в Кыргызской Республике.</p>
arrival, your senses will be rewarded with the pleasant <h4>Миссия ТИ-Кыргызстан</h4>
scent of lemongrass oil used to clean the natural wood found <p>Продвижение эффективной общественной политики и надлежащего управления в целях предотвращения коррупции и усиления демократии в стране. </p>
throughout the room, creating a relaxing atmosphere within <h4>Цели и приоритеты ТИ-Кыргызстан:</h4>
the space. A wonderful serenity has taken possession of my <ul>
entire soul, like these sweet mornings of spring which I <li> - антикоррупционное просвещение населения, повышение общественного осознания значимости и важности борьбы с коррупцией в Кыргызстане;</li>
enjoy with my whole heart. I am alone, and feel the charm of <li> - организация изучения практики и теории борьбы с коррупцией и участия в ней структур гражданского общества в Кыргызстане и других странах;</li>
existence in this spot, which was created for the bliss of <li> - содействие гражданам и организациям в реализации их конституционных прав и свобод;</li>
souls like mine. I am so happy, my dear friend, so absorbed <li> - преимущественная ориентация на международный опыт уменьшения коррупции, освоение его технологий, ресурсов, а также включение структур гражданского общества в международный диалог борьбы с коррупцией.</li>
in the exquisite. </ul>
</p>
<p>
When you are ready to indulge your sense of excitement,
check out the range of water- sports opportunities at the
resorts on-site water-sports center. Want to leave your
stress on the water? The resort has kayaks, paddleboards, or
the low-key pedal boats. Snorkeling equipment is available
as well, so you can experience the ever-changing undersea
environment. Not only do visitors to a bed and breakfast get
a unique perspective on the place they are visiting, they
have options for special packages not available in other
hotel settings.{" "}
</p>
<p>
Bed and breakfasts can partner easily with local businesses
for a smoothly organized and highly personalized vacation
experience. The Fife and Drum Inn offers options such as the
Historic Triangle Package that includes three nights at the
Inn, breakfasts, and admissions to historic Williamsburg,
Jamestown, and Yorktown. Bed and breakfasts also lend
themselves to romance.
</p>
<p>
Part of the charm of a bed and breakfast is the uniqueness;
art, décor, and food are integrated to create a complete
experience. For example, the Fife and Drum retains the
colonial feel of the area in all its guest rooms. Special
features include antique furnishings, elegant four poster
beds in some guest rooms, as well folk art and artifacts
from the restoration period of the historic area available
for guests to enjoy.
</p>
</div> </div>
<p>Photo By Mzximvs VdB from Brussels, belgium - Road to Issyk-Kul (south shore), CC BY-SA 2.0</p>
</div> </div>
); );
}; };

View File

@ -6,7 +6,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Написать обращение", title: "KG ROAD | Написать обращение",
description: description:
"Написать обращение Kyrgyzstan Transperency International", "Написать обращение KG ROAD",
}; };
const DynamicForm = dynamic( const DynamicForm = dynamic(

View File

@ -6,7 +6,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Новости", title: "KG ROAD | Новости",
description: description:
"Страница новостей Kyrgyzstan Transperency International", "Страница новостей KG ROAD",
}; };
const News = ({ const News = ({

View File

@ -8,7 +8,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Главная", title: "KG ROAD | Главная",
description: description:
"Главная страница Kyrgyzstan Transperency International", "Главная страница KG ROAD",
}; };
const Home = async ({ const Home = async ({

View File

@ -11,7 +11,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Профиль", title: "KG ROAD | Профиль",
description: description:
"Страница профиля Kyrgyzstan Transperency International", "Страница профиля KG ROAD",
}; };
const Profile = async ({ const Profile = async ({

View File

@ -7,7 +7,7 @@ import { Link } from "@/shared/config/navigation";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Вход", title: "KG ROAD | Вход",
description: "Страница входа Kyrgyzstan Transperency International", description: "Страница входа KG ROAD",
}; };
const SignIn = () => { const SignIn = () => {

View File

@ -8,7 +8,7 @@ import { Link } from "@/shared/config/navigation";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Регистрация", title: "KG ROAD | Регистрация",
description: description:
"Страница регистрации Kyrgyzstan Transperency International", "Страница регистрации KG ROAD",
}; };
const SignUp = () => { const SignUp = () => {

View File

@ -6,7 +6,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Статистика", title: "KG ROAD | Статистика",
description: description:
"Страница статистики Kyrgyzstan Transperency International", "Страница статистики KG ROAD",
}; };
const Statistics = ({ const Statistics = ({

View File

@ -6,7 +6,7 @@ import { Metadata } from "next";
export const metadata: Metadata = { export const metadata: Metadata = {
title: "KG ROAD | Волонтеры", title: "KG ROAD | Волонтеры",
description: description:
"Страница волонтеров Kyrgyzstan Transperency International", "Страница волонтеров KG ROAD",
}; };
const Volunteers = () => { const Volunteers = () => {

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD
import { ReactNode } from "react"; import { ReactNode } from "react";
type Props = { type Props = {
@ -6,4 +7,40 @@ type Props = {
export default function RootLayout({ children }: Props) { export default function RootLayout({ children }: Props) {
return children; return children;
=======
import type { Metadata } from "next";
import "./globals.scss";
import "./App.scss";
// import "@/shared/fonts/fonts.scss";
import { Providers } from "./Providers";
import Navbar from "@/widgets/Navbar/Navbar";
import Footer from "@/widgets/Footer/Footer";
import { GoogleAnalytics } from '@next/third-parties/google'
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<head>
</head>
<body>
<Providers>
<Navbar />
<div className="app">{children}</div>
<Footer />
</Providers>
</body>
{/*
Disable google analytics in uat
<GoogleAnalytics gaId={process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS || ""} />
*/}
</html>
);
>>>>>>> d1440f3907ca91b29db2977f043e44f54993aeb1
} }

View File

@ -0,0 +1,138 @@
import "./ReportDetails.scss";
import Image from "next/image";
import RoadType from "@/entities/RoadType/RoadType";
import ReportLike from "@/features/ReportLike/ReportLike";
import { apiInstance } from "@/shared/config/apiConfig";
import { IReport } from "@/shared/types/report-type";
import {
ROAD_TYPES,
ROAD_TYPES_COLORS,
} from "@/shared/variables/road-types";
import calendar from "./icons/calendar.svg";
import map_pin from "./icons/map-pin.svg";
import def_image from "./icons/def_image.svg";
import ReviewSection from "@/widgets/ReviewSection/ReviewSection";
import { Metadata } from "next";
export const metadata: Metadata = {
title: "KG ROAD | Обращение",
description:
"Страница обращения KG ROAD",
};
const ReportDetails = async ({
params,
}: {
params: { id: string };
}) => {
const getReportDetails = async () => {
const res = await fetch(
`${process.env.NEXT_PUBLIC_BASE_API}/report/${params.id}/`,
{ cache: "no-store" }
);
return res.json();
};
const report: IReport = await getReportDetails();
const months: Record<string, string> = {
"01": "Январь",
"02": "Февраль",
"03": "Март",
"04": "Апрель",
"05": "Май",
"06": "Июнь",
"07": "Июль",
"08": "Август",
"09": "Сентябрь",
"10": "Октябрь",
"11": "Ноябрь",
"12": "Декабрь",
};
const showImages = () => {
const images = [];
for (let i = 0; i < 5; i++) {
if (report.image[i]) {
const image = (
<img
className={`report-images__exist report-images__item${
i + 1
}`}
key={i}
src={report.image[i].image}
alt="Report Image"
/>
);
images.push(image);
} else {
const defImage = (
<div
className={`report-images__default report-images__item${
i + 1
}`}
key={i}
>
<Image src={def_image} alt="Default Image" />
</div>
);
images.push(defImage);
}
}
return images;
};
return (
<div className="report-details page-padding">
<div className="report-details__container">
<div className="report-information">
<RoadType color={ROAD_TYPES_COLORS[report.category]}>
{ROAD_TYPES[report.category]}
</RoadType>
<h2>{report.location[0].address}</h2>
<div className="report-information__date-and-like">
<div className="report-information__date">
<Image src={calendar} alt="Calendar Icon" />
<p>
{months[report.created_at.slice(5, 7)]}{" "}
{report.created_at.slice(5, 7).slice(0, 1) === "0"
? report.created_at.slice(6, 7)
: report.created_at.slice(5, 7)}
, {report.created_at.slice(0, 4)}
</p>
</div>
<ReportLike
count={report.total_likes}
report_id={report.id}
/>
</div>
<p className="report-information__description">
{report.description}
</p>
<p className="report-information__author">
Автор обращения:{" "}
<span>
{report.author.first_name}{" "}
{report.author.last_name.slice(0, 1)}.
</span>
</p>
<button className="report-information__show-map">
<Image src={map_pin} alt="Map Pin Icon" />
Показать на карте
</button>
</div>
<div className="report-images">
{showImages().map((image) => image)}
</div>
</div>
<ReviewSection endpoint="report" id={+params.id} />
</div>
);
};
export default ReportDetails;

View File

@ -25,6 +25,7 @@ const refreshToken = async (token: JWT): Promise<JWT> => {
// const date = new Date().toLocaleTimeString(); // const date = new Date().toLocaleTimeString();
// const expire = new Date(token.expires_in).toLocaleTimeString(); // const expire = new Date(token.expires_in).toLocaleTimeString();
<<<<<<< HEAD
const verify = await verifyToken(token.access_token); const verify = await verifyToken(token.access_token);
if (verify) if (verify)
@ -34,6 +35,10 @@ const refreshToken = async (token: JWT): Promise<JWT> => {
const response = await apiInstance.post<IRefresh>( const response = await apiInstance.post<IRefresh>(
"/users/refresh/", "/users/refresh/",
=======
const response = await axios.post<IToken>(
"https://api.kgroad.org/api/v1/token/refresh/",
>>>>>>> d1440f3907ca91b29db2977f043e44f54993aeb1
data data
); );
@ -66,7 +71,23 @@ export const authConfig: AuthOptions = {
password, password,
}; };
<<<<<<< HEAD
const res = await apiInstance.post("/users/login/", data); const res = await apiInstance.post("/users/login/", data);
=======
const res = await fetch(
"https://api.kgroad.org/api/v1/users/login/",
{
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
email,
password,
}),
}
);
>>>>>>> d1440f3907ca91b29db2977f043e44f54993aeb1
if (![200, 201].includes(res.status)) { if (![200, 201].includes(res.status)) {
return null; return null;

View File

@ -9,6 +9,7 @@ import app_store_btn from "./icons/app-store-btn.svg";
import play_market_btn from "./icons/play-market-btn.svg"; import play_market_btn from "./icons/play-market-btn.svg";
import { Link } from "@/shared/config/navigation"; import { Link } from "@/shared/config/navigation";
import { useTranslations } from "next-intl"; import { useTranslations } from "next-intl";
import NetKgTracker from "@/widgets/NetKgTracker/NetKgTracker";
const Footer = () => { const Footer = () => {
const t = useTranslations("general"); const t = useTranslations("general");
@ -28,13 +29,15 @@ const Footer = () => {
</li> </li>
))} ))}
</ul> </ul>
<NetKgTracker />
</div> </div>
<div className="footer__contacts"> <div className="footer__contacts">
<h4>{t("contacts")}</h4> <h4>{t("contacts")}</h4>
<ul> <ul>
<li>namename@gmail.com</li> <li>admin@kgroad.org</li>
<li>+09646895467</li> <li>+9960312394038</li>
<li> <li>
{[youtube, facebook, instagram].map((net, i) => ( {[youtube, facebook, instagram].map((net, i) => (
<Link key={i} href="#"> <Link key={i} href="#">
@ -43,8 +46,9 @@ const Footer = () => {
))} ))}
</li> </li>
</ul> </ul>
<p className="text-white">Photo By ThomasG, CC BY-SA 3.0</p>
</div> </div>
{/*
<div className="footer__apps"> <div className="footer__apps">
<h4>{t("download_our_app")}</h4> <h4>{t("download_our_app")}</h4>
<div className="footer__apps-btns"> <div className="footer__apps-btns">
@ -55,6 +59,7 @@ const Footer = () => {
))} ))}
</div> </div>
</div> </div>
*/}
</footer> </footer>
); );
}; };

View File

@ -0,0 +1,37 @@
"use client"
import React, { useEffect, useState } from 'react';
const NetKgTracker = () => {
const [imghref, setImghref] = useState('');
useEffect(() => {
var java="1.3";
var java1=""+"refer="+escape(document.referrer)+"&page="+escape(window.location.href);
document.cookie="astratop=1; path=/";
java1+="&c="+(document.cookie?"yes":"now");
java1+="&java="+(navigator.javaEnabled()?"yes":"now");
java1+="&razresh="+screen.width+'x'+screen.height+"&cvet="+
(((navigator.appName.substring(0,3)=="Mic"))?
screen.colorDepth:screen.pixelDepth);
java1+="&jscript="+java+"&rand="+Math.random();
setImghref("https://www.net.kg/img.php?id=7235&"+java1);
}, []);
return (
/*
<div>
<a href='https://www.net.kg/stat.php?id=7235&amp;fromsite=7235' target='_blank'>
<img src={imghref} alt='WWW.NET.KG' width='88' height='31' />
</a>
</div>
Enable NetKgTracker only in production
*/
<div/>
)
};
export default NetKgTracker;

View File

@ -65,8 +65,7 @@ const ReviewSection: React.FC<IReviewsSectionProps> = ({
const response = await apiInstance.get<IReviewList>( const response = await apiInstance.get<IReviewList>(
`/${endpoint}/${id}/reviews/?page_size=8` `/${endpoint}/${id}/reviews/?page_size=8`
); );
setReviews(response?.data);
setReviews(response.data);
}; };
useEffect(() => { useEffect(() => {

View File

@ -87,7 +87,10 @@ const SignInForm = () => {
<button className="sign-in-form__btns_first" type="submit"> <button className="sign-in-form__btns_first" type="submit">
{loader ? <Loader /> : "Войти"} {loader ? <Loader /> : "Войти"}
</button> </button>
{/*
<GoogleButton /> <GoogleButton />
*/}
</div> </div>
</form> </form>
); );

View File

@ -119,7 +119,10 @@ const SignUpForm = () => {
<button className="sign-up-form__btns_first" type="submit"> <button className="sign-up-form__btns_first" type="submit">
{loader ? <Loader /> : "Войти"} {loader ? <Loader /> : "Войти"}
</button> </button>
{/*
<GoogleButton /> <GoogleButton />
*/}
</div> </div>
</form> </form>
); );

View File

@ -14,8 +14,17 @@ const Header = () => {
alt="Background Image" alt="Background Image"
/> />
<div className="header__text"> <div className="header__text">
<<<<<<< HEAD:src/widgets/home/Header/Header.tsx
<h1>{t("title")}</h1> <h1>{t("title")}</h1>
<p>{t("subtitle")}</p> <p>{t("subtitle")}</p>
=======
<h1>
Дороги Кыргызстана
</h1>
<p>
Сделаем дороги безопасными! Актуальная информация о состоянии дорог.
</p>
>>>>>>> d1440f3907ca91b29db2977f043e44f54993aeb1:src/widgets/Header/Header.tsx
</div> </div>
<HeaderLink /> <HeaderLink />

View File

@ -52,6 +52,7 @@ const HomeMap: React.FC<IHomeMapProps> = ({
const customIcon = new Icon({ const customIcon = new Icon({
iconUrl: icon.src, iconUrl: icon.src,
iconSize: [32, 32], iconSize: [32, 32],
iconAnchor: [16, 32],
}); });
return customIcon; return customIcon;

View File

@ -1,5 +1,53 @@
<svg width="38" height="50" viewBox="0 0 38 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<path d="M19 0C8.52334 0 0 8.74812 0 19.501C0 32.8456 17.0031 48.5901 17.7271 49.4175C18.407 50.1948 19.5942 50.1935 20.2729 49.4175C20.9969 48.5901 38 32.8456 38 19.501C37.9998 8.74812 29.4766 0 19 0Z" fill="#3998E8" fill-opacity="0.7"/> <svg
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/> width="38"
<circle cx="18.5" cy="18.5" r="7.5" fill="#8FDE6A"/> height="50"
viewBox="0 0 38 50"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="geo-green.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="5.4942197"
inkscape:cx="33.671751"
inkscape:cy="42.317201"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 19,0 C 8.52334,0 0,8.74812 0,19.501 c 0,13.3446 17.0031,29.0891 17.7271,29.9165 0.6799,0.7773 1.8671,0.776 2.5458,0 C 20.9969,48.5901 38,32.8456 38,19.501 37.9998,8.74812 29.4766,0 19,0 Z"
fill="#3998e8"
fill-opacity="0.7"
id="path1" />
<ellipse
cx="18.786699"
cy="19"
rx="9.8877497"
ry="10"
fill="#ffffff"
id="ellipse1" />
<circle
cx="19"
cy="19"
r="7.5"
fill="#8fde6a"
id="circle1" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,5 +1,53 @@
<svg width="38" height="50" viewBox="0 0 38 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<path d="M19 0C8.52334 0 0 8.74812 0 19.501C0 32.8456 17.0031 48.5901 17.7271 49.4175C18.407 50.1948 19.5942 50.1935 20.2729 49.4175C20.9969 48.5901 38 32.8456 38 19.501C37.9998 8.74812 29.4766 0 19 0Z" fill="#3998E8" fill-opacity="0.7"/> <svg
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/> width="38"
<circle cx="18.5" cy="18.5" r="7.5" fill="#FFAC33"/> height="50"
viewBox="0 0 38 50"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="geo-orange.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="7.77"
inkscape:cx="17.631918"
inkscape:cy="29.79408"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 19,0 C 8.52334,0 0,8.74812 0,19.501 c 0,13.3446 17.0031,29.0891 17.7271,29.9165 0.6799,0.7773 1.8671,0.776 2.5458,0 C 20.9969,48.5901 38,32.8456 38,19.501 37.9998,8.74812 29.4766,0 19,0 Z"
fill="#3998e8"
fill-opacity="0.7"
id="path1" />
<ellipse
cx="18.786699"
cy="19"
rx="9.8877497"
ry="10"
fill="#ffffff"
id="ellipse1" />
<circle
cx="19"
cy="19"
r="7.5"
fill="#ffac33"
id="circle1" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,5 +1,53 @@
<svg width="38" height="50" viewBox="0 0 38 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<path d="M19 0C8.52334 0 0 8.74812 0 19.501C0 32.8456 17.0031 48.5901 17.7271 49.4175C18.407 50.1948 19.5942 50.1935 20.2729 49.4175C20.9969 48.5901 38 32.8456 38 19.501C37.9998 8.74812 29.4766 0 19 0Z" fill="#3998E8" fill-opacity="0.7"/> <svg
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/> width="38"
<circle cx="18.5" cy="18.5" r="7.5" fill="#C288E2"/> height="50"
viewBox="0 0 38 50"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="geo-pink.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="15.54"
inkscape:cx="18.661519"
inkscape:cy="22.297297"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 19,0 C 8.52334,0 0,8.74812 0,19.501 c 0,13.3446 17.0031,29.0891 17.7271,29.9165 0.6799,0.7773 1.8671,0.776 2.5458,0 C 20.9969,48.5901 38,32.8456 38,19.501 37.9998,8.74812 29.4766,0 19,0 Z"
fill="#3998e8"
fill-opacity="0.7"
id="path1" />
<ellipse
cx="18.786699"
cy="19"
rx="9.8877497"
ry="10"
fill="#ffffff"
id="ellipse1" />
<circle
cx="19"
cy="19"
r="7.5"
fill="#c288e2"
id="circle1" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,5 +1,53 @@
<svg width="38" height="50" viewBox="0 0 38 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<path d="M19 0C8.52334 0 0 8.74812 0 19.501C0 32.8456 17.0031 48.5901 17.7271 49.4175C18.407 50.1948 19.5942 50.1935 20.2729 49.4175C20.9969 48.5901 38 32.8456 38 19.501C37.9998 8.74812 29.4766 0 19 0Z" fill="#3998E8" fill-opacity="0.7"/> <svg
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/> width="38"
<circle cx="18.5" cy="18.5" r="7.5" fill="#87289D"/> height="50"
viewBox="0 0 38 50"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="geo-purple.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="15.54"
inkscape:cx="18.983269"
inkscape:cy="25"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 19,0 C 8.52334,0 0,8.74812 0,19.501 c 0,13.3446 17.0031,29.0891 17.7271,29.9165 0.6799,0.7773 1.8671,0.776 2.5458,0 C 20.9969,48.5901 38,32.8456 38,19.501 37.9998,8.74812 29.4766,0 19,0 Z"
fill="#3998e8"
fill-opacity="0.7"
id="path1" />
<ellipse
cx="18.786699"
cy="19"
rx="9.8877497"
ry="10"
fill="#ffffff"
id="ellipse1" />
<circle
cx="19"
cy="19"
r="7.5"
fill="#87289d"
id="circle1" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,5 +1,53 @@
<svg width="38" height="50" viewBox="0 0 38 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<path d="M19 0C8.52334 0 0 8.74812 0 19.501C0 32.8456 17.0031 48.5901 17.7271 49.4175C18.407 50.1948 19.5942 50.1935 20.2729 49.4175C20.9969 48.5901 38 32.8456 38 19.501C37.9998 8.74812 29.4766 0 19 0Z" fill="#3998E8" fill-opacity="0.7"/> <svg
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/> width="38"
<circle cx="18.5" cy="18.5" r="7.5" fill="#E64452"/> height="50"
viewBox="0 0 38 50"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="geo-red.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="10.988439"
inkscape:cx="27.301421"
inkscape:cy="35.264336"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 19,0 C 8.52334,0 0,8.74812 0,19.501 c 0,13.3446 17.0031,29.0891 17.7271,29.9165 0.6799,0.7773 1.8671,0.776 2.5458,0 C 20.9969,48.5901 38,32.8456 38,19.501 37.9998,8.74812 29.4766,0 19,0 Z"
fill="#3998e8"
fill-opacity="0.7"
id="path1" />
<ellipse
cx="18.786699"
cy="19"
rx="9.8877497"
ry="10"
fill="#ffffff"
id="ellipse1" />
<circle
cx="19"
cy="19"
r="7.5"
fill="#e64452"
id="circle1" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,5 +1,53 @@
<svg width="38" height="50" viewBox="0 0 38 50" fill="none" xmlns="http://www.w3.org/2000/svg"> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<path d="M19 0C8.52334 0 0 8.74812 0 19.501C0 32.8456 17.0031 48.5901 17.7271 49.4175C18.407 50.1948 19.5942 50.1935 20.2729 49.4175C20.9969 48.5901 38 32.8456 38 19.501C37.9998 8.74812 29.4766 0 19 0Z" fill="#3998E8" fill-opacity="0.7"/> <svg
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/> width="38"
<circle cx="18.5" cy="18.5" r="7.5" fill="#FED363"/> height="50"
viewBox="0 0 38 50"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="geo-yellow.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
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="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="15.54"
inkscape:cx="18.983269"
inkscape:cy="25"
inkscape:window-width="1920"
inkscape:window-height="991"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 19,0 C 8.52334,0 0,8.74812 0,19.501 c 0,13.3446 17.0031,29.0891 17.7271,29.9165 0.6799,0.7773 1.8671,0.776 2.5458,0 C 20.9969,48.5901 38,32.8456 38,19.501 37.9998,8.74812 29.4766,0 19,0 Z"
fill="#3998e8"
fill-opacity="0.7"
id="path1" />
<ellipse
cx="18.786699"
cy="19"
rx="9.8877497"
ry="10"
fill="#ffffff"
id="ellipse1" />
<circle
cx="19"
cy="19"
r="7.5"
fill="#fed363"
id="circle1" />
</svg> </svg>

Before

Width:  |  Height:  |  Size: 461 B

After

Width:  |  Height:  |  Size: 1.5 KiB

703
yarn.lock

File diff suppressed because it is too large Load Diff