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": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"start": "next start -p 8004",
"lint": "next lint"
},
"dependencies": {
"@next/third-parties": "^14.1.0",
"axios": "^1.6.5",
"dotenv": "^16.4.1",
"leaflet": "^1.9.4",
"next": "14.1.0",
"next": "^14.1.0",
"next-auth": "^4.24.5",
"next-intl": "^3.9.0",
"react": "^18",

View File

@ -7,7 +7,7 @@ import { Metadata } from "next";
export const metadata: Metadata = {
title: "KG ROAD | О нас",
description:
'Страница "О Нас" Kyrgyzstan Transperency International',
'Страница "О Нас" KG ROAD',
};
const AboutUs = () => {
@ -16,53 +16,19 @@ const AboutUs = () => {
<Typography element="h2">О нас</Typography>
<Image src={header} alt="Header Image" />
<h3>Dont wait. The purpose of our lives is to be happy!</h3>
<div className="about-us__descriptions">
<p>
arrival, your senses will be rewarded with the pleasant
scent of lemongrass oil used to clean the natural wood found
throughout the room, creating a relaxing atmosphere within
the space. A wonderful serenity has taken possession of my
entire soul, like these sweet mornings of spring which I
enjoy with my whole heart. I am alone, and feel the charm of
existence in this spot, which was created for the bliss of
souls like mine. I am so happy, my dear friend, so absorbed
in the exquisite.
</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>
<p>Transparency International-Кыргызстан - филиал международной организации Transparency International в Кыргызской Республике.</p>
<h4>Миссия ТИ-Кыргызстан</h4>
<p>Продвижение эффективной общественной политики и надлежащего управления в целях предотвращения коррупции и усиления демократии в стране. </p>
<h4>Цели и приоритеты ТИ-Кыргызстан:</h4>
<ul>
<li> - антикоррупционное просвещение населения, повышение общественного осознания значимости и важности борьбы с коррупцией в Кыргызстане;</li>
<li> - организация изучения практики и теории борьбы с коррупцией и участия в ней структур гражданского общества в Кыргызстане и других странах;</li>
<li> - содействие гражданам и организациям в реализации их конституционных прав и свобод;</li>
<li> - преимущественная ориентация на международный опыт уменьшения коррупции, освоение его технологий, ресурсов, а также включение структур гражданского общества в международный диалог борьбы с коррупцией.</li>
</ul>
</div>
<p>Photo By Mzximvs VdB from Brussels, belgium - Road to Issyk-Kul (south shore), CC BY-SA 2.0</p>
</div>
);
};

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,4 @@
<<<<<<< HEAD
import { ReactNode } from "react";
type Props = {
@ -6,4 +7,40 @@ type Props = {
export default function RootLayout({ children }: Props) {
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 expire = new Date(token.expires_in).toLocaleTimeString();
<<<<<<< HEAD
const verify = await verifyToken(token.access_token);
if (verify)
@ -34,6 +35,10 @@ const refreshToken = async (token: JWT): Promise<JWT> => {
const response = await apiInstance.post<IRefresh>(
"/users/refresh/",
=======
const response = await axios.post<IToken>(
"https://api.kgroad.org/api/v1/token/refresh/",
>>>>>>> d1440f3907ca91b29db2977f043e44f54993aeb1
data
);
@ -66,7 +71,23 @@ export const authConfig: AuthOptions = {
password,
};
<<<<<<< HEAD
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)) {
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 { Link } from "@/shared/config/navigation";
import { useTranslations } from "next-intl";
import NetKgTracker from "@/widgets/NetKgTracker/NetKgTracker";
const Footer = () => {
const t = useTranslations("general");
@ -28,13 +29,15 @@ const Footer = () => {
</li>
))}
</ul>
<NetKgTracker />
</div>
<div className="footer__contacts">
<h4>{t("contacts")}</h4>
<ul>
<li>namename@gmail.com</li>
<li>+09646895467</li>
<li>admin@kgroad.org</li>
<li>+9960312394038</li>
<li>
{[youtube, facebook, instagram].map((net, i) => (
<Link key={i} href="#">
@ -43,8 +46,9 @@ const Footer = () => {
))}
</li>
</ul>
<p className="text-white">Photo By ThomasG, CC BY-SA 3.0</p>
</div>
{/*
<div className="footer__apps">
<h4>{t("download_our_app")}</h4>
<div className="footer__apps-btns">
@ -55,6 +59,7 @@ const Footer = () => {
))}
</div>
</div>
*/}
</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>(
`/${endpoint}/${id}/reviews/?page_size=8`
);
setReviews(response.data);
setReviews(response?.data);
};
useEffect(() => {

View File

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

View File

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

View File

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

View File

@ -52,6 +52,7 @@ const HomeMap: React.FC<IHomeMapProps> = ({
const customIcon = new Icon({
iconUrl: icon.src,
iconSize: [32, 32],
iconAnchor: [16, 32],
});
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">
<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"/>
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/>
<circle cx="18.5" cy="18.5" r="7.5" fill="#8FDE6A"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38"
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>

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">
<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"/>
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/>
<circle cx="18.5" cy="18.5" r="7.5" fill="#FFAC33"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38"
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>

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">
<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"/>
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/>
<circle cx="18.5" cy="18.5" r="7.5" fill="#C288E2"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38"
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>

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">
<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"/>
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/>
<circle cx="18.5" cy="18.5" r="7.5" fill="#87289D"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38"
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>

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">
<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"/>
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/>
<circle cx="18.5" cy="18.5" r="7.5" fill="#E64452"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38"
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>

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">
<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"/>
<ellipse cx="18.7867" cy="19" rx="9.88775" ry="10" fill="white"/>
<circle cx="18.5" cy="18.5" r="7.5" fill="#FED363"/>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="38"
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>

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