diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 95c8b0d..7b97d05 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -94,7 +94,7 @@ jobs: port: ${{ secrets.SSH_SERVER_PORT }} script: | cd ${{ secrets.SSH_SERVER_BACKEND_PATH }} - echo -e 'OAUTH_CLIENT_ID="${{ secrets.OAUTH_CLIENT_ID }}"\nOAUTH_CLIENT_SECRET="${{ secrets.OAUTH_CLIENT_SECRET }}"\nOAUTH_REDIRECT_URI="${{ secrets.OAUTH_REDIRECT_URI }}"\nDB_URL="${{ secrets.DB_URL }}"' > .env + echo -e 'OAUTH_CLIENT_ID="${{ secrets.OAUTH_CLIENT_ID }}"\nOAUTH_CLIENT_SECRET="${{ secrets.OAUTH_CLIENT_SECRET }}"\nOAUTH_REDIRECT_URI="${{ secrets.OAUTH_REDIRECT_URI }}"\nDB_URL="${{ secrets.DB_URL }}"\nSTRIPE_PUBLISHABLE_KEY="${{ secrets.STRIPE_PUBLISHABLE_KEY }}"\nSTRIPE_SECRET_KEY="${{ secrets.STRIPE_SECRET_KEY }}"\nSTRIPE_SUCCESS_KEY="${{ secrets.STRIPE_SUCCESS_KEY }}"' > .env - name: Run backend uses: appleboy/ssh-action@v1.0.3 diff --git a/README.md b/README.md index 57b554d..14a138b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,140 @@ -# 🏋️‍♂️ FitPlan Connect +
+ +
- +## About + +FitPlan Connect is a scheduling app that has earned recognition as one of the best on the market thanks to its array of advanced features and intuitive user interface. **This project is part of the Object-Oriented Programming subject at the University.** + +## Features + +- Fast create account and login with GitHub OAuth +- Planning and tracking meetings with personal trainers +- Choose your personal trainer +- Preview your plan along with your subscription end date + +## Installation + +1. Install the latest LTS version of [Node.js](https://nodejs.org/en/download/) +2. Install [yarn](https://yarnpkg.com/en/docs/install), run the following command: + ```bash + npm i -g yarn + ``` +3. Install [bun](https://bun.sh/), run the following command for Linux & macOS: + ```bash + curl -fsSL https://bun.sh/install | bash + ``` + or for Windows: + ```bash + powershell -c "irm bun.sh/install.ps1 | iex" + ``` +4. Click `Code` button on the top right of this page and copy the link under `Clone` tab. +5. Open project in any IDE of your choice. +6. Install nginx and configure it with the + following [config](https://github.com/rokartur/fitplanconnect/blob/main/nginx.conf) +7. **Frontend** Open terminal and run the following command: + ```bash + cd website + yarn + yarn dev + ``` +8. **Backend** Open another terminal and run the following command: + ```bash + cd backend + bun install + bun run dev + ``` +9. Environment file should be created in the root of the backend folder with the following content: + ```dotenv + OAUTH_CLIENT_ID="" + OAUTH_CLIENT_SECRET="" + OAUTH_REDIRECT_URI="http://localhost/api/oauth/callback" + DB_URL="postgresql://user:password@host:port/database" + STRIPE_PUBLISHABLE_KEY="" + STRIPE_SECRET_KEY="" + STRIPE_SUCCESS_KEY="" + ``` +10. Setup database with the following command: + ```bash + bun run db:generate + bun run db:migrate + ``` +11. For the database preview you can use the following command: + ```bash + bun run db:studio + ``` + +## Database Schema + +![Database Schema](https://raw.githubusercontent.com/rokartur/fitplanconnect/main/assets/db-uml.png) + +## Technologies +- [TypeScript](https://www.typescriptlang.org/) +- [React](https://reactjs.org/) +- [ElysiaJS](https://elysiajs.com/) +- [PostgreSQL](https://www.postgresql.org/) +- [Drizzle ORM](https://orm.drizzle.team/) +- [Bun](https://bun.sh/) +- [Nginx](https://nginx.org/en/) +- [GitHub OAuth](https://docs.github.com/en/apps) +- [Stripe](https://stripe.com/docs) + +## 🇵🇱 Podsumowanie +### Koncept + +Założenia projektu były ogromne, udało nam się zrealizować cześć z nich. Aplikacja posiada podstawowe funkcjonalności, takie jak logowanie, wybór trenera, planowanie treningu personalnego z wybranym trenerem oraz jego podgląd. Aplikacja jest w pełni responsywna, co pozwala na korzystanie z niej na każdym urządzeniu. + +Mieliśmy w planach rozbudowanie jej o dodatkowe funkcjonalności, aplikacja miała być podzielona na dwa moduły panel dla trenerów personalnych oraz główna aplikacja dla ich podopiecznych. Panel dla trenerów miał posiadać: +- Przegląd gdzie byłyby widoczne wszystkie statystyki sprzedaży usługi, statystyki treningowe oraz użytkowników. +- Zakładkę wszystkich użytkowników z możliwością sortowania oraz filtrowania po najważniejszych danych, oraz informacje o konkretnym użytkowniku, gdzie byłyby wyświetlane wszystkie dostępne dane za wyjątkiem hasła. +- Kalendarz dla zalogowanego trenera, gdzie byłyby widoczne wszystkie treningi z przypisanymi podopiecznymi oraz możliwość zmiany harmonogramy dostępności dla trenera, kiedy można z nim ćwiczyć, a kiedy nie. +- Zakładkę do zarządzania wszystkimi trenerami, byłby jeden główny trener z rolą "ADMIN", który miałby dostęp i mógłby zarządzać trenerami. Dostępne byłyby 3 role ADMIN, EDITOR, VIEWER. Editor mógłby przesyłać plany treningowe oraz diety, dla podopiecznego. Viewer mógłby tylko wyświetlać dane o konkretnym użytkowniku. +- Ostatnią zakładką byłyby kody promocyjne oraz cały system do zarządzania nimi. Wyświetlana byłaby lista wszystkich kodów z opcją filtrowania po statusie czy jest aktywny, czy nie oraz po typie kodu, czy jest on procentowy lub stały. Możliwość sortowania byłaby przypisana dla wartości nazwy kodu, wartości, czasu wygaśnięcia, pozostałej liczbie użyć, ilości zamówieniach z danym kodem. Opcja byłaby przypisana danego kodu rabatowego dla konkretnej lub wszystkich usług oraz można byłoby je usuwać, lub dezaktywować. + +Natomiast aplikacja dla użytkowników została zrealizowana w części. Posiada ona teraz: +- Kalendarz, poprzez który podopieczni mogą umawiać się w określonych dniach o określonej godzinie na trening z wybranym trenerem. +- Podstronę z wyborem dostępnych trenerów personalnych, użytkownik może ich sobie zmieniać w dowolnym momencie. +- Opcję płatności, za pomocą platformy Stripe, gdzie przydzielany jest dostęp do aplikacji na rok po pozytywnie zrealizowanym zakupie. +- Ustawienia, gdzie użytkownik może zobaczyć, jak wyglądają jego dane tzn. nazwa użytkownika oraz email, które są powiązane z kontem GitHub, poprzez które można się zalogować. Aplikacja głównie została stworzona dla siedzących programistów 😉 + +Są jeszcze anulowane plany dla głównej aplikacji użytkowników. Było kilka systemów: +- System raportów użytkownika, gdzie przesyłałby swoje raporty sylwetki co określony czas. +- System diet oraz planów treningowych, gdzie użytkownik miałby dostęp do przesłanych materiałów przez trenera. + +Z mniejszych ogólnych rzeczy, miało być więcej zbieranych danych o użytkownikach w celu wystawienia automatycznej faktury elektronicznej na maila, po pozytywnie zrealizowanej płatności. Temat z logowaniem oraz rejestracją miał wyglądać kompletnie inaczej, niż jest obecnie. Przeszło przez nasze głowy bardzo dużo opcji zaczęło się od standardowej metody za pomocą maila i hasła oraz późniejsza weryfikacja za pomocą JWT (JSON Web Token) poprzez link na maila. Zaczęliśmy minimalizować ilość interakcji, jaką użytkownik musi wykonać, aby korzystać z naszej aplikacji, więc chcieliśmy przejść do metody za pomocą OTP (One-Time Password) przy użyciu numeru telefonu, ale okazało się, że aby wysyłać takie SMS'y do użytkownika trzeba płacić za dostęp do takiej usługi, a celem projektu było zminimalizowanie generujących kosztów, więc została droga mailowa, ale nie za pomocą 6 cyfrowego kodu tylko passphrase, a później za pomocą samego linku weryfikacyjnego z JWT przesyłanego na maila. Jesteśmy w miejscu i sytuacji, gdzie można się zalogować za pomocą 2 kliknięć, autoryzując się za pomocą zewnętrznego dostawcy w tym przypadku GitHuba przy użyciu biblioteki "arctic", która obsługuje 47 różnych popularnych dostawców takich jak Google, Facebook, Apple, Microsoft kończąc po osu!, MyAnimeList, Keycloak czy Roblox. Pozwala to na elastyczne skalowanie i szybkie dodawanie kolejnych dostawców autoryzacji, co pozwoli dotrzeć do większej ilości użytkowników i się do nich dostosować. + +Całość projektu była dokładnie planowana podczas pierwszych spotkań oraz ewentualnie korygowana i kwestionowana wraz z rozwojem projektu. Wszystkie plany koncepcyjne oraz makietę projektową, zostały wykonane we Figmie oraz FigJamie, do których linki są w sekcji [Resources](https://github.com/rokartur/fitplanconnect?tab=readme-ov-file#resources). + +Jednak z powodu ograniczeń czasowych nie udało nam się zrealizować w pełni naszych założeń. Mimo to jesteśmy zadowoleni z tego, co udało nam się zrobić. + +### Technologie + +Wiedząc, jaka jest [lista technologii](https://github.com/rokartur/fitplanconnect?tab=readme-ov-file#technologies) użytych do tego projektu omówmy, dlaczego wybraliśmy akurat te. + +Zaczynając od języka postawiliśmy na TypeScript, który przy użyciu prostoty, jaką znamy z JavaScript oraz dodaniu do niego typowania pozwala na napisane czytelnego, oraz bezpiecznego kodu — co powinno być priorytetem w każdej aplikacji. Aby wyświetlić cały interfejs, skorzystaliśmy z biblioteki React 18, oraz aby stylować elementy wykorzystaliśmy bibliotekę sass i język SCSS, aby czytelność względem zwykłego CSS była lepsza i aby łatwiej się odnaleźć w strukturze. Do zarządzania routingiem w aplikacji została zastosowana biblioteka React Router w swojej odmianie DOM (Document Object Model). Z ostatnich i ważniejszych bibliotek zastosowanych w aplikacji po stronie frontendu jest Redux, który pozwala na przechowywanie stanów w obrębie całej aplikacji oraz kompilator Vite `/vit/`, który jest wydajniejszy i lepiej zoptymalizowany niż domyślny, który zaoferowali nam twórcy Facebook'a. + +Przejdźmy do kuchni i kelnerów, czyli do backendu i API. W tym miejscu wręcz wymagane było to, aby pisać to w języku, gdzie typy są wymagane, aby zniwelować i wywoływać jak najmniej błędów, wybór był prosty, i aby zachować spójność, wyborem był TypeScript. Package manager, który został użyty to [bun](https://bun.sh/), nie jest on tu bez powodu, ponieważ przy użyciu frameworku [ElysiaJS](https://elysiajs.com/), który jest do 21 razy szybszy od popularnego rozwiązania, którym jest [Express](http://expressjs.com/). Dzięki temu połączeniu jesteśmy w stanie uzyskać prawie 2.5 mln zapytań na sekundę, co powoduje, że takie rozwiązanie jest w pierwszych 100 najszybszych na rynku, i drugie najszybsze w języku TypeScript (na 87 miejscu jest czysty bun według [TechEmpower Benchmark](https://www.techempower.com/benchmarks/#hw=ph&test=plaintext§ion=data-r22)). Przechodząc dalej dochodzimy do przechowywania danych, postawiliśmy na PostgreSQL oraz na bibliotekę Drizzle ORM (Object-Relational Mapping (pl. Mapowanie obiektowo-relacyjne)). Bardzo dobre połączenie, gdzie za pomocą Drizzle definiujemy, jak ma wyglądać cała struktura bazy danych jej relację. Jest to bardzo proste i elastyczne narzędzie, kiedy chcemy pracować nad danymi lub edytować całą strukturę bazy. Po stronie serwera użyliśmy Nginx, który jest serwerem WWW, może być również używany jako odwrotny serwer proxy lub load balancer. Głównie służy nam on, aby uzyskać dostęp do aplikacji oraz API na jednym adresie IP, niwelując używanie portu w adresie URL. + + +### Założenia przedmiotowe projektu + +Projekt był stworzony na potrzebę przedmiotu "Programowanie obiektowe". Podstawowe wymagania zawierały, aby były zastosowane następujące pojęcia: interfejsy, dziedziczenie, polimorfizm oraz hermetyzacja przy użyciu paradygmatu programowania obiektowego. Było to dla nas wyzwanie, ponieważ zazwyczaj aplikacje napisane w nowoczesnym React, nie są zazwyczaj pisane pod strukturę obiektową, ale udało nam zastosować pewne elementy w następujących miejscach lub rozwiązanie jest analogiczne: + +- Interfejsy znalazły zastosowanie do zdefiniowania typów dla tzw. props, czyli atrybutów dla praktycznie każdego komponentu. Możemy interfejs wykorzystać w kilku miejscach np. UserTypes jest definiowany przy stworzeniu globalnego miejsca do przetrzymywania stanów, aby później uzyskać dane użytkownika oraz przy pobieraniu danych o użytkowniku podczas włączania aplikacji. +- Dziedziczenie udało nam się uzyskać poprzez stworzenie klasy `Member` i dziedziczyć ją dla klas `User` oraz `Trainer`. Podobna sytuacja dzieje się dla klasy `TrainingMeetings`, która jest dziedziczona po `Meetings`, pozwala nam to zaoszczędzić linijki powtarzalnego kodu podczas uzyskiwania informacji o danym użytkowniku, trenerze lub spotkaniu. +- Polimorfizm jest stosowany w komponentach, które mogą przyjmować różne formy i zachowania, zależnie od przekazanych atrybutów. Na przykład komponent Button może wyglądać inaczej w zależności od przekazanych mu wcześniej ustalonych atrybutów `type` lub `onClick`. +- Hermetyzację możemy zauważyć przy używaniu tzw. hooków, które działają tylko w obrębie funkcji, do której zostały wpisane, możemy je przekazywać jedynie poprzez atrybuty do niższej hierarchii w strukturze. Istnieje ona również w komponentach wyższego rzędu np. przy użyciu biblioteki Redux do zdefiniowania "sklepu", który służy do globalnego przechowywania stanów dla całej aplikacji lub dla `HelmetProvider`, który służy do zarządzania meta danymi, zależnie od lokalizacji, w jakiej się znajdujemy. + +## Resources +- [Website](https://fitplanconnect.site/) +- [API Documentation](https://docs.fitplanconnect.site/reference) +- [GitHub](https://github.com/rokartur/fitplanconnect) +- [Figma Design](https://www.figma.com/design/EDRxiPZHsJCeHKlrh08gsY/fitplanconnect?node-id=0-1&t=V9B6evOnen69xHga-1) +- [Figma Concept](https://www.figma.com/board/RMC8nNxTpV9zmUGCyHQcvy/fitplanconnect?node-id=0-1&t=5IN80e5pnA5W9Tyq-1) + +## License +[“Commons Clause” License Condition v1.0](https://github.com/rokartur/fitplanconnect/?tab=License-1-ov-file) + +## Authors +- [Artur Rok](https://github.com/rokartur) +- [Paweł Polok](https://github.com/polokpawel) diff --git a/Tasks/Task 1/Program.cs b/Tasks/Task 1/Program.cs new file mode 100644 index 0000000..da8c329 --- /dev/null +++ b/Tasks/Task 1/Program.cs @@ -0,0 +1,43 @@ +using System; + +namespace Task_1 +{ + public class Rectangle + { + private double _a; + private double _b; + private double _surfaceArea; + + public void read_data() + { + Console.WriteLine("Enter the value of side a:"); + _a = Convert.ToDouble(Console.ReadLine()); + + Console.WriteLine("Enter the value of side b:"); + _b = Convert.ToDouble(Console.ReadLine()); + } + + public void process_data() + { + _surfaceArea = _a * _b; + } + + public void show_results() + { + Console.WriteLine($"Value of side a: {_a:F2}"); + Console.WriteLine($"Value of side b: {_b:F2}"); + Console.WriteLine($"Surface area: {_surfaceArea:F2}"); + } + } + + internal abstract class Program + { + public static void Main() + { + var rectangle = new Rectangle(); + rectangle.read_data(); + rectangle.process_data(); + rectangle.show_results(); + } + } +} diff --git a/Tasks/Task 1/Properties/AssemblyInfo.cs b/Tasks/Task 1/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0f362a4 --- /dev/null +++ b/Tasks/Task 1/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Task_1")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Task_1")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("6E294257-4066-4FB1-8744-5AA72F0EBE11")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Tasks/Task 1/Task 1.csproj b/Tasks/Task 1/Task 1.csproj new file mode 100644 index 0000000..091c058 --- /dev/null +++ b/Tasks/Task 1/Task 1.csproj @@ -0,0 +1,55 @@ + + + + + Debug + AnyCPU + {6E294257-4066-4FB1-8744-5AA72F0EBE11} + Exe + Properties + Task_1 + Task_1 + v4.7.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + diff --git a/Tasks/Task 1/bin/Debug/Task_1.exe b/Tasks/Task 1/bin/Debug/Task_1.exe new file mode 100644 index 0000000..76b67d3 Binary files /dev/null and b/Tasks/Task 1/bin/Debug/Task_1.exe differ diff --git a/Tasks/Task 1/bin/Debug/Task_1.pdb b/Tasks/Task 1/bin/Debug/Task_1.pdb new file mode 100644 index 0000000..e0df1e8 Binary files /dev/null and b/Tasks/Task 1/bin/Debug/Task_1.pdb differ diff --git a/Tasks/Task 1/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/Tasks/Task 1/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/Tasks/Task 1/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/Tasks/Task 1/obj/Debug/Task 1.csproj.AssemblyReference.cache b/Tasks/Task 1/obj/Debug/Task 1.csproj.AssemblyReference.cache new file mode 100644 index 0000000..9df21bf Binary files /dev/null and b/Tasks/Task 1/obj/Debug/Task 1.csproj.AssemblyReference.cache differ diff --git a/Tasks/Task 1/obj/Debug/Task 1.csproj.CoreCompileInputs.cache b/Tasks/Task 1/obj/Debug/Task 1.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..82781a4 --- /dev/null +++ b/Tasks/Task 1/obj/Debug/Task 1.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +f9fa4d8035e0f98d331bcefb7b0e1ab7c3cf386e53719f63d32749870109d736 diff --git a/Tasks/Task 1/obj/Debug/Task 1.csproj.FileListAbsolute.txt b/Tasks/Task 1/obj/Debug/Task 1.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..bf6860f --- /dev/null +++ b/Tasks/Task 1/obj/Debug/Task 1.csproj.FileListAbsolute.txt @@ -0,0 +1,6 @@ +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 1\bin\Debug\Task_1.exe +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 1\bin\Debug\Task_1.pdb +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 1\obj\Debug\Task 1.csproj.AssemblyReference.cache +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 1\obj\Debug\Task 1.csproj.CoreCompileInputs.cache +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 1\obj\Debug\Task_1.exe +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 1\obj\Debug\Task_1.pdb diff --git a/Tasks/Task 1/obj/Debug/Task_1.exe b/Tasks/Task 1/obj/Debug/Task_1.exe new file mode 100644 index 0000000..76b67d3 Binary files /dev/null and b/Tasks/Task 1/obj/Debug/Task_1.exe differ diff --git a/Tasks/Task 1/obj/Debug/Task_1.pdb b/Tasks/Task 1/obj/Debug/Task_1.pdb new file mode 100644 index 0000000..e0df1e8 Binary files /dev/null and b/Tasks/Task 1/obj/Debug/Task_1.pdb differ diff --git a/Tasks/Task 2/Program.cs b/Tasks/Task 2/Program.cs new file mode 100644 index 0000000..e4a0d78 --- /dev/null +++ b/Tasks/Task 2/Program.cs @@ -0,0 +1,45 @@ +using System; + +namespace Task_2 +{ + public class NumberSorter + { + private int[] _numbers; + + public void read_data() + { + _numbers = new int[6]; + Console.WriteLine("Enter six numbers to sort:"); + for (var i = 0; i < 6; i++) + { + Console.WriteLine($"Enter number {i + 1}:"); + _numbers[i] = Convert.ToInt32(Console.ReadLine()); + } + } + + public void process_data() + { + Array.Sort(_numbers); + } + + public void show_results() + { + Console.WriteLine("Sorted numbers:"); + foreach (var number in _numbers) + { + Console.WriteLine(number); + } + } + } + + internal abstract class Program + { + public static void Main() + { + var sorter = new NumberSorter(); + sorter.read_data(); + sorter.process_data(); + sorter.show_results(); + } + } +} diff --git a/Tasks/Task 2/Properties/AssemblyInfo.cs b/Tasks/Task 2/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f931bc7 --- /dev/null +++ b/Tasks/Task 2/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Task_2")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Task_2")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("F2FBE37E-B486-453E-8FCD-443A88996919")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Tasks/Task 2/Task 2.csproj b/Tasks/Task 2/Task 2.csproj new file mode 100644 index 0000000..fb89e59 --- /dev/null +++ b/Tasks/Task 2/Task 2.csproj @@ -0,0 +1,55 @@ + + + + + Debug + AnyCPU + {F2FBE37E-B486-453E-8FCD-443A88996919} + Exe + Properties + Task_2 + Task_2 + v4.7.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + diff --git a/Tasks/Task 2/bin/Debug/Task_2.exe b/Tasks/Task 2/bin/Debug/Task_2.exe new file mode 100644 index 0000000..7969564 Binary files /dev/null and b/Tasks/Task 2/bin/Debug/Task_2.exe differ diff --git a/Tasks/Task 2/bin/Debug/Task_2.pdb b/Tasks/Task 2/bin/Debug/Task_2.pdb new file mode 100644 index 0000000..fefd790 Binary files /dev/null and b/Tasks/Task 2/bin/Debug/Task_2.pdb differ diff --git a/Tasks/Task 2/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/Tasks/Task 2/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/Tasks/Task 2/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/Tasks/Task 2/obj/Debug/Task 2.csproj.AssemblyReference.cache b/Tasks/Task 2/obj/Debug/Task 2.csproj.AssemblyReference.cache new file mode 100644 index 0000000..9df21bf Binary files /dev/null and b/Tasks/Task 2/obj/Debug/Task 2.csproj.AssemblyReference.cache differ diff --git a/Tasks/Task 2/obj/Debug/Task 2.csproj.CoreCompileInputs.cache b/Tasks/Task 2/obj/Debug/Task 2.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..82781a4 --- /dev/null +++ b/Tasks/Task 2/obj/Debug/Task 2.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +f9fa4d8035e0f98d331bcefb7b0e1ab7c3cf386e53719f63d32749870109d736 diff --git a/Tasks/Task 2/obj/Debug/Task 2.csproj.FileListAbsolute.txt b/Tasks/Task 2/obj/Debug/Task 2.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..59b6f1a --- /dev/null +++ b/Tasks/Task 2/obj/Debug/Task 2.csproj.FileListAbsolute.txt @@ -0,0 +1,6 @@ +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 2\bin\Debug\Task_2.exe +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 2\bin\Debug\Task_2.pdb +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 2\obj\Debug\Task 2.csproj.AssemblyReference.cache +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 2\obj\Debug\Task 2.csproj.CoreCompileInputs.cache +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 2\obj\Debug\Task_2.exe +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 2\obj\Debug\Task_2.pdb diff --git a/Tasks/Task 2/obj/Debug/Task_2.exe b/Tasks/Task 2/obj/Debug/Task_2.exe new file mode 100644 index 0000000..7969564 Binary files /dev/null and b/Tasks/Task 2/obj/Debug/Task_2.exe differ diff --git a/Tasks/Task 2/obj/Debug/Task_2.pdb b/Tasks/Task 2/obj/Debug/Task_2.pdb new file mode 100644 index 0000000..fefd790 Binary files /dev/null and b/Tasks/Task 2/obj/Debug/Task_2.pdb differ diff --git a/Tasks/Task 3/Program.cs b/Tasks/Task 3/Program.cs new file mode 100644 index 0000000..845f7fa --- /dev/null +++ b/Tasks/Task 3/Program.cs @@ -0,0 +1,67 @@ +using System; + +namespace Task_3 +{ + public class Employee + { + private string _name; + private string _lastname; + private string _street; + private string _city; + + protected void Read() + { + Console.WriteLine("Enter name:"); + _name = Console.ReadLine(); + + Console.WriteLine("Enter lastname:"); + _lastname = Console.ReadLine(); + + Console.WriteLine("Enter street:"); + _street = Console.ReadLine(); + + Console.WriteLine("Enter city:"); + _city = Console.ReadLine(); + } + + protected void Show() + { + Console.WriteLine($"Name: {_name}"); + Console.WriteLine($"Lastname: {_lastname}"); + Console.WriteLine($"Street: {_street}"); + Console.WriteLine($"City: {_city}"); + } + } + + public class HR : Employee + { + private string _education; + private string _businessRole; + + public void Read1() + { + Read(); + Console.WriteLine("Enter education:"); + _education = Console.ReadLine(); + Console.WriteLine("Enter business role:"); + _businessRole = Console.ReadLine(); + } + + public void Show1() + { + Show(); + Console.WriteLine($"Education: {_education}"); + Console.WriteLine($"Business Role: {_businessRole}"); + } + } + + internal abstract class Program + { + public static void Main() + { + var hrEmployee = new HR(); + hrEmployee.Read1(); + hrEmployee.Show1(); + } + } +} diff --git a/Tasks/Task 3/Properties/AssemblyInfo.cs b/Tasks/Task 3/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..f553cf0 --- /dev/null +++ b/Tasks/Task 3/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Task_3")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Task_3")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Tasks/Task 3/Task 3.csproj b/Tasks/Task 3/Task 3.csproj new file mode 100644 index 0000000..754b8b2 --- /dev/null +++ b/Tasks/Task 3/Task 3.csproj @@ -0,0 +1,55 @@ + + + + + Debug + AnyCPU + {7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA} + Exe + Properties + Task_3 + Task_3 + v4.7.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + diff --git a/Tasks/Task 3/bin/Debug/Task_3.exe b/Tasks/Task 3/bin/Debug/Task_3.exe new file mode 100644 index 0000000..6f0c4cc Binary files /dev/null and b/Tasks/Task 3/bin/Debug/Task_3.exe differ diff --git a/Tasks/Task 3/bin/Debug/Task_3.pdb b/Tasks/Task 3/bin/Debug/Task_3.pdb new file mode 100644 index 0000000..b55f42d Binary files /dev/null and b/Tasks/Task 3/bin/Debug/Task_3.pdb differ diff --git a/Tasks/Task 3/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/Tasks/Task 3/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs new file mode 100644 index 0000000..3871b18 --- /dev/null +++ b/Tasks/Task 3/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/Tasks/Task 3/obj/Debug/Task 3.csproj.AssemblyReference.cache b/Tasks/Task 3/obj/Debug/Task 3.csproj.AssemblyReference.cache new file mode 100644 index 0000000..9df21bf Binary files /dev/null and b/Tasks/Task 3/obj/Debug/Task 3.csproj.AssemblyReference.cache differ diff --git a/Tasks/Task 3/obj/Debug/Task 3.csproj.CoreCompileInputs.cache b/Tasks/Task 3/obj/Debug/Task 3.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000..82781a4 --- /dev/null +++ b/Tasks/Task 3/obj/Debug/Task 3.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +f9fa4d8035e0f98d331bcefb7b0e1ab7c3cf386e53719f63d32749870109d736 diff --git a/Tasks/Task 3/obj/Debug/Task 3.csproj.FileListAbsolute.txt b/Tasks/Task 3/obj/Debug/Task 3.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..14eb0a5 --- /dev/null +++ b/Tasks/Task 3/obj/Debug/Task 3.csproj.FileListAbsolute.txt @@ -0,0 +1,6 @@ +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 3\bin\Debug\Task_3.exe +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 3\bin\Debug\Task_3.pdb +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 3\obj\Debug\Task 3.csproj.AssemblyReference.cache +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 3\obj\Debug\Task 3.csproj.CoreCompileInputs.cache +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 3\obj\Debug\Task_3.exe +C:\Users\artur\Developer\fitplanconnect\Tasks\Task 3\obj\Debug\Task_3.pdb diff --git a/Tasks/Task 3/obj/Debug/Task_3.exe b/Tasks/Task 3/obj/Debug/Task_3.exe new file mode 100644 index 0000000..6f0c4cc Binary files /dev/null and b/Tasks/Task 3/obj/Debug/Task_3.exe differ diff --git a/Tasks/Task 3/obj/Debug/Task_3.pdb b/Tasks/Task 3/obj/Debug/Task_3.pdb new file mode 100644 index 0000000..b55f42d Binary files /dev/null and b/Tasks/Task 3/obj/Debug/Task_3.pdb differ diff --git a/Tasks/Tasks.sln b/Tasks/Tasks.sln new file mode 100644 index 0000000..8c01a77 --- /dev/null +++ b/Tasks/Tasks.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Task 1", "Task 1\Task 1.csproj", "{6E294257-4066-4FB1-8744-5AA72F0EBE11}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Task 2", "Task 2\Task 2.csproj", "{F2FBE37E-B486-453E-8FCD-443A88996919}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Task 3", "Task 3\Task 3.csproj", "{7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6E294257-4066-4FB1-8744-5AA72F0EBE11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E294257-4066-4FB1-8744-5AA72F0EBE11}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E294257-4066-4FB1-8744-5AA72F0EBE11}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E294257-4066-4FB1-8744-5AA72F0EBE11}.Release|Any CPU.Build.0 = Release|Any CPU + {F2FBE37E-B486-453E-8FCD-443A88996919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2FBE37E-B486-453E-8FCD-443A88996919}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2FBE37E-B486-453E-8FCD-443A88996919}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2FBE37E-B486-453E-8FCD-443A88996919}.Release|Any CPU.Build.0 = Release|Any CPU + {7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D6B2C17-D0E5-4A76-9F34-8FFDBFBEE3AA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/assets/fitplan.png b/assets/fitplan.png new file mode 100644 index 0000000..18c97be Binary files /dev/null and b/assets/fitplan.png differ diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..2d306be --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,4 @@ +OAUTH_CLIENT_ID="" +OAUTH_CLIENT_SECRET="" +OAUTH_REDIRECT_URI="http://localhost/api/oauth/callback" +DB_URL="postgresql://user:password@host:port/database" diff --git a/backend/bun.lockb b/backend/bun.lockb index cbb9851..06dec53 100755 Binary files a/backend/bun.lockb and b/backend/bun.lockb differ diff --git a/backend/package.json b/backend/package.json index 086a51e..83fd936 100644 --- a/backend/package.json +++ b/backend/package.json @@ -15,6 +15,7 @@ "@neondatabase/serverless": "^0.9.1", "@paralleldrive/cuid2": "^2.2.2", "arctic": "^1.8.0", + "dayjs": "^1.11.11", "dotenv": "^16.4.5", "drizzle-orm": "^0.30.9", "drizzle-typebox": "^0.1.1", @@ -25,13 +26,17 @@ "elysia-rate-limit": "^3.2.2", "logestic": "^1.1.1", "lucia": "^3.2.0", + "moment": "^2.30.1", "pg": "^8.11.5", "postgres": "^3.4.4", "react": "^18.3.1", - "studio": "^0.13.5" + "stripe": "^15.12.0", + "studio": "^0.13.5", + "uuid": "^9.0.1" }, "devDependencies": { "@types/pg": "^8.11.5", + "@types/uuid": "^9.0.8", "bun-types": "latest", "drizzle-kit": "^0.20.17", "prettier": "^3.2.5", diff --git a/backend/src/app.ts b/backend/src/app.ts index 441b91e..eca3abf 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -1,31 +1,21 @@ import { Elysia } from 'elysia' import { cors } from '@elysiajs/cors' import { Logestic } from 'logestic' -import { swagger } from '@elysiajs/swagger' import { compression } from 'elysia-compression' import { autoload } from 'elysia-autoload' -import { rateLimit } from 'elysia-rate-limit' const app = new Elysia() .use(Logestic.preset('common')) .use(cors()) - .use(swagger({ - path: '/docs', - documentation: { - info: { - title: 'FitPlan Connect API Documentation', - version: '1.0.0' - }, - } - })) + // .use(swagger({ + // documentation: { + // info: { + // title: 'FitPlan Connect API Documentation', + // version: '1.0.0' + // }, + // } + // })) .use(compression()) - // .use( - // rateLimit({ - // max: 20, - // duration: 300000, - // responseMessage: 'Too many requests, please try again later.', - // }), - // ) .use( autoload({ prefix: '/api', diff --git a/backend/src/db/schema.ts b/backend/src/db/schema.ts index 8905b47..8818f49 100644 --- a/backend/src/db/schema.ts +++ b/backend/src/db/schema.ts @@ -32,6 +32,6 @@ export const meetings = dbSchema.table('meetings', { id: text('id').primaryKey(), userId: text('user_id').notNull().references(() => users.id), trainerID: text('trainer_id').notNull().references(() => trainers.id), - startTime: timestamp('start_time', { withTimezone: true }).notNull(), - endTime: timestamp('end_time', { withTimezone: true }).notNull(), + startTime: timestamp('start_time', { withTimezone: true, mode: 'date' }).notNull(), + endTime: timestamp('end_time', { withTimezone: true, mode: 'date' }).notNull(), }) diff --git a/backend/src/routes/admin/index.ts b/backend/src/routes/admin/index.ts deleted file mode 100644 index 71f94c4..0000000 --- a/backend/src/routes/admin/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import type { ElysiaApp } from '@/app' - -export default (app: ElysiaApp) => app.get('/tak', { hello: 'world' }) diff --git a/backend/src/routes/admin/users/index.ts b/backend/src/routes/admin/users/index.ts deleted file mode 100644 index 4287d72..0000000 --- a/backend/src/routes/admin/users/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { ElysiaApp } from '@/app' - -export default (app: ElysiaApp) => app.get('/', async ({ set }) => { - set.status = 200 - return { hello: 'world' } -}) diff --git a/backend/src/routes/billing/index.ts b/backend/src/routes/billing/index.ts new file mode 100644 index 0000000..942d4bb --- /dev/null +++ b/backend/src/routes/billing/index.ts @@ -0,0 +1,113 @@ +import { ElysiaApp } from '@/app' +import { db } from '@/utils/db' +import { eq } from 'drizzle-orm' +import { sessions, users } from '@/db/schema' +import { validateRequest } from '@/utils/validateRequest' +import Stripe from 'stripe' +import dayjs from 'dayjs' +import utc from 'dayjs/plugin/utc' +import { t } from 'elysia' + +dayjs.extend(utc) +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY as string) + +export default (app: ElysiaApp) => + app + .get('/config', async ({ set, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + const { user, session } = await validateRequest(auth_session) + + if (user && session && userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + set.status = 200 + return { + publishableKey: process.env.STRIPE_PUBLISHABLE_KEY as string, + } + } + + if (!userData) { + set.status = 401 + return { message: 'unauthorized' } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }) + .post('/', async ({ set, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + const { user, session } = await validateRequest(auth_session) + + if (user && session && userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + try { + const paymentIntent: Stripe.PaymentIntent = await stripe.paymentIntents.create({ + currency: 'usd', + amount: 199, + }) + set.status = 200 + return { clientSecret: paymentIntent.client_secret } + } catch (error) { + set.status = 403 + return error + } + } + + if (!userData) { + set.status = 401 + return { message: 'unauthorized' } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }) + .get('/success/:key', async ({ set, params: { key }, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + const { user, session } = await validateRequest(auth_session) + + if (user && session && userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + if (key !== process.env.STRIPE_SUCCESS_KEY) { + set.status = 403 + return { message: 'forbidden' } + } + + const subscriptionExpirationDate = dayjs() + .utc() + .add(1, 'year') + .set('hours', 0) + .set('minutes', 0) + .set('seconds', 0) + .set('milliseconds', 0) + .toISOString() + + const updatedUser = await db + .update(users) + .set({ subscriptionExpirationDate }) + .where(eq(users.accessToken, userData.accessToken)) + .returning({ id: users.id }) + + if (updatedUser.length === 0) { + set.status = 403 + return { message: 'forbidden' } + } else { + set.status = 301 + set.redirect = '/app/billing/complete' + } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }, { + params: t.Object({ + key: t.String(), + }), + }) diff --git a/backend/src/routes/meetings/index.ts b/backend/src/routes/meetings/index.ts new file mode 100644 index 0000000..744fab2 --- /dev/null +++ b/backend/src/routes/meetings/index.ts @@ -0,0 +1,68 @@ +import { ElysiaApp } from '@/app' +import { db } from '@/utils/db' +import { eq } from 'drizzle-orm' +import { meetings, sessions, users } from '@/db/schema' +import { t } from 'elysia' +import { v4 as uuid } from 'uuid' +import { validateRequest } from '@/utils/validateRequest' + +export default (app: ElysiaApp) => + app + .get('/', async ({ set, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + const { user, session } = await validateRequest(auth_session) + + if (user && session && userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + const data = await db.select().from(meetings) + set.status = 200 + return data + } + + if (!userData) { + set.status = 401 + return { message: 'unauthorized' } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }) + .post( + '/', + async ({ set, body: { userId, trainerID, startTime, endTime }, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + + if (userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + const id = uuid() + type NewMeeting = typeof meetings.$inferInsert + const newMeeting: NewMeeting = { id, userId, trainerID, startTime, endTime } + const meetingID = await db.insert(meetings).values(newMeeting).returning({ id: meetings.id }) + + set.status = 200 + return meetingID + } + + if (!userData) { + set.status = 401 + return { message: 'unauthorized' } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }, + { + body: t.Object({ + userId: t.String(), + trainerID: t.String(), + startTime: t.Date(), + endTime: t.Date(), + }), + }, + ) diff --git a/backend/src/routes/oauth/callback/index.ts b/backend/src/routes/oauth/callback/index.ts index 8ae102b..bbb14d5 100644 --- a/backend/src/routes/oauth/callback/index.ts +++ b/backend/src/routes/oauth/callback/index.ts @@ -6,6 +6,7 @@ import { eq } from 'drizzle-orm' import { users } from '@/db/schema' import { lucia } from '@/utils/lucia' import { t } from 'elysia' +import moment from 'moment' export default (app: ElysiaApp) => app.get( @@ -52,6 +53,16 @@ export default (app: ElysiaApp) => username: githubData.login, email: githubData.email || '', profilePictureUrl: githubData.avatar_url, + subscriptionExpirationDate: moment() + .utc() + .add(3, 'd') + .set('hour', 0) + .set('minute', 0) + .set('second', 0) + .set('millisecond', 0) + .toDate() + .toISOString(), + selectedTrainerId: '79342641', }) .returning({ id: users.id }) @@ -72,7 +83,13 @@ export default (app: ElysiaApp) => } else { const updatedOAuthAccountRes = await trx .update(users) - .set({ accessToken }) + .set({ + accessToken, + profilePictureUrl: githubData.avatar_url, + name: githubData.name || '', + username: githubData.login, + email: githubData.email || '', + }) .where(eq(users.id, githubData.id)) if (updatedOAuthAccountRes.count === 0) { diff --git a/backend/src/routes/oauth/index.ts b/backend/src/routes/oauth/index.ts index 28df045..2cfc084 100644 --- a/backend/src/routes/oauth/index.ts +++ b/backend/src/routes/oauth/index.ts @@ -7,9 +7,7 @@ export default (app: ElysiaApp) => app try { const state = generateState() - const authURL = await github.createAuthorizationURL(state, { - scopes: ['user:email'], - }) + const authURL = await github.createAuthorizationURL(state, { scopes: ['user:email'] }) github_oauth_state.set({ value: state, diff --git a/backend/src/routes/oauth/logout/index.ts b/backend/src/routes/oauth/logout/index.ts index f3abd09..e5ddc95 100644 --- a/backend/src/routes/oauth/logout/index.ts +++ b/backend/src/routes/oauth/logout/index.ts @@ -1,80 +1,19 @@ import 'dotenv/config' import { ElysiaApp } from '@/app' import { db } from '@/utils/db' -import { meetings, sessions, users } from '@/db/schema' +import { sessions } from '@/db/schema' import { eq } from 'drizzle-orm' -import user from '@/routes/user' -import { lucia } from '@/utils/lucia' +import { validateRequest } from '@/utils/validateRequest' +import { clearAuthCookies } from '@/utils/clearAuthCookies' export default (app: ElysiaApp) => app .get('/', async ({ set, cookie: { github_oauth_state, auth_session } }) => { try { - const validateRequest = async () => { - const sessionId = auth_session?.value ?? null - - if (!sessionId) - return { - user: null, - session: null, - } - - const { user, session } = await lucia.validateSession(sessionId) - try { - if (session && session.fresh) { - const sessionCookie = lucia.createSessionCookie(session.id) - auth_session.set({ - value: sessionCookie.value, - httpOnly: sessionCookie.attributes.httpOnly, - secure: sessionCookie.attributes.secure, - sameSite: sessionCookie.attributes.sameSite, - path: sessionCookie.attributes.path, - maxAge: sessionCookie.attributes.maxAge, - }) - } - if (!session) { - const sessionCookie = lucia.createBlankSessionCookie() - auth_session.set({ - value: sessionCookie.value, - httpOnly: sessionCookie.attributes.httpOnly, - secure: sessionCookie.attributes.secure, - sameSite: sessionCookie.attributes.sameSite, - path: sessionCookie.attributes.path, - maxAge: sessionCookie.attributes.maxAge, - }) - } - } catch (error: any) { - console.log(error) - } - - return { - user, - session, - } - } - const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) - - const { user, session } = await validateRequest() + const { user, session } = await validateRequest(auth_session) if (user && session && userSession) { - github_oauth_state.set({ - value: '', - httpOnly: true, - secure: true, - sameSite: 'strict', - path: '/', - maxAge: 0, - }) - - auth_session.set({ - value: '', - httpOnly: true, - secure: true, - sameSite: 'strict', - path: '/', - maxAge: 0, - }) - + clearAuthCookies(github_oauth_state, auth_session) await db.delete(sessions).where(eq(sessions.userId, user.id)).returning() set.status = 200 set.headers.location = '/' diff --git a/backend/src/routes/trainer/index.ts b/backend/src/routes/trainer/index.ts new file mode 100644 index 0000000..9e92e9c --- /dev/null +++ b/backend/src/routes/trainer/index.ts @@ -0,0 +1,50 @@ +import { ElysiaApp } from '@/app' +import { db } from '@/utils/db' +import { eq } from 'drizzle-orm' +import { sessions, trainers, users } from '@/db/schema' +import { validateRequest } from '@/utils/validateRequest' +import { t } from 'elysia' + +export default (app: ElysiaApp) => + app.patch('/:trainerID', async ({ set, params: { trainerID }, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + const { user, session } = await validateRequest(auth_session) + + if (user && session && userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + const trainer = await db.query.trainers.findFirst({ where: eq(trainers.id, trainerID) }) + + if (!trainer) { + set.status = 404 + return { message: 'trainer not found' } + } + + const user = await db + .update(users) + .set({ selectedTrainerId: trainer.id }) + .where(eq(users.accessToken, userData.accessToken)) + .returning({ id: users.id }) + + if (user.length === 0) { + set.status = 403 + return { message: 'forbidden' } + } + + set.status = 200 + } + + if (!userData) { + set.status = 401 + return { message: 'unauthorized' } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }, { + params: t.Object({ + trainerID: t.String() + }) + }) diff --git a/backend/src/routes/trainers/index.ts b/backend/src/routes/trainers/index.ts new file mode 100644 index 0000000..f497bfa --- /dev/null +++ b/backend/src/routes/trainers/index.ts @@ -0,0 +1,35 @@ +import { ElysiaApp } from '@/app' +import { db } from '@/utils/db' +import { eq } from 'drizzle-orm' +import { sessions, trainers, users } from '@/db/schema' +import { validateRequest } from '@/utils/validateRequest' + +export default (app: ElysiaApp) => + app.get('/', async ({ set, cookie: { auth_session } }) => { + const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) + const { user, session } = await validateRequest(auth_session) + + if (user && session && userSession) { + const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + + if (userData?.accessToken) { + const data = await db.select({ + id: trainers.id, + name: trainers.name, + username: trainers.username, + email: trainers.email, + profile_picture_url: trainers.profilePictureUrl, + }).from(trainers) + set.status = 200 + return data + } + + if (!userData) { + set.status = 401 + return { message: 'unauthorized' } + } + } else { + set.status = 401 + return { message: 'unauthorized' } + } + }) diff --git a/backend/src/routes/user/delete.ts b/backend/src/routes/user/delete.ts index 7c71d06..6f91cd6 100644 --- a/backend/src/routes/user/delete.ts +++ b/backend/src/routes/user/delete.ts @@ -2,76 +2,16 @@ import { ElysiaApp } from '@/app' import { db } from '@/utils/db' import { eq } from 'drizzle-orm' import { meetings, sessions, users } from '@/db/schema' -import { lucia } from '@/utils/lucia' +import { validateRequest } from '@/utils/validateRequest' +import { clearAuthCookies } from '@/utils/clearAuthCookies' export default (app: ElysiaApp) => app.get('/', async ({ set, cookie: { github_oauth_state, auth_session } }) => { - const validateRequest = async () => { - const sessionId = auth_session?.value ?? null - - if (!sessionId) - return { - user: null, - session: null, - } - - const { user, session } = await lucia.validateSession(sessionId) - try { - if (session && session.fresh) { - const sessionCookie = lucia.createSessionCookie(session.id) - auth_session.set({ - value: sessionCookie.value, - httpOnly: sessionCookie.attributes.httpOnly, - secure: sessionCookie.attributes.secure, - sameSite: sessionCookie.attributes.sameSite, - path: sessionCookie.attributes.path, - maxAge: sessionCookie.attributes.maxAge, - }) - } - if (!session) { - const sessionCookie = lucia.createBlankSessionCookie() - auth_session.set({ - value: sessionCookie.value, - httpOnly: sessionCookie.attributes.httpOnly, - secure: sessionCookie.attributes.secure, - sameSite: sessionCookie.attributes.sameSite, - path: sessionCookie.attributes.path, - maxAge: sessionCookie.attributes.maxAge, - }) - } - } catch (error: any) { - console.log(error) - } - - return { - user, - session, - } - } - const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) - - const { user, session } = await validateRequest() + const { user, session } = await validateRequest(auth_session) if (user && session && userSession) { - github_oauth_state.set({ - value: '', - httpOnly: true, - secure: true, - sameSite: 'strict', - path: '/', - maxAge: 0, - }) - - auth_session.set({ - value: '', - httpOnly: true, - secure: true, - sameSite: 'strict', - path: '/', - maxAge: 0, - }) - + clearAuthCookies(github_oauth_state, auth_session) await db.delete(meetings).where(eq(meetings.userId, user.id)).returning() await db.delete(sessions).where(eq(sessions.userId, user.id)).returning() await db.delete(users).where(eq(users.id, user.id)).returning() diff --git a/backend/src/routes/user/index.ts b/backend/src/routes/user/index.ts index 54a9e9d..0bac5ba 100644 --- a/backend/src/routes/user/index.ts +++ b/backend/src/routes/user/index.ts @@ -1,66 +1,13 @@ import { ElysiaApp } from '@/app' import { db } from '@/utils/db' import { eq } from 'drizzle-orm' -import { sessions, users } from '@/db/schema' -import { lucia } from '@/utils/lucia' - -type UserResponse = { - name: string - username: string - email: string - profile_picture_url: string - selected_trainer_id: string - subscription_expiration_date: string -} +import { meetings, sessions, users } from '@/db/schema' +import { validateRequest } from '@/utils/validateRequest' export default (app: ElysiaApp) => app.get('/', async ({ set, cookie: { auth_session } }) => { - const validateRequest = async () => { - const sessionId = auth_session?.value ?? null - - if (!sessionId) - return { - user: null, - session: null, - } - - const { user, session } = await lucia.validateSession(sessionId) - try { - if (session && session.fresh) { - const sessionCookie = lucia.createSessionCookie(session.id) - auth_session.set({ - value: sessionCookie.value, - httpOnly: sessionCookie.attributes.httpOnly, - secure: sessionCookie.attributes.secure, - sameSite: sessionCookie.attributes.sameSite, - path: sessionCookie.attributes.path, - maxAge: sessionCookie.attributes.maxAge, - }) - } - if (!session) { - const sessionCookie = lucia.createBlankSessionCookie() - auth_session.set({ - value: sessionCookie.value, - httpOnly: sessionCookie.attributes.httpOnly, - secure: sessionCookie.attributes.secure, - sameSite: sessionCookie.attributes.sameSite, - path: sessionCookie.attributes.path, - maxAge: sessionCookie.attributes.maxAge, - }) - } - } catch (error: any) { - console.log(error) - } - - return { - user, - session, - } - } - const userSession = await db.query.sessions.findFirst({ where: eq(sessions.id, auth_session.value) }) - - const { user, session } = await validateRequest() + const { user, session } = await validateRequest(auth_session) if (user && session && userSession) { const userData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) @@ -84,32 +31,23 @@ export default (app: ElysiaApp) => .where(eq(users.accessToken, userData?.accessToken)) const userNewData = await db.query.users.findFirst({ where: eq(users.id, userSession.userId) }) + const userMeetings = await db.query.meetings.findMany({ where: eq(meetings.userId, userSession.userId) }) set.status = 200 return { + id: userNewData?.id, name: userNewData?.name, username: userNewData?.username, email: userNewData?.email, profile_picture_url: userNewData?.profilePictureUrl, selected_trainer_id: userNewData?.selectedTrainerId || '', subscription_expiration_date: userNewData?.subscriptionExpirationDate || '', + meetings: userMeetings, } - } - - if (!userData) { + } else { set.status = 401 return { message: 'unauthorized' } } - - set.status = 200 - return { - name: userData.name, - username: userData.username, - email: userData.email, - profile_picture_url: userData.profilePictureUrl, - selected_trainer_id: userData.selectedTrainerId || '', - subscription_expiration_date: userData.subscriptionExpirationDate || '', - } } else { set.status = 401 return { message: 'unauthorized' } diff --git a/backend/src/utils/clearAuthCookies.ts b/backend/src/utils/clearAuthCookies.ts new file mode 100644 index 0000000..8869dc6 --- /dev/null +++ b/backend/src/utils/clearAuthCookies.ts @@ -0,0 +1,18 @@ +export const clearAuthCookies = (github_oauth_state: any, auth_session: any) => { + github_oauth_state.set({ + value: '', + httpOnly: true, + secure: true, + sameSite: 'strict', + path: '/', + maxAge: 0, + }) + auth_session.set({ + value: '', + httpOnly: true, + secure: true, + sameSite: 'strict', + path: '/', + maxAge: 0, + }) +} diff --git a/backend/src/utils/validateRequest.ts b/backend/src/utils/validateRequest.ts new file mode 100644 index 0000000..36323f4 --- /dev/null +++ b/backend/src/utils/validateRequest.ts @@ -0,0 +1,37 @@ +import { lucia } from '@/utils/lucia' + +export const validateRequest = async (auth_session: any) => { + const sessionId = auth_session?.value ?? null + + if (!sessionId) return { user: null, session: null } + + const { user, session } = await lucia.validateSession(sessionId) + try { + if (session && session.fresh) { + const sessionCookie = lucia.createSessionCookie(session.id) + auth_session.set({ + value: sessionCookie.value, + httpOnly: sessionCookie.attributes.httpOnly, + secure: sessionCookie.attributes.secure, + sameSite: sessionCookie.attributes.sameSite, + path: sessionCookie.attributes.path, + maxAge: sessionCookie.attributes.maxAge, + }) + } + if (!session) { + const sessionCookie = lucia.createBlankSessionCookie() + auth_session.set({ + value: sessionCookie.value, + httpOnly: sessionCookie.attributes.httpOnly, + secure: sessionCookie.attributes.secure, + sameSite: sessionCookie.attributes.sameSite, + path: sessionCookie.attributes.path, + maxAge: sessionCookie.attributes.maxAge, + }) + } + } catch (error: any) { + console.log(error) + } + + return { user, session } +} diff --git a/nginx.conf b/nginx.conf index 5b9cd25..2d5d210 100644 --- a/nginx.conf +++ b/nginx.conf @@ -23,20 +23,6 @@ http { proxy_set_header Connection "upgrade"; } - location /api/docs { - proxy_pass http://0.0.0.0:7702/docs; - client_max_body_size 4M; - proxy_buffering off; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - proxy_pass_request_headers on; - proxy_set_header Host 0.0.0.0:7702; - proxy_set_header X-Forwarded-For $remote_addr; - proxy_set_header X-Forwarded-Proto $scheme; - } - location /api/ { proxy_pass http://0.0.0.0:7702/api/; client_max_body_size 4M; diff --git a/website/README.md b/website/README.md deleted file mode 100644 index 0d6babe..0000000 --- a/website/README.md +++ /dev/null @@ -1,30 +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/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-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: - -- Configure the top-level `parserOptions` property like this: - -```js -export default { - // other rules... - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: ['./tsconfig.json', './tsconfig.node.json'], - tsconfigRootDir: __dirname, - }, -} -``` - -- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` -- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` -- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list diff --git a/website/index.html b/website/index.html index b062b92..b67dd23 100644 --- a/website/index.html +++ b/website/index.html @@ -3,29 +3,21 @@ + FitPlan Connect - - + + - - + - - - - - - - - - - - - - + + + + + diff --git a/website/package.json b/website/package.json index 00d6aac..19bc73a 100644 --- a/website/package.json +++ b/website/package.json @@ -6,52 +6,50 @@ "license": "MIT", "scripts": { "dev": "vite", - "build": "tsc && vite build", + "build": "tsc && vite build --assetsDir . --outDir dist --base /", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, "dependencies": { - "@gsap/react": "^2.1.0", - "@hookform/error-message": "^2.0.1", - "@reduxjs/toolkit": "^2.2.3", - "@studio-freight/lenis": "^1.0.42", - "arctic": "^1.8.0", - "framer-motion": "^11.1.7", + "@gsap/react": "^2.1.1", + "@reduxjs/toolkit": "^2.2.5", + "@stripe/stripe-js": "^4.0.0", + "csstype": "^3.1.3", "gsap": "^3.12.5", - "i18next": "^23.11.2", - "i18next-browser-languagedetector": "^7.2.1", - "i18next-http-backend": "^2.5.1", - "js-cookie": "^3.0.5", - "lucia": "^3.2.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-helmet-async": "^2.0.4", - "react-hook-form": "^7.51.3", - "react-i18next": "^14.1.0", - "react-redux": "^9.1.1", - "react-router-dom": "^6.22.3", - "sass": "^1.75.0", - "swr": "^2.2.5", - "wretch": "^2.8.1", - "zustand": "^4.5.2" + "lodash-es": "^4.17.21", + "moment": "^2.30.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-helmet-async": "^2.0.5", + "react-redux": "^9.1.2", + "react-router-dom": "^6.23.1", + "react-schedule-meeting": "^4.2.3", + "react-virtuoso": "^4.7.11", + "sass": "^1.77.2", + "sweetalert2": "^11.11.0", + "wretch": "^2.8.1" }, "devDependencies": { + "@eslint/js": "^9.3.0", "@svgr/rollup": "^8.1.0", "@trivago/prettier-plugin-sort-imports": "^4.3.0", "@types/js-cookie": "^3.0.6", - "@types/node": "^20.12.7", - "@types/react": "^18.2.79", - "@types/react-dom": "^18.2.25", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", - "@vitejs/plugin-react": "^4.2.1", - "eslint": "^9.1.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.6", + "@types/lodash-es": "^4.17.12", + "@types/moment": "^2.13.0", + "@types/node": "^20.12.12", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.10.0", + "@typescript-eslint/parser": "^7.10.0", + "@vitejs/plugin-react": "^4.3.0", + "@vitejs/plugin-react-swc": "^3.7.0", + "eslint": "^9.3.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.7", "prettier": "^3.2.5", - "rollup-plugin-visualizer": "^5.12.0", "typescript": "^5.4.5", + "typescript-eslint": "^7.10.0", "typescript-plugin-css-modules": "^5.1.0", - "vite": "^5.2.10" + "vite": "^5.2.11" } } diff --git a/website/src/app.tsx b/website/src/app.tsx index b30bc54..ce55a66 100644 --- a/website/src/app.tsx +++ b/website/src/app.tsx @@ -1,40 +1,52 @@ +import '@stripe/stripe-js' import '@/styles/global.scss' -import { lazy, Suspense } from 'react' +import { lazy, memo, Suspense } from 'react' import { useGSAP } from '@gsap/react' import gsap from 'gsap' import { ScrollTrigger } from 'gsap/ScrollTrigger' import { HelmetProvider } from 'react-helmet-async' import { Provider } from 'react-redux' import { BrowserRouter, Route, Routes } from 'react-router-dom' -import { Header } from '@/components/header/header.tsx' import { useScrollTop } from '@/hooks/useScrollTop.ts' import { store } from '@/utils/store.ts' +import Header from '@/components/header/header' +import SuspenseComponent from '@/pages/suspense' gsap.registerPlugin(useGSAP, ScrollTrigger) -const Home = lazy(() => import('@/pages/home.tsx')) -const AppSettings = lazy(() => import('@/pages/app/app.settings.tsx')) +const Settings = lazy(() => import('@/pages/app/settings')) +const Calendar = lazy(() => import('@/pages/app/calendar')) +const Trainers = lazy(() => import('@/pages/app/trainers')) +const Billing = lazy(() => import('@/pages/app/billing')) +const BillingComplete = lazy(() => import('@/pages/app/billing.complete')) +const BillingCancel = lazy(() => import('@/pages/app/billing.cancel')) const NotFound = lazy(() => import('@/pages/notFound')) +const MemoizedRoutes = memo(() => ( + +
+ }> + + landing} /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + +)) + export default function App() { useScrollTop() return ( - -
- loading

}> - - } /> - calendar} /> - trainers} /> - billing} /> - } /> - } /> - -
- + ) diff --git a/website/src/assets/images/billing_background.png b/website/src/assets/images/billing_background.png new file mode 100644 index 0000000..248890a Binary files /dev/null and b/website/src/assets/images/billing_background.png differ diff --git a/website/src/assets/react.svg b/website/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/website/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/website/src/components/alertDialog/alertDialog.tsx b/website/src/components/alertDialog/alertDialog.tsx index 1137c9f..b4c530a 100644 --- a/website/src/components/alertDialog/alertDialog.tsx +++ b/website/src/components/alertDialog/alertDialog.tsx @@ -5,7 +5,7 @@ import { Button } from '@/components/button/button.tsx' import { Paragraph } from '@/components/typography/paragraph.tsx' import IconX from '@/assets/icons/IconX.tsx' -type AlertDialogTypes = { +interface AlertDialogTypes { icon?: JSX.Element title?: string description?: string @@ -18,6 +18,7 @@ type AlertDialogTypes = { closeWhenClickEscape?: boolean labelOnCancel?: string labelOnConfirm?: string + showButtons?: boolean } export const AlertDialog = ({ @@ -31,6 +32,7 @@ export const AlertDialog = ({ closeWhenClickEscape = false, labelOnCancel = 'Cancel', labelOnConfirm = 'Confirm', + showButtons = true, }: AlertDialogTypes) => { const [isClose, setIsClose] = useState(false) const body = document.querySelector('body') @@ -104,10 +106,12 @@ export const AlertDialog = ({ -
-
+ {showButtons && ( +
+
+ )} diff --git a/website/src/components/animateWrapper/animateWrapper.tsx b/website/src/components/animateWrapper/animateWrapper.tsx index 45291e6..caf3e46 100644 --- a/website/src/components/animateWrapper/animateWrapper.tsx +++ b/website/src/components/animateWrapper/animateWrapper.tsx @@ -1,7 +1,7 @@ import styles from './animateWrapper.module.scss'; import { FC, ReactNode } from 'react' -type AnimateWrapperProps = { +interface AnimateWrapperProps { children: ReactNode } diff --git a/website/src/components/button/button.tsx b/website/src/components/button/button.tsx index 1c255a0..f2aa949 100644 --- a/website/src/components/button/button.tsx +++ b/website/src/components/button/button.tsx @@ -1,7 +1,8 @@ +import { CSSProperties, useCallback } from 'react' import { Label } from '../typography/label.tsx' import styles from './button.module.scss' -type ButtonTypes = { +interface ButtonTypes { label?: string size?: 'small' | 'medium' | 'large' type?: 'primary' | 'secondary' | 'tertiary' | 'outlined' | 'link' @@ -10,7 +11,7 @@ type ButtonTypes = { isDisabled?: boolean isDestructive?: boolean onClick?: () => void - style?: any + style?: CSSProperties } export const Button = ({ @@ -24,18 +25,22 @@ export const Button = ({ onClick, style, }: ButtonTypes) => { + const handleClick = useCallback(() => { + if (onClick) { + onClick() + } + }, [onClick]) + return ( ) } diff --git a/website/src/components/container/container.module.scss b/website/src/components/container/container.module.scss index df242ee..9cb844c 100644 --- a/website/src/components/container/container.module.scss +++ b/website/src/components/container/container.module.scss @@ -2,4 +2,8 @@ margin: 0 auto; padding: 64px 40px 0; max-width: 1360px; + + @media (width <= 1024px) { + padding: 64px 20px 0; + } } diff --git a/website/src/components/container/container.tsx b/website/src/components/container/container.tsx index e8a98fd..c73d2d3 100644 --- a/website/src/components/container/container.tsx +++ b/website/src/components/container/container.tsx @@ -1,7 +1,7 @@ import styles from './container.module.scss' import { FC, ReactNode } from 'react' -type ContainerProps = { +interface ContainerProps { children: ReactNode } diff --git a/website/src/components/header/header.module.scss b/website/src/components/header/header.module.scss index ab822b6..1508ed0 100644 --- a/website/src/components/header/header.module.scss +++ b/website/src/components/header/header.module.scss @@ -3,10 +3,7 @@ .main { position: relative; - left: 0; - top: 0; - right: 0; - bottom: auto; + inset: 0 0 auto 0; } .container { @@ -31,7 +28,7 @@ transition: padding .2s; - @media (width <= 850px) { + @media (width <=850px) { padding: 15px 1rem 14px; } } @@ -71,7 +68,7 @@ justify-content: center; align-items: center; - @media (width <= 530px) { + @media (width <=530px) { display: none; } @@ -114,7 +111,7 @@ width: 100%; height: 2px; background: $neutral-200; - transition: background .3s; + transition: background-color .3s; } } @@ -147,13 +144,13 @@ justify-content: right; align-items: center; gap: 24px; - + .linksGroup { display: flex; justify-content: center; align-items: center; - @media (width <= 530px) { + @media (width <=530px) { display: none; } @@ -165,7 +162,7 @@ div:nth-child(2) a { border-radius: 0 8px 8px 0; } - + .linkGroup { padding: 6px 12px; @@ -175,7 +172,7 @@ border: 1px solid $neutral-200; - transition: background .2s, border .2s; + transition: background-color .2s, border .2s; svg path { transition: fill .2s; @@ -245,307 +242,4 @@ border-color: $neutral-100; background-color: $neutral-50; } -} - -.linkHamburger { - @extend .link; - - padding: 12px 0; - width: 100%; - justify-content: left; -} - -.linksHamburger { - z-index: 1; - - padding: 86px 24px 24px 24px; - - position: fixed; - - top: 0; - left: 0; - right: 0; - - width: 100vw; - - display: flex; - justify-content: left; - flex-direction: column; - gap: 12px; - - background-color: rgba(255, 255, 255, .9); - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - - transition: background .4s, border .4s, transform .4s; -} - -.componentHamburger { - z-index: 888; - - position: fixed; - - left: 0; - top: 0; - right: 0; - bottom: auto; - - width: 100vw; - padding: 14px 2.5rem 14px; - - background-color: rgba(255, 255, 255, .8); - - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - - transition: padding .4s, background .4s, border .4s; - - @media screen and (max-width: 575px) { - padding: 15px 1rem 14px; - } -} - -.contentHamburger { - z-index: 898; - - margin: 0 auto; - - width: 100%; - - display: flex; - -webkit-box-pack: justify; - justify-content: space-between; - -webkit-box-align: center; - align-items: center; -} - -.mobileLogo { - z-index: 999; -} - -.actionsHamburger { - width: 100%; - - display: flex; - justify-content: right; - flex-direction: row; - align-items: center; - gap: 16px; -} - -.hamburgerIcon, -.hamburgerIconActive { - z-index: 999; - - padding: 10px; - - display: flex; - justify-content: center; - align-items: center; - align-content: center; - - box-shadow: 0 1px 2px rgba(16, 24, 40, 0.05); - background-color: white; - border: 1px solid $gray-200; - border-radius: 10px; - cursor: pointer; - - transition: all .4s; - - svg line { - transition: all .4s; - } -} - -.hamburgerIconSVG { - padding: 5px 2px; - - width: 20px; - height: 20px; - - position: relative; - - display: flex; - justify-content: center; - flex-direction: column; - gap: 6px; -} - -@mixin hamburgerIconStroke { - position: absolute; - - width: 16px; - height: 2px !important; - - transition: background .4s; - background-color: #404040; -} - -.hamburgerStroke1 { - @include hamburgerIconStroke; - top: 3px; -} - -.hamburgerStroke2 { - @include hamburgerIconStroke; -} - -.hamburgerStroke3 { - @include hamburgerIconStroke; - width: 9px; - bottom: 3px; -} - -.hamburgerIconActive { - background-color: $gray-100; -} - -.dropdown { - position: relative; -} - -@mixin dropdownMenuStyle { - min-width: max-content; - position: absolute; - right: 0; - top: 150%; - padding: 10px; - border-radius: 12px; - - background-color: $gray-50; - color: $gray-500; -} - -.dropdownMenu { - @include dropdownMenuStyle; - - opacity: 0; - pointer-events: none; - transform: translateY(8%); - - transition: transform .2s; -} - -.dropdownMenuAcitve { - @include dropdownMenuStyle; - - opacity: 1; - pointer-events: auto; - transform: translateY(0); - - transition: transform .2s; -} - -.hamburgerDropdownMenu { - display: none; -} - -.hamburgerDropdownMenuActive { - display: unset; -} - -.dropdownLink { - padding: 8px; - - border-radius: 8px; - - display: flex; - justify-content: left; - align-items: center; - flex-direction: row; - gap: 8px; - - font-weight: 500; - font-size: 16px; - line-height: 24px; - color: $gray-50; - - transition-duration: .3s; - - &:is(:hover) { - background: #141C28; - } -} - -.dropdownEventsList { - display: flex; - flex-direction: column; -} - -.dropdownEventButton { - padding: 10px; - - display: flex; - justify-content: left; - flex-direction: row; - align-items: center; - gap: 12px; - - border-radius: 8px; - border: none; - background: none; - cursor: pointer; - - font-weight: 400; - font-size: 14px; - line-height: 22px; - color: $gray-800; - - transition: background-color .4s; - - &:is(:hover) { - background-color: white; - } - - &:nth-child(2), - &:nth-child(3) { - color: $red-500; - display: none; - } - - &:nth-child(4) { - color: $red-500; - } - - @media screen and (max-width: 875px) { - &:nth-child(2), - &:nth-child(3) { - color: $gray-800; - display: flex; - } - - &:nth-child(2) { - color: $gray-800; - } - } -} - -.modalHeading { - font-weight: 600; - font-size: 24px; - line-height: 100%; - color: $neutral-900; -} - -.modalContactLinks { - padding: 12px; - - display: flex; - justify-content: left; - align-items: center; - gap: 12px; - - border-radius: 12px; - - transition: background-color .4s; - - &:is(:hover) { - background-color: $gray-200; - } -} - -.profilePicture { - width: 40px; - height: 40px; - border-radius: 100%; -} +} \ No newline at end of file diff --git a/website/src/components/header/header.tsx b/website/src/components/header/header.tsx index ef43326..2ac0c56 100644 --- a/website/src/components/header/header.tsx +++ b/website/src/components/header/header.tsx @@ -1,22 +1,25 @@ -import styles from './header.module.scss'; -import { useEffect, useState } from 'react'; -import { Link, useLocation, useNavigate } from 'react-router-dom'; -import wretch from 'wretch'; -import { UserDropdown } from '@/components/userDropdown/userDropdown.tsx'; +import styles from './header.module.scss' +import { useEffect, useState } from 'react' +import { Link, useLocation } from 'react-router-dom' +import wretch from 'wretch' +import UserDropdown from '@/components/userDropdown/userDropdown.tsx' import { setUser, UserTypes } from '@/utils/slices/userSlice.ts' -import { useAppDispatch, useAppSelector } from '@/utils/store.ts'; +import { useAppDispatch, useAppSelector } from '@/utils/store.ts' import { Tooltip } from '@/components/tooltip/tooltip.tsx' +import { setTrainers } from '@/utils/slices/trainersSlice.ts' +import { User } from '@/models/User.ts' -export type OAuthResponse = { +interface OAuthResponse { error?: string url?: string } -export const Header = () => { +export default function Header() { const [isLoading, setIsLoading] = useState(false) const dispatch = useAppDispatch() - const user = useAppSelector(state => state.user.data) - const navigate = useNavigate() + const userData = useAppSelector(state => state.user.data) + let user + if (userData) user = new User(userData) const { pathname: url } = useLocation() useEffect(() => { @@ -24,12 +27,24 @@ export const Header = () => { try { const data: UserTypes = await wretch('/api/user').get().json() dispatch(setUser(data)) - } catch {} + const trainers = await wretch('/api/trainers').get().json() + dispatch(setTrainers(trainers)) + } catch { } } fetchUser().then() }, []) + const githubLoginHandlerClick = async () => { + setIsLoading(true) + const response: OAuthResponse = await wretch('/api/oauth').get().json() + if (response.error) { + console.error(response.error) + } else { + window.location.href = response.url as string + } + } + return (
@@ -74,6 +89,7 @@ export const Header = () => { + FitPlan Connect
- { - if (event.target.value === 'logout') { - await wretch('/api/oauth/logout').get().res() - dispatch(setUser(null)) - navigate('/') - } else { - navigate(event.target.value) - } - }} - options={[ - { - id: 'calendar', - name: 'Calendar', - value: '/app/calendar', - showOnDesktop: false, - }, - { - id: 'trainers', - name: 'Trainers', - value: '/app/trainers', - showOnDesktop: false, - }, - { - id: 'billing', - name: 'Billing', - value: '/app/billing', - showOnDesktop: false, - }, - { - id: 'settings', - name: 'Settings', - value: '/app/settings', - showOnDesktop: false, - }, - { - id: 'logout', - name: 'Logout', - value: 'logout', - showOnDesktop: true, - }, - ]} - /> + ) : ( - )} diff --git a/website/src/components/image.tsx b/website/src/components/image.tsx index 6cee5af..5395005 100644 --- a/website/src/components/image.tsx +++ b/website/src/components/image.tsx @@ -1,11 +1,11 @@ import { FC } from 'react' -type ImageTypes = { - className?: string; - id?: string; - source: string; - width?: string | number; - height?: string | number; +interface ImageTypes { + className?: string + id?: string + source: string + width?: string | number + height?: string | number } export const Image: FC = ({ className, id, source, width, height }) => ( diff --git a/website/src/components/overlay/overlay.tsx b/website/src/components/overlay/overlay.tsx index 0838783..f1e7c71 100644 --- a/website/src/components/overlay/overlay.tsx +++ b/website/src/components/overlay/overlay.tsx @@ -1,7 +1,7 @@ import styles from './overlay.module.scss' import { FC, ReactNode } from 'react' -type OverlayProps = { +interface OverlayProps { children: ReactNode } diff --git a/website/src/components/primaryButton/primaryButton.tsx b/website/src/components/primaryButton/primaryButton.tsx index 2361452..8d77089 100644 --- a/website/src/components/primaryButton/primaryButton.tsx +++ b/website/src/components/primaryButton/primaryButton.tsx @@ -1,7 +1,7 @@ import { Link } from 'react-router-dom' import styles from './primaryButton.module.scss' -type PrimaryButtonTypes = { +interface PrimaryButtonTypes { asLink?: boolean asButton?: boolean href?: string diff --git a/website/src/components/seo.tsx b/website/src/components/seo.tsx index 02dde26..8bde3aa 100644 --- a/website/src/components/seo.tsx +++ b/website/src/components/seo.tsx @@ -1,20 +1,16 @@ +import { FC } from 'react' import { Helmet } from 'react-helmet-async' -type SEOProps = { - url?: string +interface SEOProps { title: string - description?: string path: string } -export const SEO = ({ url = 'https://fitplanconnect.site', title = 'Home', description, path }: SEOProps) => ( +export const SEO: FC = ({ title = 'Home', path }) => ( {title} | FitPlan Connect - - - - + ) diff --git a/website/src/components/tooltip/tooltip.module.scss b/website/src/components/tooltip/tooltip.module.scss index 6e07ee1..9083741 100644 --- a/website/src/components/tooltip/tooltip.module.scss +++ b/website/src/components/tooltip/tooltip.module.scss @@ -29,7 +29,7 @@ z-index: 3; border: 1px solid $gray-100; - background-color: $gray-900; + background-color: $white; border-radius: 12px; box-shadow: $drop-shadow-medium; @@ -38,7 +38,8 @@ transform: scale(.4) translateX(-50%); transform-origin: left top; - font: 500 14px/20px 'SF Pro Display', sans-serif; color: white; + font: 500 14px/20px $font-family; + color: $gray-700; transition: opacity .15s, transform .15s; } @@ -55,7 +56,7 @@ z-index: 3; border: 1px solid $gray-100; - background-color: $gray-900; + background-color: $white; border-radius: 12px; box-shadow: $drop-shadow-medium; @@ -64,9 +65,9 @@ transform: scale(.4); transform-origin: right; - font: 500 14px/20px 'SF Pro Display', sans-serif; color: white; + font: 500 14px/20px $font-family; + color: $gray-700; transition: opacity .15s, transform .15s; } - } diff --git a/website/src/components/tooltip/tooltip.tsx b/website/src/components/tooltip/tooltip.tsx index 14db68c..8d9ac95 100644 --- a/website/src/components/tooltip/tooltip.tsx +++ b/website/src/components/tooltip/tooltip.tsx @@ -1,7 +1,7 @@ -import styles from './tooltip.module.scss'; +import styles from './tooltip.module.scss' import { FC, ReactNode } from 'react' -type TooltipProps = { +interface TooltipProps { title: string children: ReactNode place?: 'bottom' | 'left' @@ -11,7 +11,7 @@ export const Tooltip: FC = ({ title, children, place = 'bottom' })
{children} - {place === 'bottom' &&

{title}

} - {place === 'left' &&

{title}

} + {place === 'bottom' && title &&

{title}

} + {place === 'left' && title &&

{title}

}
) diff --git a/website/src/components/typography/display.tsx b/website/src/components/typography/display.tsx index 91bb0b2..2ada5b3 100644 --- a/website/src/components/typography/display.tsx +++ b/website/src/components/typography/display.tsx @@ -1,13 +1,10 @@ import styles from './display.module.scss' import { ReactNode } from 'react' -type Weight = 'medium' | 'semibold' | 'bold' | 'extrabold' -type Size = 'small' | 'large' - -type DisplayTypes = { +interface DisplayTypes { className?: string - weight: Weight - size: Size + weight: 'medium' | 'semibold' | 'bold' | 'extrabold' + size: 'small' | 'large' children?: ReactNode style?: any } diff --git a/website/src/components/typography/heading.tsx b/website/src/components/typography/heading.tsx index 73aa497..dd0fb55 100644 --- a/website/src/components/typography/heading.tsx +++ b/website/src/components/typography/heading.tsx @@ -1,12 +1,10 @@ import styles from './heading.module.scss' import { ReactNode } from 'react' -type Weight = 'medium' | 'semibold' | 'bold' | 'extrabold' - -type HeadingTypes = { +interface HeadingTypes { className?: string h: number - weight: Weight + weight: 'medium' | 'semibold' | 'bold' | 'extrabold' children?: ReactNode style?: any } diff --git a/website/src/components/typography/label.tsx b/website/src/components/typography/label.tsx index f1dac0b..1373413 100644 --- a/website/src/components/typography/label.tsx +++ b/website/src/components/typography/label.tsx @@ -1,15 +1,11 @@ import styles from './label.module.scss' import { ReactNode } from 'react' -type Size = 'overline-small' | 'overline-large' | 'xsmall' | 'small' | 'medium' | 'large' -type Weight = 'regular-weight' | 'medium-weight' | 'semibold-weight' -type Transform = 'underline' | 'strikethrough' | 'italics' - -type LabelTypes = { +interface LabelTypes { className?: string - size: Size - weight: Weight - transform?: Transform + size: 'overline-small' | 'overline-large' | 'xsmall' | 'small' | 'medium' | 'large' + weight: 'regular-weight' | 'medium-weight' | 'semibold-weight' + transform?: 'underline' | 'strikethrough' | 'italics' children?: ReactNode style?: any } diff --git a/website/src/components/typography/paragraph.tsx b/website/src/components/typography/paragraph.tsx index ba840d5..dee5575 100644 --- a/website/src/components/typography/paragraph.tsx +++ b/website/src/components/typography/paragraph.tsx @@ -1,15 +1,11 @@ import styles from './paragraph.module.scss' import { ReactNode } from 'react' -type Size = 'overline-small' | 'overline-large' | 'xsmall' | 'small' | 'medium' | 'large' -type Weight = 'regular-weight' | 'medium-weight' | 'semibold-weight' -type Transform = 'underline' | 'strikethrough' | 'italics' - -type ParagraphTypes = { +interface ParagraphTypes { className?: string - size: Size - weight: Weight - transform?: Transform + size: 'overline-small' | 'overline-large' | 'xsmall' | 'small' | 'medium' | 'large' + weight: 'regular-weight' | 'medium-weight' | 'semibold-weight' + transform?: 'underline' | 'strikethrough' | 'italics' children?: ReactNode style?: any } diff --git a/website/src/components/userDropdown/userDropdown.tsx b/website/src/components/userDropdown/userDropdown.tsx index 16f1bae..d22157a 100644 --- a/website/src/components/userDropdown/userDropdown.tsx +++ b/website/src/components/userDropdown/userDropdown.tsx @@ -1,38 +1,88 @@ -import { FC, useEffect, useRef, useState } from 'react' -import { useLocation } from 'react-router-dom' +import { useEffect, useRef, useState, useCallback, useMemo } from 'react' +import { useLocation, useNavigate } from 'react-router-dom' import { useWindowDimensions } from '@/hooks/useWindowDimensions.ts' import styles from './userDropdown.module.scss' +import { setUser } from '@/utils/slices/userSlice' +import { useAppDispatch, useAppSelector } from '@/utils/store' +import wretch from 'wretch' +import { User } from '@/models/User.ts' -type UserDropdownTypes = { - options: { - id: string - name: string - value: string - showOnDesktop?: boolean - }[] - image?: string - onClick: (event: any) => void -} - -export const UserDropdown: FC = ({ options, image, onClick }) => { +export default function UserDropdown() { + const navigate = useNavigate() + const dispatch = useAppDispatch() + const userData = useAppSelector(state => state.user.data) + let user + if (userData) user = new User(userData) const [isOpen, setIsOpen] = useState(false) const select = useRef(null) const { pathname: url } = useLocation() const { width } = useWindowDimensions() + const dropdownHandlerClick = useCallback( + async (event: any) => { + if (event.target.value === 'logout') { + await wretch('/api/oauth/logout').get().res() + dispatch(setUser(null)) + navigate('/') + } else { + navigate(event.target.value) + } + }, + [dispatch, navigate], + ) + + const memoizedOnClick = useCallback(dropdownHandlerClick, [dropdownHandlerClick]) + useEffect(() => { - document.addEventListener('click', event => { + const handleClickOutside = (event: MouseEvent) => { const target = event.target as Node - if (select.current) { - if (!select.current.contains(target) || (target.contains(select.current) && target !== select.current)) { - setIsOpen(false) - } else { - return select - } + if (select.current && !select.current.contains(target)) { + setIsOpen(false) } - }) + } + + document.addEventListener('click', handleClickOutside) + return () => { + document.removeEventListener('click', handleClickOutside) + } }, []) + const options = useMemo( + () => [ + { + id: 'calendar', + name: 'Calendar', + value: '/app/calendar', + showOnDesktop: false, + }, + { + id: 'trainers', + name: 'Trainers', + value: '/app/trainers', + showOnDesktop: false, + }, + { + id: 'billing', + name: 'Billing', + value: '/app/billing', + showOnDesktop: false, + }, + { + id: 'settings', + name: 'Settings', + value: '/app/settings', + showOnDesktop: false, + }, + { + id: 'logout', + name: 'Logout', + value: 'logout', + showOnDesktop: true, + }, + ], + [], + ) + return (
@@ -41,7 +91,8 @@ export const UserDropdown: FC = ({ options, image, onClick }) onClick={() => setIsOpen(isOpen => !isOpen)} ref={select} > - {''} + {''} + Profile
@@ -61,7 +112,7 @@ export const UserDropdown: FC = ({ options, image, onClick }) onClick={() => setIsOpen(false)} > {name} - + ), )} diff --git a/website/src/hooks/useFetch.ts b/website/src/hooks/useFetch.ts deleted file mode 100644 index e22f91e..0000000 --- a/website/src/hooks/useFetch.ts +++ /dev/null @@ -1,9 +0,0 @@ -import wretch from 'wretch' -import useSWR from 'swr' - -const fetcher = (args: any) => wretch(args).get().json().then() - -export const useFetch = (url: string) => { - const { data, error, isLoading } = useSWR(url, fetcher, { revalidateOnFocus: false }) - return { data, error, isLoading } -} diff --git a/website/src/models/Meeting.ts b/website/src/models/Meeting.ts new file mode 100644 index 0000000..e82c576 --- /dev/null +++ b/website/src/models/Meeting.ts @@ -0,0 +1,21 @@ +export class Meeting { + startTime: Date + endTime: Date + + constructor(startTime: Date, endTime: Date) { + this.startTime = startTime + this.endTime = endTime + } + + getStartTime(): Date { + return this.startTime + } + + getEndTime(): Date { + return this.endTime + } + + getDuration(): number { + return (this.endTime.getTime() - this.startTime.getTime()) / 1000 + } +} diff --git a/website/src/models/Member.ts b/website/src/models/Member.ts new file mode 100644 index 0000000..ea9a1b1 --- /dev/null +++ b/website/src/models/Member.ts @@ -0,0 +1,55 @@ +export class Member { + readonly id: string + name: string + username: string + email: string + profile_picture_url: string + + constructor(id: string, name: string, username: string, email: string, profile_picture_url: string) { + this.id = id + this.name = name + this.username = username + this.email = email + this.profile_picture_url = profile_picture_url + } + + getId() { + return this.id + } + + getName() { + return this.name + } + + getUsername() { + return this.username + } + + getEmail() { + return this.email + } + + getProfilePictureUrl() { + return this.profile_picture_url + } + + getInfo() { + return `Member: ${this.name}, ${this.email}`; + } + + setName(name: string) { + this.name = name + } + + setUsername(username: string) { + this.username = username + } + + setEmail(email: string) { + this.email = email + } + + setProfilePictureUrl(profile_picture_url: string) { + this.profile_picture_url = profile_picture_url + } +} diff --git a/website/src/models/Trainer.ts b/website/src/models/Trainer.ts new file mode 100644 index 0000000..3bb6451 --- /dev/null +++ b/website/src/models/Trainer.ts @@ -0,0 +1,21 @@ +import { Member } from '@/models/Member' + +export class Trainer extends Member { + constructor(data: Trainer | any) { + super(data.id, data.name, data.username, data.email, data.profile_picture_url) + } + + static fromJson(data: any) { + return new Trainer({ + id: data.id, + name: data.name, + username: data.username, + email: data.email, + profile_picture_url: data.profile_picture_url + }) + } + + static fromJsonList(data: any) { + return data.map((item: any) => Trainer.fromJson(item)) + } +} diff --git a/website/src/models/TrainingMeeting.ts b/website/src/models/TrainingMeeting.ts new file mode 100644 index 0000000..6a3a55a --- /dev/null +++ b/website/src/models/TrainingMeeting.ts @@ -0,0 +1,20 @@ +import { Meeting } from '@/models/Meeting' + +export class TrainingMeeting extends Meeting { + userID: string + trainerID: string + + constructor(startTime: Date, endTime: Date, userID: string, trainerID: string) { + super(startTime, endTime) + this.userID = userID + this.trainerID = trainerID + } + + getUserID(): string { + return this.userID + } + + getTrainerID(): string { + return this.trainerID + } +} diff --git a/website/src/models/User.ts b/website/src/models/User.ts new file mode 100644 index 0000000..f1457f9 --- /dev/null +++ b/website/src/models/User.ts @@ -0,0 +1,54 @@ +import { Member } from '@/models/Member' + +export class User extends Member { + private selected_trainer_id: string + private subscription_expiration_date: string + private meetings: { + id: string; + userId: string; + trainerID: string; + startTime: Date; + endTime: Date; + }[] + + constructor(data: User | any) { + super(data.id, data.name, data.username, data.email, data.profile_picture_url) + this.selected_trainer_id = data.selected_trainer_id + this.subscription_expiration_date = data.subscription_expiration_date + this.meetings = data.meetings + } + + getSelectedTrainerId() { + return this.selected_trainer_id + } + + setSelectTrainerId(trainerId: string) { + this.selected_trainer_id = trainerId + } + + getSubscriptionExpirationDate() { + return this.subscription_expiration_date + } + + setSubscriptionExpirationDate(date: string) { + this.subscription_expiration_date = date + } + + getMeetings() { + return this.meetings + } + + setMeetings(meetings: { + id: string; + userId: string; + trainerID: string; + startTime: Date; + endTime: Date; + }[]) { + this.meetings = meetings + } + + getInfo() { + return `User: ${this.name}, ${this.email}, Trainer ID: ${this.selected_trainer_id}`; + } +} diff --git a/website/src/pages/app/billing.cancel.tsx b/website/src/pages/app/billing.cancel.tsx new file mode 100644 index 0000000..bda8a05 --- /dev/null +++ b/website/src/pages/app/billing.cancel.tsx @@ -0,0 +1,33 @@ +import { SEO } from '@/components/seo.tsx' +import { Overlay } from '@/components/overlay/overlay.tsx' +import { AnimateWrapper } from '@/components/animateWrapper/animateWrapper.tsx' +import { Container } from '@/components/container/container.tsx' +import styles from '@/styles/notFound.module.scss' +import { Link } from 'react-router-dom' + +const metaData = { + title: 'Thank you', + path: '/app/billing/complete', +} + +export default function BillingCancel() { + return ( + <> + + + + + +
+

Your transaction has been cancelled

+ Please try again + + Go to billing + +
+
+
+
+ + ) +} diff --git a/website/src/pages/app/billing.complete.tsx b/website/src/pages/app/billing.complete.tsx new file mode 100644 index 0000000..09108a6 --- /dev/null +++ b/website/src/pages/app/billing.complete.tsx @@ -0,0 +1,33 @@ +import { SEO } from '@/components/seo.tsx' +import { Overlay } from '@/components/overlay/overlay.tsx' +import { AnimateWrapper } from '@/components/animateWrapper/animateWrapper.tsx' +import { Container } from '@/components/container/container.tsx' +import styles from '@/styles/notFound.module.scss' +import { Link } from 'react-router-dom' + +const metaData = { + title: 'Thank you', + path: '/app/billing/complete', +} + +export default function ThankYouPage() { + return ( + <> + + + + + +
+

Thank you for your purchase

+ Your transaction has been successfully completed + + Go to your calendar + +
+
+
+
+ + ); +} diff --git a/website/src/pages/app/billing.tsx b/website/src/pages/app/billing.tsx new file mode 100644 index 0000000..1206f74 --- /dev/null +++ b/website/src/pages/app/billing.tsx @@ -0,0 +1,102 @@ +import styles from '@/styles/billing.module.scss' +import { AnimateWrapper } from '@/components/animateWrapper/animateWrapper.tsx' +import { Container } from '@/components/container/container.tsx' +import { Overlay } from '@/components/overlay/overlay.tsx' +import { SEO } from '@/components/seo.tsx' +import { useAppSelector } from '@/utils/store.ts' +import moment from 'moment' +import { useEffect, useState } from 'react' +import { loadStripe } from '@stripe/stripe-js' +import wretch from 'wretch' +import { Tooltip } from '@/components/tooltip/tooltip.tsx' +import { useNavigate } from 'react-router-dom' + +const metaData = { + title: 'Billing', + path: '/app/billing', +} + +export default function Billing() { + const navigate = useNavigate() + const [stripePromise, setStripePromise] = useState(null) + const [isLoading, setLoading] = useState(false) + const [stripeError, setStripeError] = useState(null) + const user = useAppSelector(state => state.user.data) + + const item = { + price: 'price_1PU9ogRqT1nSwrjBMcNAw2qm', + quantity: 1, + } + + const redirectToCheckout = async () => { + setLoading(true) + const stripe = await stripePromise + const { error } = await stripe.redirectToCheckout({ + lineItems: [item], + mode: 'payment', + successUrl: `${window.location.origin}/api/billing/success/${item.price}`, + cancelUrl: `${window.location.origin}/app/billing/cancel`, + }) + + if (error) setStripeError(error) + setLoading(false) + } + + if (stripeError) alert(stripeError) + + useEffect(() => { + const fetchData = async () => { + await wretch('/api/billing/config').get().json(async json => { + const stripe = await loadStripe(json.publishableKey) + setStripePromise(stripe) + }) + } + + fetchData().then() + }, []) + + useEffect(() => { + if (!user) navigate('/') + }, [user]) + + return ( + <> + + + + + +
+
+

FP Connect+

+ +
+
+

Expired date

+

+ {moment(user?.subscription_expiration_date).isBefore(moment()) + ? 'Invalid' + : moment(user?.subscription_expiration_date).format('DD / MM / YYYY')} +

+
+ +
+ + + +
+
+
+
+
+
+
+ + ) +} diff --git a/website/src/pages/app/calendar.tsx b/website/src/pages/app/calendar.tsx new file mode 100644 index 0000000..61c2174 --- /dev/null +++ b/website/src/pages/app/calendar.tsx @@ -0,0 +1,409 @@ +import styles from '@/styles/calendar.module.scss' +import { useCallback, useEffect, useMemo, useState } from 'react' +import moment from 'moment' +import { useNavigate } from 'react-router-dom' +import { ScheduleMeeting } from 'react-schedule-meeting' +import Swal from 'sweetalert2' +import wretch from 'wretch' +import { AnimateWrapper } from '@/components/animateWrapper/animateWrapper.tsx' +import { Button } from '@/components/button/button.tsx' +import { Container } from '@/components/container/container.tsx' +import { Overlay } from '@/components/overlay/overlay.tsx' +import { SEO } from '@/components/seo.tsx' +import { Tooltip } from '@/components/tooltip/tooltip.tsx' +import { useAppSelector } from '@/utils/store.ts' +import { Virtuoso } from 'react-virtuoso' +import { range } from 'lodash-es' + +const metaData = { + title: 'Calendar', + path: '/app/calendar', +} + +interface Timeslot { + id: number; + startTime: Date; + endTime: Date; +} + +interface DayData { + displayDate: string; + selectedDate: Date; +} + +interface AllMeetings { + id: string; + userId: string; + trainerID: string; + startTime: string; + endTime: string; +} + +export default function Calendar() { + const navigate = useNavigate() + const user = useAppSelector(state => state.user.data) + const trainers = useAppSelector(state => state.trainers.data) + const [view, setView] = useState('upcoming') + const availableTimeslots: Timeslot[] = useMemo(() => { + return Array.from({ length: 30 }, (_, i) => { + const date = new Date() + date.setDate(date.getDate() + i) + return { + id: i, + startTime: new Date(new Date(date).setHours(8, 0, 0, 0)), + endTime: new Date(new Date(date).setHours(17, 0, 0, 0)), + } + }) + }, []) + const [unavailableMeetings, setUnavailableMeetings] = useState([]) + const eventDuration: number = 60 + const eventGap: number = 0 + const [selectedTimeSlot, setSelectedTimeSlot] = useState([]) + const [allHoursPerDay, setAllHoursPerDay] = useState([]) + const [allGapsPerDay, setAllGapsPerDay] = useState([]) + const [dayData, setDayData] = useState(null) + + const changeDayData = useCallback((date: Date = moment().set('hour', 0).set('minute', 0).set('second', 0).toDate()) => { + const displayDate = moment(date).format('ddd. DD MMMM') + + setDayData({ displayDate, selectedDate: date }) + + const allHoursPerDay = availableTimeslots.reduce((hours: number[], meet) => { + if (moment(meet.startTime).isSame(date, 'day')) { + const startDay = Number(moment(meet.startTime).format('HH')) + const endDay = Number(moment(meet.endTime).format('HH')) + 1 + return [...hours, ...range(startDay, endDay)] + } + return hours + }, []) + + setAllHoursPerDay(allHoursPerDay) + + const allGapsPerDay = unavailableMeetings.reduce((gaps: Date[], meet) => { + if (moment(meet.startTime).isSame(date, 'day')) { + const startDay = Number(moment(meet.startTime).format('HH')) + return [...gaps, moment(date).set('hour', startDay).toDate()] + } + return gaps + }, []) + + setAllGapsPerDay(allGapsPerDay) + }, [setDayData, setAllHoursPerDay, setAllGapsPerDay, unavailableMeetings]) + + useEffect(() => { + changeDayData() + + if (!user) { + navigate('/') + } + + if (isNaN(moment(user?.subscription_expiration_date).unix())) { + navigate('/app/billing') + } else if (moment().unix() > moment(user?.subscription_expiration_date).unix()) { + navigate('/app/billing') + } + }, [user]) + + useEffect(() => { + const fetchMeetings = async () => { + const data: AllMeetings[] = await wretch('/api/meetings').get().json() + if (!data) return + + setUnavailableMeetings( + data?.map(({ startTime, endTime }, index) => ({ + id: index, + startTime: new Date(startTime), + endTime: new Date(endTime), + })), + ) + } + + fetchMeetings().then() + }, [availableTimeslots]) + + const bookMeeting = useCallback(async () => { + if (selectedTimeSlot.length === 0) { + await Swal.fire({ + title: 'Please select a time slot', + icon: 'error', + }) + return + } + + if (!user) return + + if (user.selected_trainer_id === '' || !user.selected_trainer_id) { + await Swal.fire({ + title: 'Please select a trainer', + icon: 'error', + }) + navigate('/app/trainers') + return + } + + await wretch('/api/meetings') + .post({ + userId: user.id, + trainerID: user.selected_trainer_id, + startTime: new Date(selectedTimeSlot[0] * 1000), + endTime: new Date(selectedTimeSlot[1] * 1000), + }) + .json() + .then(() => { + Swal.fire({ + title: 'Meeting scheduled', + icon: 'success', + }).then(() => location.reload()) + }) + .catch(() => { + Swal.fire({ + title: 'An error occurred', + icon: 'error', + }).then(() => location.reload()) + }) + }, [selectedTimeSlot, user]) + + return ( + <> + + + + + +
+
+
+ changeDayData(date)} + startTimeListStyle={'grid'} + /> + +
+ +
+

{dayData?.displayDate}

+ {dayData && ( +
+ {allHoursPerDay.length === 0 ? ( +
+

No available hours

+
+ ) : ( + allHoursPerDay.map((hour, index) => { + const buttonTime = Number(moment(dayData.selectedDate).set('hour', hour).format('HH')) + const isUnavailable = allGapsPerDay.some((day: Date) => buttonTime === day.getHours()) + const isPast = + moment(dayData.selectedDate).add(buttonTime, 'hour').unix() <= moment().unix() + const isSelected = + selectedTimeSlot[0] === moment(dayData.selectedDate).set('hour', hour).unix() + + const buttonClass = isSelected ? styles.hourButtonActive : styles.hourButton + const buttonOnClick = () => + setSelectedTimeSlot([ + moment(dayData.selectedDate).set('hour', hour).unix(), + moment(dayData.selectedDate).set('hour', hour).add(eventDuration, 'minute').unix(), + ]) + + return ( + + + + ) + }) + )} +
+ )} +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ {view === 'upcoming' ? ( + { + const meeting = user?.meetings[index] + if (meeting && moment(meeting.startTime).unix() > moment().unix()) { + return ( +
+
+

Training

+

w/ {trainers?.find(trainer => trainer.id === meeting.trainerID)?.name}

+
+ +
+

{moment(meeting.startTime).format('DD.MM.YYYY, HH:mm')} - {moment(meeting.endTime).format('HH:mm')}

+

 

+
+
+ ) + } else { + return ( +
+ ) + } + }} + /> + ) : ( + { + const meeting = user?.meetings[index] + if (meeting && moment(meeting.endTime).unix() < moment().unix()) { + return ( +
+
+

Training

+

w/ {trainers?.find(trainer => trainer.id === meeting.trainerID)?.name}

+
+ +
+

{moment(meeting.startTime).format('DD.MM.YYYY, HH:mm')} - {moment(meeting.endTime).format('HH:mm')}

+

 

+
+
+ ) + } else { + return ( +
+ ) + } + }} + /> + )} +
+
+
+ + + + + ) +} diff --git a/website/src/pages/app/app.settings.tsx b/website/src/pages/app/settings.tsx similarity index 75% rename from website/src/pages/app/app.settings.tsx rename to website/src/pages/app/settings.tsx index 5d67ecd..fa08e46 100644 --- a/website/src/pages/app/app.settings.tsx +++ b/website/src/pages/app/settings.tsx @@ -1,5 +1,5 @@ -import styles from '@/styles/app.settings.module.scss' -import { useState } from 'react' +import styles from '@/styles/settings.module.scss' +import { useCallback, useEffect, useState } from 'react' import wretch from 'wretch' import { AlertDialog } from '@/components/alertDialog/alertDialog.tsx' import { AnimateWrapper } from '@/components/animateWrapper/animateWrapper.tsx' @@ -10,22 +10,39 @@ import { SEO } from '@/components/seo.tsx' import { useAppDispatch, useAppSelector } from '@/utils/store.ts' import { useNavigate } from 'react-router-dom' import { setUser } from '@/utils/slices/userSlice.ts' +import { User } from '@/models/User.ts' const metaData = { title: 'Settings', - description: '', path: '/app/settings', } -const AppSettings = () => { +export default function Settings() { const dispatch = useAppDispatch() - const user = useAppSelector(state => state.user.data) + const userData = useAppSelector(state => state.user.data) + let user + if (userData) user = new User(userData) const [isOpenConfirmDeleteAccountAlertDialog, setIsOpenConfirmDeleteAccountAlertDialog] = useState(false) const navigate = useNavigate() + const handleOpen = useCallback(() => setIsOpenConfirmDeleteAccountAlertDialog(true), []); + const onClose = useCallback(() => setIsOpenConfirmDeleteAccountAlertDialog(false), []) + const onCancel = useCallback(() => setIsOpenConfirmDeleteAccountAlertDialog(false), []) + const onConfirm = useCallback(async () => { + const response: { status: number } = await wretch('/api/user/delete').get().json() + if (response.status === 200) { + dispatch(setUser(null)) + navigate('/') + } + setIsOpenConfirmDeleteAccountAlertDialog(false) + }, [dispatch, navigate]) + + useEffect(() => { + if (!userData) navigate('/') + }, [userData]) return ( <> - + @@ -44,11 +61,11 @@ const AppSettings = () => { <> ) : null} @@ -62,7 +79,7 @@ const AppSettings = () => { size={'medium'} label={'Delete account'} isDestructive - onClick={() => setIsOpenConfirmDeleteAccountAlertDialog(true)} + onClick={handleOpen} />
@@ -91,17 +108,9 @@ const AppSettings = () => { setIsOpenConfirmDeleteAccountAlertDialog(false)} - onCancel={() => setIsOpenConfirmDeleteAccountAlertDialog(false)} - onConfirm={async () => { - const response: { status: number } = await wretch('/api/user/delete').get().json() - if (response.status === 200) { - dispatch(setUser(null)) - navigate('/') - } - - setIsOpenConfirmDeleteAccountAlertDialog(false) - }} + onClose={onClose} + onCancel={onCancel} + onConfirm={onConfirm} closeWhenClickEscape title={'Do you want to delete your account?'} description={'Make sure you definitely want to do this — your account cannot be restored.'} @@ -112,5 +121,3 @@ const AppSettings = () => { ) } - -export default AppSettings diff --git a/website/src/pages/app/trainers.tsx b/website/src/pages/app/trainers.tsx new file mode 100644 index 0000000..1bfa0bc --- /dev/null +++ b/website/src/pages/app/trainers.tsx @@ -0,0 +1,115 @@ +import styles from '@/styles/trainers.module.scss' +import { useEffect } from 'react' +import { useNavigate } from 'react-router-dom' +import { useAppSelector } from '@/utils/store.ts' +import moment from 'moment' +import { SEO } from '@/components/seo' +import { Overlay } from '@/components/overlay/overlay' +import { AnimateWrapper } from '@/components/animateWrapper/animateWrapper' +import { Container } from '@/components/container/container' +import { Image } from '@/components/image' +import wretch from 'wretch' +import Swal from 'sweetalert2' + +const metaData = { + title: 'Trainers', + path: '/app/trainers', +} + +export default function Trainers() { + const navigate = useNavigate() + const user = useAppSelector(state => state.user.data) + const trainers = useAppSelector(state => state.trainers.data) + + useEffect(() => { + if (!user) navigate('/') + + if (isNaN(moment(user?.subscription_expiration_date).unix())) { + navigate('/app/billing') + } else if (moment().unix() > moment(user?.subscription_expiration_date).unix()) { + navigate('/app/billing') + } + }, [user]) + + return ( + <> + + + + + +
+ + {trainers?.map(({ id, name, username, profile_picture_url }) => ( +
{ + if (user?.selected_trainer_id === id) { + Swal.fire({ + title: 'Trainer already selected', + icon: 'warning', + }) + return + } else { + await wretch(`/api/trainer/${id}`) + .patch() + .res(res => { + if (res.status === 200) { + Swal.fire({ + title: 'Trainer selected successfully', + icon: 'success', + }).then(() => location.reload()) + } + }) + .catch(() => { + Swal.fire({ + title: 'An error occurred', + icon: 'error', + }).then(() => location.reload()) + }) + } + }}> + + +
+ + {user?.selected_trainer_id === id &&
+ + + +
} + +
+ + + +
+
+ ))} + +
+ + + + + ) +} diff --git a/website/src/pages/notFound.tsx b/website/src/pages/notFound.tsx index 63f4f35..c54c563 100644 --- a/website/src/pages/notFound.tsx +++ b/website/src/pages/notFound.tsx @@ -10,7 +10,6 @@ import { Image } from '@/components/image' const metaData = { title: 'Not Found', - description: 'Page not found', path: '/404', } @@ -19,7 +18,7 @@ export default function NotFound() { return ( <> - + @@ -37,4 +36,4 @@ export default function NotFound() { ) -} \ No newline at end of file +} diff --git a/website/src/pages/suspense.tsx b/website/src/pages/suspense.tsx new file mode 100644 index 0000000..cae1bba --- /dev/null +++ b/website/src/pages/suspense.tsx @@ -0,0 +1,34 @@ +import { AnimateWrapper } from "@/components/animateWrapper/animateWrapper"; +import { Container } from "@/components/container/container"; +import { Overlay } from "@/components/overlay/overlay"; + +export default function SuspenseComponent() { + return ( + + + + + + + + + + + ) +} \ No newline at end of file diff --git a/website/src/public/favicon.png b/website/src/public/favicon.png new file mode 100644 index 0000000..b1f0dc8 Binary files /dev/null and b/website/src/public/favicon.png differ diff --git a/website/src/styles/billing.module.scss b/website/src/styles/billing.module.scss new file mode 100644 index 0000000..9c5ce68 --- /dev/null +++ b/website/src/styles/billing.module.scss @@ -0,0 +1,82 @@ +@import 'variables'; +@import 'mixins'; + +.content { + padding: 0 16px; + position: relative; + @include flex(column, center, center); +} + +.billingCard { + padding: 64px; + width: 100%; + height: calc(100vh - 64px - 73px); + + @include flex(column, space-between, start); + + border-radius: 48px 48px 0 0; + background: url("../assets/images/billing_background.png") no-repeat center center; + background-size: cover; + + h1 { + @include font(700, 96px, 112px); + color: $white; + text-shadow: 0 8px 24px rgba(16, 24, 40, 0.10), 0 8px 24px rgba(16, 24, 40, 0.15); + } + + .cardFooter { + width: 100%; + @include flex(row, space-between, end); + + .cardFooterLeft { + @include flex(column, left, start); + gap: 24px; + + p:nth-child(1) { + @include font(600, 42px, 46px); + color: $white; + text-shadow: 0 8px 24px rgba(16, 24, 40, 0.10), 0 8px 24px rgba(16, 24, 40, 0.15); + } + + p:nth-child(2) { + padding: 24px 32px; + + border-radius: 24px; + background: rgba(255, 255, 255, 0.16); + + @include font(700, 64px, 75px); + color: $white; + text-shadow: 0 8px 24px rgba(16, 24, 40, 0.10), 0 8px 24px rgba(16, 24, 40, 0.15); + } + } + + .cardFooterRight { + @include flex(column, left, center); + + .buyButton { + padding: 24px 32px; + border-radius: 24px; + background: rgba(255, 255, 255, 0.16); + box-shadow: $drop-shadow-medium; + cursor: pointer; + + transition: background .2s, transform .2s; + + @include font(700, 64px, 75px); + color: $white; + text-shadow: 0 8px 24px rgba(16, 24, 40, 0.10), 0 8px 24px rgba(16, 24, 40, 0.15); + + &:is(:hover) { + transform: scale(.98); + background-color: rgba(252, 231, 244, 1); + } + + &:is(:disabled) { + opacity: .2; + pointer-events: none; + background-color: $pink-500; + } + } + } + } +} diff --git a/website/src/styles/calendar.module.scss b/website/src/styles/calendar.module.scss new file mode 100644 index 0000000..a7bca88 --- /dev/null +++ b/website/src/styles/calendar.module.scss @@ -0,0 +1,259 @@ +@import 'variables'; +@import 'mixins'; + +.content { + padding: 0 0 64px 0; + + position: relative; + @include flex(row, center, start); + gap: 24px; + font-family: $font-family; + + @media (width <= 1000px) { + flex-direction: column-reverse; + } +} + +.scheduleMeeting { + height: max-content; + padding: 24px; + + display: flex; + flex-direction: column; + align-items: start; + gap: 16px; + + border: 1px solid $gray-200; + border-radius: 12px; + background: $white; + + .calenMain { + display: flex; + align-items: start; + gap: 16px; + + @media (width <= 680px) { + flex-direction: column; + } + } + + .actions { + width: 100%; + display: flex; + justify-content: right; + align-items: end; + gap: 24px; + } + + .scheduleMeetingDivider { + height: 400px; + width: 1px; + background-color: $gray-200; + + @media (width <= 680px) { + display: none; + } + } + + .selectedDayHoursContainer { + width: 100%; + + display: flex; + flex-direction: column; + gap: 20px; + + .headingDisplayDate { + padding: 4px 0 0 0; + + width: 100%; + + font: 700 24px/32px $font-family; + color: $gray-900; + text-align: center; + } + + .hoursListPerDay { + display: flex; + flex-wrap: wrap; + gap: 12px; + + + + .hourListError { + width: 100%; + height: 112px; + + display: flex; + justify-content: center; + align-items: center; + + p { + padding: 12px 16px; + + border: 1px solid $gray-200; + border-radius: 50px; + font: 500 14px/20px $font-family; + color: $gray-500; + } + } + + .hourButton { + padding: 12px 18px; + + display: flex; + justify-content: center; + align-items: center; + flex: 1 0; + + border: 1px solid transparent; + border-radius: 12px; + background-color: $branding-18; + cursor: pointer; + + font: 600 16px/24px $font-family; + color: $branding; + + transition: border .2s, transform .2s, background-color .2s; + + &:is(:hover) { + transform: scale(1.03); + border: 1px solid $branding; + } + + &:is(:disabled) { + opacity: .4; + background-color: $branding-18; + pointer-events: none; + } + } + + .hourButtonActive { + @extend .hourButton; + + color: $white; + background-color: $branding; + + &:is(:hover) { + transform: scale(1); + border: 1px solid transparent; + } + } + } + } +} + +.scheduleRightPanel { + max-width: 352px; + width: 100%; + min-width: 352px; + + display: flex; + justify-content: center; + flex-direction: column; + gap: 24px; + + @media (width <= 1000px) { + max-width: 100%; + } + + .scheduleRightPanelActions { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + + .rightPanelButton:nth-child(1) { + border-radius: 8px 0 0 8px; + border-right: none; + } + + .rightPanelButton:nth-child(2) { + border-radius: 0 8px 8px 0; + } + + .rightPanelButton { + width: 100%; + padding: 6px 12px; + + display: flex; + justify-content: center; + align-items: center; + gap: 6px; + + border: 1px solid $gray-200; + background: $white; + font: 500 14px/16px $font-family; + color: $gray-700; + cursor: pointer; + + transition: background-color .2s, border .2s; + + span { + @include flex(row, center, center); + gap: 12px; + } + } + + .rightPanelButtonActive { + @extend .rightPanelButton; + + background: $branding-8; + border-color: $branding-18; + + svg path { + fill: $branding; + } + } + } + + .scheduleRightPanelActionsMeetings { + max-height: 448px; + height: 100%; + min-height: 448px; + + @media (width <= 1000px) { + min-height: fit-content; + } + + border-radius: 12px; + border: 1px solid $gray-200; + background: $white; + overflow-y: auto; + + .meeting { + padding: 16px; + + display: flex; + justify-content: space-between; + align-items: center; + + border-bottom: 1px solid $gray-200; + + .leftSide { + display: flex; + flex-direction: column; + + p:nth-child(1) { + font: 500 16px/24px $font-family; + color: $gray-900; + } + + p:nth-child(2) { + font: 500 16px/24px $font-family; + color: $gray-500; + } + } + + .rightSide { + @extend .leftSide; + + align-items: end; + } + } + + .meetingDisable { + @extend .meeting; + opacity: .5; + } + } +} diff --git a/website/src/styles/global.scss b/website/src/styles/global.scss index d4e0117..06bb339 100644 --- a/website/src/styles/global.scss +++ b/website/src/styles/global.scss @@ -2,16 +2,6 @@ * { box-sizing: border-box; - font: inherit; - - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - - ::selection { - background: rgba(205, 102, 255, .08); - color: #CD66FF; - } } body { @@ -28,6 +18,14 @@ body { overflow-x: hidden; background: $neutral-50; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + ::selection { + background: rgba(205, 102, 255, .08); + color: #CD66FF; + } } button { @@ -56,3 +54,105 @@ html, div, h1, h2, h3, h4, h5, h6, ul, ol, li, p, blockquote, pre, form, fieldse display: none; } } + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +.go135427820, +.go321821519 { + display: none; +} + +.go1318713726, .go2556357651, .go3964545171, .go241900306 { + font-weight: 500; +} + +.go321821519 .go1716137461 .go2080639341 { + justify-content: center; + align-items: center; + + button { + display: none !important + } +} + +.go241900306 { + transition: opacity .2s, background-color .2s +} + +.go241900306.disabled { + opacity: .5 !important; + cursor: not-allowed !important; + background-color: $red-50; +} + +.go3057346022 { + --border-radius: 0 !important; +} + +.go2556357651, .go2905247309, .rsm-next-available-date-button { + display: none !important +} + +.react-calendar__tile::after, +.go1923315045 { + border-radius: 12px !important; +} + +.go4247048326 .active-day-tile:hover { + opacity: 1 !important; +} + +.go4247048326.react-calendar { + min-height: 350px !important; +} + +.react-calendar__tile, +.react-calendar__month-view__days__day--neighboringMonth { + &:after { + transition: transform .2s, opacity .2s, background-color .2s; + } +} + +.go695645437 { + padding: 0 !important; + margin: 0 !important; + box-shadow: none !important; +} + +.react-calendar__month-view__days__day--weekend { + color: #EF4344 !important +} + +.react-calendar__month-view__days__day--neighboringMonth { + opacity: .5 !important +} + +.react-calendar__tile--now:after { + border: 1px solid $branding !important; + background-color: $branding-8 !important; +} + +.react-calendar__tile--active:after { + border: 1px solid $branding !important; + background-color: $branding !important; +} + +.react-calendar__tile--active abbr { + color: $white !important; +} + +.disabled { + opacity: .5 !important; + cursor: not-allowed !important; + pointer-events: none !important; +} diff --git a/website/src/styles/notFound.module.scss b/website/src/styles/notFound.module.scss index 6c17570..d85b63f 100644 --- a/website/src/styles/notFound.module.scss +++ b/website/src/styles/notFound.module.scss @@ -10,6 +10,17 @@ color: $neutral-900; } + h2 { + @include font(700, 64px, 100%, center); + color: $neutral-900; + } + + i { + margin: 24px 0; + font: 500 18px/24px $font-family; + color: $neutral-500 + } + p { margin: 0 0 24px 0; font: 500 16px/24px $font-family; @@ -39,4 +50,4 @@ border-radius: 16px; box-shadow: $drop-shadow-medium; } -} \ No newline at end of file +} diff --git a/website/src/styles/app.settings.module.scss b/website/src/styles/settings.module.scss similarity index 100% rename from website/src/styles/app.settings.module.scss rename to website/src/styles/settings.module.scss diff --git a/website/src/styles/trainers.module.scss b/website/src/styles/trainers.module.scss new file mode 100644 index 0000000..5d84ccd --- /dev/null +++ b/website/src/styles/trainers.module.scss @@ -0,0 +1,165 @@ +@import "variables"; +@import "mixins"; + +.content { + padding: 0 0 64px 0; + + position: relative; + @include flex(row, center, start); + gap: 48px; + flex-wrap: wrap; + + @media (width <= 768px) { + flex-direction: column; + align-items: center; + } +} + +.trainerCard { + position: relative; + height: 100%; + max-height: 336px; + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + flex: 1 0; + + border-radius: 16px; + box-shadow: $drop-shadow-xlarge; + overflow: hidden; + cursor: pointer; + + &:is(:hover) { + .trainerShadow { + opacity: 1; + } + + .trainerInfo { + opacity: 1; + visibility: initial; + transform: translateY(0); + } + + img { + transform: scale(1.1); + } + } + + img { + width: 100%; + height: 100%; + border-radius: 16px; + object-fit: cover; + + transition: transform .3s; + } + + .selectedTrainer { + position: absolute; + width: 40px; + height: 40px; + background: $yellow-500; + border-radius: 50%; + display: flex; + justify-content: center; + align-items: center; + top: 16px; + right: 16px; + + svg { + width: 24px; + height: 24px; + path { + fill: $white; + } + } + } + + .trainerShadow { + opacity: 0; + + position: absolute; + width: 100%; + height: 100%; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, .70) 100%); + border-radius: 16px; + + transition: opacity .3s, visibility .3s, transform .3s; + } + + .trainerInfo { + opacity: 0; + visibility: hidden; + transform: translateY(-48px); + + width: calc(100% - 32px); + position: absolute; + bottom: 16px; + + display: flex; + justify-content: space-between; + align-items: center; + + transition: opacity .3s, visibility .3s, transform .3s; + + @media (width <= 1144px) { + justify-content: center; + flex-direction: column; + gap: 16px; + } + + button:nth-child(1) { + padding: 4px 8px; + + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + + border-radius: 40px; + background: rgba(249, 250, 251, 0.18); + cursor: pointer; + + font: 500 14px/16px $font-family; + color: $white; + } + + .trainerSelectButton { + padding: 4px 12px; + + display: flex; + justify-content: center; + align-items: center; + gap: 4px; + + border-radius: 40px; + background: rgba(249, 250, 251, 0.18); + cursor: pointer; + + font: 500 14px/16px $font-family; + color: $white; + } + + .trainerSelectedButton { + padding: 4px 12px; + + display: flex; + justify-content: center; + align-items: center; + gap: 4px; + + border-radius: 40px; + background: $yellow-500; + cursor: pointer; + + font: 500 14px/16px $font-family; + color: $white; + + svg path { + fill: $white; + } + } + } +} diff --git a/website/src/styles/variables.scss b/website/src/styles/variables.scss index 5a5269d..5c43e45 100644 --- a/website/src/styles/variables.scss +++ b/website/src/styles/variables.scss @@ -273,285 +273,3 @@ $ease-in-out-circ: cubic-bezier(0.85, 0, 0.15, 1); $ease-in-back: cubic-bezier(0.36, 0, 0.66, -0.56); $ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1); $ease-in-out-back: cubic-bezier(0.68, -0.6, 0.32, 1.6); - -@keyframes scale-ease-in-elastic { - 0% {transform: scale(1)} - 4% {transform: scale(1)} - 8% {transform: scale(1)} - 14% {transform: scale(1)} - 18% {transform: scale(1)} - 26% {transform: scale(1.01)} - 28% {transform: scale(1.01)} - 40% {transform: scale(0.98)} - 42% {transform: scale(0.98)} - 56% {transform: scale(1.05)} - 58% {transform: scale(1.04)} - 72% {transform: scale(0.87)} - 86% {transform: scale(1.37)} - 100% {transform: scale(0)} -} - -@keyframes opacity-ease-in-elastic { - 0% {opacity: 1} - 4% {opacity: 1} - 8% {opacity: 1} - 14% {opacity: 1} - 18% {opacity: 1} - 26% {opacity: 1.01} - 28% {opacity: 1.01} - 40% {opacity: 0.98} - 42% {opacity: 0.98} - 56% {opacity: 1.05} - 58% {opacity: 1.04} - 72% {opacity: 0.87} - 86% {opacity: 1.37} - 100% {opacity: 0} -} - -@keyframes scale-ease-out-elastic { - 0% {transform: scale(1)} - 16% {transform: scale(-0.32)} - 28% {transform: scale(0.13)} - 44% {transform: scale(-0.05)} - 59% {transform: scale(0.02)} - 73% {transform: scale(-0.01)} - 88% {transform: scale(0)} - 100% {transform: scale(0)} -} - -@keyframes opacity-ease-out-elastic { - 0% {opacity: 1} - 16% {opacity: -0.32} - 28% {opacity: 0.13} - 44% {opacity: -0.05} - 59% {opacity: 0.02} - 73% {opacity: -0.01} - 88% {opacity: 0} - 100% {opacity: 0} -} - -@keyframes scale-ease-in-out-elastic { - 0% {transform: scale(1)} - 4% {transform: scale(1)} - 8% {transform: scale(1)} - 18% {transform: scale(1.01)} - 20% {transform: scale(1)} - 28% {transform: scale(0.98)} - 30% {transform: scale(0.98)} - 38% {transform: scale(1.09)} - 40% {transform: scale(1.12)} - 60% {transform: scale(-0.12)} - 62% {transform: scale(-0.09)} - 70% {transform: scale(0.02)} - 72% {transform: scale(0.02)} - 80% {transform: scale(0)} - 82% {transform: scale(-0.01)} - 90% {transform: scale(0)} - 92% {transform: scale(0)} - 100% {transform: scale(0)} -} - -@keyframes opacity-ease-in-out-elastic { - 0% {opacity: 1} - 4% {opacity: 1} - 8% {opacity: 1} - 18% {opacity: 1.01} - 20% {opacity: 1} - 28% {opacity: 0.98} - 30% {opacity: 0.98} - 38% {opacity: 1.09} - 40% {opacity: 1.12} - 60% {opacity: -0.12} - 62% {opacity: -0.09} - 70% {opacity: 0.02} - 72% {opacity: 0.02} - 80% {opacity: 0} - 82% {opacity: -0.01} - 90% {opacity: 0} - 92% {opacity: 0} - 100% {opacity: 0} -} - -@keyframes scale-ease-in-bounce { - 0% {transform: scale(1)} - 4% {transform: scale(0.98)} - 8% {transform: scale(0.99)} - 18% {transform: scale(0.94)} - 26% {transform: scale(0.98)} - 46% {transform: scale(0.75)} - 64% {transform: scale(0.98)} - 76% {transform: scale(0.44)} - 88% {transform: scale(0.11)} - 100% {transform: scale(0)} -} - -@keyframes position-x-ease-in-bounce { - 0% {transform: translateX(0%)} - 4% {transform: translateX(-1.54%)} - 8% {transform: translateX(-0.66%)} - 18% {transform: translateX(-6.25%)} - 26% {transform: translateX(-1.63%)} - 46% {transform: translateX(-24.98%)} - 64% {transform: translateX(-1.99%)} - 76% {transform: translateX(-56.44%)} - 88% {transform: translateX(-89.11%)} - 100% {transform: translateX(-100%)} -} - -@keyframes position-y-ease-in-bounce { - 0% {transform: translateY(0%)} - 4% {transform: translateY(-1.54%)} - 8% {transform: translateY(-0.66%)} - 18% {transform: translateY(-6.25%)} - 26% {transform: translateY(-1.63%)} - 46% {transform: translateY(-24.98%)} - 64% {transform: translateY(-1.99%)} - 76% {transform: translateY(-56.44%)} - 88% {transform: translateY(-89.11%)} - 100% {transform: translateY(-100%)} -} - -@keyframes opacity-ease-in-bounce { - 0% {opacity: 1} - 4% {opacity: 0.98} - 8% {opacity: 0.99} - 18% {opacity: 0.94} - 26% {opacity: 0.98} - 46% {opacity: 0.75} - 64% {opacity: 0.98} - 76% {opacity: 0.44} - 88% {opacity: 0.11} - 100% {opacity: 0} -} - -@keyframes scale-ease-out-bounce { - 0% {transform: scale(1)} - 12% {transform: scale(0.89)} - 24% {transform: scale(0.56)} - 36% {transform: scale(0.02)} - 54% {transform: scale(0.25)} - 74% {transform: scale(0.02)} - 82% {transform: scale(0.06)} - 92% {transform: scale(0.01)} - 96% {transform: scale(0.02)} - 100% {transform: scale(0)} -} - -@keyframes position-x-ease-out-bounce { - 0% {transform: translateX(0%)} - 12% {transform: translateX(-10.89%)} - 24% {transform: translateX(-43.56%)} - 36% {transform: translateX(-98.01%)} - 54% {transform: translateX(-75.02%)} - 74% {transform: translateX(-98.37%)} - 82% {transform: translateX(-93.75%)} - 92% {transform: translateX(-99.34%)} - 96% {transform: translateX(-98.46%)} - 100% {transform: translateX(-100%)} -} - -@keyframes position-y-ease-out-bounce { - 0% {transform: translateY(0%)} - 12% {transform: translateY(-10.89%)} - 24% {transform: translateY(-43.56%)} - 36% {transform: translateY(-98.01%)} - 54% {transform: translateY(-75.02%)} - 74% {transform: translateY(-98.37%)} - 82% {transform: translateY(-93.75%)} - 92% {transform: translateY(-99.34%)} - 96% {transform: translateY(-98.46%)} - 100% {transform: translateY(-100%)} -} - -@keyframes opacity-ease-out-bounce { - 0% {opacity: 1} - 12% {opacity: 0.89} - 24% {opacity: 0.56} - 36% {opacity: 0.02} - 54% {opacity: 0.25} - 74% {opacity: 0.02} - 82% {opacity: 0.06} - 92% {opacity: 0.01} - 96% {opacity: 0.02} - 100% {opacity: 0} -} - -@keyframes scale-ease-in-out-bounce { - 0% {transform: scale(1)} - 2% {transform: scale(0.99)} - 4% {transform: scale(1)} - 10% {transform: scale(0.97)} - 14% {transform: scale(0.99)} - 22% {transform: scale(0.88)} - 32% {transform: scale(0.99)} - 42% {transform: scale(0.6)} - 50% {transform: scale(0.5)} - 58% {transform: scale(0.4)} - 68% {transform: scale(0.01)} - 78% {transform: scale(0.12)} - 86% {transform: scale(0.01)} - 90% {transform: scale(0.03)} - 96% {transform: scale(0)} - 98% {transform: scale(0.01)} - 100% {transform: scale(0)} -} - -@keyframes position-x-ease-in-out-bounce { - 0% {transform: translateX(0%)} - 2% {transform: translateX(-0.77%)} - 4% {transform: translateX(-0.33%)} - 10% {transform: translateX(-3%)} - 14% {transform: translateX(-0.98%)} - 22% {transform: translateX(-12.42%)} - 32% {transform: translateX(-1%)} - 42% {transform: translateX(-40.32%)} - 50% {transform: translateX(-50%)} - 58% {transform: translateX(-59.68%)} - 68% {transform: translateX(-99.01%)} - 78% {transform: translateX(-87.58%)} - 86% {transform: translateX(-99.02%)} - 90% {transform: translateX(-97%)} - 96% {transform: translateX(-99.67%)} - 98% {transform: translateX(-99.23%)} - 100% {transform: translateX(-100%)} -} - -@keyframes position-y-ease-in-out-bounce { - 0% {transform: translateY(0%)} - 2% {transform: translateY(-0.77%)} - 4% {transform: translateY(-0.33%)} - 10% {transform: translateY(-3%)} - 14% {transform: translateY(-0.98%)} - 22% {transform: translateY(-12.42%)} - 32% {transform: translateY(-1%)} - 42% {transform: translateY(-40.32%)} - 50% {transform: translateY(-50%)} - 58% {transform: translateY(-59.68%)} - 68% {transform: translateY(-99.01%)} - 78% {transform: translateY(-87.58%)} - 86% {transform: translateY(-99.02%)} - 90% {transform: translateY(-97%)} - 96% {transform: translateY(-99.67%)} - 98% {transform: translateY(-99.23%)} - 100% {transform: translateY(-100%)} -} - -@keyframes opacity-ease-in-out-bounce { - 0% {opacity: 1} - 2% {opacity: 0.99} - 4% {opacity: 1} - 10% {opacity: 0.97} - 14% {opacity: 0.99} - 22% {opacity: 0.88} - 32% {opacity: 0.99} - 42% {opacity: 0.6} - 50% {opacity: 0.5} - 58% {opacity: 0.4} - 68% {opacity: 0.01} - 78% {opacity: 0.12} - 86% {opacity: 0.01} - 90% {opacity: 0.03} - 96% {opacity: 0} - 98% {opacity: 0.01} - 100% {opacity: 0} -} diff --git a/website/src/utils/constants.ts b/website/src/utils/constants.ts deleted file mode 100644 index e69de29..0000000 diff --git a/website/src/utils/slices/trainersSlice.ts b/website/src/utils/slices/trainersSlice.ts new file mode 100644 index 0000000..925ceda --- /dev/null +++ b/website/src/utils/slices/trainersSlice.ts @@ -0,0 +1,29 @@ +import { createSlice } from '@reduxjs/toolkit' + +export interface TrainersTypes { + data: { + id: string + name: string + username: string + email: string + profile_picture_url: string + }[] | null +} + +const initialState: TrainersTypes = { + data: null, +} + +export const trainersSlice = createSlice({ + name: 'trainers', + initialState, + reducers: { + setTrainers: (state, action) => { + state.data = action.payload + }, + }, +}) + +export const { setTrainers } = trainersSlice.actions + +export default trainersSlice.reducer diff --git a/website/src/utils/slices/userSlice.ts b/website/src/utils/slices/userSlice.ts index 8e6d489..143551f 100644 --- a/website/src/utils/slices/userSlice.ts +++ b/website/src/utils/slices/userSlice.ts @@ -1,18 +1,26 @@ import { createSlice } from '@reduxjs/toolkit' -export type UserTypes = { +export interface UserTypes { data: { + id: string name: string username: string email: string profile_picture_url: string selected_trainer_id: string subscription_expiration_date: string + meetings: { + id: string + userId: string + trainerID: string + startTime: Date + endTime: Date + }[] } | null } const initialState: UserTypes = { - data: null + data: null, } export const userSlice = createSlice({ diff --git a/website/src/utils/store.ts b/website/src/utils/store.ts index de6e286..0903638 100644 --- a/website/src/utils/store.ts +++ b/website/src/utils/store.ts @@ -1,14 +1,14 @@ import { configureStore } from '@reduxjs/toolkit' import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux' +import trainers from '@/utils/slices/trainersSlice.ts' import user from '@/utils/slices/userSlice.ts' export const store = configureStore({ reducer: { user: user, + trainers: trainers, }, }) -// const dispatch = useAppDispatch() export const useAppDispatch: () => typeof store.dispatch = useDispatch -// const user = useAppSelector(state => state.user) export const useAppSelector: TypedUseSelectorHook> = useSelector diff --git a/website/src/vite-env.d.ts b/website/src/vite-env.d.ts index 11f02fe..20226ae 100644 --- a/website/src/vite-env.d.ts +++ b/website/src/vite-env.d.ts @@ -1 +1,2 @@ /// +declare module 'react-schedule-meeting' diff --git a/website/vite.config.ts b/website/vite.config.ts index 772808e..8b01359 100644 --- a/website/vite.config.ts +++ b/website/vite.config.ts @@ -1,58 +1,53 @@ -import react from '@vitejs/plugin-react' import svgr from '@svgr/rollup' +import react from '@vitejs/plugin-react-swc' import path from 'path' -import { visualizer } from 'rollup-plugin-visualizer' import { defineConfig, loadEnv } from 'vite' export default defineConfig(({ mode }) => { - const env = loadEnv(mode, process.cwd(), '') - const processEnvValues = { - 'process.env': Object.entries(env).reduce((prev, [key, val]) => { - return { - ...prev, - [key]: val, - } - }, {}), - } + const env = loadEnv(mode, process.cwd(), '') + const processEnvValues = { + 'process.env': Object.entries(env).reduce((prev, [key, val]) => { + return { + ...prev, + [key]: val, + } + }, {}), + } - return { - plugins: [ - react(), - svgr({ icon: false, svgo: false }), - visualizer({ gzipSize: true }), - ], - publicDir: 'src/public', - define: processEnvValues, - json: { - namedExports: false, - }, - manualChunks: { - lodash: ['lodash'], - }, - css: { - devSourcemap: true, - modules: { - generateScopedName: '[hash:base64:12]', - }, - }, - esbuild: { - logOverride: { - 'this-is-undefined-in-esm': 'silent', - }, - }, - resolve: { - extensions: ['.ts', '.tsx', '.js', '.css', '.scss'], - alias: { - '@': path.resolve(__dirname, './src'), - }, - }, - build: { - minify: true, - rollupOptions: { - output: { - compact: true, - }, - }, - }, - } + return { + plugins: [react(), svgr({ icon: false, svgo: false })], + publicDir: 'src/public', + define: processEnvValues, + json: { + namedExports: false, + }, + manualChunks: { + lodash: ['lodash'], + }, + css: { + devSourcemap: true, + modules: { + generateScopedName: '[hash:base64:12]', + }, + }, + esbuild: { + logOverride: { + 'this-is-undefined-in-esm': 'silent', + }, + }, + resolve: { + extensions: ['.ts', '.tsx', '.js', '.css', '.scss'], + alias: { + '@': path.resolve(__dirname, './src'), + }, + }, + build: { + minify: true, + rollupOptions: { + output: { + compact: true, + }, + }, + }, + } }) diff --git a/website/yarn.lock b/website/yarn.lock index 3bea0b6..8d78d90 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -2,11 +2,6 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - "@adobe/css-tools@~4.3.1": version "4.3.3" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.3.tgz#90749bde8b89cd41764224f5aac29cd4138f75ff" @@ -20,34 +15,34 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.6.tgz#ab88da19344445c3d8889af2216606d3329f3ef2" + integrity sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA== dependencies: - "@babel/highlight" "^7.24.2" + "@babel/highlight" "^7.24.6" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.6.tgz#b3600217688cabb26e25f8e467019e66d71b7ae2" + integrity sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ== -"@babel/core@^7.21.3", "@babel/core@^7.23.5": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== +"@babel/core@^7.21.3", "@babel/core@^7.24.5": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.6.tgz#8650e0e4b03589ebe886c4e4a60398db0a7ec787" + integrity sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helpers" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/traverse" "^7.24.6" + "@babel/types" "^7.24.6" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -63,69 +58,69 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.23.0", "@babel/generator@^7.24.1", "@babel/generator@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== +"@babel/generator@^7.23.0", "@babel/generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.6.tgz#dfac82a228582a9d30c959fe50ad28951d4737a7" + integrity sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.6" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== +"@babel/helper-annotate-as-pure@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz#517af93abc77924f9b2514c407bbef527fb8938d" + integrity sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz#19e9089ee87b0d0928012c83961a8deef4b0223f" + integrity sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw== dependencies: - "@babel/types" "^7.22.15" + "@babel/types" "^7.24.6" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz#4a51d681f7680043d38e212715e2a7b1ad29cb51" + integrity sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" + "@babel/compat-data" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" browserslist "^4.22.2" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" - integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/helper-create-class-features-plugin@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz#c50b86fa1c4ca9b7a890dc21884f097b6c4b5286" + integrity sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-member-expression-to-functions" "^7.24.6" + "@babel/helper-optimise-call-expression" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz#47d382dec0d49e74ca1b6f7f3b81f5968022a3c8" + integrity sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.6" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -133,181 +128,180 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== +"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz#ac7ad5517821641550f6698dd5468f8cef78620d" + integrity sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g== -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-function-name@^7.23.0", "@babel/helper-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz#cebdd063386fdb95d511d84b117e51fc68fec0c8" + integrity sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== +"@babel/helper-hoist-variables@^7.22.5", "@babel/helper-hoist-variables@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz#8a7ece8c26756826b6ffcdd0e3cf65de275af7f9" + integrity sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-member-expression-to-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz#86084f3e0e4e2169a134754df3870bc7784db71e" + integrity sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg== dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.24.6" + +"@babel/helper-module-imports@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz#65e54ffceed6a268dc4ce11f0433b82cfff57852" + integrity sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g== + dependencies: + "@babel/types" "^7.24.6" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== +"@babel/helper-module-transforms@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz#22346ed9df44ce84dee850d7433c5b73fab1fe4e" + integrity sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== +"@babel/helper-optimise-call-expression@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz#f7836e3ccca3dfa02f15d2bc8b794efe75a5256e" + integrity sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz#fa02a32410a15a6e8f8185bcbf608f10528d2a24" + integrity sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg== -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== +"@babel/helper-remap-async-to-generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz#c96ceb9846e877d806ce82a1521230ea7e0fc354" + integrity sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-wrap-function" "^7.24.6" -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== +"@babel/helper-replace-supers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz#3ea87405a2986a49ab052d10e540fe036d747c71" + integrity sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-member-expression-to-functions" "^7.24.6" + "@babel/helper-optimise-call-expression" "^7.24.6" -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== +"@babel/helper-simple-access@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz#1d6e04d468bba4fc963b4906f6dac6286cfedff1" + integrity sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.24.6" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== +"@babel/helper-skip-transparent-expression-wrappers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz#c47e9b33b7ea50d1073e125ebc26661717cb7040" + integrity sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q== dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + "@babel/types" "^7.24.6" -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== +"@babel/helper-split-export-declaration@^7.22.6", "@babel/helper-split-export-declaration@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz#e830068f7ba8861c53b7421c284da30ae656d7a3" + integrity sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw== dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" + "@babel/types" "^7.24.6" -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== +"@babel/helper-string-parser@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz#28583c28b15f2a3339cfafafeaad42f9a0e828df" + integrity sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q== + +"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz#08bb6612b11bdec78f3feed3db196da682454a5e" + integrity sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw== + +"@babel/helper-validator-option@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz#59d8e81c40b7d9109ab7e74457393442177f460a" + integrity sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ== + +"@babel/helper-wrap-function@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz#c27af1006e310683fdc76b668a0a1f6003e36217" + integrity sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/helper-function-name" "^7.24.6" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" -"@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== +"@babel/helpers@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.6.tgz#cd124245299e494bd4e00edda0e4ea3545c2c176" + integrity sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA== dependencies: - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/template" "^7.24.6" + "@babel/types" "^7.24.6" + +"@babel/highlight@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.6.tgz#6d610c1ebd2c6e061cade0153bf69b0590b7b3df" + integrity sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ== + dependencies: + "@babel/helper-validator-identifier" "^7.24.6" chalk "^2.4.2" js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== +"@babel/parser@^7.1.0", "@babel/parser@^7.20.5", "@babel/parser@^7.20.7", "@babel/parser@^7.23.0", "@babel/parser@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.6.tgz#5e030f440c3c6c78d195528c3b688b101a365328" + integrity sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q== -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.4.tgz#6125f0158543fb4edf1c22f322f3db67f21cb3e1" - integrity sha512-qpl6vOOEEzTLLcsuqYYo8yDtrTocmu2xkGvgNebvPjT9DTtfFYGmgDqY+rBYXNlqL4s9qLDn6xkrJv4RxAPiTA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz#283a74ef365b1e954cda6b2724c678a978215e88" + integrity sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz#b645d9ba8c2bc5b7af50f0fe949f9edbeb07c8cf" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz#f9f5ae4d6fb72f5950262cb6f0b2482c3bc684ef" + integrity sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz#da8261f2697f0f41b0855b91d3a20a1fbfd271d3" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz#ab9be6edfffa127bd5ec4317c76c5af0f8fc7e6c" + integrity sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" + "@babel/plugin-transform-optional-chaining" "^7.24.6" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz#1181d9685984c91d657b8ddf14f0487a6bab2988" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz#0faf879249ec622d7f1c42eaebf7d11197401b2c" + integrity sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -349,19 +343,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz#db3aad724153a00eaac115a3fb898de544e34971" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== +"@babel/plugin-syntax-import-assertions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz#52521c1c1698fc2dd9cf88f7a4dd86d4d041b9e1" + integrity sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz#c66b966c63b714c4eec508fcf5763b1f2d381093" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== +"@babel/plugin-syntax-import-attributes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz#12aba325534129584672920274fefa4dc2d5f68e" + integrity sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" @@ -377,12 +371,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== +"@babel/plugin-syntax-jsx@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz#bcca2964150437f88f65e3679e3d68762287b9c8" + integrity sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -440,12 +434,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== +"@babel/plugin-syntax-typescript@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz#769daf2982d60308bc83d8936eaecb7582463c87" + integrity sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -455,478 +449,478 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== +"@babel/plugin-transform-arrow-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz#93607d1ef5b81c70af174aff3532d57216367492" + integrity sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz#8fa7ae481b100768cc9842c8617808c5352b8b89" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== +"@babel/plugin-transform-async-generator-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz#fa4a9e5c3a7f60f697ba36587b6c41b04f507d84" + integrity sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-remap-async-to-generator" "^7.24.6" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== +"@babel/plugin-transform-async-to-generator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz#eb11434b11d73d8c0cf9f71a6f4f1e6ba441df35" + integrity sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g== dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-remap-async-to-generator" "^7.24.6" -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz#1c94799e20fcd5c4d4589523bbc57b7692979380" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== +"@babel/plugin-transform-block-scoped-functions@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz#975555b5bfa9870b1218da536d1528735f1f8c56" + integrity sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-block-scoping@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" - integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== +"@babel/plugin-transform-block-scoping@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz#a03ec8a4591c2b43cf7798bc633e698293fda179" + integrity sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz#bcbf1aef6ba6085cfddec9fc8d58871cf011fc29" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== +"@babel/plugin-transform-class-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz#d9f394e97e88ef905d5a1e5e7a16238621b7982e" + integrity sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-class-static-block@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz#1a4653c0cf8ac46441ec406dece6e9bc590356a4" - integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== +"@babel/plugin-transform-class-static-block@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz#f43f29286f6f0dca33d18fd5033b817d6c3fa816" + integrity sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" +"@babel/plugin-transform-classes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz#0cc198c02720d4eeb091004843477659c6b37977" + integrity sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== +"@babel/plugin-transform-computed-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz#7a1765c01cdfe59c320d2d0f37a4dc4aecd14df1" + integrity sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/template" "^7.24.6" -"@babel/plugin-transform-destructuring@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== +"@babel/plugin-transform-destructuring@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz#bdd1a6c90ffb2bfd13b6007b13316eeafc97cb53" + integrity sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz#d56913d2f12795cc9930801b84c6f8c47513ac13" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== +"@babel/plugin-transform-dotall-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz#5a6b3148ec5f4f274ff48cebea90565087cad126" + integrity sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz#5347a797fe82b8d09749d10e9f5b83665adbca88" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== +"@babel/plugin-transform-duplicate-keys@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz#2716301227cf7cd4fdadcbe4353ce191f8b3dc8a" + integrity sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz#2a5a49959201970dd09a5fca856cb651e44439dd" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== +"@babel/plugin-transform-dynamic-import@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz#b477177761d56b15a4ba42a83be31cf72d757acf" + integrity sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz#6650ebeb5bd5c012d5f5f90a26613a08162e8ba4" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== +"@babel/plugin-transform-exponentiation-operator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz#011e9e1a429f91b024af572530873ca571f9ef06" + integrity sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== +"@babel/plugin-transform-export-namespace-from@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz#b64ded74d9afb3db5d47d93996c4df69f15ac97c" + integrity sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz#67448446b67ab6c091360ce3717e7d3a59e202fd" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== +"@babel/plugin-transform-for-of@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz#7f31780bd0c582b546372c0c0da9d9d56731e0a2" + integrity sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== +"@babel/plugin-transform-function-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz#60d1de3f6fd816a3e3bf9538578a64527e1b9c97" + integrity sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz#08e6369b62ab3e8a7b61089151b161180c8299f7" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== +"@babel/plugin-transform-json-strings@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz#a84639180ea1f9001bb5e6dc01921235ab05ad8b" + integrity sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== +"@babel/plugin-transform-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz#7f44f2871d7a4456030b0540858046f0b7bc6b18" + integrity sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz#719d8aded1aa94b8fb34e3a785ae8518e24cfa40" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== +"@babel/plugin-transform-logical-assignment-operators@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz#9cc7baa5629866566562c159dc1eae7569810f33" + integrity sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz#896d23601c92f437af8b01371ad34beb75df4489" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== +"@babel/plugin-transform-member-expression-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz#5d3681ca201ac6909419cc51ac082a6ba4c5c756" + integrity sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz#b6d829ed15258536977e9c7cc6437814871ffa39" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== +"@babel/plugin-transform-modules-amd@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz#09aeac7acb7913496aaaafdc64f40683e0db7e41" + integrity sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== +"@babel/plugin-transform-modules-commonjs@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz#1b8269902f25bd91ca6427230d4735ddd1e1283e" + integrity sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-simple-access" "^7.24.6" -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz#2b9625a3d4e445babac9788daec39094e6b11e3e" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== +"@babel/plugin-transform-modules-systemjs@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz#c54eb53fe16f9b82d320abd76762d0320e3f9393" + integrity sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz#69220c66653a19cf2c0872b9c762b9a48b8bebef" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== +"@babel/plugin-transform-modules-umd@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz#c4ef8b6d4da230b8dc87e81cd66986728952f89b" + integrity sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-transforms" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz#352ee2861ab8705320029f80238cf26a92ba65d5" + integrity sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz#29c59988fa3d0157de1c871a28cd83096363cc34" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== +"@babel/plugin-transform-new-target@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz#fc024294714705113720d5e3dc0f9ad7abdbc289" + integrity sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz#0cd494bb97cb07d428bd651632cb9d4140513988" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz#12b83b3cdfd1cd2066350e36e4fb912ab194545e" + integrity sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz#5bc019ce5b3435c1cadf37215e55e433d674d4e8" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== +"@babel/plugin-transform-numeric-separator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz#d9115669cc85aa91fbfb15f88f2226332cf4946a" + integrity sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== +"@babel/plugin-transform-object-rest-spread@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz#68d763f69955f9e599c405c6c876f5be46b47d8a" + integrity sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.6" -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz#e71d6ab13483cca89ed95a474f542bbfc20a0520" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== +"@babel/plugin-transform-object-super@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz#9cbe6f995bed343a7ab8daf0416dac057a9c3e27" + integrity sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-replace-supers" "^7.24.6" -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz#92a3d0efe847ba722f1a4508669b23134669e2da" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== +"@babel/plugin-transform-optional-catch-binding@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz#c81e90a971aad898e56f2b75a358e6c4855aeba3" + integrity sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.1.tgz#26e588acbedce1ab3519ac40cc748e380c5291e6" - integrity sha512-n03wmDt+987qXwAgcBlnUUivrZBPZ8z1plL0YvgQalLm+ZE5BMhGm94jhxXtA1wzv1Cu2aaOv1BM9vbVttrzSg== +"@babel/plugin-transform-optional-chaining@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz#3d636b3ed8b5a506f93e4d4675fc95754d7594f5" + integrity sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== +"@babel/plugin-transform-parameters@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz#7aee86dfedd2fc0136fecbe6f7649fc02d86ab22" + integrity sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== +"@babel/plugin-transform-private-methods@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz#258e1f859a52ff7b30ad556598224c192defcda7" + integrity sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-private-property-in-object@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== +"@babel/plugin-transform-private-property-in-object@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz#59ff09a099f62213112cf348e96b6b11957d1f28" + integrity sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz#d6a9aeab96f03749f4eebeb0b6ea8e90ec958825" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== +"@babel/plugin-transform-property-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz#243c4faabe811c405e9443059a58e834bf95dfd1" + integrity sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz#d493a0918b9fdad7540f5afd9b5eb5c52500d18d" - integrity sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz#628c52aecfb2beca1e6383ce2c5b6722df3ff311" + integrity sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-react-display-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" - integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== +"@babel/plugin-transform-react-display-name@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz#2a10c732c2c87a8f06e4413fb4a14e76e6c67a99" + integrity sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz#e662058e8795b5fccd24c5bdd2b328728aef3305" + integrity sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.6" -"@babel/plugin-transform-react-jsx-self@^7.23.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" - integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== +"@babel/plugin-transform-react-jsx-self@^7.24.5": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.6.tgz#4fa4870d594d6840d724d2006d0f98b19be6f502" + integrity sha512-FfZfHXtQ5jYPQsCRyLpOv2GeLIIJhs8aydpNh39vRDjhD411XcfWDni5i7OjP/Rs8GAtTn7sWFFELJSHqkIxYg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-react-jsx-source@^7.23.3": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" - integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== +"@babel/plugin-transform-react-jsx-source@^7.24.1": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.6.tgz#4e1503f24ca5fccb1fc7f20c57426899d5ce5c1f" + integrity sha512-BQTBCXmFRreU3oTUXcGKuPOfXAGb1liNY4AvvFKsOBAJ89RKcTsIrSsnMYkj59fNa66OFKnSa4AJZfy5Y4B9WA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz#4ca3660ca663d20095455571615d6263986cdfe4" + integrity sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-module-imports" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-jsx" "^7.24.6" + "@babel/types" "^7.24.6" -"@babel/plugin-transform-react-pure-annotations@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" - integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== +"@babel/plugin-transform-react-pure-annotations@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz#d2bad8d70c3635cb63a69ee66c9c891f9392435c" + integrity sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz#625b7545bae52363bdc1fbbdc7252b5046409c8c" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== +"@babel/plugin-transform-regenerator@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz#ed10cf0c13619365e15459f88d1b915ac57ffc24" + integrity sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz#8de729f5ecbaaf5cf83b67de13bad38a21be57c1" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== +"@babel/plugin-transform-reserved-words@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz#9eb16cbf339fcea0a46677716c775afb5ef14245" + integrity sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== +"@babel/plugin-transform-shorthand-properties@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz#ef734ebccc428d2174c7bb36015d0800faf5381e" + integrity sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== +"@babel/plugin-transform-spread@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz#a56cecbd8617675531d1b79f5b755b7613aa0822" + integrity sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.6" -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== +"@babel/plugin-transform-sticky-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz#1a78127731fea87d954bed193840986a38f04327" + integrity sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz#15e2166873a30d8617e3e2ccadb86643d327aab7" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== +"@babel/plugin-transform-template-literals@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz#aaf2ae157acd0e5c9265dba8ac0a439f8d2a6303" + integrity sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-typeof-symbol@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.1.tgz#6831f78647080dec044f7e9f68003d99424f94c7" - integrity sha512-CBfU4l/A+KruSUoW+vTQthwcAdwuqbpRNB8HQKlZABwHRhsdHZ9fezp4Sn18PeAlYxTNiLMlx4xUBV3AWfg1BA== +"@babel/plugin-transform-typeof-symbol@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz#3d02da23ebcc8f1982ddcd1f2581cf3ee4e58762" + integrity sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-typescript@^7.24.1": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" - integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== +"@babel/plugin-transform-typescript@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz#339c6127a783c32e28a5b591e6c666f899b57db0" + integrity sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-typescript" "^7.24.1" + "@babel/helper-annotate-as-pure" "^7.24.6" + "@babel/helper-create-class-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/plugin-syntax-typescript" "^7.24.6" -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz#fb3fa16676549ac7c7449db9b342614985c2a3a4" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== +"@babel/plugin-transform-unicode-escapes@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz#c8ddca8fd5bacece837a4e27bd3b7ed64580d1a8" + integrity sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz#56704fd4d99da81e5e9f0c0c93cabd91dbc4889e" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== +"@babel/plugin-transform-unicode-property-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz#e66297d5d452db0b0be56515e3d0e10b7d33fb32" + integrity sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== +"@babel/plugin-transform-unicode-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz#2001e7d87ed709eea145e0b65fb5f93c3c0e225b" + integrity sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz#c1ea175b02afcffc9cf57a9c4658326625165b7f" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== +"@babel/plugin-transform-unicode-sets-regex@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz#f18b7292222aee85c155258ceb345a146a070a46" + integrity sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" "@babel/preset-env@^7.20.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.4.tgz#46dbbcd608771373b88f956ffb67d471dce0d23b" - integrity sha512-7Kl6cSmYkak0FK/FXjSEnLJ1N9T/WA2RkMhu17gZ/dsxKJUuTYNIylahPTzqpLyJN4WhDif8X0XK1R8Wsguo/A== - dependencies: - "@babel/compat-data" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.4" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.6.tgz#a5a55bc70e5ff1ed7f872067e2a9d65ff917ad6f" + integrity sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg== + dependencies: + "@babel/compat-data" "^7.24.6" + "@babel/helper-compilation-targets" "^7.24.6" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.6" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.6" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" + "@babel/plugin-syntax-import-assertions" "^7.24.6" + "@babel/plugin-syntax-import-attributes" "^7.24.6" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -938,54 +932,54 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.4" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.4" - "@babel/plugin-transform-classes" "^7.24.1" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.1" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.1" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - "@babel/plugin-transform-parameters" "^7.24.1" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.1" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.1" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" + "@babel/plugin-transform-arrow-functions" "^7.24.6" + "@babel/plugin-transform-async-generator-functions" "^7.24.6" + "@babel/plugin-transform-async-to-generator" "^7.24.6" + "@babel/plugin-transform-block-scoped-functions" "^7.24.6" + "@babel/plugin-transform-block-scoping" "^7.24.6" + "@babel/plugin-transform-class-properties" "^7.24.6" + "@babel/plugin-transform-class-static-block" "^7.24.6" + "@babel/plugin-transform-classes" "^7.24.6" + "@babel/plugin-transform-computed-properties" "^7.24.6" + "@babel/plugin-transform-destructuring" "^7.24.6" + "@babel/plugin-transform-dotall-regex" "^7.24.6" + "@babel/plugin-transform-duplicate-keys" "^7.24.6" + "@babel/plugin-transform-dynamic-import" "^7.24.6" + "@babel/plugin-transform-exponentiation-operator" "^7.24.6" + "@babel/plugin-transform-export-namespace-from" "^7.24.6" + "@babel/plugin-transform-for-of" "^7.24.6" + "@babel/plugin-transform-function-name" "^7.24.6" + "@babel/plugin-transform-json-strings" "^7.24.6" + "@babel/plugin-transform-literals" "^7.24.6" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.6" + "@babel/plugin-transform-member-expression-literals" "^7.24.6" + "@babel/plugin-transform-modules-amd" "^7.24.6" + "@babel/plugin-transform-modules-commonjs" "^7.24.6" + "@babel/plugin-transform-modules-systemjs" "^7.24.6" + "@babel/plugin-transform-modules-umd" "^7.24.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.6" + "@babel/plugin-transform-new-target" "^7.24.6" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.6" + "@babel/plugin-transform-numeric-separator" "^7.24.6" + "@babel/plugin-transform-object-rest-spread" "^7.24.6" + "@babel/plugin-transform-object-super" "^7.24.6" + "@babel/plugin-transform-optional-catch-binding" "^7.24.6" + "@babel/plugin-transform-optional-chaining" "^7.24.6" + "@babel/plugin-transform-parameters" "^7.24.6" + "@babel/plugin-transform-private-methods" "^7.24.6" + "@babel/plugin-transform-private-property-in-object" "^7.24.6" + "@babel/plugin-transform-property-literals" "^7.24.6" + "@babel/plugin-transform-regenerator" "^7.24.6" + "@babel/plugin-transform-reserved-words" "^7.24.6" + "@babel/plugin-transform-shorthand-properties" "^7.24.6" + "@babel/plugin-transform-spread" "^7.24.6" + "@babel/plugin-transform-sticky-regex" "^7.24.6" + "@babel/plugin-transform-template-literals" "^7.24.6" + "@babel/plugin-transform-typeof-symbol" "^7.24.6" + "@babel/plugin-transform-unicode-escapes" "^7.24.6" + "@babel/plugin-transform-unicode-property-regex" "^7.24.6" + "@babel/plugin-transform-unicode-regex" "^7.24.6" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.6" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.4" @@ -1003,48 +997,48 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" - integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.6.tgz#92eace66dce577e5263113eb82235a0d45096cae" + integrity sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-transform-react-display-name" "^7.24.1" - "@babel/plugin-transform-react-jsx" "^7.23.4" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-transform-react-display-name" "^7.24.6" + "@babel/plugin-transform-react-jsx" "^7.24.6" + "@babel/plugin-transform-react-jsx-development" "^7.24.6" + "@babel/plugin-transform-react-pure-annotations" "^7.24.6" "@babel/preset-typescript@^7.21.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz#27057470fb981c31338bdb897fc3d9aa0cb7dab2" + integrity sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.6" + "@babel/helper-validator-option" "^7.24.6" + "@babel/plugin-syntax-jsx" "^7.24.6" + "@babel/plugin-transform-modules-commonjs" "^7.24.6" + "@babel/plugin-transform-typescript" "^7.24.6" "@babel/regjsgen@^0.8.0": version "0.8.0" resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9", "@babel/runtime@^7.8.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== +"@babel/runtime@^7.21.0", "@babel/runtime@^7.8.4": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.6.tgz#5b76eb89ad45e2e4a0a8db54c456251469a3358e" + integrity sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.22.15", "@babel/template@^7.24.0": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== +"@babel/template@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.6.tgz#048c347b2787a6072b24c723664c8d02b67a44f9" + integrity sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" "@babel/traverse@7.23.2": version "7.23.2" @@ -1062,19 +1056,19 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" +"@babel/traverse@^7.24.6": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.6.tgz#0941ec50cdeaeacad0911eb67ae227a4f8424edc" + integrity sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw== + dependencies: + "@babel/code-frame" "^7.24.6" + "@babel/generator" "^7.24.6" + "@babel/helper-environment-visitor" "^7.24.6" + "@babel/helper-function-name" "^7.24.6" + "@babel/helper-hoist-variables" "^7.24.6" + "@babel/helper-split-export-declaration" "^7.24.6" + "@babel/parser" "^7.24.6" + "@babel/types" "^7.24.6" debug "^4.3.1" globals "^11.1.0" @@ -1086,29 +1080,15 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.4.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.0.0", "@babel/types@^7.17.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.23.0", "@babel/types@^7.24.6", "@babel/types@^7.4.4": + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.6.tgz#ba4e1f59870c10dc2fa95a274ac4feec23b21912" + integrity sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-string-parser" "^7.24.6" + "@babel/helper-validator-identifier" "^7.24.6" to-fast-properties "^2.0.0" -"@emnapi/core@^0.45.0": - version "0.45.0" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-0.45.0.tgz#e58dc1f70ab3af3f6708991ba56d988088daf204" - integrity sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw== - dependencies: - tslib "^2.4.0" - -"@emnapi/runtime@^0.45.0": - version "0.45.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-0.45.0.tgz#e754de04c683263f34fd0c7f32adfe718bbe4ddd" - integrity sha512-Txumi3td7J4A/xTTwlssKieHKTGl3j4A1tglBx72auZ49YK7ePY6XZricgIg9mnZT4xPfA+UPCUdnhRuEFDL+w== - dependencies: - tslib "^2.4.0" - "@esbuild/aix-ppc64@0.20.2": version "0.20.2" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" @@ -1236,10 +1216,10 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.2.tgz#36180f8e85bf34d2fe3ccc2261e8e204a411ab4e" - integrity sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg== +"@eslint/eslintrc@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.1.0.tgz#dbd3482bfd91efa663cbe7aa1f506839868207b6" + integrity sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1251,24 +1231,19 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.1.1": - version "9.1.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.1.1.tgz#eb0f82461d12779bbafc1b5045cde3143d350a8a" - integrity sha512-5WoDz3Y19Bg2BnErkZTp0en+c/i9PvgFS7MBe1+m60HjFr0hrphlAGp4yzI7pxpt4xShln4ZyYp4neJm8hmOkQ== +"@eslint/js@9.3.0", "@eslint/js@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.3.0.tgz#2e8f65c9c55227abc4845b1513c69c32c679d8fe" + integrity sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw== -"@gsap/react@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@gsap/react/-/react-2.1.0.tgz#fe65901d64c00d2eea4e3e8b571ae293d781622f" - integrity sha512-pwdFXvOM5IsRZXpWTKkQoEjb3/iUjDCU1BCJDlE6pHgVjG+7Ep/7+sszUgqVZ2Jc0mR8gnhtDWyx5cQAT4kwQw== +"@gsap/react@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@gsap/react/-/react-2.1.1.tgz#219a81c84f93a2631c8aa324c0f5cce03cdf2ed9" + integrity sha512-apGPRrmpqxvl1T6Io1KgT8tFU+IuACI6z4zmT7t8+PASserJeLVRFJdSNUFA2Xb/eVkZI1noE8LIrY/w/oJECw== dependencies: - gsap "^3.12.4" + gsap "^3.12.5" react ">=16" -"@hookform/error-message@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@hookform/error-message/-/error-message-2.0.1.tgz#6a37419106e13664ad6a29c9dae699ae6cd276b8" - integrity sha512-U410sAr92xgxT1idlu9WWOVjndxLdgPUHEB8Schr27C9eh7/xUnITWpCMF93s+lGiG++D4JnbSnrb5A21AdSNg== - "@humanwhocodes/config-array@^0.13.0": version "0.13.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" @@ -1288,10 +1263,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== -"@humanwhocodes/retry@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.2.3.tgz#c9aa036d1afa643f1250e83150f39efb3a15a631" - integrity sha512-X38nUbachlb01YMlvPFojKoiXq+LzZvuSce70KPMPdeM1Rj03k4dR7lDslhbqXn3Ang4EU3+EAmwEAsbrjHW3g== +"@humanwhocodes/retry@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.0.tgz#6d86b8cb322660f03d3f0aa94b99bdd8e172d570" + integrity sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew== "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" @@ -1325,196 +1300,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@node-rs/argon2-android-arm-eabi@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz#9de6d4519e7b757d0e3480d4b108fd0d698be332" - integrity sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg== - -"@node-rs/argon2-android-arm64@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz#9e0d65e64002537f7145006d103582eceb87a8e3" - integrity sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A== - -"@node-rs/argon2-darwin-arm64@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz#1d8f8d7a637313cf3b74ec81f8e21f6555d681b4" - integrity sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw== - -"@node-rs/argon2-darwin-x64@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz#2a63cffbd4212d40242f65d7c140cae16ba7ca24" - integrity sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw== - -"@node-rs/argon2-freebsd-x64@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz#637b15bada735c47e57ad5d6403f70083ae6c104" - integrity sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA== - -"@node-rs/argon2-linux-arm-gnueabihf@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz#fe6d43cb9c9e43788dfb6bb76c78736cc5b6f717" - integrity sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg== - -"@node-rs/argon2-linux-arm64-gnu@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz#f5e3f5a9dd2d55fe3dd9816e0581e99a1abe1698" - integrity sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g== - -"@node-rs/argon2-linux-arm64-musl@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz#0e57f0d6ba78d3fd683583cffe5ec00b2e422ae5" - integrity sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A== - -"@node-rs/argon2-linux-x64-gnu@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz#d72bd52c970fe120b97ddb4a1f7719ccacf47c4a" - integrity sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ== - -"@node-rs/argon2-linux-x64-musl@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz#850b4fa411bd005d6815228d4495075434f46a5d" - integrity sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA== - -"@node-rs/argon2-wasm32-wasi@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz#83b361b9e2ece101288306606fa883c2cba87e7d" - integrity sha512-Evmk9VcxqnuwQftfAfYEr6YZYSPLzmKUsbFIMep5nTt9PT4XYRFAERj7wNYp+rOcBenF3X4xoB+LhwcOMTNE5w== - dependencies: - "@emnapi/core" "^0.45.0" - "@emnapi/runtime" "^0.45.0" - "@tybys/wasm-util" "^0.8.1" - memfs-browser "^3.4.13000" - -"@node-rs/argon2-win32-arm64-msvc@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz#7a6dc4d456c94cd2bdaa720e11dd325e158fb3dd" - integrity sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA== - -"@node-rs/argon2-win32-ia32-msvc@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz#8405f226b06354915ae10f919c54d0883f2fb632" - integrity sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg== - -"@node-rs/argon2-win32-x64-msvc@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz#3983e08350dacfb30697923faf1ce34243e11c86" - integrity sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q== - -"@node-rs/argon2@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@node-rs/argon2/-/argon2-1.7.0.tgz#80f3fdd7c5643b763a98bd0f5a2f2f975bcd95e5" - integrity sha512-zfULc+/tmcWcxn+nHkbyY8vP3+MpEqKORbszt4UkpqZgBgDAAIYvuDN/zukfTgdmo6tmJKKVfzigZOPk4LlIog== - optionalDependencies: - "@node-rs/argon2-android-arm-eabi" "1.7.0" - "@node-rs/argon2-android-arm64" "1.7.0" - "@node-rs/argon2-darwin-arm64" "1.7.0" - "@node-rs/argon2-darwin-x64" "1.7.0" - "@node-rs/argon2-freebsd-x64" "1.7.0" - "@node-rs/argon2-linux-arm-gnueabihf" "1.7.0" - "@node-rs/argon2-linux-arm64-gnu" "1.7.0" - "@node-rs/argon2-linux-arm64-musl" "1.7.0" - "@node-rs/argon2-linux-x64-gnu" "1.7.0" - "@node-rs/argon2-linux-x64-musl" "1.7.0" - "@node-rs/argon2-wasm32-wasi" "1.7.0" - "@node-rs/argon2-win32-arm64-msvc" "1.7.0" - "@node-rs/argon2-win32-ia32-msvc" "1.7.0" - "@node-rs/argon2-win32-x64-msvc" "1.7.0" - -"@node-rs/bcrypt-android-arm-eabi@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-android-arm-eabi/-/bcrypt-android-arm-eabi-1.9.0.tgz#d31dab5aa9bb70a5fa09e30f101f3a997eb84a28" - integrity sha512-nOCFISGtnodGHNiLrG0WYLWr81qQzZKYfmwHc7muUeq+KY0sQXyHOwZk9OuNQAWv/lnntmtbwkwT0QNEmOyLvA== - -"@node-rs/bcrypt-android-arm64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-android-arm64/-/bcrypt-android-arm64-1.9.0.tgz#0e1c7345460eb413484509b58d691f3152e1505f" - integrity sha512-+ZrIAtigVmjYkqZQTThHVlz0+TG6D+GDHWhVKvR2DifjtqJ0i+mb9gjo++hN+fWEQdWNGxKCiBBjwgT4EcXd6A== - -"@node-rs/bcrypt-darwin-arm64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-darwin-arm64/-/bcrypt-darwin-arm64-1.9.0.tgz#b11d643b0031453670918b6168f0762fd56dd244" - integrity sha512-CQiS+F9Pa0XozvkXR1g7uXE9QvBOPOplDg0iCCPRYTN9PqA5qYxhwe48G3o+v2UeQceNRrbnEtWuANm7JRqIhw== - -"@node-rs/bcrypt-darwin-x64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-darwin-x64/-/bcrypt-darwin-x64-1.9.0.tgz#f6b175a6b12c979de490e6c106b2458ff52fc5f0" - integrity sha512-4pTKGawYd7sNEjdJ7R/R67uwQH1VvwPZ0SSUMmeNHbxD5QlwAPXdDH11q22uzVXsvNFZ6nGQBg8No5OUGpx6Ug== - -"@node-rs/bcrypt-freebsd-x64@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-freebsd-x64/-/bcrypt-freebsd-x64-1.9.0.tgz#b2045f83c1b984e9bd76d7566cfa79c3e645aeff" - integrity sha512-UmWzySX4BJhT/B8xmTru6iFif3h0Rpx3TqxRLCcbgmH43r7k5/9QuhpiyzpvKGpKHJCFNm4F3rC2wghvw5FCIg== - -"@node-rs/bcrypt-linux-arm-gnueabihf@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-linux-arm-gnueabihf/-/bcrypt-linux-arm-gnueabihf-1.9.0.tgz#946c743f417528dd1ddb0950259b52502e4ab962" - integrity sha512-8qoX4PgBND2cVwsbajoAWo3NwdfJPEXgpCsZQZURz42oMjbGyhhSYbovBCskGU3EBLoC8RA2B1jFWooeYVn5BA== - -"@node-rs/bcrypt-linux-arm64-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-linux-arm64-gnu/-/bcrypt-linux-arm64-gnu-1.9.0.tgz#702882f1ff1ac02a18f5bdb0010f6a429ba86445" - integrity sha512-TuAC6kx0SbcIA4mSEWPi+OCcDjTQUMl213v5gMNlttF+D4ieIZx6pPDGTaMO6M2PDHTeCG0CBzZl0Lu+9b0c7Q== - -"@node-rs/bcrypt-linux-arm64-musl@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-linux-arm64-musl/-/bcrypt-linux-arm64-musl-1.9.0.tgz#207f1d7147d7e31d4fe03d02797f977d5dadebe8" - integrity sha512-/sIvKDABOI8QOEnLD7hIj02BVaNOuCIWBKvxcJOt8+TuwJ6zmY1UI5kSv9d99WbiHjTp97wtAUbZQwauU4b9ew== - -"@node-rs/bcrypt-linux-x64-gnu@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-linux-x64-gnu/-/bcrypt-linux-x64-gnu-1.9.0.tgz#4557dac7a939eaf24cb0ee1b9688b6d9e105373d" - integrity sha512-DyyhDHDsLBsCKz1tZ1hLvUZSc1DK0FU0v52jK6IBQxrj24WscSU9zZe7ie/V9kdmA4Ep57BfpWX8Dsa2JxGdgQ== - -"@node-rs/bcrypt-linux-x64-musl@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-linux-x64-musl/-/bcrypt-linux-x64-musl-1.9.0.tgz#c86ad58d70b71f703bbdd90c623f63ca38e2f751" - integrity sha512-duIiuqQ+Lew8ASSAYm6ZRqcmfBGWwsi81XLUwz86a2HR7Qv6V4yc3ZAUQovAikhjCsIqe8C11JlAZSK6+PlXYg== - -"@node-rs/bcrypt-wasm32-wasi@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-wasm32-wasi/-/bcrypt-wasm32-wasi-1.9.0.tgz#42ae8e2f80e5293d36dee53a14da34a5888ff0e6" - integrity sha512-ylaGmn9Wjwv/D5lxtawttx3H6Uu2WTTR7lWlRHGT6Ga/MB1Vj4OjSGUW8G8zIVnKuXpGbZ92pgHlt4HUpSLctw== - dependencies: - "@emnapi/core" "^0.45.0" - "@emnapi/runtime" "^0.45.0" - "@tybys/wasm-util" "^0.8.1" - memfs-browser "^3.4.13000" - -"@node-rs/bcrypt-win32-arm64-msvc@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-win32-arm64-msvc/-/bcrypt-win32-arm64-msvc-1.9.0.tgz#4e31a59a76b5cb091e69b9548c798ce27908cb82" - integrity sha512-2h86gF7QFyEzODuDFml/Dp1MSJoZjxJ4yyT2Erf4NkwsiA5MqowUhUsorRwZhX6+2CtlGa7orbwi13AKMsYndw== - -"@node-rs/bcrypt-win32-ia32-msvc@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-win32-ia32-msvc/-/bcrypt-win32-ia32-msvc-1.9.0.tgz#89f23c2f66e578d13526a0b33405332ced6b8348" - integrity sha512-kqxalCvhs4FkN0+gWWfa4Bdy2NQAkfiqq/CEf6mNXC13RSV673Ev9V8sRlQyNpCHCNkeXfOT9pgoBdJmMs9muA== - -"@node-rs/bcrypt-win32-x64-msvc@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-win32-x64-msvc/-/bcrypt-win32-x64-msvc-1.9.0.tgz#9f061a05d5f2dc360a016081bfaed190b2145c84" - integrity sha512-2y0Tuo6ZAT2Cz8V7DHulSlv1Bip3zbzeXyeur+uR25IRNYXKvI/P99Zl85Fbuu/zzYAZRLLlGTRe6/9IHofe/w== - -"@node-rs/bcrypt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@node-rs/bcrypt/-/bcrypt-1.9.0.tgz#ad1560997939f7c7c4a7500ac272709ce5bde6f6" - integrity sha512-u2OlIxW264bFUfvbFqDz9HZKFjwe8FHFtn7T/U8mYjPZ7DWYpbUB+/dkW/QgYfMSfR0ejkyuWaBBe0coW7/7ig== - optionalDependencies: - "@node-rs/bcrypt-android-arm-eabi" "1.9.0" - "@node-rs/bcrypt-android-arm64" "1.9.0" - "@node-rs/bcrypt-darwin-arm64" "1.9.0" - "@node-rs/bcrypt-darwin-x64" "1.9.0" - "@node-rs/bcrypt-freebsd-x64" "1.9.0" - "@node-rs/bcrypt-linux-arm-gnueabihf" "1.9.0" - "@node-rs/bcrypt-linux-arm64-gnu" "1.9.0" - "@node-rs/bcrypt-linux-arm64-musl" "1.9.0" - "@node-rs/bcrypt-linux-x64-gnu" "1.9.0" - "@node-rs/bcrypt-linux-x64-musl" "1.9.0" - "@node-rs/bcrypt-wasm32-wasi" "1.9.0" - "@node-rs/bcrypt-win32-arm64-msvc" "1.9.0" - "@node-rs/bcrypt-win32-ia32-msvc" "1.9.0" - "@node-rs/bcrypt-win32-x64-msvc" "1.9.0" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1536,20 +1321,20 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@reduxjs/toolkit@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.3.tgz#5ce71cbf162f98c5dafb49bd3f1e11c5486ab9c4" - integrity sha512-76dll9EnJXg4EVcI5YNxZA/9hSAmZsFqzMmNRHvIlzw2WS/twfcVX3ysYrWGJMClwEmChQFC4yRq74tn6fdzRA== +"@reduxjs/toolkit@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.5.tgz#c0d2d8482ef80722bebe015ff05b06c34bfb6e0d" + integrity sha512-aeFA/s5NCG7NoJe/MhmwREJxRkDs0ZaSqt0MxhWUrwCf1UQXpwR87RROJEql0uAkLI6U7snBOYOcKw83ew3FPg== dependencies: immer "^10.0.3" redux "^5.0.1" redux-thunk "^3.1.0" - reselect "^5.0.1" + reselect "^5.1.0" -"@remix-run/router@1.15.3": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.15.3.tgz#d2509048d69dbb72d5389a14945339f1430b2d3c" - integrity sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w== +"@remix-run/router@1.16.1": + version "1.16.1" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd" + integrity sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig== "@rollup/pluginutils@^5.0.2": version "5.1.0" @@ -1560,90 +1345,90 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.16.1.tgz#ad76cc870b1e2bc4476dfc02b82e20cea272a09d" - integrity sha512-92/y0TqNLRYOTXpm6Z7mnpvKAG9P7qmK7yJeRJSdzElNCUnsgbpAsGqerUboYRIQKzgfq4pWu9xVkgpWLfmNsw== - -"@rollup/rollup-android-arm64@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.16.1.tgz#e7bd4f2b8ec5e049f98edbc68d72cb05356f81d8" - integrity sha512-ttWB6ZCfRLuDIUiE0yiu5gcqOsYjA5F7kEV1ggHMj20FwLZ8A1FMeahZJFl/pnOmcnD2QL0z4AcDuo27utGU8A== - -"@rollup/rollup-darwin-arm64@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.16.1.tgz#8fd277b4be6cc956167710e36b4ee365f8a44050" - integrity sha512-QLDvPLetbqjHojTGFw9+nuSP3YY/iz2k1cep6crYlr97sS+ZJ0W43b8Z0zC00+lnFZj6JSNxiA4DjboNQMuh1A== - -"@rollup/rollup-darwin-x64@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.16.1.tgz#5ab829322926fefce42db3529649a1098b420fe3" - integrity sha512-TAUK/D8khRrRIa1KwRzo8JNKk3tcqaeXWdtsiLgA8zmACWwlWLjPCJ4DULGHQrMkeBjp1Cd3Yuwx04lZgFx5Vg== - -"@rollup/rollup-linux-arm-gnueabihf@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.16.1.tgz#0154bc34e6a88fb0147adc827512add8d3a2338c" - integrity sha512-KO+WGZjrh6zyFTD1alIFkfdtxf8B4BC+hqd3kBZHscPLvE5FR/6QKsyuCT0JlERxxYBSUKNUQ/UHyX5uwO1x2A== - -"@rollup/rollup-linux-arm-musleabihf@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.16.1.tgz#0f3fa433a81b389042555133d38b4b886b369e58" - integrity sha512-NqxbllzIB1WoAo4ThUXVtd21iiM5IHMTTXmXySKBLVcZvkU0HIZmatlP7hLzb5yQubcmdIeWmncd2NdsjocEiw== - -"@rollup/rollup-linux-arm64-gnu@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.16.1.tgz#c8f2d523ac4bcff382601306989b27137d536dd6" - integrity sha512-snma5NvV8y7IECQ5rq0sr0f3UUu+92NVmG/913JXJMcXo84h9ak9TA5UI9Cl2XRM9j3m37QwDBtEYnJzRkSmxA== - -"@rollup/rollup-linux-arm64-musl@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.16.1.tgz#86b5104635131182b6b2b6997c4aa5594ce557b7" - integrity sha512-KOvqGprlD84ueivhCi2flvcUwDRD20mAsE3vxQNVEI2Di9tnPGAfEu6UcrSPZbM+jG2w1oSr43hrPo0RNg6GGg== - -"@rollup/rollup-linux-powerpc64le-gnu@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.16.1.tgz#5de8b20105aaaeb36eb86fab0a1020d81c7bd4d5" - integrity sha512-/gsNwtiGLqYwN4vP+EIdUC6Q6LTlpupWqokqIndvZcjn9ig/5P01WyaYCU2wvfL/2Z82jp5kX8c1mDBOvCP3zg== - -"@rollup/rollup-linux-riscv64-gnu@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.16.1.tgz#5319629dcdcb85ba201c6f0f894c9472e7d1013d" - integrity sha512-uU8zuGkQfGqfD9w6VRJZI4IuG4JIfNxxJgEmLMAmPVHREKGsxFVfgHy5c6CexQF2vOfgjB33OsET3Vdn2lln9A== - -"@rollup/rollup-linux-s390x-gnu@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.16.1.tgz#246ac211ed0d78f7a9bc5c1d0653bde4c6cd9f63" - integrity sha512-lsjLtDgtcGFEuBP6yrXwkRN5/wKlvUZtfbKZZu0yaoNpiBL4epgnO21osAALIspVRnl4qZgyLFd8xjCYYWgwfw== - -"@rollup/rollup-linux-x64-gnu@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.16.1.tgz#d0c03203ddeb9454fc6fdde93a39b01c176ac6d9" - integrity sha512-N2ZizKhUryqqrMfdCnjhJhZRgv61C6gK+hwVtCIKC8ts8J+go+vqENnGexwg21nHIOvLN5mBM8a7DI2vlyIOPg== - -"@rollup/rollup-linux-x64-musl@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.16.1.tgz#20235632e2be4689d663aadaceaaf90df03b1a33" - integrity sha512-5ICeMxqg66FrOA2AbnBQ2TJVxfvZsKLxmof0ibvPLaYtbsJqnTUtJOofgWb46Gjd4uZcA4rdsp4JCxegzQPqCg== - -"@rollup/rollup-win32-arm64-msvc@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.16.1.tgz#af113ad682fc13d1f870242c5539031f8cc27cf1" - integrity sha512-1vIP6Ce02L+qWD7uZYRiFiuAJo3m9kARatWmFSnss0gZnVj2Id7OPUU9gm49JPGasgcR3xMqiH3fqBJ8t00yVg== - -"@rollup/rollup-win32-ia32-msvc@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.16.1.tgz#4e7b57e757c95da8e79092056d1b428617515668" - integrity sha512-Y3M92DcVsT6LoP+wrKpoUWPaazaP1fzbNkp0a0ZSj5Y//+pQVfVe/tQdsYQQy7dwXR30ZfALUIc9PCh9Izir6w== - -"@rollup/rollup-win32-x64-msvc@4.16.1": - version "4.16.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.16.1.tgz#5068a893ba292279adbe76fc487316724b15d811" - integrity sha512-x0fvpHMuF7fK5r8oZxSi8VYXkrVmRgubXpO/wcf15Lk3xZ4Jvvh5oG+u7Su1776A7XzVKZhD2eRc4t7H50gL3w== - -"@studio-freight/lenis@^1.0.42": - version "1.0.42" - resolved "https://registry.yarnpkg.com/@studio-freight/lenis/-/lenis-1.0.42.tgz#031402beee5eede12649beb9a912abd1aa98f96a" - integrity sha512-HJAGf2DeM+BTvKzHv752z6Z7zy6bA643nZM7W88Ft9tnw2GsJSp6iJ+3cekjyMIWH+cloL2U9X82dKXgdU8kPg== +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== + +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== + +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== + +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== + +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== + +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== + +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== + +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== + +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== + +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== + +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== + +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== + +"@stripe/stripe-js@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-4.0.0.tgz#57f258cdd595bba0b8a4f5dc94fc58bfa0a324a6" + integrity sha512-R5zewuzTVPGn4dXkavbgDk8vSILkT5hRlzga10p6JzngR17qKi1fgc27kl58TmaVvgBZGngTRNH2j9kYdvfPGA== "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" @@ -1752,6 +1537,87 @@ "@svgr/plugin-jsx" "8.1.0" "@svgr/plugin-svgo" "8.1.0" +"@swc/core-darwin-arm64@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.7.tgz#2b5cdbd34e4162e50de6147dd1a5cb12d23b08e8" + integrity sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ== + +"@swc/core-darwin-x64@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.5.7.tgz#6aa7e3c01ab8e5e41597f8a24ff24c4e50936a46" + integrity sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw== + +"@swc/core-linux-arm-gnueabihf@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.7.tgz#160108633b9e1d1ad05f815bedc7e9eb5d59fc2a" + integrity sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ== + +"@swc/core-linux-arm64-gnu@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.7.tgz#cbfa512683c73227ad25552f3b3e722b0e7fbd1d" + integrity sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g== + +"@swc/core-linux-arm64-musl@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.7.tgz#80239cb58fe57f3c86b44617fe784530ec55ee2b" + integrity sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ== + +"@swc/core-linux-x64-gnu@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.7.tgz#a699c1632de60b6a63b7fdb7abcb4fef317e57ca" + integrity sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg== + +"@swc/core-linux-x64-musl@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.7.tgz#8e4c203d6bc41e7f85d7d34d0fdf4ef751fa626c" + integrity sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg== + +"@swc/core-win32-arm64-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.7.tgz#31e3d42b8c0aa79f0ea1a980c0dd1a999d378ed7" + integrity sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA== + +"@swc/core-win32-ia32-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.7.tgz#a235285f9f62850aefcf9abb03420f2c54f63638" + integrity sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ== + +"@swc/core-win32-x64-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.7.tgz#f84641393b5223450d00d97bfff877b8b69d7c9b" + integrity sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg== + +"@swc/core@^1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.5.7.tgz#e1db7b9887d5f34eb4a3256a738d0c5f1b018c33" + integrity sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ== + dependencies: + "@swc/counter" "^0.1.2" + "@swc/types" "0.1.7" + optionalDependencies: + "@swc/core-darwin-arm64" "1.5.7" + "@swc/core-darwin-x64" "1.5.7" + "@swc/core-linux-arm-gnueabihf" "1.5.7" + "@swc/core-linux-arm64-gnu" "1.5.7" + "@swc/core-linux-arm64-musl" "1.5.7" + "@swc/core-linux-x64-gnu" "1.5.7" + "@swc/core-linux-x64-musl" "1.5.7" + "@swc/core-win32-arm64-msvc" "1.5.7" + "@swc/core-win32-ia32-msvc" "1.5.7" + "@swc/core-win32-x64-msvc" "1.5.7" + +"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/types@0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.7.tgz#ea5d658cf460abff51507ca8d26e2d391bafb15e" + integrity sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ== + dependencies: + "@swc/counter" "^0.1.3" + "@trivago/prettier-plugin-sort-imports@^4.3.0": version "4.3.0" resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" @@ -1769,13 +1635,6 @@ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== -"@tybys/wasm-util@^0.8.1": - version "0.8.3" - resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.8.3.tgz#34dc6fd51bdc03524a27359137594bb15c59bba1" - integrity sha512-Z96T/L6dUFFxgFJ+pQtkPpne9q7i6kIPYCFnQBHSgSPV9idTsKfIhCss0h5iM9irweZCatkrdeP8yi5uM1eX6Q== - dependencies: - tslib "^2.4.0" - "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" @@ -1803,9 +1662,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -1819,15 +1678,29 @@ resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-3.0.6.tgz#a04ca19e877687bd449f5ad37d33b104b71fdf95" integrity sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ== -"@types/json-schema@^7.0.15": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/lodash-es@^4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.4" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.4.tgz#0303b64958ee070059e3a7184048a55159fe20b7" + integrity sha512-wYCP26ZLxaT3R39kiN2+HcJ4kTd3U1waI/cY7ivWYqFP6pW3ZNpvi6Wd6PHZx7T/t8z0vlkXMg3QYLa7DZ/IJQ== -"@types/node@^20.12.7": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== +"@types/moment@^2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@types/moment/-/moment-2.13.0.tgz#604ebd189bc3bc34a1548689404e61a2a4aac896" + integrity sha512-DyuyYGpV6r+4Z1bUznLi/Y7HpGn4iQ4IVcGn8zrr1P4KotKLdH0sbK1TFR6RGyX6B+G8u83wCzL+bpawKU/hdQ== + dependencies: + moment "*" + +"@types/node@^20.12.12": + version "20.12.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.12.tgz#7cbecdf902085cec634fdb362172dfe12b8f2050" + integrity sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw== dependencies: undici-types "~5.26.4" @@ -1850,89 +1723,82 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react-dom@^18.2.25": - version "18.2.25" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.25.tgz#2946a30081f53e7c8d585eb138277245caedc521" - integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== +"@types/react-dom@^18.3.0": + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" + integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^18.2.79": - version "18.2.79" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" - integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== +"@types/react@*", "@types/react@^18.3.3": + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== -"@typescript-eslint/eslint-plugin@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.0.tgz#bf34a02f221811505b8bf2f31060c8560c1bb0a3" - integrity sha512-GJWR0YnfrKnsRoluVO3PRb9r5aMZriiMMM/RHj5nnTrBy1/wIgk76XCtCKcnXGjpZQJQRFtGV9/0JJ6n30uwpQ== +"@typescript-eslint/eslint-plugin@7.10.0", "@typescript-eslint/eslint-plugin@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz#07854a236f107bb45cbf4f62b89474cbea617f50" + integrity sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/type-utils" "7.7.0" - "@typescript-eslint/utils" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "7.10.0" + "@typescript-eslint/type-utils" "7.10.0" + "@typescript-eslint/utils" "7.10.0" + "@typescript-eslint/visitor-keys" "7.10.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.7.0.tgz#6b1b3ce76c5de002c43af8ae933613b0f2b4bcc6" - integrity sha512-fNcDm3wSwVM8QYL4HKVBggdIPAy9Q41vcvC/GtDobw3c4ndVT3K6cqudUmjHPw8EAp4ufax0o58/xvWaP2FmTg== +"@typescript-eslint/parser@7.10.0", "@typescript-eslint/parser@^7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.10.0.tgz#e6ac1cba7bc0400a4459e7eb5b23115bd71accfb" + integrity sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w== dependencies: - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/scope-manager" "7.10.0" + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/typescript-estree" "7.10.0" + "@typescript-eslint/visitor-keys" "7.10.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.7.0.tgz#3f0db079b275bb8b0cb5be7613fb3130cfb5de77" - integrity sha512-/8INDn0YLInbe9Wt7dK4cXLDYp0fNHP5xKLHvZl3mOT5X17rK/YShXaiNmorl+/U4VKCVIjJnx4Ri5b0y+HClw== +"@typescript-eslint/scope-manager@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.10.0.tgz#054a27b1090199337a39cf755f83d9f2ce26546b" + integrity sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg== dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/visitor-keys" "7.10.0" -"@typescript-eslint/type-utils@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.7.0.tgz#36792ff4209a781b058de61631a48df17bdefbc5" - integrity sha512-bOp3ejoRYrhAlnT/bozNQi3nio9tIgv3U5C0mVDdZC7cpcQEDZXvq8inrHYghLVwuNABRqrMW5tzAv88Vy77Sg== +"@typescript-eslint/type-utils@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.10.0.tgz#8a75accce851d0a331aa9331268ef64e9b300270" + integrity sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g== dependencies: - "@typescript-eslint/typescript-estree" "7.7.0" - "@typescript-eslint/utils" "7.7.0" + "@typescript-eslint/typescript-estree" "7.10.0" + "@typescript-eslint/utils" "7.10.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.7.0.tgz#23af4d24bf9ce15d8d301236e3e3014143604f27" - integrity sha512-G01YPZ1Bd2hn+KPpIbrAhEWOn5lQBrjxkzHkWvP6NucMXFtfXoevK82hzQdpfuQYuhkvFDeQYbzXCjR1z9Z03w== +"@typescript-eslint/types@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.10.0.tgz#da92309c97932a3a033762fd5faa8b067de84e3b" + integrity sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg== -"@typescript-eslint/typescript-estree@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.0.tgz#b5dd6383b4c6a852d7b256a37af971e8982be97f" - integrity sha512-8p71HQPE6CbxIBy2kWHqM1KGrC07pk6RJn40n0DSc6bMOBBREZxSDJ+BmRzc8B5OdaMh1ty3mkuWRg4sCFiDQQ== +"@typescript-eslint/typescript-estree@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.10.0.tgz#6dcdc5de3149916a6a599fa89dde5c471b88b8bb" + integrity sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g== dependencies: - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/visitor-keys" "7.7.0" + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/visitor-keys" "7.10.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1940,37 +1806,46 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.7.0.tgz#3d2b6606a60ac34f3c625facfb3b3ab7e126f58d" - integrity sha512-LKGAXMPQs8U/zMRFXDZOzmMKgFv3COlxUQ+2NMPhbqgVm6R1w+nU1i4836Pmxu9jZAuIeyySNrN/6Rc657ggig== +"@typescript-eslint/utils@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.10.0.tgz#8ee43e5608c9f439524eaaea8de5b358b15c51b3" + integrity sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.7.0" - "@typescript-eslint/types" "7.7.0" - "@typescript-eslint/typescript-estree" "7.7.0" - semver "^7.6.0" + "@typescript-eslint/scope-manager" "7.10.0" + "@typescript-eslint/types" "7.10.0" + "@typescript-eslint/typescript-estree" "7.10.0" -"@typescript-eslint/visitor-keys@7.7.0": - version "7.7.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.0.tgz#950148cf1ac11562a2d903fdf7acf76714a2dc9e" - integrity sha512-h0WHOj8MhdhY8YWkzIF30R379y0NqyOHExI9N9KCzvmu05EgG4FumeYa3ccfKUSphyWkWQE1ybVrgz/Pbam6YA== +"@typescript-eslint/visitor-keys@7.10.0": + version "7.10.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.10.0.tgz#2af2e91e73a75dd6b70b4486c48ae9d38a485a78" + integrity sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg== dependencies: - "@typescript-eslint/types" "7.7.0" + "@typescript-eslint/types" "7.10.0" eslint-visitor-keys "^3.4.3" -"@vitejs/plugin-react@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" - integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== +"@vitejs/plugin-react-swc@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz#e456c0a6d7f562268e1d231af9ac46b86ef47d88" + integrity sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA== dependencies: - "@babel/core" "^7.23.5" - "@babel/plugin-transform-react-jsx-self" "^7.23.3" - "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@swc/core" "^1.5.7" + +"@vitejs/plugin-react@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.3.0.tgz#f20ec2369a92d8abaaefa60da8b7157819d20481" + integrity sha512-KcEbMsn4Dpk+LIbHMj7gDPRKaTMStxxWRkRmxsg/jVdFdJCZWt1SchZcf0M4t8lIKdwwMsEyzhrcOXRrDPtOBw== + dependencies: + "@babel/core" "^7.24.5" + "@babel/plugin-transform-react-jsx-self" "^7.24.5" + "@babel/plugin-transform-react-jsx-source" "^7.24.1" "@types/babel__core" "^7.20.5" - react-refresh "^0.14.0" + react-refresh "^0.14.2" + +"@wojtekmaj/date-utils@^1.0.2": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@wojtekmaj/date-utils/-/date-utils-1.5.1.tgz#c3cd67177ac781cfa5736219d702a55a2aea5f2b" + integrity sha512-+i7+JmNiE/3c9FKxzWFi2IjRJ+KzZl1QPu6QNrsgaa2MuBgXvUy4gA1TVzf/JMdIIloB76xSKikTWuyYAIVLww== acorn-jsx@^5.3.2: version "5.3.2" @@ -2004,7 +1879,7 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -2019,13 +1894,6 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -arctic@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/arctic/-/arctic-1.8.0.tgz#cf6bcf771ed15c393aaa607a7683c89b7b476ca1" - integrity sha512-gFzu67CMG7PvBrxv5E1FetiG+OeDAgc3dRDY+xTus+qnH+ip1qJVMRaJ4OSiYRx54/LWVR/B7Bdym0uPhrmIzg== - dependencies: - oslo "1.2.0" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -2037,12 +1905,12 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.4: @@ -2054,11 +1922,11 @@ babel-plugin-polyfill-corejs3@^0.10.4: core-js-compat "^3.36.1" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" balanced-match@^1.0.0: version "1.0.2" @@ -2090,12 +1958,12 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" browserslist@^4.22.2, browserslist@^4.23.0: version "4.23.0" @@ -2118,9 +1986,9 @@ camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001587: - version "1.0.30001612" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" - integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== + version "1.0.30001621" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz#4adcb443c8b9c8303e04498318f987616b8fea2e" + integrity sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA== chalk@^2.4.2: version "2.4.2" @@ -2154,20 +2022,6 @@ chalk@^4.0.0: optionalDependencies: fsevents "~2.3.2" -client-only@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" - integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2187,11 +2041,27 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -2215,9 +2085,9 @@ copy-anything@^2.0.1: is-what "^3.14.1" core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.37.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.0.tgz#d9570e544163779bb4dff1031c7972f44918dc73" - integrity sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA== + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== dependencies: browserslist "^4.23.0" @@ -2231,13 +2101,6 @@ cosmiconfig@^8.1.3: parse-json "^5.2.0" path-type "^4.0.0" -cross-fetch@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" - integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== - dependencies: - node-fetch "^2.6.12" - cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -2291,11 +2154,18 @@ csso@^5.0.5: dependencies: css-tree "~2.2.0" -csstype@^3.0.2: +csstype@^3.0.2, csstype@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +date-fns@^2.14.0: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -2313,11 +2183,6 @@ deepmerge@^4.3.1: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2369,14 +2234,9 @@ dotenv@^16.4.2: integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== electron-to-chromium@^1.4.668: - version "1.4.745" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.745.tgz#9c202ce9cbf18a5b5e0ca47145fd127cc4dd2290" - integrity sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + version "1.4.783" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz#933887165b8b6025a81663d2d97cf4b85cde27b2" + integrity sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ== entities@^4.2.0, entities@^4.4.0: version "4.5.0" @@ -2426,7 +2286,7 @@ esbuild@^0.20.1: "@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-x64" "0.20.2" -escalade@^3.1.1: +escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -2441,15 +2301,15 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-plugin-react-hooks@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" - integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== +eslint-plugin-react-hooks@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== -eslint-plugin-react-refresh@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz#e8e8accab681861baed00c5c12da70267db0936f" - integrity sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA== +eslint-plugin-react-refresh@^0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz#1f597f9093b254f10ee0961c139a749acb19af7d" + integrity sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw== eslint-scope@^8.0.1: version "8.0.1" @@ -2469,18 +2329,18 @@ eslint-visitor-keys@^4.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== -eslint@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.1.0.tgz#262625f6b0921f7550f128a0098d05ecaad989c6" - integrity sha512-1TCBecGFQtItia2o39P7Z4BK1X7ByNPxAiWJvwiyTGcOwYnTiiASgMpNA6a+beu8cFPhEDWvPf6mIlYUJv6sgA== +eslint@^9.3.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.3.0.tgz#36a96db84592618d6ed9074d677e92f4e58c08b9" + integrity sha512-5Iv4CsZW030lpUqHBapdPo3MJetAPtejVW8B84GIcIIv8+ohFaddXsrn1Gn8uD9ijDb+kcYKFUVmC8qG8B2ORQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^3.0.2" - "@eslint/js" "9.1.1" + "@eslint/eslintrc" "^3.1.0" + "@eslint/js" "9.3.0" "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.2.3" + "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" ajv "^6.12.4" chalk "^4.0.0" @@ -2587,10 +2447,10 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -2615,18 +2475,6 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== -framer-motion@^11.1.7: - version "11.1.7" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-11.1.7.tgz#ad970c1296e7b5fb26db222fd65d1329aef115a6" - integrity sha512-cW11Pu53eDAXUEhv5hEiWuIXWhfkbV32PlgVISn7jRdcAiVrJ1S03YQQ0/DzoswGYYwKi4qYmHHjCzAH52eSdQ== - dependencies: - tslib "^2.4.0" - -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2647,10 +2495,12 @@ gensync@^1.0.0-beta.2: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-user-locale@^1.2.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/get-user-locale/-/get-user-locale-1.5.1.tgz#18a9ba2cfeed0e713ea00968efa75d620523a5ea" + integrity sha512-WiNpoFRcHn1qxP9VabQljzGwkAQDrcpqUtaP0rNBEkFxJdh4f3tik6MfZsMYZc+UgQJdGCxWEjL9wnCUlRQXag== + dependencies: + lodash.memoize "^4.1.1" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" @@ -2700,6 +2550,11 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +goober@^2.1.11: + version "2.1.14" + resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.14.tgz#4a5c94fc34dc086a8e6035360ae1800005135acd" + integrity sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg== + graceful-fs@^4.1.2: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -2710,7 +2565,7 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -gsap@^3.12.4, gsap@^3.12.5: +gsap@^3.12.5: version "3.12.5" resolved "https://registry.yarnpkg.com/gsap/-/gsap-3.12.5.tgz#136c02dad4c673b441bdb1ca00104bfcb4eae7f4" integrity sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ== @@ -2732,34 +2587,6 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -i18next-browser-languagedetector@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz#1968196d437b4c8db847410c7c33554f6c448f6f" - integrity sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw== - dependencies: - "@babel/runtime" "^7.23.2" - -i18next-http-backend@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/i18next-http-backend/-/i18next-http-backend-2.5.1.tgz#97141b65d860a124b6c9feee181e565c753b0629" - integrity sha512-+rNX1tghdVxdfjfPt0bI1sNg5ahGW9kA7OboG7b4t03Fp69NdDlRIze6yXhIbN8rbHxJ8IP4dzRm/okZ15lkQg== - dependencies: - cross-fetch "4.0.0" - -i18next@^23.11.2: - version "23.11.2" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.2.tgz#4c0e8192a9ba230fe7dc68b76459816ab601826e" - integrity sha512-qMBm7+qT8jdpmmDw/kQD16VpmkL9BdL+XNAK5MNbNFaf1iQQq35ZbPrSlqmnNPOSUY4m342+c0t0evinF5l7sA== - dependencies: - "@babel/runtime" "^7.23.2" - iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -2788,9 +2615,9 @@ immer@^10.0.3: integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -2830,6 +2657,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -2844,21 +2676,11 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -2881,13 +2703,6 @@ is-what@^3.14.1: resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2898,11 +2713,6 @@ javascript-natural-sort@0.7.1: resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== -js-cookie@^3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" - integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -2999,6 +2809,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -3009,6 +2824,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.memoize@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -3019,7 +2839,7 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.0.0, loose-envify@^1.1.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -3040,20 +2860,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lucia@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lucia/-/lucia-3.2.0.tgz#de041c49fdcda8d370c5c894086b3d9e907e8c9e" - integrity sha512-eXMxXwk6hqtjRTj4W/x3EnTUtAztLPm0p2N2TEBMDEbakDLXiYnDQ9z/qahjPdPdhPguQc+vwO0/88zIWxlpuw== - dependencies: - oslo "1.2.0" - make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -3072,19 +2878,10 @@ mdn-data@2.0.30: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== -memfs-browser@^3.4.13000: - version "3.5.10302" - resolved "https://registry.yarnpkg.com/memfs-browser/-/memfs-browser-3.5.10302.tgz#2067baf616a1b3a8e8023a033e5ead434a7ea0c0" - integrity sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw== - dependencies: - memfs "3.5.3" - -memfs@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.5.3.tgz#d9b40fe4f8d5788c5f895bda804cd0d9eeee9f3b" - integrity sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw== - dependencies: - fs-monkey "^1.0.4" +merge-class-names@^1.1.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/merge-class-names/-/merge-class-names-1.4.2.tgz#78d6d95ab259e7e647252a7988fd25a27d5a8835" + integrity sha512-bOl98VzwCGi25Gcn3xKxnR5p/WrhWFQB59MS/aGENcmUc6iSm96yrFDF0XSNurX9qN4LbJm0R9kfvsQ17i8zCw== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" @@ -3092,11 +2889,11 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime@^1.4.1: @@ -3123,6 +2920,11 @@ minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +moment@*, moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -3154,13 +2956,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@^2.6.12: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-releases@^2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" @@ -3178,6 +2973,11 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -3185,34 +2985,17 @@ once@^1.3.0: dependencies: wrappy "1" -open@^8.4.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - -oslo@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/oslo/-/oslo-1.2.0.tgz#3d7e3132de725c4ec9ab738445e959bae99e5b2f" - integrity sha512-OoFX6rDsNcOQVAD2gQD/z03u4vEjWZLzJtwkmgfRF+KpQUXwdgEXErD7zNhyowmHwHefP+PM9Pw13pgpHMRlzw== - dependencies: - "@node-rs/argon2" "1.7.0" - "@node-rs/bcrypt" "1.9.0" + word-wrap "^1.2.5" p-limit@^3.0.2: version "3.1.0" @@ -3275,10 +3058,10 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" @@ -3320,9 +3103,9 @@ postcss-modules-scope@^3.1.1: postcss-selector-parser "^6.0.4" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.16" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz#3b88b9f5c5abd989ef4e2fc9ec8eedd34b20fb04" - integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -3351,6 +3134,15 @@ prettier@^3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== +prop-types@^15.6.0: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" @@ -3366,73 +3158,90 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-calendar@^3.1.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/react-calendar/-/react-calendar-3.9.0.tgz#4dfe342ef61574c0e819e49847981076c7af58ea" + integrity sha512-g6RJCEaPovHTiV2bMhBUfm0a1YoMj4bOUpL8hQSLmR1Glhc7lgRLtZBd4mcC4jkoGsb+hv9uA/QH4pZcm5l9lQ== + dependencies: + "@wojtekmaj/date-utils" "^1.0.2" + get-user-locale "^1.2.0" + merge-class-names "^1.1.1" + prop-types "^15.6.0" + +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-fast-compare@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== -react-helmet-async@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.4.tgz#50a4377778f380ed1d0136303916b38eff1bf153" - integrity sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ== +react-helmet-async@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.5.tgz#cfc70cd7bb32df7883a8ed55502a1513747223ec" + integrity sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg== dependencies: invariant "^2.2.4" react-fast-compare "^3.2.2" shallowequal "^1.1.0" -react-hook-form@^7.51.3: - version "7.51.3" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.51.3.tgz#7486dd2d52280b6b28048c099a98d2545931cab3" - integrity sha512-cvJ/wbHdhYx8aviSWh28w9ImjmVsb5Y05n1+FW786vEZQJV5STNM0pW6ujS+oiBecb0ARBxJFyAnXj9+GHXACQ== +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-i18next@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.0.tgz#44da74fbffd416f5d0c5307ef31735cf10cc91d9" - integrity sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ== - dependencies: - "@babel/runtime" "^7.23.9" - html-parse-stringify "^3.0.1" - -react-redux@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.1.tgz#852ec13084bd7375e26db697d2fc9027ffada204" - integrity sha512-5ynfGDzxxsoV73+4czQM56qF43vsmgJsO22rmAvU5tZT2z5Xow/A2uhhxwXuGTxgdReF3zcp7A80gma2onRs1A== +react-redux@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b" + integrity sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w== dependencies: "@types/use-sync-external-store" "^0.0.3" use-sync-external-store "^1.0.0" -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== +react-refresh@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== -react-router-dom@^6.22.3: - version "6.22.3" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.22.3.tgz#9781415667fd1361a475146c5826d9f16752a691" - integrity sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw== +react-router-dom@^6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.23.1.tgz#30cbf266669693e9492aa4fc0dde2541ab02322f" + integrity sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ== dependencies: - "@remix-run/router" "1.15.3" - react-router "6.22.3" + "@remix-run/router" "1.16.1" + react-router "6.23.1" -react-router@6.22.3: - version "6.22.3" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.22.3.tgz#9d9142f35e08be08c736a2082db5f0c9540a885e" - integrity sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ== +react-router@6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.23.1.tgz#d08cbdbd9d6aedc13eea6e94bc6d9b29cb1c4be9" + integrity sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ== dependencies: - "@remix-run/router" "1.15.3" + "@remix-run/router" "1.16.1" -react@>=16, react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react-schedule-meeting@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/react-schedule-meeting/-/react-schedule-meeting-4.2.3.tgz#21ffe27f0bca6158cc3182149abf4b859f54b6fb" + integrity sha512-GnuhecQUNzFsXIGp8JYtSI/rgfe+2CvXDkTclGpPGCKnya/DtG19QC04YA49h8+danTwX0aLyqThKZOXI4n9AQ== + dependencies: + color "^4.2.3" + date-fns "^2.14.0" + goober "^2.1.11" + react-calendar "^3.1.0" + +react-virtuoso@^4.7.11: + version "4.7.11" + resolved "https://registry.yarnpkg.com/react-virtuoso/-/react-virtuoso-4.7.11.tgz#1bf97885aae6f140f53487b48ebe87c37c57def3" + integrity sha512-Kdn9qEtQI2ulEuBMzW2BTkDsfijB05QUd6lpZ1K36oyA3k65Cz4lG4EKrh2pCfUafX4C2uMSZOwzMOhbrMOTFA== + +react@>=16, react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -3496,12 +3305,7 @@ regjsparser@^0.9.1: dependencies: jsesc "~0.5.0" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -reselect@^5.0.1: +reselect@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.0.tgz#c479139ab9dd91be4d9c764a7f3868210ef8cd21" integrity sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg== @@ -3530,39 +3334,29 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rollup-plugin-visualizer@^5.12.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz#661542191ce78ee4f378995297260d0c1efb1302" - integrity sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ== - dependencies: - open "^8.4.0" - picomatch "^2.3.1" - source-map "^0.7.4" - yargs "^17.5.1" - rollup@^4.13.0: - version "4.16.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.16.1.tgz#5a60230987fe95ebe68bab517297c116dbb1a88d" - integrity sha512-5CaD3MPDlPKfhqzRvWXK96G6ELJfPZNb3LHiZxTHgDdC6jvwfGz2E8nY+9g1ONk4ttHsK1WaFP19Js4PSr1E3g== + version "4.18.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.16.1" - "@rollup/rollup-android-arm64" "4.16.1" - "@rollup/rollup-darwin-arm64" "4.16.1" - "@rollup/rollup-darwin-x64" "4.16.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.16.1" - "@rollup/rollup-linux-arm-musleabihf" "4.16.1" - "@rollup/rollup-linux-arm64-gnu" "4.16.1" - "@rollup/rollup-linux-arm64-musl" "4.16.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.16.1" - "@rollup/rollup-linux-riscv64-gnu" "4.16.1" - "@rollup/rollup-linux-s390x-gnu" "4.16.1" - "@rollup/rollup-linux-x64-gnu" "4.16.1" - "@rollup/rollup-linux-x64-musl" "4.16.1" - "@rollup/rollup-win32-arm64-msvc" "4.16.1" - "@rollup/rollup-win32-ia32-msvc" "4.16.1" - "@rollup/rollup-win32-x64-msvc" "4.16.1" + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -3577,10 +3371,10 @@ run-parallel@^1.1.9: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass@^1.70.0, sass@^1.75.0: - version "1.75.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c" - integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw== +sass@^1.70.0, sass@^1.77.2: + version "1.77.2" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.2.tgz#18d4ed2eefc260cdc8099c5439ec1303fd5863aa" + integrity sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -3591,10 +3385,10 @@ sax@^1.2.4, sax@~1.3.0: resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -3609,11 +3403,9 @@ semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== shallowequal@^1.1.0: version "1.1.0" @@ -3632,6 +3424,13 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3655,7 +3454,7 @@ source-map@^0.5.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.7.3, source-map@^0.7.4: +source-map@^0.7.3: version "0.7.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== @@ -3665,16 +3464,7 @@ source-map@~0.6.0: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -3727,9 +3517,9 @@ svg-parser@^2.0.4: integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^3.0.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.2.0.tgz#7a5dff2938d8c6096e00295c2390e8e652fa805d" - integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== + version "3.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8" + integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" @@ -3739,13 +3529,10 @@ svgo@^3.0.2: csso "^5.0.5" picocolors "^1.0.0" -swr@^2.2.5: - version "2.2.5" - resolved "https://registry.yarnpkg.com/swr/-/swr-2.2.5.tgz#063eea0e9939f947227d5ca760cc53696f46446b" - integrity sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg== - dependencies: - client-only "^0.0.1" - use-sync-external-store "^1.2.0" +sweetalert2@^11.11.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.11.0.tgz#0bbae4330f5e423c942639bb0e9dc2d748eb88fd" + integrity sha512-wKCTtoE6lQVDKaJ5FFq+znk/YykJmJlD8RnLZps8C7DyivctCoRlVeeOwnKfgwKS+QJYon7s++3dmNi3/am1tw== text-table@^0.2.0: version "0.2.0" @@ -3764,11 +3551,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" @@ -3783,7 +3565,7 @@ tsconfig-paths@^4.2.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.3, tslib@^2.3.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.3.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== @@ -3795,6 +3577,15 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +typescript-eslint@^7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.10.0.tgz#18637c414fcbf6ff1defac05b5c898c303a0ffed" + integrity sha512-thO8nyqptXdfWHQrMJJiJyftpW8aLmwRNs11xA8pSrXneoclFPstQZqXvDWuH1WNL4CHffqHvYUeCHTit6yfhQ== + dependencies: + "@typescript-eslint/eslint-plugin" "7.10.0" + "@typescript-eslint/parser" "7.10.0" + "@typescript-eslint/utils" "7.10.0" + typescript-plugin-css-modules@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz#faa0ceffe8a8ffcbbc2f77ed637a64464195044a" @@ -3851,12 +3642,12 @@ unicode-property-aliases-ecmascript@^2.0.0: integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" uri-js@^4.2.2: version "4.4.1" @@ -3865,11 +3656,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -use-sync-external-store@1.2.0, use-sync-external-store@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - use-sync-external-store@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" @@ -3880,10 +3666,10 @@ util-deprecate@^1.0.2: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -vite@^5.2.10: - version "5.2.10" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" - integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== +vite@^5.2.11: + version "5.2.11" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.11.tgz#726ec05555431735853417c3c0bfb36003ca0cbd" + integrity sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ== dependencies: esbuild "^0.20.1" postcss "^8.4.38" @@ -3891,24 +3677,6 @@ vite@^5.2.10: optionalDependencies: fsevents "~2.3.3" -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -3916,14 +3684,10 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wrappy@1: version "1.0.2" @@ -3935,52 +3699,17 @@ wretch@^2.8.1: resolved "https://registry.yarnpkg.com/wretch/-/wretch-2.8.1.tgz#13a5620f78330e350c4c27fbf30ea04672c880a3" integrity sha512-as9Mta8Nrnu6mL9ApNvmKGWqZtvoQtOILEfjox1BYYBYyUSKUdATVEAlQIMGLSZyzRfNbpUvPKDcGJTGA1b5LA== -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.5.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zustand@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.2.tgz#fddbe7cac1e71d45413b3682cdb47b48034c3848" - integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g== - dependencies: - use-sync-external-store "1.2.0"