diff --git a/app/(root)/page.jsx b/app/(root)/page.jsx index 6604af9..fc757df 100644 --- a/app/(root)/page.jsx +++ b/app/(root)/page.jsx @@ -7,18 +7,17 @@ import Link from "next/link"; // Компоненты import Button from "@/components/Button"; -import Me from "@/public/image/me.jpg"; -import MeAbout from "@/public/image/me2.jpg"; +import Me from "@/public/image/me.jpeg"; +import MeAbout from "@/public/image/me7.jpg"; import Setup from "@/public/image/setup.jpg"; import ProjectAll from "@/public/image/projects.png"; import Hr from "@/components/Hr"; // Значки import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; 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 { faVk } from "@fortawesome/free-brands-svg-icons"; +import { faTelegram } from "@fortawesome/free-brands-svg-icons"; const MyPage = () => { const fullpageOptions = { @@ -43,14 +42,14 @@ const MyPage = () => { transition={{ type: "spring", }}> -
-
+
+
Korobtsev
@@ -73,7 +72,7 @@ const MyPage = () => { delay: 0.3, type: "spring", }}> - Разработчик, Инженер, Архитектор + Главное { delay: 0.4, type: "spring", }}> - Привет! Я Виталий Коробцев. Создатель "Гибридной Офисной Системы". Под моим руководством или с моим участием создано множество крупных проектов. На данном сайте я решил собрать некоторые из них и рассказать о себе и своих проектах - завершенных, текущих, планируемых. + Привет! Я Виталий Коробцев. Создатель "Гибридной Офисной Системы". Под моим руководством (или с моим участием) создано множество крупных проектов. На данном сайте я решил собрать некоторые из них и рассказать о себе и своих проектах - завершенных, текущих, планируемых. { type: "spring", }}> @@ -168,7 +161,7 @@ const MyPage = () => { delay: 0.1, type: "spring", }}> - About Me + Обо мне
{ delay: 0.2, type: "spring", }}> - A brief introduction about me and my interest. + Немного обо мне и моих интересах. { type: "spring", }}>
@@ -220,7 +213,7 @@ const MyPage = () => { src={ProjectAll} layout="fill" className="object-cover" - alt="Korobtsev Setup" + alt="Рабочее место" placeholder="blur" /> @@ -234,7 +227,7 @@ const MyPage = () => { delay: 0.1, type: "spring", }}> - My Projects + Проекты
{ delay: 0.2, type: "spring", }}> - This is some of my projects that I have done{" "} + Некоторые из проектов с моим учаcтием {" "} {" "} - and currently working on. + или под моим руководством. { type: "spring", }}>
@@ -290,7 +283,7 @@ const MyPage = () => { src={Setup} layout="fill" className="object-cover" - alt="Korobtsev Setup" + alt="Рабочее место" placeholder="blur" /> @@ -304,7 +297,7 @@ const MyPage = () => { delay: 0.1, type: "spring", }}> - Get In Touch + Связаться
{ delay: 0.2, type: "spring", }}> - Feel free to contact me if you have any{" "} + Не стесняйтесь связаться со мной,{" "} - questions or just want to say hi. + можем посотрудничать и реализовать Ваш проект. { delay: 0.3, type: "spring", }}> - - alvalen.shafel04@gmail.com + + vk@gossys.dev {/* icons */}
{ { { opacity: { delay: 0.4 }, }}> { y: { delay: 0.4 }, opacity: { delay: 0.5 }, }}> - - - - +
diff --git a/app/about/components/about/about.jsx b/app/about/components/about/about.jsx index 19d9864..8d88eaf 100644 --- a/app/about/components/about/about.jsx +++ b/app/about/components/about/about.jsx @@ -1,9 +1,8 @@ import Image from "next/image"; -import Card from "./spotify/card"; import { motion } from "framer-motion"; -import Me1 from "@/public/image/me1.jpg"; -import Me2 from "@/public/image/me2.jpg"; -import Me3 from "@/public/image/me3.jpg"; +import Me1 from "@/public/image/me1.jpeg"; +import Me2 from "@/public/image/me2.jpeg"; +import Me3 from "@/public/image/me4.jpg"; import Hr from "@/components/Hr"; function Title() { @@ -11,7 +10,7 @@ function Title() {

-

Who Am I?

+

Обо мне

); @@ -35,7 +34,7 @@ export default function About() { className="w-full h-full"> Korobtsev

- Alvalen Shafelbilyunazra + Виталий Коробцев

- Hey there, I’m Alvalen Shafelbilyunazra, a + Привет! Я Виталий Коробцев, {" "} - passionate Web Developer + разработчик, архитектор, {" "} with a growing expertise in @@ -139,7 +138,6 @@ export default function About() { essential. Let’s connect and explore the evolving intersection of web and AI together!

- diff --git a/app/about/components/about/spotify/animation.jsx b/app/about/components/about/spotify/animation.jsx deleted file mode 100644 index 769fc77..0000000 --- a/app/about/components/about/spotify/animation.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import { motion } from "framer-motion"; - -const PlayingAnimation = () => { - return ( -
- - - -
- ); -}; - -export default PlayingAnimation; diff --git a/app/about/components/about/spotify/card.jsx b/app/about/components/about/spotify/card.jsx deleted file mode 100644 index a65c160..0000000 --- a/app/about/components/about/spotify/card.jsx +++ /dev/null @@ -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 ( -
- {loading ? ( -
- {/* Replace this with your own loading spinner */} -
-
- ) : ( -
- {result.isPlaying && ( - backgroundImage - )} -
- -

- {result.isPlaying - ? "Now playing" - : "Currently offline"} -

- {result.isPlaying && } -
- {result.isPlaying && ( -
-
-
- - {result.title} - -

- {result.artist} -

-
-
-
- )} -
- )} -
- ); -}; - -export default Card; diff --git a/app/about/components/about/spotify/fetch.js b/app/about/components/about/spotify/fetch.js deleted file mode 100644 index 2866dcf..0000000 --- a/app/about/components/about/spotify/fetch.js +++ /dev/null @@ -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, - }; -} \ No newline at end of file diff --git a/app/about/components/education.jsx b/app/about/components/education.jsx index 119d575..ae96b19 100644 --- a/app/about/components/education.jsx +++ b/app/about/components/education.jsx @@ -10,7 +10,7 @@ import { } from "@fortawesome/free-solid-svg-icons"; import { motion, AnimatePresence } from "framer-motion"; 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 Me6 from "@/public/image/me6.jpg"; diff --git a/app/about/layout.jsx b/app/about/layout.jsx index 45cbea8..56d1c49 100644 --- a/app/about/layout.jsx +++ b/app/about/layout.jsx @@ -1,7 +1,7 @@ import Footer from "@/components/Footer"; export const metadata = { - title: "Korobtsev | About" + title: "Korobtsev.ru | Обо мне" }; export default function Layout({ children }) { return ( diff --git a/app/about/loading.jsx b/app/about/loading.jsx index 324633c..f947d4a 100644 --- a/app/about/loading.jsx +++ b/app/about/loading.jsx @@ -1,7 +1,7 @@ export default function Loading() { return (
-

Loading...

+

Загрузка...

); } diff --git a/app/about/page.jsx b/app/about/page.jsx index 96b7a24..8b2476e 100644 --- a/app/about/page.jsx +++ b/app/about/page.jsx @@ -13,7 +13,7 @@ import Experience from "./components/experience.jsx"; import Education from "./components/education.jsx"; // images -import Hero from "@/public/image/me2.jpg"; +import Hero from "@/public/image/me2.jpeg"; import Hr from "@/components/Hr"; 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 "> Alvalen Shafel

- A brief introduction about me and{" "} + Немного обо мне и{" "} {" "} - my interest. + моих интересах.

- + diff --git a/app/layout.jsx b/app/layout.jsx index dc68070..1d8b9c3 100644 --- a/app/layout.jsx +++ b/app/layout.jsx @@ -5,46 +5,45 @@ import "@fortawesome/fontawesome-svg-core/styles.css"; config.autoAddCss = false; import "./nprogress.css"; import { Analytics } from "@vercel/analytics/react"; -import Chat from "@/components/Chat"; import ClientTopProgressBar from "@/components/ClientTopProgressBar"; export const metadata = { - title: "Korobtsev | Portofolio", + title: "Korobtsev.ru | Личный сайт", 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", - applicationName: "Korobtsev", + applicationName: "Korobtsev.ru", keywords: [ "Korobtsev", - "alvalen", - "alvalen shafel", - "shafel", - "alvalen shafelbilyunazra", - "alvalen shafel bilyunazra", - "bloodfallen", - "alvalen porto", - "alvalen um", + "Коробцев", + "Виталий Коробцев", + "Miguelle74", + "Госис", + "Гибридная Офисная Система", + "ОСГОС", + "Новый Крым", + "Технико", ], openGraph: { type: "website", url: "https://www.korobtsev.ru", - title: "Korobtsev | Portofolio", - site_name: "Korobtsev | Portofolio", - description: "My name is Korobtsev, This is my portofolio website.", + title: "Korobtsev.ru | Личный сайт", + site_name: "Korobtsev.ru | Личный сайт", + description: "My name is Vitaliy Korobtsev, This is my website.", width: 1200, height: 630, images: [ { 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 }) { {children} - diff --git a/app/not-found.jsx b/app/not-found.jsx index 3a805c2..f3a02d7 100644 --- a/app/not-found.jsx +++ b/app/not-found.jsx @@ -10,7 +10,7 @@ const NotFound = () => (

- Page not found + А тут совсем ничего нет...

404 @@ -20,7 +20,7 @@ const NotFound = () => (

diff --git a/app/projects/[slug]/page.jsx b/app/projects/[slug]/page.jsx index f415ccf..6da9cb6 100644 --- a/app/projects/[slug]/page.jsx +++ b/app/projects/[slug]/page.jsx @@ -114,7 +114,7 @@ function Page(props) {

- Project + Проект

{data.title} @@ -122,7 +122,7 @@ function Page(props) {

- Technology + Технологии

{data.tech.join(", ")} @@ -130,7 +130,7 @@ function Page(props) {

- Year + Год(ы)

{data.year} @@ -139,14 +139,14 @@ function Page(props) { {data.preview && (

- Preview + Посмотреть

- Preview{" "} + Перейти{" "}

- Source Code + Код (для Open Source)

- Description + Описание

{data.desc.map((desc, index) => (

- Year - Title - Technology - Link + Год создания + Название + Технологии + Ссылки diff --git a/app/projects/layout.jsx b/app/projects/layout.jsx index 019fa5c..4b737bb 100644 --- a/app/projects/layout.jsx +++ b/app/projects/layout.jsx @@ -2,7 +2,7 @@ import Footer from "@/components/Footer"; export const metadata = { - title: "Korobtsev | Projects" + title: "Korobtsev.ru | Проекты" }; export default function Layout({ children }) { return ( diff --git a/app/projects/loading.jsx b/app/projects/loading.jsx index 324633c..f947d4a 100644 --- a/app/projects/loading.jsx +++ b/app/projects/loading.jsx @@ -1,7 +1,7 @@ export default function Loading() { return (

-

Loading...

+

Загрузка...

); } diff --git a/app/projects/page.jsx b/app/projects/page.jsx index 03f1e2e..33d99d2 100644 --- a/app/projects/page.jsx +++ b/app/projects/page.jsx @@ -19,9 +19,9 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faChevronLeft } from "@fortawesome/free-solid-svg-icons"; const category = { - 1: "Web Development", - 2: "AI & Machine Learning", - 9: "Other", + 1: "WEB разработка", + 2: "Linux и ПО", + 9: "Другие", }; export default function Page() { @@ -55,14 +55,14 @@ export default function Page() {

- My Projects + Проекты


- List of my projects that I have done and{" "} + Некоторые из проектов с моим учаcтием{" "} {" "} - currently working on. + или под моим руководством.

- +

-

Hightlight

+

Основное

@@ -174,28 +174,28 @@ export default function Page() { type: "spring", }}>

- Intervyou AI + ОС ОСГОС

- 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). This website can comprehensively analyze the user's - interview performance by providing a analysis of the user's - answer, gesture, and material recommendation to improve the user's - interview skills. + Операционная система на ядре Debian linux актуальной версии. + Изначально разрабатывалась для одного из Государственных заказчиков. + На данный момент проект построен на Debian 13, имеет собственные репозитории + и магазин приложений, инфраструктуру технической поддержки. Проект поддерживается + и активно развивается, обрастая собственными сервисами и ПО, несмотря на + высокую конкуренцию в данном серменте. + Разработано несколько вариантов дистрибутива, в том числе и специализированные версии. + Серверное направление выделено в отдельный продукт.

{" "}
@@ -218,7 +218,7 @@ export default function Page() { delay: 0.7, type: "spring", }}> - Other Note Worthy Projects + Другие ключевые проекты
@@ -272,7 +272,7 @@ export default function Page() { }} className="flex justify-center items-center flex-col my-5 self-start "> diff --git a/components/Chat.jsx b/components/Chat.jsx deleted file mode 100644 index 25de4d2..0000000 --- a/components/Chat.jsx +++ /dev/null @@ -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; diff --git a/components/Footer.jsx b/components/Footer.jsx index f980175..042db00 100644 --- a/components/Footer.jsx +++ b/components/Footer.jsx @@ -23,7 +23,7 @@ export default function Footer() { transition={{ delay: 0.2, }}> - Want something like this? + Что-то заинтересовало? - Get In Touch{" "} + Связаться{" "}

©{new Date().getFullYear()} -{" "} - Korobtsev + Korobtsev.ru

diff --git a/components/Navbar.jsx b/components/Navbar.jsx index d5f7252..96da320 100644 --- a/components/Navbar.jsx +++ b/components/Navbar.jsx @@ -117,7 +117,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => { variants={itemVariants} animate={isNavOpen ? "open" : "closed"} className="text-6xl font-bold text-white "> - Menu + Меню
{ variants={itemVariants} animate={isNavOpen ? "open" : "closed"} custom={0.1}> - Home + Главная
@@ -141,7 +141,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => { variants={itemVariants} animate={isNavOpen ? "open" : "closed"} custom={0.2}> - About + Обо мне @@ -154,7 +154,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => { variants={itemVariants} animate={isNavOpen ? "open" : "closed"} custom={0.3}> - Projects + Проекты @@ -167,7 +167,7 @@ const NavItems = ({ isNavOpen, setIsNavOpen }) => { variants={itemVariants} animate={isNavOpen ? "open" : "closed"} custom={0.4}> - Contact + Контакты @@ -200,7 +200,7 @@ const Navbar = () => { className={`text-2xl ml-2 md:ml-0 transition-colors ease duration-500 ${ isNavOpen ? "text-white" : "" }`}> - Korobtsev + Korobtsev.ru
diff --git a/json/data.json b/json/data.json index 28faf2d..e21095e 100644 --- a/json/data.json +++ b/json/data.json @@ -2,14 +2,15 @@ "Projects": [ { "show": true, - "title": "Invervyou AI", + "title": "ОС ОСГОС", "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).", - "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." + "Операционная система Основная Составляющая Гибридной Офисной Системы - ОС ОСГОС, построена на ядре Debian linux актуальной версии. Является десктопной операционной системой общего назначения для использования до уровня секретности КС-4. Имеет свидетельство о Государственной регистрации. Изначально ОС разрабатывалась для одного из Государственных заказчиков.", + "ОС имеет собственные репозитории и магазин приложений, инфраструктуру технической поддержки. Проект поддерживается и активно развивается, обрастая собственными сервисами и ПО. Разработано несколько вариантов дистрибутива, в том числе и специализированные версии.", + "Основной упор при разработке был сделан на легкую интеграцию в существующую инфраструктуру, построенную на технологиях Microsoft. В результате ОС может бесшовно интегрироваться в гибридную экосистему без потери предоставляемого ей функционала. ОС может работать как в открытом, так и в полностью замкнутом стетевом периметре, обращаясь к локальным серверам обновления. Для поддержки ОС созданы все необходимые сервисы и дополнительное ПО, как на базе Open-Sourse продуктов, так и разработанное с нуля.", + "Второй целью являлась простота перехода Пользователя на ОС ОСГОС с других операционных систем и нетребовательность к железу. По результатам тестирования - все поставленные цели были достигнуты." ], - "year": "2025", - "preview": "https://www.intervyou.me", + "year": "2022-Текущий", + "preview": "https://osgos.ru", "code": "", "thumbnail": "/image/projects/web/intervyou/intervyou-thumbnail.jpg", "images": [ @@ -20,15 +21,16 @@ "/image/projects/web/intervyou/intervyou-5.png" ], "tech": [ - "NextJS", - "Typescript", - "Shadcn UI", - "Tailwind CSS", - "Prisma", - "MySQL", - "Midtrans", - "Gemini API", - "GCP" + "C", + "C#", + "Bash", + "Go", + "Python", + "Web Dev", + "Database", + "Руководство", + "Архитектура", + "Инфраструктура" ], "slug": "intervyou", "category": [1, 2] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4bb326c..206f370 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,35 +9,35 @@ importers: .: dependencies: '@fortawesome/fontawesome-svg-core': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 '@fortawesome/free-brands-svg-icons': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 '@fortawesome/free-regular-svg-icons': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 '@fortawesome/free-solid-svg-icons': - specifier: ^7.0.0 - version: 7.0.0 + specifier: ^7.0.1 + version: 7.0.1 '@fortawesome/react-fontawesome': - specifier: ^0.2.3 - version: 0.2.3(@fortawesome/fontawesome-svg-core@7.0.0)(react@19.1.1) + specifier: ^0.2.6 + version: 0.2.6(@fortawesome/fontawesome-svg-core@7.0.1)(react@19.1.1) '@fullpage/react-fullpage': specifier: ^0.1.49 version: 0.1.49 '@tailwindcss/postcss': - specifier: ^4.1.11 - version: 4.1.11 + specifier: ^4.1.13 + version: 4.1.13 '@vercel/analytics': 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) eslint: specifier: 9.33.0 - version: 9.33.0(jiti@2.4.2) + version: 9.33.0(jiti@2.5.1) eslint-config-next: 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: 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) @@ -88,10 +88,6 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@babel/polyfill@7.12.1': 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. @@ -159,28 +155,28 @@ packages: resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fortawesome/fontawesome-common-types@7.0.0': - resolution: {integrity: sha512-PGMrIYXLGA5K8RWy8zwBkd4vFi4z7ubxtet6Yn13Plf6krRTwPbdlCwlcfmoX0R7B4Z643QvrtHmdQ5fNtfFCg==} + '@fortawesome/fontawesome-common-types@7.0.1': + resolution: {integrity: sha512-0VpNtO5cNe1/HQWMkl4OdncYK/mv9hnBte0Ew0n6DMzmo3Q3WzDFABHm6LeNTipt5zAyhQ6Ugjiu8aLaEjh1gg==} engines: {node: '>=6'} - '@fortawesome/fontawesome-svg-core@7.0.0': - resolution: {integrity: sha512-obBEF+zd98r/KtKVW6A+8UGWeaOoyMpl6Q9P3FzHsOnsg742aXsl8v+H/zp09qSSu/a/Hxe9LNKzbBaQq1CEbA==} + '@fortawesome/fontawesome-svg-core@7.0.1': + resolution: {integrity: sha512-x0cR55ILVqFpUioSMf6ebpRCMXMcheGN743P05W2RB5uCNpJUqWIqW66Lap8PfL/lngvjTbZj0BNSUweIr/fHQ==} engines: {node: '>=6'} - '@fortawesome/free-brands-svg-icons@7.0.0': - resolution: {integrity: sha512-C8oY28gq/Qx/cHReJa2AunKJUHvUZDVoPlSTHtAvjriaNfi+5nugW4cx7yA/xN3f/nYkElw11gFBoJ2xUDDFgg==} + '@fortawesome/free-brands-svg-icons@7.0.1': + resolution: {integrity: sha512-6xPmn5SrND/GM0+W33E77x05+aDn6RpR02eWd8eLdN0IxY0vXa5yU/ugaAKloOVxiG9w2330TSRsbJYL6c57Ow==} engines: {node: '>=6'} - '@fortawesome/free-regular-svg-icons@7.0.0': - resolution: {integrity: sha512-qAh0mTaCY22sQzMK2lKBrtn/aR4keUu5XmtdYR7d702laMe0h+Ab4Kj2pExR9HZkKhjKoq8pbwt8Td+mjW/ipQ==} + '@fortawesome/free-regular-svg-icons@7.0.1': + resolution: {integrity: sha512-4V9fHbHjcx9Qu4O99AM5B4zuEDfB4zajk1I77hEzOxPN00f8g3484Aeq6WpfFcmookvjLE3Pr71Dhf/lqw7tbA==} engines: {node: '>=6'} - '@fortawesome/free-solid-svg-icons@7.0.0': - resolution: {integrity: sha512-njSLAllkOddYDCXgTFboXn54Oe5FcvpkWq+FoetOHR64PbN0608kM02Lze0xtISGpXgP+i26VyXRQA0Irh3Obw==} + '@fortawesome/free-solid-svg-icons@7.0.1': + resolution: {integrity: sha512-esKuSrl1WMOTMDLNt38i16VfLe/gRZt2ZAJ3Yw7slfs7sj583MKqNFqO57zmhknk1Sya6f9Wys89aCzIJkcqlg==} engines: {node: '>=6'} - '@fortawesome/react-fontawesome@0.2.3': - resolution: {integrity: sha512-HlJco8RDY8NrzFVjy23b/7mNS4g9NegcrBG3n7jinwpc2x/AmSVk53IhWniLYM4szYLxRAFTAGwGn0EIlclDeQ==} + '@fortawesome/react-fontawesome@0.2.6': + resolution: {integrity: sha512-mtBFIi1UsYQo7rYonYFkjgYKGoL8T+fEH6NGUpvuqtY3ytMsAoDaPo5rk25KuMtKDipY4bGYM/CkmCHA1N3FUg==} peerDependencies: '@fortawesome/fontawesome-svg-core': ~1 || ~6 || ~7 react: ^16.3 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -337,6 +333,9 @@ packages: '@jridgewell/gen-mapping@0.3.13': 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': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -435,65 +434,65 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tailwindcss/node@4.1.11': - resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} + '@tailwindcss/node@4.1.13': + resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==} - '@tailwindcss/oxide-android-arm64@4.1.11': - resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + '@tailwindcss/oxide-android-arm64@4.1.13': + resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.11': - resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + '@tailwindcss/oxide-darwin-arm64@4.1.13': + resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.11': - resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + '@tailwindcss/oxide-darwin-x64@4.1.13': + resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.11': - resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + '@tailwindcss/oxide-freebsd-x64@4.1.13': + resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': - resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': + resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': - resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': + resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': - resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': + resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': - resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': + resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.11': - resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + '@tailwindcss/oxide-linux-x64-musl@4.1.13': + resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.11': - resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + '@tailwindcss/oxide-wasm32-wasi@4.1.13': + resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -504,24 +503,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': - resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': + resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': - resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': + resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.11': - resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} + '@tailwindcss/oxide@4.1.13': + resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.1.11': - resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} + '@tailwindcss/postcss@4.1.13': + resolution: {integrity: sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==} '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -889,10 +888,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - detect-libc@2.0.4: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} @@ -911,8 +906,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} es-abstract@1.23.9: @@ -1356,8 +1351,8 @@ packages: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true js-tokens@4.0.0: @@ -1473,8 +1468,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} @@ -1866,6 +1861,9 @@ packages: tailwindcss@4.1.11: 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: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -1989,11 +1987,6 @@ snapshots: '@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': dependencies: core-js: 2.6.12 @@ -2032,9 +2025,9 @@ snapshots: '@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: - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -2076,27 +2069,27 @@ snapshots: '@eslint/core': 0.15.2 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: - '@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: - '@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: - '@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: - '@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: - '@fortawesome/fontawesome-svg-core': 7.0.0 + '@fortawesome/fontawesome-svg-core': 7.0.1 prop-types: 15.8.1 react: 19.1.1 @@ -2213,6 +2206,11 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 '@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/sourcemap-codec@1.5.5': {} @@ -2290,77 +2288,77 @@ snapshots: dependencies: tslib: 2.8.1 - '@tailwindcss/node@4.1.11': + '@tailwindcss/node@4.1.13': dependencies: - '@ampproject/remapping': 2.3.0 - enhanced-resolve: 5.18.1 - jiti: 2.4.2 + '@jridgewell/remapping': 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.5.1 lightningcss: 1.30.1 - magic-string: 0.30.17 + magic-string: 0.30.19 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 - '@tailwindcss/oxide-darwin-arm64@4.1.11': + '@tailwindcss/oxide-darwin-arm64@4.1.13': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.11': + '@tailwindcss/oxide-darwin-x64@4.1.13': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.11': + '@tailwindcss/oxide-freebsd-x64@4.1.13': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.13': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + '@tailwindcss/oxide-linux-arm64-musl@4.1.13': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + '@tailwindcss/oxide-linux-x64-gnu@4.1.13': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.11': + '@tailwindcss/oxide-linux-x64-musl@4.1.13': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.11': + '@tailwindcss/oxide-wasm32-wasi@4.1.13': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.13': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + '@tailwindcss/oxide-win32-x64-msvc@4.1.13': optional: true - '@tailwindcss/oxide@4.1.11': + '@tailwindcss/oxide@4.1.13': dependencies: detect-libc: 2.0.4 tar: 7.4.3 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-arm64': 4.1.11 - '@tailwindcss/oxide-darwin-x64': 4.1.11 - '@tailwindcss/oxide-freebsd-x64': 4.1.11 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 - '@tailwindcss/oxide-linux-x64-musl': 4.1.11 - '@tailwindcss/oxide-wasm32-wasi': 4.1.11 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 + '@tailwindcss/oxide-android-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-arm64': 4.1.13 + '@tailwindcss/oxide-darwin-x64': 4.1.13 + '@tailwindcss/oxide-freebsd-x64': 4.1.13 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.13 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.13 + '@tailwindcss/oxide-linux-x64-musl': 4.1.13 + '@tailwindcss/oxide-wasm32-wasi': 4.1.13 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.13 - '@tailwindcss/postcss@4.1.11': + '@tailwindcss/postcss@4.1.13': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.11 - '@tailwindcss/oxide': 4.1.11 + '@tailwindcss/node': 4.1.13 + '@tailwindcss/oxide': 4.1.13 postcss: 8.5.6 - tailwindcss: 4.1.11 + tailwindcss: 4.1.13 '@tybys/wasm-util@0.9.0': dependencies: @@ -2383,15 +2381,15 @@ snapshots: dependencies: '@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: '@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/type-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.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.5.1))(typescript@5.2.2) '@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 ignore: 5.3.2 natural-compare: 1.4.0 @@ -2400,14 +2398,14 @@ snapshots: transitivePeerDependencies: - 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: '@typescript-eslint/scope-manager': 8.26.1 '@typescript-eslint/types': 8.26.1 '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.2.2) '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.4.0 - eslint: 9.33.0(jiti@2.4.2) + eslint: 9.33.0(jiti@2.5.1) typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -2417,12 +2415,12 @@ snapshots: '@typescript-eslint/types': 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: '@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 - 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) typescript: 5.2.2 transitivePeerDependencies: @@ -2444,13 +2442,13 @@ snapshots: transitivePeerDependencies: - 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: - '@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/types': 8.26.1 '@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 transitivePeerDependencies: - supports-color @@ -2732,8 +2730,6 @@ snapshots: dequal@2.0.3: {} - detect-libc@2.0.3: {} - detect-libc@2.0.4: {} doctrine@2.1.0: @@ -2750,7 +2746,7 @@ snapshots: emoji-regex@9.2.2: {} - enhanced-resolve@5.18.1: + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -2855,19 +2851,19 @@ snapshots: 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: '@next/eslint-plugin-next': 15.4.6 '@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/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-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.5.1))(typescript@5.2.2) + eslint: 9.33.0(jiti@2.5.1) 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-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-jsx-a11y: 6.10.2(eslint@9.33.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.4(eslint@9.33.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.2.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.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.5.1)) + 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.5.1)) optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: @@ -2883,33 +2879,33 @@ snapshots: transitivePeerDependencies: - 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: '@nolyfill/is-core-module': 1.0.39 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 is-bun-module: 1.3.0 rspack-resolver: 1.1.2 stable-hash: 0.0.5 tinyglobby: 0.2.12 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: - 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: debug: 3.2.7 optionalDependencies: - '@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-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) 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: - 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: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -2918,9 +2914,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 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-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 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -2932,13 +2928,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 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: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - 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: aria-query: 5.3.2 array-includes: 3.1.8 @@ -2948,7 +2944,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 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 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -2957,11 +2953,11 @@ snapshots: safe-regex-test: 1.1.0 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: - 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: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -2969,7 +2965,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 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 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -2994,9 +2990,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.33.0(jiti@2.4.2): + eslint@9.33.0(jiti@2.5.1): 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/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 @@ -3032,7 +3028,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -3351,7 +3347,7 @@ snapshots: has-symbols: 1.1.0 set-function-name: 2.0.2 - jiti@2.4.2: {} + jiti@2.5.1: {} js-tokens@4.0.0: {} @@ -3423,7 +3419,7 @@ snapshots: lightningcss@1.30.1: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 optionalDependencies: lightningcss-darwin-arm64: 1.30.1 lightningcss-darwin-x64: 1.30.1 @@ -3446,7 +3442,7 @@ snapshots: dependencies: js-tokens: 4.0.0 - magic-string@0.30.17: + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3902,6 +3898,8 @@ snapshots: tailwindcss@4.1.11: {} + tailwindcss@4.1.13: {} + tapable@2.2.1: {} tar@7.4.3: diff --git a/public/image/me.jpeg b/public/image/me.jpeg new file mode 100644 index 0000000..041ad9a Binary files /dev/null and b/public/image/me.jpeg differ diff --git a/public/image/me.jpg b/public/image/me.jpg deleted file mode 100644 index 9edc3e5..0000000 Binary files a/public/image/me.jpg and /dev/null differ diff --git a/public/image/me1.jpeg b/public/image/me1.jpeg new file mode 100644 index 0000000..cbe06a5 Binary files /dev/null and b/public/image/me1.jpeg differ diff --git a/public/image/me1.jpg b/public/image/me1.jpg deleted file mode 100644 index 58a562f..0000000 Binary files a/public/image/me1.jpg and /dev/null differ diff --git a/public/image/me2.jpeg b/public/image/me2.jpeg new file mode 100644 index 0000000..c04823b Binary files /dev/null and b/public/image/me2.jpeg differ diff --git a/public/image/me3.jpeg b/public/image/me3.jpeg new file mode 100644 index 0000000..34a80d6 Binary files /dev/null and b/public/image/me3.jpeg differ diff --git a/public/image/me3.jpg b/public/image/me3.jpg deleted file mode 100644 index 4bd6553..0000000 Binary files a/public/image/me3.jpg and /dev/null differ diff --git a/public/image/me4.jpeg b/public/image/me4.jpeg deleted file mode 100644 index 2dadd88..0000000 Binary files a/public/image/me4.jpeg and /dev/null differ diff --git a/public/image/me4.jpg b/public/image/me4.jpg new file mode 100644 index 0000000..d66b641 Binary files /dev/null and b/public/image/me4.jpg differ diff --git a/public/image/me7.jpg b/public/image/me7.jpg new file mode 100644 index 0000000..94c5123 Binary files /dev/null and b/public/image/me7.jpg differ diff --git a/vite-to_VS/README.md b/vite-to_VS/README.md deleted file mode 100644 index 7959ce4..0000000 --- a/vite-to_VS/README.md +++ /dev/null @@ -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... - }, - }, -]) -```