On branch master

Changes to be committed:
	modified:   app/(root)/page.jsx
	modified:   app/about/components/about/about.jsx
	deleted:    app/about/components/about/spotify/animation.jsx
	deleted:    app/about/components/about/spotify/card.jsx
	deleted:    app/about/components/about/spotify/fetch.js
	modified:   app/about/components/education.jsx
	modified:   app/about/layout.jsx
	modified:   app/about/loading.jsx
	modified:   app/about/page.jsx
	modified:   app/layout.jsx
	modified:   app/not-found.jsx
	modified:   app/projects/[slug]/page.jsx
	modified:   app/projects/archive/page.jsx
	modified:   app/projects/layout.jsx
	modified:   app/projects/loading.jsx
	modified:   app/projects/page.jsx
	deleted:    components/Chat.jsx
	modified:   components/Footer.jsx
	modified:   components/Navbar.jsx
	modified:   json/data.json
	modified:   pnpm-lock.yaml
	new file:   public/image/me.jpeg
	deleted:    public/image/me.jpg
	new file:   public/image/me1.jpeg
	deleted:    public/image/me1.jpg
	new file:   public/image/me2.jpeg
	new file:   public/image/me3.jpeg
	deleted:    public/image/me3.jpg
	deleted:    public/image/me4.jpeg
	new file:   public/image/me4.jpg
	new file:   public/image/me7.jpg
	deleted:    vite-to_VS/README.md
This commit is contained in:
parent 4542735373
commit 55249b5aa6
32 changed files with 298 additions and 582 deletions

View file

@ -7,18 +7,17 @@ import Link from "next/link";
// Компоненты // Компоненты
import Button from "@/components/Button"; import Button from "@/components/Button";
import Me from "@/public/image/me.jpg"; import Me from "@/public/image/me.jpeg";
import MeAbout from "@/public/image/me2.jpg"; import MeAbout from "@/public/image/me7.jpg";
import Setup from "@/public/image/setup.jpg"; import Setup from "@/public/image/setup.jpg";
import ProjectAll from "@/public/image/projects.png"; import ProjectAll from "@/public/image/projects.png";
import Hr from "@/components/Hr"; import Hr from "@/components/Hr";
// Значки // Значки
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faGithub } from "@fortawesome/free-brands-svg-icons"; import { faGithub } from "@fortawesome/free-brands-svg-icons";
import { faInstagram } from "@fortawesome/free-brands-svg-icons";
import { faLinkedin } from "@fortawesome/free-brands-svg-icons";
import { faDiscord } from "@fortawesome/free-brands-svg-icons";
import { faEnvelope } from "@fortawesome/free-solid-svg-icons"; import { faEnvelope } from "@fortawesome/free-solid-svg-icons";
import { faVk } from "@fortawesome/free-brands-svg-icons";
import { faTelegram } from "@fortawesome/free-brands-svg-icons";
const MyPage = () => { const MyPage = () => {
const fullpageOptions = { const fullpageOptions = {
@ -43,14 +42,14 @@ const MyPage = () => {
transition={{ transition={{
type: "spring", type: "spring",
}}> }}>
<div className="block md:hidden col-span-1 mx-auto my-10"> <div className="block md:hidden col-span-1 mx-auto my-5">
<div className="bg-slate-500 rounded-full h-60 w-60 grayscale hover:grayscale-0 transition-all ease duration-300"> <div className="bg-slate-500 rounded h-40 w-40 grayscale hover:grayscale-0 transition-all ease duration-300">
<Image <Image
src={Me} src={Me}
width={500} width={500}
height={500} height={500}
className="rounded-full w-full h-full object-cover " className="rounded w-half h-half object-cover "
alt="Korobtsev" alt="V.Korobtsev"
placeholder="blur" placeholder="blur"
/> />
</div> </div>
@ -73,7 +72,7 @@ const MyPage = () => {
delay: 0.3, delay: 0.3,
type: "spring", type: "spring",
}}> }}>
Разработчик, Инженер, Архитектор Главное
</motion.h1> </motion.h1>
<motion.p <motion.p
className="title text-md 2xl:text-xl mt-4 tracking-wider text-gray-500 leading-[1.7rem]" className="title text-md 2xl:text-xl mt-4 tracking-wider text-gray-500 leading-[1.7rem]"
@ -83,7 +82,7 @@ const MyPage = () => {
delay: 0.4, delay: 0.4,
type: "spring", type: "spring",
}}> }}>
Привет! Я Виталий Коробцев. Создатель "Гибридной Офисной Системы". Под моим руководством или с моим участием создано множество крупных проектов. На данном сайте я решил собрать некоторые из них и рассказать о себе и своих проектах - завершенных, текущих, планируемых. Привет! Я Виталий Коробцев. Создатель "Гибридной Офисной Системы". Под моим руководством (или с моим участием) создано множество крупных проектов. На данном сайте я решил собрать некоторые из них и рассказать о себе и своих проектах - завершенных, текущих, планируемых.
</motion.p> </motion.p>
<motion.div <motion.div
@ -95,16 +94,10 @@ const MyPage = () => {
type: "spring", type: "spring",
}}> }}>
<Button variation="primary"> <Button variation="primary">
<Link <a href="#projects">Проекты</a>
href={"/docs/cv.pdf"}
target="_blank"
rel="noopener noreferrer"
download>
Download CV
</Link>
</Button> </Button>
<Button variation="secondary"> <Button variation="secondary">
<a href="#contact">Contact Me</a> <a href="#contact">Связаться</a>
</Button> </Button>
</motion.div> </motion.div>
</motion.div> </motion.div>
@ -168,7 +161,7 @@ const MyPage = () => {
delay: 0.1, delay: 0.1,
type: "spring", type: "spring",
}}> }}>
About Me Обо мне
</motion.h1> </motion.h1>
<Hr /> <Hr />
<motion.p <motion.p
@ -179,7 +172,7 @@ const MyPage = () => {
delay: 0.2, delay: 0.2,
type: "spring", type: "spring",
}}> }}>
A brief introduction about me and my interest. Немного обо мне и моих интересах.
</motion.p> </motion.p>
<motion.div <motion.div
initial={{ y: 40, opacity: 0 }} initial={{ y: 40, opacity: 0 }}
@ -189,7 +182,7 @@ const MyPage = () => {
type: "spring", type: "spring",
}}> }}>
<Button variation="primary"> <Button variation="primary">
<Link href="/about">Learn More</Link> <Link href="/about">Читать</Link>
</Button> </Button>
</motion.div> </motion.div>
</div> </div>
@ -220,7 +213,7 @@ const MyPage = () => {
src={ProjectAll} src={ProjectAll}
layout="fill" layout="fill"
className="object-cover" className="object-cover"
alt="Korobtsev Setup" alt="Рабочее место"
placeholder="blur" placeholder="blur"
/> />
</motion.div> </motion.div>
@ -234,7 +227,7 @@ const MyPage = () => {
delay: 0.1, delay: 0.1,
type: "spring", type: "spring",
}}> }}>
My Projects Проекты
</motion.h1> </motion.h1>
<Hr /> <Hr />
<motion.p <motion.p
@ -245,10 +238,10 @@ const MyPage = () => {
delay: 0.2, delay: 0.2,
type: "spring", type: "spring",
}}> }}>
This is some of my projects that I have done{" "} Некоторые из проектов с моим учаcтием {" "}
<span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent"> <span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent">
{" "} {" "}
and currently working on. или под моим руководством.
</span> </span>
</motion.p> </motion.p>
<motion.div <motion.div
@ -259,7 +252,7 @@ const MyPage = () => {
type: "spring", type: "spring",
}}> }}>
<Button variation="primary"> <Button variation="primary">
<Link href="/projects">Learn More</Link> <Link href="/projects">Просмотреть</Link>
</Button> </Button>
</motion.div> </motion.div>
</div> </div>
@ -290,7 +283,7 @@ const MyPage = () => {
src={Setup} src={Setup}
layout="fill" layout="fill"
className="object-cover" className="object-cover"
alt="Korobtsev Setup" alt="Рабочее место"
placeholder="blur" placeholder="blur"
/> />
</motion.div> </motion.div>
@ -304,7 +297,7 @@ const MyPage = () => {
delay: 0.1, delay: 0.1,
type: "spring", type: "spring",
}}> }}>
Get In Touch Связаться
</motion.h1> </motion.h1>
<Hr /> <Hr />
<motion.p <motion.p
@ -315,9 +308,9 @@ const MyPage = () => {
delay: 0.2, delay: 0.2,
type: "spring", type: "spring",
}}> }}>
Feel free to contact me if you have any{" "} Не стесняйтесь связаться со мной,{" "}
<span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent"> <span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent">
questions or just want to say hi. можем посотрудничать и реализовать Ваш проект.
</span> </span>
</motion.p> </motion.p>
<motion.p <motion.p
@ -328,14 +321,14 @@ const MyPage = () => {
delay: 0.3, delay: 0.3,
type: "spring", type: "spring",
}}> }}>
<a href="mailto:Alvalen.shafel04@gmail.com?subject=Hello&body=Hello Korobtsev,"> <a href="mailto:vk@gossys.dev?subject=Я с сайта Korobtsev.ru&body=Приветствую Виталий!">
alvalen.shafel04@gmail.com vk@gossys.dev
</a> </a>
</motion.p> </motion.p>
{/* icons */} {/* icons */}
<div className="flex justify-center items-center space-x-4"> <div className="flex justify-center items-center space-x-4">
<motion.a <motion.a
href="mailto:Alvalen.shafel04@gmail.com?subject=Hello&body=Hello Korobtsev," href="mailto:vk@gossys.dev?subject=Я с сайта Korobtsev.ru&body=Приветствую Виталий!"
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300" className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
initial={{ y: 40, opacity: 0 }} initial={{ y: 40, opacity: 0 }}
whileInView={{ y: 0, opacity: 1 }} whileInView={{ y: 0, opacity: 1 }}
@ -347,7 +340,7 @@ const MyPage = () => {
</motion.a> </motion.a>
<motion.a <motion.a
href="https://github.com/Korobtsev" href="https://dev.gossys.dev/v.korobtsev/"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300" className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
@ -360,7 +353,7 @@ const MyPage = () => {
<FontAwesomeIcon icon={faGithub} className="text-3xl" /> <FontAwesomeIcon icon={faGithub} className="text-3xl" />
</motion.a> </motion.a>
<motion.a <motion.a
href="https://www.instagram.com/Korobtsev_/" href="https://vk.ru/Miguelle74/"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300" className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
@ -371,12 +364,12 @@ const MyPage = () => {
opacity: { delay: 0.4 }, opacity: { delay: 0.4 },
}}> }}>
<FontAwesomeIcon <FontAwesomeIcon
icon={faInstagram} icon={faVk}
className="text-3xl" className="text-3xl"
/> />
</motion.a> </motion.a>
<motion.a <motion.a
href="https://www.linkedin.com/in/alvalen-shafel-8a081a254/" href="https://t.me/Gosys_Maestro/"
target="_blank" target="_blank"
rel="noopener noreferrer" rel="noopener noreferrer"
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300" className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
@ -386,20 +379,8 @@ const MyPage = () => {
y: { delay: 0.4 }, y: { delay: 0.4 },
opacity: { delay: 0.5 }, opacity: { delay: 0.5 },
}}> }}>
<FontAwesomeIcon icon={faLinkedin} className="text-3xl" /> <FontAwesomeIcon icon={faTelegram}
</motion.a> className="text-3xl" />
<motion.a
href="https://discordapp.com/users/bloody#6118"
target="_blank"
rel="noopener noreferrer"
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
initial={{ opacity: 0, y: 40 }}
whileInView={{ opacity: 1, y: 0 }}
transition={{
y: { delay: 0.5 },
opacity: { delay: 0.6 },
}}>
<FontAwesomeIcon icon={faDiscord} className="text-3xl" />
</motion.a> </motion.a>
</div> </div>
</div> </div>

View file

@ -1,9 +1,8 @@
import Image from "next/image"; import Image from "next/image";
import Card from "./spotify/card";
import { motion } from "framer-motion"; import { motion } from "framer-motion";
import Me1 from "@/public/image/me1.jpg"; import Me1 from "@/public/image/me1.jpeg";
import Me2 from "@/public/image/me2.jpg"; import Me2 from "@/public/image/me2.jpeg";
import Me3 from "@/public/image/me3.jpg"; import Me3 from "@/public/image/me4.jpg";
import Hr from "@/components/Hr"; import Hr from "@/components/Hr";
function Title() { function Title() {
@ -11,7 +10,7 @@ function Title() {
<div className="mt-10 flex flex-col justify-start items-center w-full pl-10 md:pl-32"> <div className="mt-10 flex flex-col justify-start items-center w-full pl-10 md:pl-32">
<div className="flex justify-center items-center flex-col my-5 self-start "> <div className="flex justify-center items-center flex-col my-5 self-start ">
<Hr variant="long"></Hr> <Hr variant="long"></Hr>
<h1 className="text-3xl font-bold mt-3">Who Am I?</h1> <h1 className="text-3xl font-bold mt-3">Обо мне</h1>
</div> </div>
</div> </div>
); );
@ -35,7 +34,7 @@ export default function About() {
className="w-full h-full"> className="w-full h-full">
<Image <Image
src={Me1} src={Me1}
alt="Korobtsev" alt="Korobtsev.ru"
layout="fill" layout="fill"
objectFit="cover" objectFit="cover"
placeholder="blur" placeholder="blur"
@ -108,13 +107,13 @@ export default function About() {
type: "spring", type: "spring",
}}> }}>
<h2 className="text-2xl font-bold tracking-wider mb-3"> <h2 className="text-2xl font-bold tracking-wider mb-3">
Alvalen Shafelbilyunazra Виталий Коробцев
</h2> </h2>
<p className="text-gray-600 text-justify title text-lg"> <p className="text-gray-600 text-justify title text-lg">
Hey there, I&rsquo;m Alvalen Shafelbilyunazra, a Привет! Я Виталий Коробцев,
<span className="text-black font-medium"> <span className="text-black font-medium">
{" "} {" "}
passionate Web Developer разработчик, архитектор,
</span>{" "} </span>{" "}
with a growing expertise in with a growing expertise in
<span className="text-black font-medium"> <span className="text-black font-medium">
@ -139,7 +138,6 @@ export default function About() {
essential. Let&rsquo;s connect and explore the evolving intersection essential. Let&rsquo;s connect and explore the evolving intersection
of web and AI together! of web and AI together!
</p> </p>
<Card />
</motion.div> </motion.div>
</div> </div>
</> </>

View file

@ -1,25 +0,0 @@
import { motion } from "framer-motion";
const PlayingAnimation = () => {
return (
<div className="relative flex justify-between w-4 h-8 space-x-1">
<motion.span
className="w-1 h-full bg-gray-500 rounded-full"
animate={{ scaleY: [0.3, 1, 0.5, 0.75, 0.5] }}
transition={{ duration: 2.2, repeat: Infinity }}
/>
<motion.span
className="w-1 h-full bg-gray-500 rounded-full"
animate={{ scaleY: [0.3, 1, 0.5, 0.75, 0.5] }}
transition={{ duration: 2.2, repeat: Infinity, delay: -2 }}
/>
<motion.span
className="w-1 h-full bg-gray-500 rounded-full"
animate={{ scaleY: [0.3, 1, 0.5, 0.75, 0.5] }}
transition={{ duration: 2.2, repeat: Infinity, delay: -3.7 }}
/>
</div>
);
};
export default PlayingAnimation;

View file

@ -1,79 +0,0 @@
import React, { useEffect, useState } from "react";
import getNowPlayingItem from "./fetch";
import PlayingAnimation from "./animation";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faSpotify } from "@fortawesome/free-brands-svg-icons";
import Image from "next/image";
const Card = () => {
const [loading, setLoading] = useState(true);
const [result, setResult] = useState({});
useEffect(() => {
const fetchData = async () => {
const results = await Promise.all([getNowPlayingItem()]);
console.log(results);
setResult(results[0]);
setLoading(false);
};
fetchData(); // Fetch data immediately on component mount
const intervalId = setInterval(fetchData, 60 * 1000); // ! Fetch data every minute: temporary
return () => clearInterval(intervalId);
}, []);
return (
<div className="mt-3 flex justify-center w-full">
{loading ? (
<div className="flex justify-center mb-8">
{/* Replace this with your own loading spinner */}
<div className="loader ease-linear rounded-full border-4 border-t-4 border-black h-12 w-12 mb-4"></div>
</div>
) : (
<div className="relative w-full mb-8 grid grid-cols-2 gap-2 border-2 border-gray-500 p-4 rounded-lg backdrop-filter backdrop-blur-lg bg-white bg-opacity-30">
{result.isPlaying && (
<Image
src={result.albumImageUrl}
alt="backgroundImage"
layout="fill"
objectFit="cover"
className="z-0 opacity-20 absolute"
/>
)}
<div className="z-10 flex items-center">
<FontAwesomeIcon
icon={faSpotify}
className="text-black text-5xl me-5 md:me-1 xl:me-8"
/>
<p className="font-semibold me-5 md:me-1 xl:me-7">
{result.isPlaying
? "Now playing"
: "Currently offline"}
</p>
{result.isPlaying && <PlayingAnimation />}
</div>
{result.isPlaying && (
<div className="z-10 rounded-lg ms-5">
<div className="flex items-center space-x-4">
<div className="overflow-hidden">
<a
href={result.songUrl ? encodeURI(result.songUrl) : "#"}
target="_blank"
className="block font-semibold w-full truncate text-blue-500">
{result.title}
</a>
<p className="truncate text-gray-500">
{result.artist}
</p>
</div>
</div>
</div>
)}
</div>
)}
</div>
);
};
export default Card;

View file

@ -1,53 +0,0 @@
import querystring from "querystring";
const TOKEN_ENDPOINT = `https://accounts.spotify.com/api/token`;
const NOW_PLAYING_ENDPOINT = `https://api.spotify.com/v1/me/player/currently-playing`;
const client_id = process.env.NEXT_PUBLIC_SPOTIFY_CLIENT_ID;
const client_secret = process.env.NEXT_PUBLIC_SPOTIFY_CLIENT_SECRET;
const refresh_token = process.env.NEXT_PUBLIC_SPOTIFY_REFRESH_TOKEN;
const basic = Buffer.from(`${client_id}:${client_secret}`).toString("base64");
const getAccessToken = async () => {
const response = await fetch(TOKEN_ENDPOINT, {
method: "POST",
headers: {
Authorization: `Basic ${basic}`,
"Content-Type": "application/x-www-form-urlencoded",
},
body: querystring.stringify({
grant_type: "refresh_token",
refresh_token,
}),
});
return response.json();
};
export const getNowPlaying = async () => {
const { access_token } = await getAccessToken();
return fetch(NOW_PLAYING_ENDPOINT, {
headers: {
Authorization: `Bearer ${access_token}`,
},
});
};
export default async function getNowPlayingItem() {
const response = await getNowPlaying();
if (response.status === 204 || response.status > 400) {
return false;
}
const song = await response.json();
const albumImageUrl = song.item.album.images[0].url;
const artist = song.item.artists.map((_artist) => _artist.name).join(", ");
const isPlaying = song.is_playing;
const songUrl = song.item.external_urls.spotify;
const title = song.item.name;
return {
albumImageUrl,
artist,
isPlaying,
songUrl,
title,
};
}

View file

@ -10,7 +10,7 @@ import {
} from "@fortawesome/free-solid-svg-icons"; } from "@fortawesome/free-solid-svg-icons";
import { motion, AnimatePresence } from "framer-motion"; import { motion, AnimatePresence } from "framer-motion";
import { useState } from "react"; import { useState } from "react";
import Me4 from "@/public/image/me4.jpeg"; import Me4 from "@/public/image/me4.jpg";
import Me5 from "@/public/image/me5.jpg"; import Me5 from "@/public/image/me5.jpg";
import Me6 from "@/public/image/me6.jpg"; import Me6 from "@/public/image/me6.jpg";

View file

@ -1,7 +1,7 @@
import Footer from "@/components/Footer"; import Footer from "@/components/Footer";
export const metadata = { export const metadata = {
title: "Korobtsev | About" title: "Korobtsev.ru | Обо мне"
}; };
export default function Layout({ children }) { export default function Layout({ children }) {
return ( return (

View file

@ -1,7 +1,7 @@
export default function Loading() { export default function Loading() {
return ( return (
<div className="fixed top-0 left-0 flex justify-center items-center h-screen w-screen bg-gray-300 z-[999]"> <div className="fixed top-0 left-0 flex justify-center items-center h-screen w-screen bg-gray-300 z-[999]">
<h1 className="text-4xl text-gray-900">Loading...</h1> <h1 className="text-4xl text-gray-900">Загрузка...</h1>
</div> </div>
); );
} }

View file

@ -13,7 +13,7 @@ import Experience from "./components/experience.jsx";
import Education from "./components/education.jsx"; import Education from "./components/education.jsx";
// images // images
import Hero from "@/public/image/me2.jpg"; import Hero from "@/public/image/me2.jpeg";
import Hr from "@/components/Hr"; import Hr from "@/components/Hr";
import About from "./components/about/about.jsx"; import About from "./components/about/about.jsx";
@ -42,7 +42,7 @@ export default function Page() {
className="bg-slate-300 rounded-sm h-[400px] md:h-[600px] w-[80vw] md:w-[30vw] grayscale hover:grayscale-0 "> className="bg-slate-300 rounded-sm h-[400px] md:h-[600px] w-[80vw] md:w-[30vw] grayscale hover:grayscale-0 ">
<Image <Image
src={Hero} src={Hero}
alt="Alvalen Shafel" alt="Виталий Коробцев"
layout="fill" layout="fill"
objectFit="cover" objectFit="cover"
placeholder="blur" placeholder="blur"
@ -55,10 +55,10 @@ export default function Page() {
</h1> </h1>
<Hr /> <Hr />
<p className="title text-xl mt-4 tracking-wider text-gray-900 leading-[1.7rem] mb-5 "> <p className="title text-xl mt-4 tracking-wider text-gray-900 leading-[1.7rem] mb-5 ">
A brief introduction about me and{" "} Немного обо мне и{" "}
<span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent"> <span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent">
{" "} {" "}
my interest. моих интересах.
</span> </span>
</p> </p>
<motion.div <motion.div
@ -72,7 +72,7 @@ export default function Page() {
}); });
}} }}
className="mb-3"> className="mb-3">
<Button variation="primary">Scroll Down</Button> <Button variation="primary">Прокрути</Button>
</motion.div> </motion.div>
</div> </div>
</div> </div>

View file

@ -5,46 +5,45 @@ import "@fortawesome/fontawesome-svg-core/styles.css";
config.autoAddCss = false; config.autoAddCss = false;
import "./nprogress.css"; import "./nprogress.css";
import { Analytics } from "@vercel/analytics/react"; import { Analytics } from "@vercel/analytics/react";
import Chat from "@/components/Chat";
import ClientTopProgressBar from "@/components/ClientTopProgressBar"; import ClientTopProgressBar from "@/components/ClientTopProgressBar";
export const metadata = { export const metadata = {
title: "Korobtsev | Portofolio", title: "Korobtsev.ru | Личный сайт",
description: description:
"My name is Korobtsev, I'm a web developer and I'm passionate about it. I'm currently studying at Universitas Negeri Malang.", "Всем привет! Я Виталий Коробцев и это мой личный сайт! Я хочу рассказать Вам о себе и своих проектах.",
author: "Alvalen Shafelbilyunazra", author: "Виталий Коробцев",
siteUrl: "https://www.korobtsev.ru", siteUrl: "https://www.korobtsev.ru",
applicationName: "Korobtsev", applicationName: "Korobtsev.ru",
keywords: [ keywords: [
"Korobtsev", "Korobtsev",
"alvalen", "Коробцев",
"alvalen shafel", "Виталий Коробцев",
"shafel", "Miguelle74",
"alvalen shafelbilyunazra", "Госис",
"alvalen shafel bilyunazra", "Гибридная Офисная Система",
"bloodfallen", "ОСГОС",
"alvalen porto", "Новый Крым",
"alvalen um", "Технико",
], ],
openGraph: { openGraph: {
type: "website", type: "website",
url: "https://www.korobtsev.ru", url: "https://www.korobtsev.ru",
title: "Korobtsev | Portofolio", title: "Korobtsev.ru | Личный сайт",
site_name: "Korobtsev | Portofolio", site_name: "Korobtsev.ru | Личный сайт",
description: "My name is Korobtsev, This is my portofolio website.", description: "My name is Vitaliy Korobtsev, This is my website.",
width: 1200, width: 1200,
height: 630, height: 630,
images: [ images: [
{ {
url: "/og-image-rev.png", url: "/og-image-rev.png",
alt: "Korobtsev Portofolio", alt: "Korobtsev ",
}, },
], ],
site_name: "Korobtsev | Portofolio", site_name: "Korobtsev.ru | Личный сайт",
} }
}; };
@ -55,7 +54,6 @@ export default function RootLayout({ children }) {
<ClientTopProgressBar /> <ClientTopProgressBar />
<Navbar /> <Navbar />
{children} {children}
<Chat />
<Analytics /> <Analytics />
</body> </body>
</html> </html>

View file

@ -10,7 +10,7 @@ const NotFound = () => (
<div className="flex justify-center items-center flex-col mb-5 space-y-10"> <div className="flex justify-center items-center flex-col mb-5 space-y-10">
<div> <div>
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400 text-center"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400 text-center">
Page not found А тут совсем ничего нет...
</h2> </h2>
<h1 className="text-4xl font-medium text-neutral-900 text-center"> <h1 className="text-4xl font-medium text-neutral-900 text-center">
404 404
@ -20,7 +20,7 @@ const NotFound = () => (
<button <button
onClick={() => window.history.back()} onClick={() => window.history.back()}
className="text-lg text-neutral-900 hover:text-neutral-800 text-center border-2 border-gray-800 rounded-xl p-3 py-2 mt-2"> className="text-lg text-neutral-900 hover:text-neutral-800 text-center border-2 border-gray-800 rounded-xl p-3 py-2 mt-2">
Go Back Назад
</button> </button>
</div> </div>
</div> </div>

View file

@ -114,7 +114,7 @@ function Page(props) {
<div className="min-h-screen sm:min-h-0 flex justify-center items-start flex-col mb-5 space-y-10 mx-auto"> <div className="min-h-screen sm:min-h-0 flex justify-center items-start flex-col mb-5 space-y-10 mx-auto">
<div> <div>
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400">
Project Проект
</h2> </h2>
<h1 className="text-4xl font-medium text-neutral-900"> <h1 className="text-4xl font-medium text-neutral-900">
{data.title} {data.title}
@ -122,7 +122,7 @@ function Page(props) {
</div> </div>
<div> <div>
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400">
Technology Технологии
</h2> </h2>
<p className="text-2xl font-normal text-neutral-900"> <p className="text-2xl font-normal text-neutral-900">
{data.tech.join(", ")} {data.tech.join(", ")}
@ -130,7 +130,7 @@ function Page(props) {
</div> </div>
<div> <div>
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400">
Year Год(ы)
</h2> </h2>
<p className="text-2xl font-normal text-neutral-900"> <p className="text-2xl font-normal text-neutral-900">
{data.year} {data.year}
@ -139,14 +139,14 @@ function Page(props) {
{data.preview && ( {data.preview && (
<div> <div>
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400">
Preview Посмотреть
</h2> </h2>
<p className="text-2xl font-normal text-neutral-900"> <p className="text-2xl font-normal text-neutral-900">
<a <a
href={data.preview} href={data.preview}
target="_blank" target="_blank"
rel="noopener noreferrer"> rel="noopener noreferrer">
Preview{" "} Перейти{" "}
<FontAwesomeIcon <FontAwesomeIcon
icon={faArrowUpRightFromSquare} icon={faArrowUpRightFromSquare}
className="ml-3" className="ml-3"
@ -158,7 +158,7 @@ function Page(props) {
{data.code && ( {data.code && (
<div> <div>
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400">
Source Code Код (для Open Source)
</h2> </h2>
<p className="text-2xl font-normal text-neutral-900"> <p className="text-2xl font-normal text-neutral-900">
<a <a
@ -177,7 +177,7 @@ function Page(props) {
</div> </div>
<div className="flex justify-start items-start flex-col mb-5 "> <div className="flex justify-start items-start flex-col mb-5 ">
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400"> <h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400">
Description Описание
</h2> </h2>
{data.desc.map((desc, index) => ( {data.desc.map((desc, index) => (
<p <p

View file

@ -73,10 +73,10 @@ export default function Page() {
<table className="space-y-3"> <table className="space-y-3">
<thead> <thead>
<tr className=" hover:shadow-md transition-all ease duration-500"> <tr className=" hover:shadow-md transition-all ease duration-500">
<th className="text-start">Year</th> <th className="text-start">Год создания</th>
<th className="text-start">Title</th> <th className="text-start">Название</th>
<th className="text-start">Technology</th> <th className="text-start">Технологии</th>
<th className="text-start">Link</th> <th className="text-start">Ссылки</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

View file

@ -2,7 +2,7 @@
import Footer from "@/components/Footer"; import Footer from "@/components/Footer";
export const metadata = { export const metadata = {
title: "Korobtsev | Projects" title: "Korobtsev.ru | Проекты"
}; };
export default function Layout({ children }) { export default function Layout({ children }) {
return ( return (

View file

@ -1,7 +1,7 @@
export default function Loading() { export default function Loading() {
return ( return (
<div className="fixed top-0 left-0 flex justify-center items-center h-screen w-screen bg-gray-300 z-[999]"> <div className="fixed top-0 left-0 flex justify-center items-center h-screen w-screen bg-gray-300 z-[999]">
<h1 className="text-4xl text-gray-900">Loading...</h1> <h1 className="text-4xl text-gray-900">Загрузка...</h1>
</div> </div>
); );
} }

View file

@ -19,9 +19,9 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faChevronLeft } from "@fortawesome/free-solid-svg-icons"; import { faChevronLeft } from "@fortawesome/free-solid-svg-icons";
const category = { const category = {
1: "Web Development", 1: "WEB разработка",
2: "AI & Machine Learning", 2: "Linux и ПО",
9: "Other", 9: "Другие",
}; };
export default function Page() { export default function Page() {
@ -55,14 +55,14 @@ export default function Page() {
</div> </div>
<div className="z-10 w-full absolute md:w-auto md:left-[10%] top-[60%] md:top-1/3 col-span-2 flex flex-col justify-center items-start md:items-start text-start px-10 pt-4 backdrop-filter backdrop-blur-sm md:backdrop-blur-none md:backdrop-filter-none bg-gray-100 bg-opacity-50 md:bg-transparent md:pt-0"> <div className="z-10 w-full absolute md:w-auto md:left-[10%] top-[60%] md:top-1/3 col-span-2 flex flex-col justify-center items-start md:items-start text-start px-10 pt-4 backdrop-filter backdrop-blur-sm md:backdrop-blur-none md:backdrop-filter-none bg-gray-100 bg-opacity-50 md:bg-transparent md:pt-0">
<h1 className="md:bg-white bg-transparent lg:bg-transparent bg-opacity-50 md-px-0 text-black text-5xl md:text-8xl font-bold"> <h1 className="md:bg-white bg-transparent lg:bg-transparent bg-opacity-50 md-px-0 text-black text-5xl md:text-8xl font-bold">
My Projects Проекты
</h1> </h1>
<Hr /> <Hr />
<p className="title text-xl mt-4 tracking-wider text-gray-900 leading-[1.7rem] mb-5"> <p className="title text-xl mt-4 tracking-wider text-gray-900 leading-[1.7rem] mb-5">
List of my projects that I have done and{" "} Некоторые из проектов с моим учаcтием{" "}
<span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent"> <span className="bg-transparent md:bg-gray-100 bg-opacity-50 xl:bg-transparent">
{" "} {" "}
currently working on. или под моим руководством.
</span> </span>
</p> </p>
<motion.div <motion.div
@ -76,14 +76,14 @@ export default function Page() {
}); });
}} }}
className="mb-3"> className="mb-3">
<Button variation="primary">Scroll Down</Button> <Button variation="primary">Прокрутить</Button>
</motion.div> </motion.div>
</div> </div>
</div> </div>
<div className="mt-10 flex flex-col justify-start items-center w-full pl-10 md:pl-32"> <div className="mt-10 flex flex-col justify-start items-center w-full pl-10 md:pl-32">
<div className="flex justify-center items-center flex-col my-5 self-start "> <div className="flex justify-center items-center flex-col my-5 self-start ">
<Hr variant="long"></Hr> <Hr variant="long"></Hr>
<h1 className="text-3xl font-bold mt-3">Hightlight</h1> <h1 className="text-3xl font-bold mt-3">Основное</h1>
</div> </div>
</div> </div>
<div className="relative w-screen mx-auto container gap-4 px-10 grid grid-cols-1 md:grid-cols-2 mb-10"> <div className="relative w-screen mx-auto container gap-4 px-10 grid grid-cols-1 md:grid-cols-2 mb-10">
@ -174,28 +174,28 @@ export default function Page() {
type: "spring", type: "spring",
}}> }}>
<h2 className="text-2xl font-bold tracking-wider mb-3"> <h2 className="text-2xl font-bold tracking-wider mb-3">
Intervyou AI ОС ОСГОС
</h2> </h2>
<p className="text-gray-600 text-justify title text-lg"> <p className="text-gray-600 text-justify title text-lg">
AI Based interview Preparation Website created to help fresh Операционная система на ядре Debian linux актуальной версии.
graduates and job seekers prepare for interviews and optimize Изначально разрабатывалась для одного из Государственных заказчиков.
their CV through AI-powered features. The website is built using На данный момент проект построен на Debian 13, имеет собственные репозитории
Next.js, TypeScript, Tailwind CSS, Shadcn UI, Prisma, and MySQL и магазин приложений, инфраструктуру технической поддержки. Проект поддерживается
(TiDB). This website can comprehensively analyze the user&apos;s и активно развивается, обрастая собственными сервисами и ПО, несмотря на
interview performance by providing a analysis of the user&apos;s высокую конкуренцию в данном серменте.
answer, gesture, and material recommendation to improve the user&apos;s Разработано несколько вариантов дистрибутива, в том числе и специализированные версии.
interview skills. Серверное направление выделено в отдельный продукт.
</p>{" "} </p>{" "}
<div className="mt-3"> <div className="mt-3">
<Button variation="primary"> <Button variation="primary">
<Link href="projects/intervyou">More</Link> <Link href="projects/intervyou">Больше</Link>
</Button> </Button>
<Button variation="secondary"> <Button variation="secondary">
<a <a
href="https://www.intervyou.me" href="https://www.osgos.ru"
target="_blank" target="_blank"
rel="noopener noreferrer"> rel="noopener noreferrer">
Preview Просмотреть
</a> </a>
</Button> </Button>
</div> </div>
@ -218,7 +218,7 @@ export default function Page() {
delay: 0.7, delay: 0.7,
type: "spring", type: "spring",
}}> }}>
Other Note Worthy Projects Другие ключевые проекты
</motion.h1> </motion.h1>
</div> </div>
</div> </div>
@ -272,7 +272,7 @@ export default function Page() {
}} }}
className="flex justify-center items-center flex-col my-5 self-start "> className="flex justify-center items-center flex-col my-5 self-start ">
<Button variation="primary"> <Button variation="primary">
<Link href="projects/archive">View In Archive</Link> <Link href="projects/archive">Посмотреть все</Link>
</Button> </Button>
</motion.div> </motion.div>
</main> </main>

View file

@ -1,35 +0,0 @@
// components/Intelliticks.js
"use client"
import { useEffect } from "react";
// Component for Intelliticks chat widget
const Chat = () => {
useEffect(() => {
// Paste the Intelliticks script here
(function (I, L, T, i, c, k, s) {
if (I.iticks) return;
I.iticks = { host: c, settings: s, clientId: k, cdn: L, queue: [] };
var h = T.head || T.documentElement;
var e = T.createElement(i);
var l = I.location;
e.async = true;
e.src = (L || c) + "/client/inject-v2.min.js";
h.insertBefore(e, h.firstChild);
I.iticks.call = function (a, b) {
I.iticks.queue.push([a, b]);
};
})(
window,
"https://cdn-v1.intelliticks.com/prod/common",
document,
"script",
"https://app.intelliticks.com",
"u3cWw3sDpdKexqXCY_c",
{}
);
}, []);
return null;
};
export default Chat;

View file

@ -23,7 +23,7 @@ export default function Footer() {
transition={{ transition={{
delay: 0.2, delay: 0.2,
}}> }}>
Want something like this? Что-то заинтересовало?
</motion.h2> </motion.h2>
<motion.h1 <motion.h1
className="text-5xl md:text-7xl font-medium mt-3 hover:underline whitespace-nowrap leading-none" className="text-5xl md:text-7xl font-medium mt-3 hover:underline whitespace-nowrap leading-none"
@ -38,7 +38,7 @@ export default function Footer() {
transition={{ transition={{
delay: 0.5, delay: 0.5,
}}> }}>
Get In Touch{" "} Связаться{" "}
<FontAwesomeIcon <FontAwesomeIcon
icon={faArrowAltCircleRight} icon={faArrowAltCircleRight}
className="text-5xl ml-2 " className="text-5xl ml-2 "
@ -49,7 +49,7 @@ export default function Footer() {
<footer className="flex justify-center items-center flex-col my-5 self-start]"> <footer className="flex justify-center items-center flex-col my-5 self-start]">
<p className="text-gray-800 text-sm"> <p className="text-gray-800 text-sm">
&copy;{new Date().getFullYear()} -{" "} &copy;{new Date().getFullYear()} -{" "}
<span className="text-gray-700 text-lg">Korobtsev</span> <span className="text-gray-700 text-lg">Korobtsev.ru</span>
</p> </p>
</footer> </footer>
</div> </div>

View file

@ -117,7 +117,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => {
variants={itemVariants} variants={itemVariants}
animate={isNavOpen ? "open" : "closed"} animate={isNavOpen ? "open" : "closed"}
className="text-6xl font-bold text-white "> className="text-6xl font-bold text-white ">
Menu Меню
</motion.h1> </motion.h1>
<Link href="/#home"> <Link href="/#home">
<div <div
@ -128,7 +128,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => {
variants={itemVariants} variants={itemVariants}
animate={isNavOpen ? "open" : "closed"} animate={isNavOpen ? "open" : "closed"}
custom={0.1}> custom={0.1}>
Home Главная
</motion.h2> </motion.h2>
</div> </div>
</Link> </Link>
@ -141,7 +141,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => {
variants={itemVariants} variants={itemVariants}
animate={isNavOpen ? "open" : "closed"} animate={isNavOpen ? "open" : "closed"}
custom={0.2}> custom={0.2}>
About Обо мне
</motion.h2> </motion.h2>
</div> </div>
</Link> </Link>
@ -154,7 +154,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => {
variants={itemVariants} variants={itemVariants}
animate={isNavOpen ? "open" : "closed"} animate={isNavOpen ? "open" : "closed"}
custom={0.3}> custom={0.3}>
Projects Проекты
</motion.h2> </motion.h2>
</div> </div>
</Link> </Link>
@ -167,7 +167,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => {
variants={itemVariants} variants={itemVariants}
animate={isNavOpen ? "open" : "closed"} animate={isNavOpen ? "open" : "closed"}
custom={0.4}> custom={0.4}>
Contact Контакты
</motion.h2> </motion.h2>
</div> </div>
</Link> </Link>
@ -200,7 +200,7 @@ const Navbar = () => {
className={`text-2xl ml-2 md:ml-0 transition-colors ease duration-500 ${ className={`text-2xl ml-2 md:ml-0 transition-colors ease duration-500 ${
isNavOpen ? "text-white" : "" isNavOpen ? "text-white" : ""
}`}> }`}>
Korobtsev Korobtsev.ru
</h1> </h1>
</div> </div>
<div className="flex flex-row items-center"> <div className="flex flex-row items-center">

View file

@ -2,14 +2,15 @@
"Projects": [ "Projects": [
{ {
"show": true, "show": true,
"title": "Invervyou AI", "title": "ОС ОСГОС",
"desc": [ "desc": [
"AI Based interview Preparation Website created to help fresh graduates and job seekers prepare for interviews and optimize their CV through AI-powered features. The website is built using Next.js, TypeScript, Tailwind CSS, Shadcn UI, Prisma, and MySQL (TiDB).", "Операционная система Основная Составляющая Гибридной Офисной Системы - ОС ОСГОС, построена на ядре Debian linux актуальной версии. Является десктопной операционной системой общего назначения для использования до уровня секретности КС-4. Имеет свидетельство о Государственной регистрации. Изначально ОС разрабатывалась для одного из Государственных заказчиков.",
"The website has a few features such as a dashboard for the user to see their interview preparation progress, a CV analysis and optimization feature, and a few AI-powered interview questions that can be answered by the user which will be analyzed by the AI to provide feedback. The analysis contains the answer analysis, the gesture analysis, and a material recommendation to improve the user's performance.", "ОС имеет собственные репозитории и магазин приложений, инфраструктуру технической поддержки. Проект поддерживается и активно развивается, обрастая собственными сервисами и ПО. Разработано несколько вариантов дистрибутива, в том числе и специализированные версии.",
"The website also has a token mechanism that allows the user to purchase tokens to access the AI-powered features. Integrated with Indonesian payment gateway (Midtrans) to allow users to purchase tokens easily." "Основной упор при разработке был сделан на легкую интеграцию в существующую инфраструктуру, построенную на технологиях Microsoft. В результате ОС может бесшовно интегрироваться в гибридную экосистему без потери предоставляемого ей функционала. ОС может работать как в открытом, так и в полностью замкнутом стетевом периметре, обращаясь к локальным серверам обновления. Для поддержки ОС созданы все необходимые сервисы и дополнительное ПО, как на базе Open-Sourse продуктов, так и разработанное с нуля.",
"Второй целью являлась простота перехода Пользователя на ОС ОСГОС с других операционных систем и нетребовательность к железу. По результатам тестирования - все поставленные цели были достигнуты."
], ],
"year": "2025", "year": "2022-Текущий",
"preview": "https://www.intervyou.me", "preview": "https://osgos.ru",
"code": "", "code": "",
"thumbnail": "/image/projects/web/intervyou/intervyou-thumbnail.jpg", "thumbnail": "/image/projects/web/intervyou/intervyou-thumbnail.jpg",
"images": [ "images": [
@ -20,15 +21,16 @@
"/image/projects/web/intervyou/intervyou-5.png" "/image/projects/web/intervyou/intervyou-5.png"
], ],
"tech": [ "tech": [
"NextJS", "C",
"Typescript", "C#",
"Shadcn UI", "Bash",
"Tailwind CSS", "Go",
"Prisma", "Python",
"MySQL", "Web Dev",
"Midtrans", "Database",
"Gemini API", "Руководство",
"GCP" "Архитектура",
"Инфраструктура"
], ],
"slug": "intervyou", "slug": "intervyou",
"category": [1, 2] "category": [1, 2]

340
pnpm-lock.yaml generated
View file

@ -9,35 +9,35 @@ importers:
.: .:
dependencies: dependencies:
'@fortawesome/fontawesome-svg-core': '@fortawesome/fontawesome-svg-core':
specifier: ^7.0.0 specifier: ^7.0.1
version: 7.0.0 version: 7.0.1
'@fortawesome/free-brands-svg-icons': '@fortawesome/free-brands-svg-icons':
specifier: ^7.0.0 specifier: ^7.0.1
version: 7.0.0 version: 7.0.1
'@fortawesome/free-regular-svg-icons': '@fortawesome/free-regular-svg-icons':
specifier: ^7.0.0 specifier: ^7.0.1
version: 7.0.0 version: 7.0.1
'@fortawesome/free-solid-svg-icons': '@fortawesome/free-solid-svg-icons':
specifier: ^7.0.0 specifier: ^7.0.1
version: 7.0.0 version: 7.0.1
'@fortawesome/react-fontawesome': '@fortawesome/react-fontawesome':
specifier: ^0.2.3 specifier: ^0.2.6
version: 0.2.3(@fortawesome/fontawesome-svg-core@7.0.0)(react@19.1.1) version: 0.2.6(@fortawesome/fontawesome-svg-core@7.0.1)(react@19.1.1)
'@fullpage/react-fullpage': '@fullpage/react-fullpage':
specifier: ^0.1.49 specifier: ^0.1.49
version: 0.1.49 version: 0.1.49
'@tailwindcss/postcss': '@tailwindcss/postcss':
specifier: ^4.1.11 specifier: ^4.1.13
version: 4.1.11 version: 4.1.13
'@vercel/analytics': '@vercel/analytics':
specifier: ^1.5.0 specifier: ^1.5.0
version: 1.5.0(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1) version: 1.5.0(next@15.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
eslint: eslint:
specifier: 9.33.0 specifier: 9.33.0
version: 9.33.0(jiti@2.4.2) version: 9.33.0(jiti@2.5.1)
eslint-config-next: eslint-config-next:
specifier: 15.4.6 specifier: 15.4.6
version: 15.4.6(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) version: 15.4.6(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
framer-motion: framer-motion:
specifier: ^12.23.12 specifier: ^12.23.12
version: 12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) version: 12.23.12(@emotion/is-prop-valid@0.8.8)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@ -88,10 +88,6 @@ packages:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'} engines: {node: '>=10'}
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
'@babel/polyfill@7.12.1': '@babel/polyfill@7.12.1':
resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==}
deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.
@ -159,28 +155,28 @@ packages:
resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fortawesome/fontawesome-common-types@7.0.0': '@fortawesome/fontawesome-common-types@7.0.1':
resolution: {integrity: sha512-PGMrIYXLGA5K8RWy8zwBkd4vFi4z7ubxtet6Yn13Plf6krRTwPbdlCwlcfmoX0R7B4Z643QvrtHmdQ5fNtfFCg==} resolution: {integrity: sha512-0VpNtO5cNe1/HQWMkl4OdncYK/mv9hnBte0Ew0n6DMzmo3Q3WzDFABHm6LeNTipt5zAyhQ6Ugjiu8aLaEjh1gg==}
engines: {node: '>=6'} engines: {node: '>=6'}
'@fortawesome/fontawesome-svg-core@7.0.0': '@fortawesome/fontawesome-svg-core@7.0.1':
resolution: {integrity: sha512-obBEF+zd98r/KtKVW6A+8UGWeaOoyMpl6Q9P3FzHsOnsg742aXsl8v+H/zp09qSSu/a/Hxe9LNKzbBaQq1CEbA==} resolution: {integrity: sha512-x0cR55ILVqFpUioSMf6ebpRCMXMcheGN743P05W2RB5uCNpJUqWIqW66Lap8PfL/lngvjTbZj0BNSUweIr/fHQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
'@fortawesome/free-brands-svg-icons@7.0.0': '@fortawesome/free-brands-svg-icons@7.0.1':
resolution: {integrity: sha512-C8oY28gq/Qx/cHReJa2AunKJUHvUZDVoPlSTHtAvjriaNfi+5nugW4cx7yA/xN3f/nYkElw11gFBoJ2xUDDFgg==} resolution: {integrity: sha512-6xPmn5SrND/GM0+W33E77x05+aDn6RpR02eWd8eLdN0IxY0vXa5yU/ugaAKloOVxiG9w2330TSRsbJYL6c57Ow==}
engines: {node: '>=6'} engines: {node: '>=6'}
'@fortawesome/free-regular-svg-icons@7.0.0': '@fortawesome/free-regular-svg-icons@7.0.1':
resolution: {integrity: sha512-qAh0mTaCY22sQzMK2lKBrtn/aR4keUu5XmtdYR7d702laMe0h+Ab4Kj2pExR9HZkKhjKoq8pbwt8Td+mjW/ipQ==} resolution: {integrity: sha512-4V9fHbHjcx9Qu4O99AM5B4zuEDfB4zajk1I77hEzOxPN00f8g3484Aeq6WpfFcmookvjLE3Pr71Dhf/lqw7tbA==}
engines: {node: '>=6'} engines: {node: '>=6'}
'@fortawesome/free-solid-svg-icons@7.0.0': '@fortawesome/free-solid-svg-icons@7.0.1':
resolution: {integrity: sha512-njSLAllkOddYDCXgTFboXn54Oe5FcvpkWq+FoetOHR64PbN0608kM02Lze0xtISGpXgP+i26VyXRQA0Irh3Obw==} resolution: {integrity: sha512-esKuSrl1WMOTMDLNt38i16VfLe/gRZt2ZAJ3Yw7slfs7sj583MKqNFqO57zmhknk1Sya6f9Wys89aCzIJkcqlg==}
engines: {node: '>=6'} engines: {node: '>=6'}
'@fortawesome/react-fontawesome@0.2.3': '@fortawesome/react-fontawesome@0.2.6':
resolution: {integrity: sha512-HlJco8RDY8NrzFVjy23b/7mNS4g9NegcrBG3n7jinwpc2x/AmSVk53IhWniLYM4szYLxRAFTAGwGn0EIlclDeQ==} resolution: {integrity: sha512-mtBFIi1UsYQo7rYonYFkjgYKGoL8T+fEH6NGUpvuqtY3ytMsAoDaPo5rk25KuMtKDipY4bGYM/CkmCHA1N3FUg==}
peerDependencies: peerDependencies:
'@fortawesome/fontawesome-svg-core': ~1 || ~6 || ~7 '@fortawesome/fontawesome-svg-core': ~1 || ~6 || ~7
react: ^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0 react: ^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0
@ -337,6 +333,9 @@ packages:
'@jridgewell/gen-mapping@0.3.13': '@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/remapping@2.3.5':
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2': '@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
@ -435,65 +434,65 @@ packages:
'@swc/helpers@0.5.15': '@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tailwindcss/node@4.1.11': '@tailwindcss/node@4.1.13':
resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==}
'@tailwindcss/oxide-android-arm64@4.1.11': '@tailwindcss/oxide-android-arm64@4.1.13':
resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@tailwindcss/oxide-darwin-arm64@4.1.11': '@tailwindcss/oxide-darwin-arm64@4.1.13':
resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@tailwindcss/oxide-darwin-x64@4.1.11': '@tailwindcss/oxide-darwin-x64@4.1.13':
resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@tailwindcss/oxide-freebsd-x64@4.1.11': '@tailwindcss/oxide-freebsd-x64@4.1.13':
resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-arm64-gnu@4.1.11': '@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-arm64-musl@4.1.11': '@tailwindcss/oxide-linux-arm64-musl@4.1.13':
resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-x64-gnu@4.1.11': '@tailwindcss/oxide-linux-x64-gnu@4.1.13':
resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@tailwindcss/oxide-linux-x64-musl@4.1.11': '@tailwindcss/oxide-linux-x64-musl@4.1.13':
resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@tailwindcss/oxide-wasm32-wasi@4.1.11': '@tailwindcss/oxide-wasm32-wasi@4.1.13':
resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
cpu: [wasm32] cpu: [wasm32]
bundledDependencies: bundledDependencies:
@ -504,24 +503,24 @@ packages:
- '@emnapi/wasi-threads' - '@emnapi/wasi-threads'
- tslib - tslib
'@tailwindcss/oxide-win32-arm64-msvc@4.1.11': '@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@tailwindcss/oxide-win32-x64-msvc@4.1.11': '@tailwindcss/oxide-win32-x64-msvc@4.1.13':
resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@tailwindcss/oxide@4.1.11': '@tailwindcss/oxide@4.1.13':
resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
'@tailwindcss/postcss@4.1.11': '@tailwindcss/postcss@4.1.13':
resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} resolution: {integrity: sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==}
'@tybys/wasm-util@0.9.0': '@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
@ -889,10 +888,6 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'} engines: {node: '>=6'}
detect-libc@2.0.3:
resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
engines: {node: '>=8'}
detect-libc@2.0.4: detect-libc@2.0.4:
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -911,8 +906,8 @@ packages:
emoji-regex@9.2.2: emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
enhanced-resolve@5.18.1: enhanced-resolve@5.18.3:
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
engines: {node: '>=10.13.0'} engines: {node: '>=10.13.0'}
es-abstract@1.23.9: es-abstract@1.23.9:
@ -1356,8 +1351,8 @@ packages:
resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
jiti@2.4.2: jiti@2.5.1:
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
hasBin: true hasBin: true
js-tokens@4.0.0: js-tokens@4.0.0:
@ -1473,8 +1468,8 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true hasBin: true
magic-string@0.30.17: magic-string@0.30.19:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
math-intrinsics@1.1.0: math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
@ -1866,6 +1861,9 @@ packages:
tailwindcss@4.1.11: tailwindcss@4.1.11:
resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==}
tailwindcss@4.1.13:
resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==}
tapable@2.2.1: tapable@2.2.1:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -1989,11 +1987,6 @@ snapshots:
'@alloc/quick-lru@5.2.0': {} '@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
'@babel/polyfill@7.12.1': '@babel/polyfill@7.12.1':
dependencies: dependencies:
core-js: 2.6.12 core-js: 2.6.12
@ -2032,9 +2025,9 @@ snapshots:
'@epic-web/invariant@1.0.0': {} '@epic-web/invariant@1.0.0': {}
'@eslint-community/eslint-utils@4.5.1(eslint@9.33.0(jiti@2.4.2))': '@eslint-community/eslint-utils@4.5.1(eslint@9.33.0(jiti@2.5.1))':
dependencies: dependencies:
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {} '@eslint-community/regexpp@4.12.1': {}
@ -2076,27 +2069,27 @@ snapshots:
'@eslint/core': 0.15.2 '@eslint/core': 0.15.2
levn: 0.4.1 levn: 0.4.1
'@fortawesome/fontawesome-common-types@7.0.0': {} '@fortawesome/fontawesome-common-types@7.0.1': {}
'@fortawesome/fontawesome-svg-core@7.0.0': '@fortawesome/fontawesome-svg-core@7.0.1':
dependencies: dependencies:
'@fortawesome/fontawesome-common-types': 7.0.0 '@fortawesome/fontawesome-common-types': 7.0.1
'@fortawesome/free-brands-svg-icons@7.0.0': '@fortawesome/free-brands-svg-icons@7.0.1':
dependencies: dependencies:
'@fortawesome/fontawesome-common-types': 7.0.0 '@fortawesome/fontawesome-common-types': 7.0.1
'@fortawesome/free-regular-svg-icons@7.0.0': '@fortawesome/free-regular-svg-icons@7.0.1':
dependencies: dependencies:
'@fortawesome/fontawesome-common-types': 7.0.0 '@fortawesome/fontawesome-common-types': 7.0.1
'@fortawesome/free-solid-svg-icons@7.0.0': '@fortawesome/free-solid-svg-icons@7.0.1':
dependencies: dependencies:
'@fortawesome/fontawesome-common-types': 7.0.0 '@fortawesome/fontawesome-common-types': 7.0.1
'@fortawesome/react-fontawesome@0.2.3(@fortawesome/fontawesome-svg-core@7.0.0)(react@19.1.1)': '@fortawesome/react-fontawesome@0.2.6(@fortawesome/fontawesome-svg-core@7.0.1)(react@19.1.1)':
dependencies: dependencies:
'@fortawesome/fontawesome-svg-core': 7.0.0 '@fortawesome/fontawesome-svg-core': 7.0.1
prop-types: 15.8.1 prop-types: 15.8.1
react: 19.1.1 react: 19.1.1
@ -2213,6 +2206,11 @@ snapshots:
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.30 '@jridgewell/trace-mapping': 0.3.30
'@jridgewell/remapping@2.3.5':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.30
'@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/sourcemap-codec@1.5.5': {}
@ -2290,77 +2288,77 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@tailwindcss/node@4.1.11': '@tailwindcss/node@4.1.13':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.18.1 enhanced-resolve: 5.18.3
jiti: 2.4.2 jiti: 2.5.1
lightningcss: 1.30.1 lightningcss: 1.30.1
magic-string: 0.30.17 magic-string: 0.30.19
source-map-js: 1.2.1 source-map-js: 1.2.1
tailwindcss: 4.1.11 tailwindcss: 4.1.13
'@tailwindcss/oxide-android-arm64@4.1.11': '@tailwindcss/oxide-android-arm64@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-darwin-arm64@4.1.11': '@tailwindcss/oxide-darwin-arm64@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-darwin-x64@4.1.11': '@tailwindcss/oxide-darwin-x64@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-freebsd-x64@4.1.11': '@tailwindcss/oxide-freebsd-x64@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-linux-arm64-gnu@4.1.11': '@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-linux-arm64-musl@4.1.11': '@tailwindcss/oxide-linux-arm64-musl@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-linux-x64-gnu@4.1.11': '@tailwindcss/oxide-linux-x64-gnu@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-linux-x64-musl@4.1.11': '@tailwindcss/oxide-linux-x64-musl@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-wasm32-wasi@4.1.11': '@tailwindcss/oxide-wasm32-wasi@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-win32-arm64-msvc@4.1.11': '@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
optional: true optional: true
'@tailwindcss/oxide-win32-x64-msvc@4.1.11': '@tailwindcss/oxide-win32-x64-msvc@4.1.13':
optional: true optional: true
'@tailwindcss/oxide@4.1.11': '@tailwindcss/oxide@4.1.13':
dependencies: dependencies:
detect-libc: 2.0.4 detect-libc: 2.0.4
tar: 7.4.3 tar: 7.4.3
optionalDependencies: optionalDependencies:
'@tailwindcss/oxide-android-arm64': 4.1.11 '@tailwindcss/oxide-android-arm64': 4.1.13
'@tailwindcss/oxide-darwin-arm64': 4.1.11 '@tailwindcss/oxide-darwin-arm64': 4.1.13
'@tailwindcss/oxide-darwin-x64': 4.1.11 '@tailwindcss/oxide-darwin-x64': 4.1.13
'@tailwindcss/oxide-freebsd-x64': 4.1.11 '@tailwindcss/oxide-freebsd-x64': 4.1.13
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13
'@tailwindcss/oxide-linux-arm64-musl': 4.1.11 '@tailwindcss/oxide-linux-arm64-musl': 4.1.13
'@tailwindcss/oxide-linux-x64-gnu': 4.1.11 '@tailwindcss/oxide-linux-x64-gnu': 4.1.13
'@tailwindcss/oxide-linux-x64-musl': 4.1.11 '@tailwindcss/oxide-linux-x64-musl': 4.1.13
'@tailwindcss/oxide-wasm32-wasi': 4.1.11 '@tailwindcss/oxide-wasm32-wasi': 4.1.13
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13
'@tailwindcss/oxide-win32-x64-msvc': 4.1.11 '@tailwindcss/oxide-win32-x64-msvc': 4.1.13
'@tailwindcss/postcss@4.1.11': '@tailwindcss/postcss@4.1.13':
dependencies: dependencies:
'@alloc/quick-lru': 5.2.0 '@alloc/quick-lru': 5.2.0
'@tailwindcss/node': 4.1.11 '@tailwindcss/node': 4.1.13
'@tailwindcss/oxide': 4.1.11 '@tailwindcss/oxide': 4.1.13
postcss: 8.5.6 postcss: 8.5.6
tailwindcss: 4.1.11 tailwindcss: 4.1.13
'@tybys/wasm-util@0.9.0': '@tybys/wasm-util@0.9.0':
dependencies: dependencies:
@ -2383,15 +2381,15 @@ snapshots:
dependencies: dependencies:
'@types/node': 17.0.45 '@types/node': 17.0.45
'@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2)': '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
'@typescript-eslint/scope-manager': 8.26.1 '@typescript-eslint/scope-manager': 8.26.1
'@typescript-eslint/type-utils': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/type-utils': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
'@typescript-eslint/utils': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/utils': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 8.26.1 '@typescript-eslint/visitor-keys': 8.26.1
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.3.2 ignore: 5.3.2
natural-compare: 1.4.0 natural-compare: 1.4.0
@ -2400,14 +2398,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2)': '@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.26.1 '@typescript-eslint/scope-manager': 8.26.1
'@typescript-eslint/types': 8.26.1 '@typescript-eslint/types': 8.26.1
'@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 8.26.1 '@typescript-eslint/visitor-keys': 8.26.1
debug: 4.4.0 debug: 4.4.0
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -2417,12 +2415,12 @@ snapshots:
'@typescript-eslint/types': 8.26.1 '@typescript-eslint/types': 8.26.1
'@typescript-eslint/visitor-keys': 8.26.1 '@typescript-eslint/visitor-keys': 8.26.1
'@typescript-eslint/type-utils@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2)': '@typescript-eslint/type-utils@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)':
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2)
'@typescript-eslint/utils': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/utils': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
debug: 4.4.0 debug: 4.4.0
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
ts-api-utils: 2.0.1(typescript@5.2.2) ts-api-utils: 2.0.1(typescript@5.2.2)
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
@ -2444,13 +2442,13 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2)': '@typescript-eslint/utils@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.33.0(jiti@2.4.2)) '@eslint-community/eslint-utils': 4.5.1(eslint@9.33.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.26.1 '@typescript-eslint/scope-manager': 8.26.1
'@typescript-eslint/types': 8.26.1 '@typescript-eslint/types': 8.26.1
'@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2)
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -2732,8 +2730,6 @@ snapshots:
dequal@2.0.3: {} dequal@2.0.3: {}
detect-libc@2.0.3: {}
detect-libc@2.0.4: {} detect-libc@2.0.4: {}
doctrine@2.1.0: doctrine@2.1.0:
@ -2750,7 +2746,7 @@ snapshots:
emoji-regex@9.2.2: {} emoji-regex@9.2.2: {}
enhanced-resolve@5.18.1: enhanced-resolve@5.18.3:
dependencies: dependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
tapable: 2.2.1 tapable: 2.2.1
@ -2855,19 +2851,19 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-config-next@15.4.6(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2): eslint-config-next@15.4.6(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.4.6 '@next/eslint-plugin-next': 15.4.6
'@rushstack/eslint-patch': 1.11.0 '@rushstack/eslint-patch': 1.11.0
'@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
'@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0)(eslint@9.33.0(jiti@2.4.2)) eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0)(eslint@9.33.0(jiti@2.5.1))
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.5.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.5.1))
eslint-plugin-react: 7.37.4(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-react: 7.37.4(eslint@9.33.0(jiti@2.5.1))
eslint-plugin-react-hooks: 5.2.0(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.2.0(eslint@9.33.0(jiti@2.5.1))
optionalDependencies: optionalDependencies:
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
@ -2883,33 +2879,33 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0)(eslint@9.33.0(jiti@2.4.2)): eslint-import-resolver-typescript@3.9.1(eslint-plugin-import@2.31.0)(eslint@9.33.0(jiti@2.5.1)):
dependencies: dependencies:
'@nolyfill/is-core-module': 1.0.39 '@nolyfill/is-core-module': 1.0.39
debug: 4.4.0 debug: 4.4.0
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
get-tsconfig: 4.10.0 get-tsconfig: 4.10.0
is-bun-module: 1.3.0 is-bun-module: 1.3.0
rspack-resolver: 1.1.2 rspack-resolver: 1.1.2
stable-hash: 0.0.5 stable-hash: 0.0.5
tinyglobby: 0.2.12 tinyglobby: 0.2.12
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.4.2)) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.5.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.4.2)): eslint-module-utils@2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.5.1)):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0)(eslint@9.33.0(jiti@2.4.2)) eslint-import-resolver-typescript: 3.9.1(eslint-plugin-import@2.31.0)(eslint@9.33.0(jiti@2.5.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.4.2)): eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.5.1)):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.8 array-includes: 3.1.8
@ -2918,9 +2914,9 @@ snapshots:
array.prototype.flatmap: 1.3.3 array.prototype.flatmap: 1.3.3
debug: 3.2.7 debug: 3.2.7
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.4.2)) eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.1)(eslint@9.33.0(jiti@2.5.1))
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -2932,13 +2928,13 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.4.2))(typescript@5.2.2) '@typescript-eslint/parser': 8.26.1(eslint@9.33.0(jiti@2.5.1))(typescript@5.2.2)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- supports-color - supports-color
eslint-plugin-jsx-a11y@6.10.2(eslint@9.33.0(jiti@2.4.2)): eslint-plugin-jsx-a11y@6.10.2(eslint@9.33.0(jiti@2.5.1)):
dependencies: dependencies:
aria-query: 5.3.2 aria-query: 5.3.2
array-includes: 3.1.8 array-includes: 3.1.8
@ -2948,7 +2944,7 @@ snapshots:
axobject-query: 4.1.0 axobject-query: 4.1.0
damerau-levenshtein: 1.0.8 damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2 emoji-regex: 9.2.2
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
language-tags: 1.0.9 language-tags: 1.0.9
@ -2957,11 +2953,11 @@ snapshots:
safe-regex-test: 1.1.0 safe-regex-test: 1.1.0
string.prototype.includes: 2.0.1 string.prototype.includes: 2.0.1
eslint-plugin-react-hooks@5.2.0(eslint@9.33.0(jiti@2.4.2)): eslint-plugin-react-hooks@5.2.0(eslint@9.33.0(jiti@2.5.1)):
dependencies: dependencies:
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
eslint-plugin-react@7.37.4(eslint@9.33.0(jiti@2.4.2)): eslint-plugin-react@7.37.4(eslint@9.33.0(jiti@2.5.1)):
dependencies: dependencies:
array-includes: 3.1.8 array-includes: 3.1.8
array.prototype.findlast: 1.2.5 array.prototype.findlast: 1.2.5
@ -2969,7 +2965,7 @@ snapshots:
array.prototype.tosorted: 1.1.4 array.prototype.tosorted: 1.1.4
doctrine: 2.1.0 doctrine: 2.1.0
es-iterator-helpers: 1.2.1 es-iterator-helpers: 1.2.1
eslint: 9.33.0(jiti@2.4.2) eslint: 9.33.0(jiti@2.5.1)
estraverse: 5.3.0 estraverse: 5.3.0
hasown: 2.0.2 hasown: 2.0.2
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
@ -2994,9 +2990,9 @@ snapshots:
eslint-visitor-keys@4.2.1: {} eslint-visitor-keys@4.2.1: {}
eslint@9.33.0(jiti@2.4.2): eslint@9.33.0(jiti@2.5.1):
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.33.0(jiti@2.4.2)) '@eslint-community/eslint-utils': 4.5.1(eslint@9.33.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0 '@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1 '@eslint/config-helpers': 0.3.1
@ -3032,7 +3028,7 @@ snapshots:
natural-compare: 1.4.0 natural-compare: 1.4.0
optionator: 0.9.4 optionator: 0.9.4
optionalDependencies: optionalDependencies:
jiti: 2.4.2 jiti: 2.5.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3351,7 +3347,7 @@ snapshots:
has-symbols: 1.1.0 has-symbols: 1.1.0
set-function-name: 2.0.2 set-function-name: 2.0.2
jiti@2.4.2: {} jiti@2.5.1: {}
js-tokens@4.0.0: {} js-tokens@4.0.0: {}
@ -3423,7 +3419,7 @@ snapshots:
lightningcss@1.30.1: lightningcss@1.30.1:
dependencies: dependencies:
detect-libc: 2.0.3 detect-libc: 2.0.4
optionalDependencies: optionalDependencies:
lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-arm64: 1.30.1
lightningcss-darwin-x64: 1.30.1 lightningcss-darwin-x64: 1.30.1
@ -3446,7 +3442,7 @@ snapshots:
dependencies: dependencies:
js-tokens: 4.0.0 js-tokens: 4.0.0
magic-string@0.30.17: magic-string@0.30.19:
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/sourcemap-codec': 1.5.5
@ -3902,6 +3898,8 @@ snapshots:
tailwindcss@4.1.11: {} tailwindcss@4.1.11: {}
tailwindcss@4.1.13: {}
tapable@2.2.1: {} tapable@2.2.1: {}
tar@7.4.3: tar@7.4.3:

BIN
public/image/me.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

BIN
public/image/me1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 KiB

BIN
public/image/me2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
public/image/me3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 KiB

BIN
public/image/me4.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

BIN
public/image/me7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

View file

@ -1,69 +0,0 @@
# React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
```js
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
...tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
...tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
...tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
```js
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```