From ba7ea28a1863c1411429c72df29d5ddc5103b775 Mon Sep 17 00:00:00 2001 From: Topvennie Date: Thu, 5 Sep 2024 23:18:35 +0200 Subject: [PATCH] vinvoor: use tanquery --- vingo/database/models.go | 16 +- vingo/database/scans.go | 6 +- vinvoor/package.json | 1 + vinvoor/src/WelcomePage.tsx | 2 +- vinvoor/src/cards/Cards.tsx | 8 +- vinvoor/src/cards/CardsAdd.tsx | 17 +- vinvoor/src/cards/CardsTable.tsx | 6 +- vinvoor/src/cards/CardsTableBody.tsx | 37 +- vinvoor/src/hooks/useCard.ts | 20 + vinvoor/src/hooks/useDays.ts | 17 + vinvoor/src/hooks/useFetch.ts | 29 - vinvoor/src/hooks/useLeaderboard.ts | 19 + vinvoor/src/hooks/useScan.ts | 11 + vinvoor/src/hooks/useSettings.ts | 26 + vinvoor/src/leaderboard/Leaderboard.tsx | 8 +- .../src/leaderboard/LeaderboardTableBody.tsx | 14 +- vinvoor/src/main.tsx | 36 +- vinvoor/src/overview/Overview.tsx | 8 +- vinvoor/src/overview/checkin/CheckIn.tsx | 5 +- vinvoor/src/overview/days/Days.tsx | 5 +- vinvoor/src/overview/heatmap/Day.tsx | 5 +- vinvoor/src/overview/streak/Streak.tsx | 5 +- vinvoor/src/providers/DataProvider.tsx | 55 - .../providers/dataproviders/cardsProvider.ts | 5 - .../providers/dataproviders/daysProvider.ts | 9 - .../dataproviders/leaderboardProvider.ts | 7 - .../providers/dataproviders/scansProvider.ts | 5 - .../dataproviders/settingsProvider.ts | 16 - vinvoor/src/scans/Scans.tsx | 10 +- vinvoor/src/scans/ScansTableBody.tsx | 10 +- vinvoor/src/settings/Settings.tsx | 154 +++ vinvoor/src/settings/SettingsOverview.tsx | 150 +-- vinvoor/src/settings/admin/days/Days.tsx | 25 +- vinvoor/src/settings/admin/days/DaysAdd.tsx | 12 +- vinvoor/src/settings/admin/days/DaysTable.tsx | 61 +- .../src/settings/admin/days/DaysTableBody.tsx | 21 +- .../settings/admin/days/DaysTableToolbar.tsx | 6 +- vinvoor/src/types/cards.ts | 75 +- vinvoor/src/types/days.ts | 10 +- vinvoor/src/types/general.ts | 2 +- vinvoor/src/types/leaderboard.ts | 26 + vinvoor/src/types/scans.ts | 49 +- vinvoor/src/types/settings.ts | 24 +- vinvoor/src/types/user.ts | 2 + vinvoor/src/util/util.ts | 8 + vinvoor/yarn.lock | 1080 ++++++++--------- 46 files changed, 1052 insertions(+), 1071 deletions(-) create mode 100644 vinvoor/src/hooks/useCard.ts create mode 100644 vinvoor/src/hooks/useDays.ts delete mode 100644 vinvoor/src/hooks/useFetch.ts create mode 100644 vinvoor/src/hooks/useLeaderboard.ts create mode 100644 vinvoor/src/hooks/useScan.ts create mode 100644 vinvoor/src/hooks/useSettings.ts delete mode 100644 vinvoor/src/providers/DataProvider.tsx delete mode 100644 vinvoor/src/providers/dataproviders/cardsProvider.ts delete mode 100644 vinvoor/src/providers/dataproviders/daysProvider.ts delete mode 100644 vinvoor/src/providers/dataproviders/leaderboardProvider.ts delete mode 100644 vinvoor/src/providers/dataproviders/scansProvider.ts delete mode 100644 vinvoor/src/providers/dataproviders/settingsProvider.ts create mode 100644 vinvoor/src/settings/Settings.tsx diff --git a/vingo/database/models.go b/vingo/database/models.go index 7c49878..aa581d4 100644 --- a/vingo/database/models.go +++ b/vingo/database/models.go @@ -8,8 +8,8 @@ import ( type BaseModel struct { Id int `json:"id" gorm:"primarykey"` - CreatedAt time.Time `json:"createdAt"` - UpdatedAt time.Time `json:"updatedAt"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"-"` DeletedAt gorm.DeletedAt `json:"-" gorm:"index"` } @@ -24,7 +24,7 @@ type User struct { type Settings struct { BaseModel - ScanInOut bool `json:"scanInOut"` + ScanInOut bool `json:"scan_in_out"` Leaderboard bool `json:"leaderboard"` Public bool `json:"public"` } @@ -55,17 +55,17 @@ func Card_to_API(card Card) CardAPI { type CardAPI struct { Id int `json:"id"` - CreatedAt time.Time `json:"createdAt"` + CreatedAt time.Time `json:"created_at"` Serial string `json:"serial"` Name string `json:"name"` - LastUsed time.Time `json:"lastUsed"` - AmountUsed int `json:"amountUsed"` + LastUsed time.Time `json:"last_used"` + AmountUsed int `json:"amount_used"` } type Scan struct { BaseModel - ScanTime time.Time `json:"scanTime"` - CardSerial string `json:"cardSerial" gorm:"index"` + ScanTime time.Time `json:"scan_time"` + CardSerial string `json:"card_serial" gorm:"index"` Card Card `json:"-" gorm:"foreignKey:CardSerial;references:Serial"` } diff --git a/vingo/database/scans.go b/vingo/database/scans.go index 59ab4be..e07ca9c 100644 --- a/vingo/database/scans.go +++ b/vingo/database/scans.go @@ -12,10 +12,10 @@ type Present struct { type LeaderboardItem struct { Position int `json:"position"` - UserId int `json:"userId"` + UserId int `json:"user_id"` Username string `json:"username"` - TotalDays int `json:"totalDays"` - PositionChange int `json:"positionChange"` + TotalDays int `json:"total_days"` + PositionChange int `json:"position_change"` } type AnonymousScan struct { diff --git a/vinvoor/package.json b/vinvoor/package.json index 989c4fb..fd18273 100644 --- a/vinvoor/package.json +++ b/vinvoor/package.json @@ -18,6 +18,7 @@ "@mui/icons-material": "^5.15.19", "@mui/material": "^5.15.19", "@mui/x-date-pickers": "^7.11.0", + "@tanstack/react-query": "^5.54.1", "@types/js-cookie": "^3.0.6", "@types/react-router-dom": "^5.3.3", "@types/react-router-hash-link": "^2.4.9", diff --git a/vinvoor/src/WelcomePage.tsx b/vinvoor/src/WelcomePage.tsx index 97e98fc..d84c2ea 100644 --- a/vinvoor/src/WelcomePage.tsx +++ b/vinvoor/src/WelcomePage.tsx @@ -27,7 +27,7 @@ export const WelcomePage = () => { pt: 10, }} > - Welcome to Vinvoor! + Welcome to Zess! Log in to start scanning diff --git a/vinvoor/src/cards/Cards.tsx b/vinvoor/src/cards/Cards.tsx index e43b88c..a912ce2 100644 --- a/vinvoor/src/cards/Cards.tsx +++ b/vinvoor/src/cards/Cards.tsx @@ -1,14 +1,14 @@ import { LoadingSkeleton } from "../components/LoadingSkeleton"; -import { useCardsContext } from "../providers/dataproviders/cardsProvider"; +import { useCards } from "../hooks/useCard"; import { CardsEmpty } from "./CardsEmpty"; import { CardsTable } from "./CardsTable"; export const Cards = () => { - const { data: cards, loading } = useCardsContext(); + const { data: cards, isLoading } = useCards(); return ( - - {cards.length ? : } + + {cards?.length ? : } ); }; diff --git a/vinvoor/src/cards/CardsAdd.tsx b/vinvoor/src/cards/CardsAdd.tsx index 86ed25f..f79eb6c 100644 --- a/vinvoor/src/cards/CardsAdd.tsx +++ b/vinvoor/src/cards/CardsAdd.tsx @@ -3,14 +3,7 @@ import { Button, Typography } from "@mui/material"; import { useConfirm } from "material-ui-confirm"; import { useSnackbar } from "notistack"; import { useEffect, useState } from "react"; -import { useCardsContext } from "../providers/dataproviders/cardsProvider"; -import { - Card, - CardGetRegisterResponse, - CardJSON, - CardPostResponse, - convertCardJSON, -} from "../types/cards"; +import { CardGetRegisterResponse, CardPostResponse } from "../types/cards"; import { Optional } from "../types/general"; import { getApi, isResponseNot200Error, postApi } from "../util/fetch"; import { randomInt } from "../util/util"; @@ -18,6 +11,7 @@ import { CircularTimeProgress, CircularTimeProgressProps, } from "./CircularTimeProgress"; +import { useCards } from "../hooks/useCard"; const CHECK_INTERVAL = 1000; const REGISTER_TIME = 60000; @@ -45,7 +39,7 @@ const registerSucces = "Card registered successfully"; const registerFail = "Failed to register card"; export const CardsAdd = () => { - const { setData: setCards } = useCardsContext(); + const { refetch } = useCards(); const [registering, setRegistering] = useState(false); const [progressProps, setProgressProps] = useState(defaultProgressProps); @@ -117,10 +111,7 @@ export const CardsAdd = () => { enqueueSnackbar(registerSucces, { variant: "success", }); - void getApi( - "cards", - convertCardJSON, - ).then(cards => setCards(cards)); + void refetch(); } else enqueueSnackbar(registerFail, { variant: "error", diff --git a/vinvoor/src/cards/CardsTable.tsx b/vinvoor/src/cards/CardsTable.tsx index 3188faa..8f6c158 100644 --- a/vinvoor/src/cards/CardsTable.tsx +++ b/vinvoor/src/cards/CardsTable.tsx @@ -1,11 +1,11 @@ import { Paper, Table, TableContainer, TablePagination } from "@mui/material"; import { ChangeEvent, MouseEvent, useMemo, useState } from "react"; -import { useCardsContext } from "../providers/dataproviders/cardsProvider"; import { Card } from "../types/cards"; import { TableOrder } from "../types/general"; import { CardsTableBody } from "./CardsTableBody"; import { CardsTableHead } from "./CardsTableHead"; import { CardsTableToolbar } from "./CardsTableToolbar"; +import { useCards } from "../hooks/useCard"; const rowsPerPageOptions = [10, 25, 50]; @@ -44,7 +44,9 @@ const stableSort = ( }; export const CardsTable = () => { - const { data: cards } = useCardsContext(); + const { data: cards } = useCards(); + if (!cards) return null; // Can never happen + const [order, setOrder] = useState("asc"); const [orderBy, setOrderBy] = useState("serial"); const [selected, setSelected] = useState([]); diff --git a/vinvoor/src/cards/CardsTableBody.tsx b/vinvoor/src/cards/CardsTableBody.tsx index 37a1048..1dfd2e4 100644 --- a/vinvoor/src/cards/CardsTableBody.tsx +++ b/vinvoor/src/cards/CardsTableBody.tsx @@ -11,14 +11,8 @@ import { import { useConfirm } from "material-ui-confirm"; import { useSnackbar } from "notistack"; import { ChangeEvent, FC, MouseEvent } from "react"; -import { useCardsContext } from "../providers/dataproviders/cardsProvider"; -import { - Card, - CardJSON, - cardsHeadCells, - convertCardJSON, -} from "../types/cards"; -import { getApi, patchApi } from "../util/fetch"; +import { Card, cardsHeadCells } from "../types/cards"; +import { useCards, usePatchCards } from "../hooks/useCard"; interface CardsTableBodyProps { rows: readonly Card[]; @@ -39,7 +33,8 @@ export const CardsTableBody: FC = ({ handleClick, emptyRows, }) => { - const { setData: setCards } = useCardsContext(); + const { refetch } = useCards(); + const patchCard = usePatchCards(); const confirm = useConfirm(); const { enqueueSnackbar } = useSnackbar(); @@ -64,17 +59,19 @@ export const CardsTableBody: FC = ({ return; } - patchApi(`cards/${id}`, { name: newName }) - .then(() => { - enqueueSnackbar(nameSaveSuccess, { - variant: "success", - }); - void getApi( - "cards", - convertCardJSON, - ).then(cards => setCards(cards)); - }) - .catch(() => enqueueSnackbar(nameSaveFailure, { variant: "error" })); + patchCard.mutate( + { id: id, newName: newName }, + { + onSuccess: () => { + enqueueSnackbar(nameSaveSuccess, { + variant: "success", + }); + void refetch(); + }, + onError: () => + enqueueSnackbar(nameSaveFailure, { variant: "error" }), + }, + ); }) .catch(() => { // Required otherwise the confirm dialog will throw an error in the console diff --git a/vinvoor/src/hooks/useCard.ts b/vinvoor/src/hooks/useCard.ts new file mode 100644 index 0000000..6606f19 --- /dev/null +++ b/vinvoor/src/hooks/useCard.ts @@ -0,0 +1,20 @@ +import { useMutation, useQuery } from "@tanstack/react-query"; +import { Card, CardJSON, convertCardJSON } from "../types/cards"; +import { getApi, patchApi } from "../util/fetch"; + +const ENDPOINT = "cards"; + +export const useCards = () => + useQuery({ + queryKey: ["cards"], + queryFn: () => getApi(ENDPOINT, convertCardJSON), + }); + +export const usePatchCards = () => { + return useMutation({ + mutationFn: (args: { id: number; newName: string }) => + patchApi(`${ENDPOINT}/${args.id}`, { + name: args.newName, + }), + }); +}; diff --git a/vinvoor/src/hooks/useDays.ts b/vinvoor/src/hooks/useDays.ts new file mode 100644 index 0000000..1653378 --- /dev/null +++ b/vinvoor/src/hooks/useDays.ts @@ -0,0 +1,17 @@ +import { useMutation, useQuery } from "@tanstack/react-query"; +import { convertDayJSON, Day, DayJSON } from "../types/days"; +import { deleteAPI, getApi } from "../util/fetch"; + +const ENDPOINT = "admin/days"; + +export const useDays = () => + useQuery({ + queryKey: ["days"], + queryFn: () => getApi(ENDPOINT, convertDayJSON), + }); + +export const useDeleteDay = () => { + return useMutation({ + mutationFn: (id: number) => deleteAPI(`${ENDPOINT}/${id}`), + }); +}; diff --git a/vinvoor/src/hooks/useFetch.ts b/vinvoor/src/hooks/useFetch.ts deleted file mode 100644 index 7e9e74c..0000000 --- a/vinvoor/src/hooks/useFetch.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Dispatch, SetStateAction, useContext, useEffect } from "react"; -import { UserContext } from "../providers/UserProvider"; -import { Optional } from "../types/general"; -import { getApi, isResponseNot200Error } from "../util/fetch"; - -export const useFetch = ( - endpoint: string, - setData: Dispatch>, - convertData?: (data: U) => T, - setLoading?: Dispatch>, - setError?: Dispatch>>, -) => { - const { user, invalidateUser } = useContext(UserContext); - - useEffect(() => { - if (user === undefined) return; - - getApi(endpoint, convertData) - .then(data => setData(data)) - .catch(error => { - if (isResponseNot200Error(error) && error.response.status === 401) { - invalidateUser(error); - } - - setError?.(error as Error); - }) - .finally(() => setLoading?.(false)); - }, [user, endpoint]); -}; diff --git a/vinvoor/src/hooks/useLeaderboard.ts b/vinvoor/src/hooks/useLeaderboard.ts new file mode 100644 index 0000000..5571e36 --- /dev/null +++ b/vinvoor/src/hooks/useLeaderboard.ts @@ -0,0 +1,19 @@ +import { useQuery } from "@tanstack/react-query"; +import { getApi } from "../util/fetch"; +import { + convertLeaderboardItemJSON, + LeaderboardItem, + LeaderboardItemJSON, +} from "../types/leaderboard"; + +const ENDPOINT = "leaderboard"; + +export const useLeaderboardItems = () => + useQuery({ + queryKey: ["leaderboard"], + queryFn: () => + getApi( + ENDPOINT, + convertLeaderboardItemJSON, + ), + }); diff --git a/vinvoor/src/hooks/useScan.ts b/vinvoor/src/hooks/useScan.ts new file mode 100644 index 0000000..066d747 --- /dev/null +++ b/vinvoor/src/hooks/useScan.ts @@ -0,0 +1,11 @@ +import { useQuery } from "@tanstack/react-query"; +import { getApi } from "../util/fetch"; +import { convertScanJSON, Scan, ScanJSON } from "../types/scans"; + +const ENDPOINT = "scans"; + +export const useScans = () => + useQuery({ + queryKey: ["scans"], + queryFn: () => getApi(ENDPOINT, convertScanJSON), + }); diff --git a/vinvoor/src/hooks/useSettings.ts b/vinvoor/src/hooks/useSettings.ts new file mode 100644 index 0000000..c66c502 --- /dev/null +++ b/vinvoor/src/hooks/useSettings.ts @@ -0,0 +1,26 @@ +import { useMutation, useQuery } from "@tanstack/react-query"; +import { getApi, patchApi } from "../util/fetch"; +import { converSettingsJSON, Settings, SettingsJSON } from "../types/settings"; + +const ENDPOINT = "settings"; + +export const useSettings = () => + useQuery({ + queryKey: ["settings"], + queryFn: () => getApi(ENDPOINT, converSettingsJSON), + }); + +export const usePatchSettings = () => { + return useMutation({ + mutationFn: (args: { + scanInOut: boolean; + leaderboard: boolean; + public: boolean; + }) => + patchApi(ENDPOINT, { + scanInOut: args.scanInOut, + leaderboard: args.leaderboard, + public: args.public, + }), + }); +}; diff --git a/vinvoor/src/leaderboard/Leaderboard.tsx b/vinvoor/src/leaderboard/Leaderboard.tsx index 3d2476c..ba25402 100644 --- a/vinvoor/src/leaderboard/Leaderboard.tsx +++ b/vinvoor/src/leaderboard/Leaderboard.tsx @@ -1,20 +1,20 @@ import { Divider, Paper, Table, TableContainer } from "@mui/material"; import { LoadingSkeleton } from "../components/LoadingSkeleton"; -import { useLeaderboardContext } from "../providers/dataproviders/leaderboardProvider"; import { LeaderboardTableBody } from "./LeaderboardTableBody"; import { LeaderboardTableToolbar } from "./LeaderboardTableToolbar"; +import { useLeaderboardItems } from "../hooks/useLeaderboard"; export const Leaderboard = () => { - const { data: leaderboardItems, loading } = useLeaderboardContext(); + const { isLoading } = useLeaderboardItems(); return ( - + - +
diff --git a/vinvoor/src/leaderboard/LeaderboardTableBody.tsx b/vinvoor/src/leaderboard/LeaderboardTableBody.tsx index 17edbfb..f6e1986 100644 --- a/vinvoor/src/leaderboard/LeaderboardTableBody.tsx +++ b/vinvoor/src/leaderboard/LeaderboardTableBody.tsx @@ -6,17 +6,14 @@ import { Typography, } from "@mui/material"; import { alpha, Theme, useTheme } from "@mui/material/styles"; -import { FC, useContext } from "react"; +import { useContext } from "react"; import { UserContext } from "../providers/UserProvider"; import { TableHeadCell } from "../types/general"; import { leaderboardHeadCells, LeaderboardItem } from "../types/leaderboard"; import FirstPlaceIcon from "/first_place.svg"; import SecondPlaceIcon from "/second_place.svg"; import ThirdPlaceIcon from "/third_place.svg"; - -interface LeaderboardTableBodyProps { - leaderboardItems: readonly LeaderboardItem[]; -} +import { useLeaderboardItems } from "../hooks/useLeaderboard"; const leaderboardColors = [ (theme: Theme) => theme.leaderboard.first, @@ -103,9 +100,10 @@ const getCell = ( } }; -export const LeaderboardTableBody: FC = ({ - leaderboardItems: rows, -}) => { +export const LeaderboardTableBody = () => { + const { data: rows } = useLeaderboardItems(); + if (!rows) return null; // Can never happen + const theme = useTheme(); const { user } = useContext(UserContext); diff --git a/vinvoor/src/main.tsx b/vinvoor/src/main.tsx index e6cc16b..8db5a58 100644 --- a/vinvoor/src/main.tsx +++ b/vinvoor/src/main.tsx @@ -14,11 +14,6 @@ import { ProtectedRoute } from "./components/ProtectedRoute.tsx"; import { ErrorPage } from "./errors/ErrorPage.tsx"; import { Leaderboard } from "./leaderboard/Leaderboard.tsx"; import { CustomSnackbarProvider } from "./providers/CustomSnackbarProvider.tsx"; -import { CardsProvider } from "./providers/dataproviders/cardsProvider.ts"; -import { DaysProvider } from "./providers/dataproviders/daysProvider.ts"; -import { LeaderboardProvider } from "./providers/dataproviders/leaderboardProvider.ts"; -import { ScansProvider } from "./providers/dataproviders/scansProvider.ts"; -import { SettingsProvider } from "./providers/dataproviders/settingsProvider.ts"; import { ThemeProvider } from "./providers/ThemeProvider.tsx"; import { UserProvider } from "./providers/UserProvider.tsx"; import { Scans } from "./scans/Scans.tsx"; @@ -26,6 +21,9 @@ import { Admin } from "./settings/admin/Admin.tsx"; import { SettingsOverview } from "./settings/SettingsOverview.tsx"; import { Login } from "./user/Login.tsx"; import { Logout } from "./user/Logout.tsx"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +const queryClient = new QueryClient(); const router = createBrowserRouter([ { @@ -55,19 +53,13 @@ const router = createBrowserRouter([ }, { path: "settings", - element: ( - - - - ), + element: , }, { path: "admin", element: ( - - - + ), }, @@ -80,17 +72,13 @@ ReactDOM.createRoot(document.getElementById("root")!).render( - - - - - - - - - - - + + + + + + + diff --git a/vinvoor/src/overview/Overview.tsx b/vinvoor/src/overview/Overview.tsx index c755da5..c67f9d5 100644 --- a/vinvoor/src/overview/Overview.tsx +++ b/vinvoor/src/overview/Overview.tsx @@ -4,15 +4,15 @@ import { useLayoutEffect, useRef, useState } from "react"; import { Tooltip } from "react-tooltip"; import { BrowserView } from "../components/BrowserView"; import { LoadingSkeleton } from "../components/LoadingSkeleton"; -import { useScansContext } from "../providers/dataproviders/scansProvider"; import { CheckIn } from "./checkin/CheckIn"; import { Days } from "./days/Days"; import { Heatmap } from "./heatmap/Heatmap"; import { HeatmapVariant } from "./heatmap/types"; import { Streak } from "./streak/Streak"; +import { useScans } from "../hooks/useScan"; export const Overview = () => { - const { data: scans, loading } = useScansContext(); + const { data: scans, isLoading } = useScans(); const [checked, setChecked] = useState(false); const daysRef = useRef(null); const [paperHeight, setPaperHeight] = useState(0); @@ -27,8 +27,8 @@ export const Overview = () => { }); return ( - - {scans.length > 0 ? ( + + {scans?.length ? ( diff --git a/vinvoor/src/overview/checkin/CheckIn.tsx b/vinvoor/src/overview/checkin/CheckIn.tsx index 5ba6749..83bc60b 100644 --- a/vinvoor/src/overview/checkin/CheckIn.tsx +++ b/vinvoor/src/overview/checkin/CheckIn.tsx @@ -1,10 +1,11 @@ import { Alert, AlertTitle } from "@mui/material"; import { EmoticonExcitedOutline, EmoticonFrownOutline } from "mdi-material-ui"; -import { useScansContext } from "../../providers/dataproviders/scansProvider"; import { isTheSameDay } from "../../util/util"; +import { useScans } from "../../hooks/useScan"; export const CheckIn = () => { - const { data: scans } = useScansContext(); + const { data: scans } = useScans(); + if (!scans) return null; // Can never happen const checkedIn = isTheSameDay(scans[scans.length - 1].scanTime, new Date()); diff --git a/vinvoor/src/overview/days/Days.tsx b/vinvoor/src/overview/days/Days.tsx index 0a1e1cb..4167946 100644 --- a/vinvoor/src/overview/days/Days.tsx +++ b/vinvoor/src/overview/days/Days.tsx @@ -1,8 +1,8 @@ import { useTheme } from "@mui/material"; import { ApexOptions } from "apexcharts"; import Chart from "react-apexcharts"; -import { useScansContext } from "../../providers/dataproviders/scansProvider"; import { Scan } from "../../types/scans"; +import { useScans } from "../../hooks/useScan"; const getDayCount = (scans: readonly Scan[]) => { const days = [0, 0, 0, 0, 0, 0, 0]; @@ -14,7 +14,8 @@ const getDayCount = (scans: readonly Scan[]) => { export const Days = () => { const theme = useTheme(); - const { data: scans } = useScansContext(); + const { data: scans } = useScans(); + if (!scans) return null; // Can never happen const state = { options: { diff --git a/vinvoor/src/overview/heatmap/Day.tsx b/vinvoor/src/overview/heatmap/Day.tsx index a5ff8dd..3582bef 100644 --- a/vinvoor/src/overview/heatmap/Day.tsx +++ b/vinvoor/src/overview/heatmap/Day.tsx @@ -1,6 +1,5 @@ import { useTheme } from "@mui/material"; import { FC, useMemo } from "react"; -import { useScansContext } from "../../providers/dataproviders/scansProvider"; import "./heatmap.css"; import { Rect } from "./Rect"; import { DayData, HeatmapVariant } from "./types"; @@ -15,6 +14,7 @@ import { styleMonth, WEEKS_IN_MONTH, } from "./utils"; +import { useScans } from "../../hooks/useScan"; interface DayProps { startDate: Date; @@ -34,7 +34,8 @@ export const Day: FC = ({ variant, }) => { const theme = useTheme(); - const { data: scans } = useScansContext(); + const { data: scans } = useScans(); + if (!scans) return null; // Can never happen const data = useMemo(() => { const normalizedScans = [...scans]; diff --git a/vinvoor/src/overview/streak/Streak.tsx b/vinvoor/src/overview/streak/Streak.tsx index 1655341..699f39b 100644 --- a/vinvoor/src/overview/streak/Streak.tsx +++ b/vinvoor/src/overview/streak/Streak.tsx @@ -1,11 +1,11 @@ import { Box, Typography } from "@mui/material"; -import { useScansContext } from "../../providers/dataproviders/scansProvider"; import { Scan } from "../../types/scans"; import { isTheSameDay, MILLISECONDS_IN_ONE_DAY, shiftDate, } from "../../util/util"; +import { useScans } from "../../hooks/useScan"; const isWeekendBetween = (date1: Date, date2: Date) => { const diffDays = Math.floor( @@ -65,7 +65,8 @@ const getStreak = (scans: readonly Scan[]): [boolean, number] => { }; export const Streak = () => { - const { data: scans } = useScansContext(); + const { data: scans } = useScans(); + if (!scans) return null; // Can never happen const [isOnStreak, streak] = getStreak(scans); diff --git a/vinvoor/src/providers/DataProvider.tsx b/vinvoor/src/providers/DataProvider.tsx deleted file mode 100644 index c0cecf6..0000000 --- a/vinvoor/src/providers/DataProvider.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { - createContext, - Dispatch, - FC, - ReactNode, - SetStateAction, - useContext, - useState, -} from "react"; -import { useFetch } from "../hooks/useFetch"; -import { Optional } from "../types/general"; - -interface DataProviderProps { - children: ReactNode; -} - -interface DataContextProps { - data: T; - setData: Dispatch>; - loading: boolean; - error?: Error; -} - -export const createDataContext = ( - endpoint: string, - defaultValue: T, - convertData?: (data: U) => T, -) => { - const DataContext = createContext>({ - data: defaultValue, - setData: () => { - // No operation, placeholder function - }, - loading: true, - error: undefined, - }); - - const DataProvider: FC = ({ children }) => { - const [data, setData] = useState(defaultValue); - const [loading, setLoading] = useState(true); - const [error, setError] = useState>(undefined); - - useFetch(endpoint, setData, convertData, setLoading, setError); - - return ( - - {children} - - ); - }; - - const useDataContext = () => useContext(DataContext); - - return { DataProvider, useDataContext }; -}; diff --git a/vinvoor/src/providers/dataproviders/cardsProvider.ts b/vinvoor/src/providers/dataproviders/cardsProvider.ts deleted file mode 100644 index c88e481..0000000 --- a/vinvoor/src/providers/dataproviders/cardsProvider.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Card, CardJSON, convertCardJSON } from "../../types/cards"; -import { createDataContext } from "../DataProvider"; - -export const { DataProvider: CardsProvider, useDataContext: useCardsContext } = - createDataContext("cards", [], convertCardJSON); diff --git a/vinvoor/src/providers/dataproviders/daysProvider.ts b/vinvoor/src/providers/dataproviders/daysProvider.ts deleted file mode 100644 index d8457cc..0000000 --- a/vinvoor/src/providers/dataproviders/daysProvider.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { convertDayJSON, Day, DayJSON } from "../../types/days"; -import { createDataContext } from "../DataProvider"; - -export const { DataProvider: DaysProvider, useDataContext: useDaysContext } = - createDataContext( - "admin/days", - [], - convertDayJSON, - ); diff --git a/vinvoor/src/providers/dataproviders/leaderboardProvider.ts b/vinvoor/src/providers/dataproviders/leaderboardProvider.ts deleted file mode 100644 index 9e0b216..0000000 --- a/vinvoor/src/providers/dataproviders/leaderboardProvider.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { LeaderboardItem } from "../../types/leaderboard"; -import { createDataContext } from "../DataProvider"; - -export const { - DataProvider: LeaderboardProvider, - useDataContext: useLeaderboardContext, -} = createDataContext("leaderboard", []); diff --git a/vinvoor/src/providers/dataproviders/scansProvider.ts b/vinvoor/src/providers/dataproviders/scansProvider.ts deleted file mode 100644 index eda2e55..0000000 --- a/vinvoor/src/providers/dataproviders/scansProvider.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { convertScanJSON, Scan, ScanJSON } from "../../types/scans"; -import { createDataContext } from "../DataProvider"; - -export const { DataProvider: ScansProvider, useDataContext: useScansContext } = - createDataContext("scans", [], convertScanJSON); diff --git a/vinvoor/src/providers/dataproviders/settingsProvider.ts b/vinvoor/src/providers/dataproviders/settingsProvider.ts deleted file mode 100644 index 4884e73..0000000 --- a/vinvoor/src/providers/dataproviders/settingsProvider.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - converSettingsJSON, - defaultSettings, - Settings, - SettingsJSON, -} from "../../types/settings"; -import { createDataContext } from "../DataProvider"; - -export const { - DataProvider: SettingsProvider, - useDataContext: useSettingsContext, -} = createDataContext( - "settings", - defaultSettings, - converSettingsJSON, -); diff --git a/vinvoor/src/scans/Scans.tsx b/vinvoor/src/scans/Scans.tsx index a94a653..c784be0 100644 --- a/vinvoor/src/scans/Scans.tsx +++ b/vinvoor/src/scans/Scans.tsx @@ -1,16 +1,16 @@ import { Paper, Table, TableContainer } from "@mui/material"; import { LoadingSkeleton } from "../components/LoadingSkeleton"; -import { useCardsContext } from "../providers/dataproviders/cardsProvider"; -import { useScansContext } from "../providers/dataproviders/scansProvider"; import { ScansTableBody } from "./ScansTableBody"; import { ScansTableHead } from "./ScansTableHead"; +import { useScans } from "../hooks/useScan"; +import { useCards } from "../hooks/useCard"; export const Scans = () => { - const { loading: loadingScans } = useScansContext(); - const { loading: loadingCards } = useCardsContext(); + const { isLoading: isLoadingScans } = useScans(); + const { isLoading: isLoadingCards } = useCards(); return ( - + diff --git a/vinvoor/src/scans/ScansTableBody.tsx b/vinvoor/src/scans/ScansTableBody.tsx index e3b1f61..03598b3 100644 --- a/vinvoor/src/scans/ScansTableBody.tsx +++ b/vinvoor/src/scans/ScansTableBody.tsx @@ -1,12 +1,14 @@ import { TableBody, TableCell, TableRow, Typography } from "@mui/material"; import { useEffect, useState } from "react"; -import { useCardsContext } from "../providers/dataproviders/cardsProvider"; -import { useScansContext } from "../providers/dataproviders/scansProvider"; import { mergeScansCards, ScanCard, scanCardHeadCells } from "../types/scans"; +import { useCards } from "../hooks/useCard"; +import { useScans } from "../hooks/useScan"; export const ScansTableBody = () => { - const { data: scans } = useScansContext(); - const { data: cards } = useCardsContext(); + const { data: scans } = useScans(); + const { data: cards } = useCards(); + if (!scans || !cards) return null; // Can never happen + const [scanCards, setScanCards] = useState([]); useEffect(() => { diff --git a/vinvoor/src/settings/Settings.tsx b/vinvoor/src/settings/Settings.tsx new file mode 100644 index 0000000..a071227 --- /dev/null +++ b/vinvoor/src/settings/Settings.tsx @@ -0,0 +1,154 @@ +import { ChangeEvent, useState } from "react"; +import { usePatchSettings, useSettings } from "../hooks/useSettings"; +import { useSnackbar } from "notistack"; +import { useConfirm } from "material-ui-confirm"; +import { + Box, + Button, + Checkbox, + FormControl, + FormControlLabel, + Grid, + Paper, + Stack, + Tooltip, + Typography, +} from "@mui/material"; +import { adjustableSettings } from "../types/settings"; +import HelpCircleOutline from "mdi-material-ui/HelpCircleOutline"; + +const saveSuccess = "Settings saved successfully"; +const saveFailure = "Unable to save settings"; +const handleDeleteContent = ( + + + Are you sure you want to delete all your data? + + + This is irreversible! + + +); + +export const Settings = () => { + const { data: settingsTruth, refetch } = useSettings(); + if (!settingsTruth) return null; // Can never happen + + const patchSettings = usePatchSettings(); + const [settings, setSettings] = useState({ ...settingsTruth }); + const { enqueueSnackbar } = useSnackbar(); + const confirm = useConfirm(); + + const handleChange = (event: ChangeEvent) => { + setSettings({ + ...settings, + [event.target.name]: event.target.checked, + }); + }; + + const handleSubmit = () => { + patchSettings.mutate( + { + scanInOut: settings.scanInOut, + leaderboard: settings.leaderboard, + public: settings.public, + }, + { + onSuccess: () => { + enqueueSnackbar(saveSuccess, { variant: "success" }); + void refetch(); + }, + onError: () => enqueueSnackbar(saveFailure, { variant: "error" }), + }, + ); + }; + + const handleDelete = () => { + confirm({ + title: "Delete data", + content: handleDeleteContent, + acknowledgement: "Delete all my data", + confirmationText: "Delete", + confirmationButtonProps: { color: "error" }, + }) + .then(() => + enqueueSnackbar("This is not possible yet", { + variant: "error", + }), + ) + .catch(() => { + // Required otherwise the confirm dialog will throw an error in the console + }); + }; + + return ( + + + + + {adjustableSettings.map(setting => ( + + } + label={ + + {setting.name} + + + + + } + key={setting.id} + /> + ))} + + + + + + + More settings coming soon! + ...yay? + + + + + + + + + + + ); +}; diff --git a/vinvoor/src/settings/SettingsOverview.tsx b/vinvoor/src/settings/SettingsOverview.tsx index 2af25c3..a50de0b 100644 --- a/vinvoor/src/settings/SettingsOverview.tsx +++ b/vinvoor/src/settings/SettingsOverview.tsx @@ -1,153 +1,13 @@ -import { - Box, - Button, - Checkbox, - FormControl, - FormControlLabel, - Grid, - Paper, - Stack, - Tooltip, - Typography, -} from "@mui/material"; -import { useConfirm } from "material-ui-confirm"; -import { HelpCircleOutline } from "mdi-material-ui"; -import { useSnackbar } from "notistack"; -import { ChangeEvent } from "react"; import { LoadingSkeleton } from "../components/LoadingSkeleton"; -import { useSettingsContext } from "../providers/dataproviders/settingsProvider"; -import { adjustableSettings } from "../types/settings"; -import { patchApi } from "../util/fetch"; - -const saveSuccess = "Settings saved successfully"; -const saveFailure = "Unable to save settings"; -const handleDeleteContent = ( - - - Are you sure you want to delete all your data? - - - This is irreversible! - - -); +import { useSettings } from "../hooks/useSettings"; +import { Settings } from "./Settings"; export const SettingsOverview = () => { - const { - data: settings, - setData: setSettings, - loading, - } = useSettingsContext(); - const { enqueueSnackbar } = useSnackbar(); - const confirm = useConfirm(); - - const handleChange = (event: ChangeEvent) => { - setSettings({ - ...settings, - [event.target.name]: event.target.checked, - }); - }; - - const handleSubmit = () => { - patchApi("settings", { - scanInOut: settings.scanInOut, - leaderboard: settings.leaderboard, - public: settings.public, - }) - .then(() => enqueueSnackbar(saveSuccess, { variant: "success" })) - .catch(() => enqueueSnackbar(saveFailure, { variant: "error" })); - }; - - const handleDelete = () => { - confirm({ - title: "Delete data", - content: handleDeleteContent, - acknowledgement: "Delete all my data", - confirmationText: "Delete", - confirmationButtonProps: { color: "error" }, - }) - .then(() => - enqueueSnackbar("This is not possible yet", { - variant: "error", - }), - ) - .catch(() => { - // Required otherwise the confirm dialog will throw an error in the console - }); - }; + const { isLoading } = useSettings(); return ( - - - - - - {adjustableSettings.map(setting => ( - - } - label={ - - {setting.name} - - - - - } - key={setting.id} - /> - ))} - - - - - - - - More settings coming soon! - - ...yay? - - - - - - - - - - + + ); }; diff --git a/vinvoor/src/settings/admin/days/Days.tsx b/vinvoor/src/settings/admin/days/Days.tsx index 0af17ba..3c7bdcd 100644 --- a/vinvoor/src/settings/admin/days/Days.tsx +++ b/vinvoor/src/settings/admin/days/Days.tsx @@ -1,29 +1,14 @@ import { Grid } from "@mui/material"; -import { useSnackbar } from "notistack"; import { LoadingSkeleton } from "../../../components/LoadingSkeleton"; -import { useDaysContext } from "../../../providers/dataproviders/daysProvider"; -import { convertDayJSON, Day, DayJSON } from "../../../types/days"; -import { getApi } from "../../../util/fetch"; import { DaysAdd } from "./DaysAdd"; import { DaysTable } from "./DaysTable"; +import { useDays } from "../../../hooks/useDays"; export const Days = () => { - const { setData: setDays, loading } = useDaysContext(); - const { enqueueSnackbar } = useSnackbar(); - - const reloadDays = () => { - getApi("admin/days", convertDayJSON) - .then(data => setDays(data)) - // This is the admin page so just show the error - .catch(error => - enqueueSnackbar(`Error getting all days: ${error}`, { - variant: "error", - }), - ); - }; + const { isLoading } = useDays(); return ( - + { rowSpacing={6} > - + - + diff --git a/vinvoor/src/settings/admin/days/DaysAdd.tsx b/vinvoor/src/settings/admin/days/DaysAdd.tsx index 32e97b2..2c4ce0b 100644 --- a/vinvoor/src/settings/admin/days/DaysAdd.tsx +++ b/vinvoor/src/settings/admin/days/DaysAdd.tsx @@ -3,15 +3,13 @@ import { DatePicker, LocalizationProvider } from "@mui/x-date-pickers"; import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; import dayjs, { Dayjs } from "dayjs"; import { useSnackbar } from "notistack"; -import { Dispatch, FC, SetStateAction, useState } from "react"; +import { Dispatch, SetStateAction, useState } from "react"; import { TypographyG } from "../../../components/TypographyG"; import { postApi } from "../../../util/fetch"; +import { useDays } from "../../../hooks/useDays"; -interface DaysAddProps { - reloadDays: Dispatch>; -} - -export const DaysAdd: FC = ({ reloadDays }) => { +export const DaysAdd = () => { + const { refetch } = useDays(); const [startDate, setStartDate] = useState(dayjs()); const [endDate, setEndDate] = useState(dayjs()); @@ -38,7 +36,7 @@ export const DaysAdd: FC = ({ reloadDays }) => { enqueueSnackbar("successfully saved days", { variant: "success", }); - reloadDays(); + void refetch(); }) .catch(error => // This is the admin page so just show the error diff --git a/vinvoor/src/settings/admin/days/DaysTable.tsx b/vinvoor/src/settings/admin/days/DaysTable.tsx index 8893f0e..ff94a1a 100644 --- a/vinvoor/src/settings/admin/days/DaysTable.tsx +++ b/vinvoor/src/settings/admin/days/DaysTable.tsx @@ -1,29 +1,20 @@ import { Paper, Stack, Table, TableContainer } from "@mui/material"; import { useSnackbar } from "notistack"; -import { - ChangeEvent, - Dispatch, - FC, - SetStateAction, - useEffect, - useState, -} from "react"; +import { ChangeEvent, useEffect, useState } from "react"; import { TypographyG } from "../../../components/TypographyG"; -import { useDaysContext } from "../../../providers/dataproviders/daysProvider"; import { Day } from "../../../types/days"; import { Optional } from "../../../types/general"; -import { deleteAPI } from "../../../util/fetch"; import { randomInt } from "../../../util/util"; import { DaysTableBody } from "./DaysTableBody"; import { DaysTableHead } from "./DaysTableHead"; import { DaysTableToolbar } from "./DaysTableToolbar"; +import { useDays, useDeleteDay } from "../../../hooks/useDays"; -interface DaysTableProps { - reloadDays: Dispatch>; -} +export const DaysTable = () => { + const { data: days, refetch } = useDays(); + if (!days) return null; // Can never happen -export const DaysTable: FC = ({ reloadDays }) => { - const { data: days } = useDaysContext(); + const deleteDay = useDeleteDay(); const [rows, setRows] = useState(days); const [selected, setSelected] = useState([]); const [deleting, setDeleting] = useState(false); @@ -69,27 +60,31 @@ export const DaysTable: FC = ({ reloadDays }) => { }); const promises = selected.map(id => - deleteAPI(`admin/days/${id}`).catch(error => - // This is the admin page so just show the error - enqueueSnackbar(`Failed to delete streakday ${id}: ${error}`, { - variant: "error", - }), - ), + deleteDay.mutate(id, { + onError: (error: Error) => + enqueueSnackbar( + `Failed to delete streakday ${id}: ${error.message}`, + { + variant: "error", + }, + ), + }), ); - void Promise.all(promises).then(() => { - closeSnackbar(key); - enqueueSnackbar( - `Deleted ${selected.length} streakday${selected.length > 1 ? "s" : ""}`, - { - variant: "success", - }, - ); + void Promise.all(promises) + .then(() => { + closeSnackbar(key); + enqueueSnackbar( + `Deleted ${selected.length} streakday${selected.length > 1 ? "s" : ""}`, + { + variant: "success", + }, + ); - setSelected([]); - setDeleting(false); - reloadDays(); - }); + setSelected([]); + setDeleting(false); + }) + .finally(() => void refetch()); }; const handleSelect = (id: number) => { diff --git a/vinvoor/src/settings/admin/days/DaysTableBody.tsx b/vinvoor/src/settings/admin/days/DaysTableBody.tsx index 0a70b98..eff25c9 100644 --- a/vinvoor/src/settings/admin/days/DaysTableBody.tsx +++ b/vinvoor/src/settings/admin/days/DaysTableBody.tsx @@ -9,9 +9,8 @@ import { } from "@mui/material"; import { useSnackbar } from "notistack"; import { FC, ReactNode } from "react"; -import { useDaysContext } from "../../../providers/dataproviders/daysProvider"; import { Day, daysHeadCells } from "../../../types/days"; -import { deleteAPI } from "../../../util/fetch"; +import { useDays, useDeleteDay } from "../../../hooks/useDays"; interface DaysTableBodyProps { rows: readonly Day[]; @@ -26,24 +25,24 @@ export const DaysTableBody: FC = ({ isSelected, deleting, }) => { - const { data: days, setData: setDays } = useDaysContext(); + const { refetch } = useDays(); + const deleteCard = useDeleteDay(); const { enqueueSnackbar } = useSnackbar(); const handleClick = (id: number) => { if (isSelected(id)) handleSelect(id); // This will remove it from the selected list - deleteAPI(`admin/days/${id}`) - .then(() => { + deleteCard.mutate(id, { + onSuccess: () => { enqueueSnackbar("Deleted streakday", { variant: "success" }); - setDays([...days].filter(day => day.id !== id)); - }) - .catch(error => - // This is the admin page so just show the error - enqueueSnackbar(`Failed to delete streakday: ${error}`, { + void refetch(); + }, + onError: (error: Error) => + enqueueSnackbar(`Failed to delete streakday ${id}: ${error.message}`, { variant: "error", }), - ); + }); }; return ( diff --git a/vinvoor/src/settings/admin/days/DaysTableToolbar.tsx b/vinvoor/src/settings/admin/days/DaysTableToolbar.tsx index 078df25..d89534a 100644 --- a/vinvoor/src/settings/admin/days/DaysTableToolbar.tsx +++ b/vinvoor/src/settings/admin/days/DaysTableToolbar.tsx @@ -3,8 +3,8 @@ import { DatePicker, LocalizationProvider } from "@mui/x-date-pickers"; import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; import dayjs, { Dayjs } from "dayjs"; import { ChangeEvent, Dispatch, FC, SetStateAction, useState } from "react"; -import { useDaysContext } from "../../../providers/dataproviders/daysProvider"; import { Optional } from "../../../types/general"; +import { useDays } from "../../../hooks/useDays"; interface DaysTableToolbarProps { dateFilter: [Optional, Optional]; @@ -23,7 +23,9 @@ export const DaysTableToolbar: FC = ({ weekendsFilter, setWeekendsFilter, }) => { - const { data: days } = useDaysContext(); + const { data: days } = useDays(); + if (!days) return null; // Can never happen + const [startDate, setStartDate] = useState( days.length ? dayjs(days[0].date) : dayjs(), ); diff --git a/vinvoor/src/types/cards.ts b/vinvoor/src/types/cards.ts index c82e3c7..8f5ada5 100644 --- a/vinvoor/src/types/cards.ts +++ b/vinvoor/src/types/cards.ts @@ -1,12 +1,28 @@ import { Base, BaseJSON, TableHeadCell } from "./general"; +// External + export interface CardJSON extends BaseJSON { serial: string; name: string; - lastUsed: string; - amountUsed: number; + last_used: string; + amount_used: number; +} + +interface CardPostResponseJSON { + is_current_user: boolean; +} + +interface CardGetRegisterResponseJSON { + registering: boolean; + is_current_user: boolean; + success: boolean; + time_remaining: number; + time_percentage: number; } +// Internal + export interface Card extends Base { serial: string; name: string; @@ -14,16 +30,45 @@ export interface Card extends Base { amountUsed: number; } +export interface CardPostResponse { + isCurrentUser: boolean; +} + +export interface CardGetRegisterResponse { + registering: boolean; + isCurrentUser: boolean; + success: boolean; + timeRemaining: number; + timePercentage: number; +} + +// Converters + export const convertCardJSON = (cardsJSON: CardJSON[]): Card[] => - cardsJSON.map(CardJSON => ({ - serial: CardJSON.serial, - name: CardJSON.name, - lastUsed: new Date(CardJSON.lastUsed), - amountUsed: CardJSON.amountUsed, - id: CardJSON.id, - createdAt: new Date(CardJSON.createdAt), + cardsJSON.map(cardJSON => ({ + ...cardJSON, + lastUsed: new Date(cardJSON.last_used), + amountUsed: cardJSON.amount_used, + createdAt: new Date(cardJSON.created_at), })); +export const convertCardPostResponseJSON = ( + cardJSON: CardPostResponseJSON, +): CardPostResponse => ({ + isCurrentUser: cardJSON.is_current_user, +}); + +export const convertCardGetRegisterResponseJSON = ( + cardJSON: CardGetRegisterResponseJSON, +): CardGetRegisterResponse => ({ + ...cardJSON, + isCurrentUser: cardJSON.is_current_user, + timeRemaining: cardJSON.time_remaining, + timePercentage: cardJSON.time_percentage, +}); + +// Table + export const cardsHeadCells: readonly TableHeadCell[] = [ { id: "name", @@ -61,15 +106,3 @@ export const cardsHeadCells: readonly TableHeadCell[] = [ padding: "normal", }, ]; - -export interface CardPostResponse { - isCurrentUser: boolean; -} - -export interface CardGetRegisterResponse { - registering: boolean; - isCurrentUser: boolean; - success: boolean; - timeRemaining: number; - timePercentage: number; -} diff --git a/vinvoor/src/types/days.ts b/vinvoor/src/types/days.ts index 5f96483..afdf81f 100644 --- a/vinvoor/src/types/days.ts +++ b/vinvoor/src/types/days.ts @@ -1,19 +1,25 @@ import { Base, BaseJSON, TableHeadCell } from "./general"; +// External + export interface DayJSON extends BaseJSON { date: string; } +// Internal + export interface Day extends Base { date: Date; } +// Converters + export const convertDayJSON = (daysJSON: DayJSON[]): Day[] => daysJSON .map(dayJSON => ({ + ...dayJSON, date: new Date(dayJSON.date), - id: dayJSON.id, - createdAt: new Date(dayJSON.createdAt), + createdAt: new Date(dayJSON.created_at), })) .sort((a, b) => a.date.getTime() - b.date.getTime()); diff --git a/vinvoor/src/types/general.ts b/vinvoor/src/types/general.ts index 0a0c557..5444f65 100644 --- a/vinvoor/src/types/general.ts +++ b/vinvoor/src/types/general.ts @@ -2,7 +2,7 @@ export type Optional = T | undefined; export interface BaseJSON { id: number; - createdAt: string; + created_at: string; } export interface Base { diff --git a/vinvoor/src/types/leaderboard.ts b/vinvoor/src/types/leaderboard.ts index f1d21ca..4f8ae81 100644 --- a/vinvoor/src/types/leaderboard.ts +++ b/vinvoor/src/types/leaderboard.ts @@ -1,5 +1,17 @@ import { TableHeadCell } from "./general"; +// External + +export interface LeaderboardItemJSON { + position: number; + user_id: number; + username: string; + total_days: number; + position_change: number; +} + +// Internal + export interface LeaderboardItem { position: number; userId: number; @@ -8,6 +20,20 @@ export interface LeaderboardItem { positionChange: number; } +// Converters + +export const convertLeaderboardItemJSON = ( + leaderboardItems: LeaderboardItemJSON[], +): LeaderboardItem[] => + leaderboardItems.map(leaderboardItem => ({ + ...leaderboardItem, + userId: leaderboardItem.user_id, + totalDays: leaderboardItem.total_days, + positionChange: leaderboardItem.position_change, + })); + +// Table + export const leaderboardHeadCells: readonly TableHeadCell[] = [ { id: "positionChange", diff --git a/vinvoor/src/types/scans.ts b/vinvoor/src/types/scans.ts index ad7e1a1..c7f0068 100644 --- a/vinvoor/src/types/scans.ts +++ b/vinvoor/src/types/scans.ts @@ -1,12 +1,17 @@ +import { dateTimeFormat } from "../util/util"; import { Card } from "./cards"; -import { TableHeadCell } from "./general"; +import { Base, BaseJSON, TableHeadCell } from "./general"; -export interface ScanJSON { - scanTime: string; - cardSerial: string; +// External + +export interface ScanJSON extends BaseJSON { + scan_time: string; + card_serial: string; } -export interface Scan { +// Internal + +export interface Scan extends Base { scanTime: Date; cardSerial: string; } @@ -16,22 +21,19 @@ export interface ScanCard { card?: Card; } +// Converters + export const convertScanJSON = (scansJSON: ScanJSON[]): Scan[] => scansJSON .map(scanJSON => ({ - scanTime: new Date(scanJSON.scanTime), - cardSerial: scanJSON.cardSerial, + ...scanJSON, + scanTime: new Date(scanJSON.scan_time), + cardSerial: scanJSON.card_serial, + createdAt: new Date(scanJSON.created_at), })) .sort((a, b) => a.scanTime.getTime() - b.scanTime.getTime()); -export const mergeScansCards = ( - scans: readonly Scan[], - cards: readonly Card[], -): ScanCard[] => - scans.map(scan => ({ - scanTime: scan.scanTime, - card: cards.find(card => card.serial === scan.cardSerial), - })); +// Table export const scanCardHeadCells: readonly TableHeadCell[] = [ { @@ -50,10 +52,13 @@ export const scanCardHeadCells: readonly TableHeadCell[] = [ } as TableHeadCell, ]; -const dateTimeFormat = new Intl.DateTimeFormat("en-GB", { - year: "2-digit", - month: "short", - day: "numeric", - hour: "numeric", - minute: "numeric", -}); +// Other + +export const mergeScansCards = ( + scans: readonly Scan[], + cards: readonly Card[], +): ScanCard[] => + scans.map(scan => ({ + scanTime: scan.scanTime, + card: cards.find(card => card.serial === scan.cardSerial), + })); diff --git a/vinvoor/src/types/settings.ts b/vinvoor/src/types/settings.ts index 1a84193..dca71d4 100644 --- a/vinvoor/src/types/settings.ts +++ b/vinvoor/src/types/settings.ts @@ -1,33 +1,31 @@ import { Base, BaseJSON } from "./general"; +// External + export interface SettingsJSON extends BaseJSON { - scanInOut: boolean; + scan_in_out: boolean; leaderboard: boolean; public: boolean; } +// Internal + export interface Settings extends Base { scanInOut: boolean; leaderboard: boolean; public: boolean; } -export const defaultSettings: Settings = { - id: -1, - createdAt: new Date(), - scanInOut: false, - leaderboard: false, - public: false, -}; +// Converters export const converSettingsJSON = (settingsJSON: SettingsJSON): Settings => ({ - id: settingsJSON.id, - createdAt: new Date(settingsJSON.createdAt), - scanInOut: settingsJSON.scanInOut, - leaderboard: settingsJSON.leaderboard, - public: settingsJSON.public, + ...settingsJSON, + createdAt: new Date(settingsJSON.created_at), + scanInOut: settingsJSON.scan_in_out, }); +// Table + interface AdjustableSettings { id: keyof Settings; name: string; diff --git a/vinvoor/src/types/user.ts b/vinvoor/src/types/user.ts index 8e680e7..80ae83a 100644 --- a/vinvoor/src/types/user.ts +++ b/vinvoor/src/types/user.ts @@ -1,5 +1,7 @@ import { Settings } from "./settings"; +// External / Internal + export interface User { id: number; username: string; diff --git a/vinvoor/src/util/util.ts b/vinvoor/src/util/util.ts index 8538628..450bf78 100644 --- a/vinvoor/src/util/util.ts +++ b/vinvoor/src/util/util.ts @@ -17,6 +17,14 @@ export const shiftDate = (date: Date, numDays: number) => { return newDate; }; +export const dateTimeFormat = new Intl.DateTimeFormat("en-GB", { + year: "2-digit", + month: "short", + day: "numeric", + hour: "numeric", + minute: "numeric", +}); + // Compare functions export const equal = (left: unknown, right: unknown): boolean => { diff --git a/vinvoor/yarn.lock b/vinvoor/yarn.lock index fcc8355..f88d5e5 100644 --- a/vinvoor/yarn.lock +++ b/vinvoor/yarn.lock @@ -18,75 +18,53 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.24.8": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0" - integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== +"@babel/compat-data@^7.25.2": + version "7.25.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" + integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== "@babel/core@^7.21.3": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.9.tgz#dc07c9d307162c97fa9484ea997ade65841c7c82" - integrity sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.9" - "@babel/helper-compilation-targets" "^7.24.8" - "@babel/helper-module-transforms" "^7.24.9" - "@babel/helpers" "^7.24.8" - "@babel/parser" "^7.24.8" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.8" - "@babel/types" "^7.24.9" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.24.8", "@babel/generator@^7.24.9": - version "7.24.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" - integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== +"@babel/generator@^7.25.0", "@babel/generator@^7.25.6": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" + integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== dependencies: - "@babel/types" "^7.24.9" + "@babel/types" "^7.25.6" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" - integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== +"@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.24.8" + "@babel/compat-data" "^7.25.2" "@babel/helper-validator-option" "^7.24.8" browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-environment-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" @@ -95,16 +73,15 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.24.9": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" - integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== +"@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-module-imports" "^7.24.7" "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" "@babel/helper-simple-access@^7.24.7": version "7.24.7" @@ -114,13 +91,6 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - "@babel/helper-string-parser@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" @@ -136,13 +106,13 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== -"@babel/helpers@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.8.tgz#2820d64d5d6686cca8789dd15b074cd862795873" - integrity sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ== +"@babel/helpers@^7.25.0": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" + integrity sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q== dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.8" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.6" "@babel/highlight@^7.24.7": version "7.24.7" @@ -154,47 +124,46 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.24.7", "@babel/parser@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" - integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== +"@babel/parser@^7.25.0", "@babel/parser@^7.25.6": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" + integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== + dependencies: + "@babel/types" "^7.25.6" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e" - integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.9", "@babel/runtime@^7.25.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" - integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== +"@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" + integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.8" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.8" - "@babel/types" "^7.24.8" + "@babel/generator" "^7.25.6" + "@babel/parser" "^7.25.6" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.6" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9": - version "7.24.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" - integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== +"@babel/types@^7.21.3", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" + integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== dependencies: "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" @@ -218,9 +187,9 @@ stylis "4.2.0" "@emotion/cache@^11.11.0", "@emotion/cache@^11.13.0": - version "11.13.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.0.tgz#8f51748b8116691dee0408b08ad758b8d246b097" - integrity sha512-hPV345J/tH0Cwk2wnU/3PBzORQ9HeX+kQSbwI+jslzpRCHE6fSGTohswksA/Ensr8znPzwfzKZCmAM9Lmlhp7g== + version "11.13.1" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.13.1.tgz#fecfc54d51810beebf05bf2a161271a1a91895d7" + integrity sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw== dependencies: "@emotion/memoize" "^0.9.0" "@emotion/sheet" "^1.4.0" @@ -246,27 +215,27 @@ integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== "@emotion/react@^11.11.4": - version "11.13.0" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.0.tgz#a9ebf827b98220255e5760dac89fa2d38ca7b43d" - integrity sha512-WkL+bw1REC2VNV1goQyfxjx1GYJkcc23CRQkXX+vZNLINyfI7o+uUn/rTGPt/xJ3bJHd5GcljgnxHf4wRw5VWQ== + version "11.13.3" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.13.3.tgz#a69d0de2a23f5b48e0acf210416638010e4bd2e4" + integrity sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg== dependencies: "@babel/runtime" "^7.18.3" "@emotion/babel-plugin" "^11.12.0" "@emotion/cache" "^11.13.0" - "@emotion/serialize" "^1.3.0" + "@emotion/serialize" "^1.3.1" "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" "@emotion/utils" "^1.4.0" "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.2.0", "@emotion/serialize@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.0.tgz#e07cadfc967a4e7816e0c3ffaff4c6ce05cb598d" - integrity sha512-jACuBa9SlYajnpIVXB+XOXnfJHyckDfe6fOpORIM6yhBDlqGuExvDdZYHDQGoDf3bZXGv7tNr+LpLjJqiEQ6EA== +"@emotion/serialize@^1.2.0", "@emotion/serialize@^1.3.0", "@emotion/serialize@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.1.tgz#490b660178f43d2de8e92b278b51079d726c05c3" + integrity sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA== dependencies: "@emotion/hash" "^0.9.2" "@emotion/memoize" "^0.9.0" - "@emotion/unitless" "^0.9.0" + "@emotion/unitless" "^0.10.0" "@emotion/utils" "^1.4.0" csstype "^3.0.2" @@ -287,10 +256,10 @@ "@emotion/use-insertion-effect-with-fallbacks" "^1.1.0" "@emotion/utils" "^1.4.0" -"@emotion/unitless@^0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.9.0.tgz#8e5548f072bd67b8271877e51c0f95c76a66cbe2" - integrity sha512-TP6GgNZtmtFaFcsOgExdnfxLLpRDla4Q66tnenA9CktvVSdNKDvMVuUah4QvWPIpNjrWsGg3qeGo9a43QooGZQ== +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== "@emotion/use-insertion-effect-with-fallbacks@^1.1.0": version "1.1.0" @@ -439,10 +408,10 @@ resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.1.1.tgz#5736523f5105c94dfae5f35e31debc38443722cd" integrity sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA== -"@eslint/config-array@^0.17.1": - version "0.17.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.17.1.tgz#d9b8b8b6b946f47388f32bedfd3adf29ca8f8910" - integrity sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA== +"@eslint/config-array@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.18.0.tgz#37d8fe656e0d5e3dbaea7758ea56540867fd074d" + integrity sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== dependencies: "@eslint/object-schema" "^2.1.4" debug "^4.3.1" @@ -463,10 +432,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.9.0", "@eslint/js@^9.9.0": - version "9.9.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.0.tgz#d8437adda50b3ed4401964517b64b4f59b0e2638" - integrity sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug== +"@eslint/js@9.9.1", "@eslint/js@^9.9.0": + version "9.9.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06" + integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -474,36 +443,29 @@ integrity sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== "@floating-ui/core@^1.6.0": - version "1.6.4" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.4.tgz#0140cf5091c8dee602bff9da5ab330840ff91df6" - integrity sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA== - dependencies: - "@floating-ui/utils" "^0.2.4" - -"@floating-ui/dom@^1.0.0", "@floating-ui/dom@^1.6.1": version "1.6.7" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.7.tgz#85d22f731fcc5b209db504478fb1df5116a83015" - integrity sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng== + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.7.tgz#7602367795a390ff0662efd1c7ae8ca74e75fb12" + integrity sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g== dependencies: - "@floating-ui/core" "^1.6.0" - "@floating-ui/utils" "^0.2.4" + "@floating-ui/utils" "^0.2.7" -"@floating-ui/react-dom@^2.0.8": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.1.tgz#cca58b6b04fc92b4c39288252e285e0422291fb0" - integrity sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg== +"@floating-ui/dom@^1.6.1": + version "1.6.10" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.10.tgz#b74c32f34a50336c86dcf1f1c845cf3a39e26d6f" + integrity sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A== dependencies: - "@floating-ui/dom" "^1.0.0" + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.7" -"@floating-ui/utils@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.4.tgz#1d459cee5031893a08a0e064c406ad2130cced7c" - integrity sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA== +"@floating-ui/utils@^0.2.7": + version "0.2.7" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.7.tgz#d0ece53ce99ab5a8e37ebdfe5e32452a2bfc073e" + integrity sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA== "@fontsource/roboto@^5.0.13": - version "5.0.13" - resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-5.0.13.tgz#2d6ec431a2f9dfe38ca76525c2d6bf12241f575b" - integrity sha512-j61DHjsdUCKMXSdNLTOxcG701FWnF0jcqNNQi2iPCDxU8seN/sMxeh62dC++UiagCWq9ghTypX+Pcy7kX+QOeQ== + version "5.0.14" + resolved "https://registry.yarnpkg.com/@fontsource/roboto/-/roboto-5.0.14.tgz#a3f67e47116309233ff3bba2c3613d2cf0302529" + integrity sha512-zHAxlTTm9RuRn9/StwclFJChf3z9+fBrOxC3fw71htjHP1BgXNISwRjdJtAKAmMe5S2BzgpnjkQR93P9EZYI/Q== "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" @@ -547,41 +509,28 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mui/base@^5.0.0-beta.40": - version "5.0.0-beta.40" - resolved "https://registry.yarnpkg.com/@mui/base/-/base-5.0.0-beta.40.tgz#1f8a782f1fbf3f84a961e954c8176b187de3dae2" - integrity sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ== - dependencies: - "@babel/runtime" "^7.23.9" - "@floating-ui/react-dom" "^2.0.8" - "@mui/types" "^7.2.14" - "@mui/utils" "^5.15.14" - "@popperjs/core" "^2.11.8" - clsx "^2.1.0" - prop-types "^15.8.1" - -"@mui/core-downloads-tracker@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.4.tgz#a34de72acd7e81fdbcc7eeb07786205e90dda148" - integrity sha512-rNdHXhclwjEZnK+//3SR43YRx0VtjdHnUFhMSGYmAMJve+KiwEja/41EYh8V3pZKqF2geKyfcFUenTfDTYUR4w== +"@mui/core-downloads-tracker@^5.16.7": + version "5.16.7" + resolved "https://registry.yarnpkg.com/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz#182a325a520f7ebd75de051fceabfc0314cfd004" + integrity sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ== "@mui/icons-material@^5.15.19": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.4.tgz#8c7e228c1e178992d89fab47e057222c8209bd7b" - integrity sha512-j9/CWctv6TH6Dou2uR2EH7UOgu79CW/YcozxCYVLJ7l03pCsiOlJ5sBArnWJxJ+nGkFwyL/1d1k8JEPMDR125A== + version "5.16.7" + resolved "https://registry.yarnpkg.com/@mui/icons-material/-/icons-material-5.16.7.tgz#e27f901af792065efc9f3d75d74a66af7529a10a" + integrity sha512-UrGwDJCXEszbDI7yV047BYU5A28eGJ79keTCP4cc74WyncuVrnurlmIRxaHL8YK+LI1Kzq+/JM52IAkNnv4u+Q== dependencies: "@babel/runtime" "^7.23.9" "@mui/material@^5.15.19": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.4.tgz#992d630637d9d38620e4937fb11d0a97965fdabf" - integrity sha512-dBnh3/zRYgEVIS3OE4oTbujse3gifA0qLMmuUk13ywsDCbngJsdgwW5LuYeiT5pfA8PGPGSqM7mxNytYXgiMCw== + version "5.16.7" + resolved "https://registry.yarnpkg.com/@mui/material/-/material-5.16.7.tgz#6e814e2eefdaf065a769cecf549c3569e107a50b" + integrity sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg== dependencies: "@babel/runtime" "^7.23.9" - "@mui/core-downloads-tracker" "^5.16.4" - "@mui/system" "^5.16.4" + "@mui/core-downloads-tracker" "^5.16.7" + "@mui/system" "^5.16.7" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.4" + "@mui/utils" "^5.16.6" "@popperjs/core" "^2.11.8" "@types/react-transition-group" "^4.4.10" clsx "^2.1.0" @@ -590,65 +539,64 @@ react-is "^18.3.1" react-transition-group "^4.4.5" -"@mui/private-theming@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.4.tgz#0118f137975b35dc4774c6d593b8fcf86594c3fc" - integrity sha512-ZsAm8cq31SJ37SVWLRlu02v9SRthxnfQofaiv14L5Bht51B0dz6yQEoVU/V8UduZDCCIrWkBHuReVfKhE/UuXA== +"@mui/private-theming@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/private-theming/-/private-theming-5.16.6.tgz#547671e7ae3f86b68d1289a0b90af04dfcc1c8c9" + integrity sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw== dependencies: "@babel/runtime" "^7.23.9" - "@mui/utils" "^5.16.4" + "@mui/utils" "^5.16.6" prop-types "^15.8.1" -"@mui/styled-engine@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.4.tgz#a7a8c9079c307bab91ccd65ed5dd1496ddf2a3ab" - integrity sha512-0+mnkf+UiAmTVB8PZFqOhqf729Yh0Cxq29/5cA3VAyDVTRIUUQ8FXQhiAhUIbijFmM72rY80ahFPXIm4WDbzcA== +"@mui/styled-engine@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/styled-engine/-/styled-engine-5.16.6.tgz#60110c106dd482dfdb7e2aa94fd6490a0a3f8852" + integrity sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g== dependencies: "@babel/runtime" "^7.23.9" "@emotion/cache" "^11.11.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/system@^5.16.2", "@mui/system@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.4.tgz#c03f971ed273f0ad06c69c949c05e866ad211407" - integrity sha512-ET1Ujl2/8hbsD611/mqUuNArMCGv/fIWO/f8B3ZqF5iyPHM2aS74vhTNyjytncc4i6dYwGxNk+tLa7GwjNS0/w== +"@mui/system@^5.16.7": + version "5.16.7" + resolved "https://registry.yarnpkg.com/@mui/system/-/system-5.16.7.tgz#4583ca5bf3b38942e02c15a1e622ba869ac51393" + integrity sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA== dependencies: "@babel/runtime" "^7.23.9" - "@mui/private-theming" "^5.16.4" - "@mui/styled-engine" "^5.16.4" + "@mui/private-theming" "^5.16.6" + "@mui/styled-engine" "^5.16.6" "@mui/types" "^7.2.15" - "@mui/utils" "^5.16.4" + "@mui/utils" "^5.16.6" clsx "^2.1.0" csstype "^3.1.3" prop-types "^15.8.1" -"@mui/types@^7.2.14", "@mui/types@^7.2.15": - version "7.2.15" - resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.15.tgz#dadd232fe9a70be0d526630675dff3b110f30b53" - integrity sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q== +"@mui/types@^7.2.15": + version "7.2.16" + resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.16.tgz#66710c691b51cd4fca95322100cd74ec230cfe30" + integrity sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag== -"@mui/utils@^5.15.14", "@mui/utils@^5.16.2", "@mui/utils@^5.16.4": - version "5.16.4" - resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.4.tgz#8e50e27a630e3d8eeb3e9d3bc31cbb0e4956f5fd" - integrity sha512-nlppYwq10TBIFqp7qxY0SvbACOXeOjeVL3pOcDsK0FT8XjrEXh9/+lkg8AEIzD16z7YfiJDQjaJG2OLkE7BxNg== +"@mui/utils@^5.16.6": + version "5.16.6" + resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711" + integrity sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA== dependencies: "@babel/runtime" "^7.23.9" + "@mui/types" "^7.2.15" "@types/prop-types" "^15.7.12" clsx "^2.1.1" prop-types "^15.8.1" react-is "^18.3.1" "@mui/x-date-pickers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.11.0.tgz#ac98d9057b733ddec117bc0938f364316eb12b5a" - integrity sha512-+zPWs1dwe7J1nZ2iFhTgCae31BLMYMQ2VtQfHxx21Dh6gbBRy/U7YJZg1LdhfQyE093S3e4A5uMZ6PUWdne7iA== - dependencies: - "@babel/runtime" "^7.24.8" - "@mui/base" "^5.0.0-beta.40" - "@mui/system" "^5.16.2" - "@mui/utils" "^5.16.2" - "@types/react-transition-group" "^4.4.10" + version "7.15.0" + resolved "https://registry.yarnpkg.com/@mui/x-date-pickers/-/x-date-pickers-7.15.0.tgz#a2e0979dda5d38fd34e5be76064b8331ef228894" + integrity sha512-YQEQICNxUEFYp/I/yP58cqihA8yhXaXSNZ1/N0JANu2IlCwoJ4Jzi+S0s4RN7RghpiDyoSMFijROBC5HfpTjiw== + dependencies: + "@babel/runtime" "^7.25.4" + "@mui/utils" "^5.16.6" + "@types/react-transition-group" "^4.4.11" clsx "^2.1.1" prop-types "^15.8.1" react-transition-group "^4.4.5" @@ -679,10 +627,10 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@remix-run/router@1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.18.0.tgz#20b033d1f542a100c1d57cfd18ecf442d1784732" - integrity sha512-L3jkqmqoSVBVKHfpGZmLrex0lxR5SucGA0sUfFzGctehw+S/ggL9L/0NnC5mw6P8HUWpFZ3nQw3cRApjjWx9Sw== +"@remix-run/router@1.19.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.1.tgz#984771bfd1de2715f42394c87fb716c1349e014f" + integrity sha512-S45oynt/WH19bHbIXjtli6QmwNYvaz+vtnubvNpNDvUOoA/OWh6j1OikIP3G+v5GHdxyC6EXoChG3HgYGEUfcg== "@rollup/pluginutils@^5.0.5": version "5.1.0" @@ -693,85 +641,85 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@rollup/rollup-android-arm-eabi@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.0.tgz#3d9fd50164b94964f5de68c3c4ce61933b3a338d" - integrity sha512-JlPfZ/C7yn5S5p0yKk7uhHTTnFlvTgLetl2VxqE518QgyM7C9bSfFTYvB/Q/ftkq0RIPY4ySxTz+/wKJ/dXC0w== - -"@rollup/rollup-android-arm64@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.0.tgz#e1a6d4bca2eb08c84fd996a4bf896ce4b6f4014c" - integrity sha512-RDxUSY8D1tWYfn00DDi5myxKgOk6RvWPxhmWexcICt/MEC6yEMr4HNCu1sXXYLw8iAsg0D44NuU+qNq7zVWCrw== - -"@rollup/rollup-darwin-arm64@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.0.tgz#0a3fffea69489a24a96079af414b0be78df8abbc" - integrity sha512-emvKHL4B15x6nlNTBMtIaC9tLPRpeA5jMvRLXVbl/W9Ie7HhkrE7KQjvgS9uxgatL1HmHWDXk5TTS4IaNJxbAA== - -"@rollup/rollup-darwin-x64@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.0.tgz#13fbdb15f58f090871b0ffff047ece06ad6ad74c" - integrity sha512-fO28cWA1dC57qCd+D0rfLC4VPbh6EOJXrreBmFLWPGI9dpMlER2YwSPZzSGfq11XgcEpPukPTfEVFtw2q2nYJg== - -"@rollup/rollup-linux-arm-gnueabihf@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.0.tgz#e9d9219ddf6f6e946e2ee322198af12466d2c868" - integrity sha512-2Rn36Ubxdv32NUcfm0wB1tgKqkQuft00PtM23VqLuCUR4N5jcNWDoV5iBC9jeGdgS38WK66ElncprqgMUOyomw== - -"@rollup/rollup-linux-arm-musleabihf@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.0.tgz#4ba804a00b5e793196a622f6977e05f23e01f59a" - integrity sha512-gJuzIVdq/X1ZA2bHeCGCISe0VWqCoNT8BvkQ+BfsixXwTOndhtLUpOg0A1Fcx/+eA6ei6rMBzlOz4JzmiDw7JQ== - -"@rollup/rollup-linux-arm64-gnu@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.0.tgz#d871e3f41de759a6db27fc99235b782ba47c15cc" - integrity sha512-0EkX2HYPkSADo9cfeGFoQ7R0/wTKb7q6DdwI4Yn/ULFE1wuRRCHybxpl2goQrx4c/yzK3I8OlgtBu4xvted0ug== - -"@rollup/rollup-linux-arm64-musl@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.0.tgz#6e63f7ad4cc51bd2c693a2826fd279de9eaa05b5" - integrity sha512-GlIQRj9px52ISomIOEUq/IojLZqzkvRpdP3cLgIE1wUWaiU5Takwlzpz002q0Nxxr1y2ZgxC2obWxjr13lvxNQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.0.tgz#1540b284d91c440bc9fa7a1714cfb71a5597e94d" - integrity sha512-N6cFJzssruDLUOKfEKeovCKiHcdwVYOT1Hs6dovDQ61+Y9n3Ek4zXvtghPPelt6U0AH4aDGnDLb83uiJMkWYzQ== - -"@rollup/rollup-linux-riscv64-gnu@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.0.tgz#70ae58103b5bc7ba2e2235738b51d97022c8ef92" - integrity sha512-2DnD3mkS2uuam/alF+I7M84koGwvn3ZVD7uG+LEWpyzo/bq8+kKnus2EVCkcvh6PlNB8QPNFOz6fWd5N8o1CYg== - -"@rollup/rollup-linux-s390x-gnu@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.0.tgz#579ca5f271421a961d3c73d221202c79e02ff03a" - integrity sha512-D6pkaF7OpE7lzlTOFCB2m3Ngzu2ykw40Nka9WmKGUOTS3xcIieHe82slQlNq69sVB04ch73thKYIWz/Ian8DUA== - -"@rollup/rollup-linux-x64-gnu@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.0.tgz#f0282d761b8b4e7b92b236813475248e37231849" - integrity sha512-HBndjQLP8OsdJNSxpNIN0einbDmRFg9+UQeZV1eiYupIRuZsDEoeGU43NQsS34Pp166DtwQOnpcbV/zQxM+rWA== - -"@rollup/rollup-linux-x64-musl@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.0.tgz#65da807ac66c505ad14b76f1e5976006cb67dd5f" - integrity sha512-HxfbvfCKJe/RMYJJn0a12eiOI9OOtAUF4G6ozrFUK95BNyoJaSiBjIOHjZskTUffUrB84IPKkFG9H9nEvJGW6A== - -"@rollup/rollup-win32-arm64-msvc@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.0.tgz#1eed24b91f421c2eea8bb7ca8889ba0c867e1780" - integrity sha512-HxDMKIhmcguGTiP5TsLNolwBUK3nGGUEoV/BO9ldUBoMLBssvh4J0X8pf11i1fTV7WShWItB1bKAKjX4RQeYmg== - -"@rollup/rollup-win32-ia32-msvc@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.0.tgz#1ed93c9cdc84e185359797a686f4d1576afcea58" - integrity sha512-xItlIAZZaiG/u0wooGzRsx11rokP4qyc/79LkAOdznGRAbOFc+SfEdfUOszG1odsHNgwippUJavag/+W/Etc6Q== - -"@rollup/rollup-win32-x64-msvc@4.19.0": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.0.tgz#baf9b65023ea2ecc5e6ec68f787a0fecfd8ee84c" - integrity sha512-xNo5fV5ycvCCKqiZcpB65VMR11NJB+StnxHz20jdqRAktfdfzhgjTiJ2doTDQE/7dqGaV5I7ZGqKpgph6lCIag== +"@rollup/rollup-android-arm-eabi@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz#0412834dc423d1ff7be4cb1fc13a86a0cd262c11" + integrity sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg== + +"@rollup/rollup-android-arm64@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz#baf1a014b13654f3b9e835388df9caf8c35389cb" + integrity sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA== + +"@rollup/rollup-darwin-arm64@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz#0a2c364e775acdf1172fe3327662eec7c46e55b1" + integrity sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q== + +"@rollup/rollup-darwin-x64@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz#a972db75890dfab8df0da228c28993220a468c42" + integrity sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w== + +"@rollup/rollup-linux-arm-gnueabihf@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz#1609d0630ef61109dd19a278353e5176d92e30a1" + integrity sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w== + +"@rollup/rollup-linux-arm-musleabihf@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz#3c1dca5f160aa2e79e4b20ff6395eab21804f266" + integrity sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w== + +"@rollup/rollup-linux-arm64-gnu@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz#c2fe376e8b04eafb52a286668a8df7c761470ac7" + integrity sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw== + +"@rollup/rollup-linux-arm64-musl@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz#e62a4235f01e0f66dbba587c087ca6db8008ec80" + integrity sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w== + +"@rollup/rollup-linux-powerpc64le-gnu@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz#24b3457e75ee9ae5b1c198bd39eea53222a74e54" + integrity sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ== + +"@rollup/rollup-linux-riscv64-gnu@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz#38edfba9620fe2ca8116c97e02bd9f2d606bde09" + integrity sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg== + +"@rollup/rollup-linux-s390x-gnu@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz#a3bfb8bc5f1e802f8c76cff4a4be2e9f9ac36a18" + integrity sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ== + +"@rollup/rollup-linux-x64-gnu@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz#0dadf34be9199fcdda44b5985a086326344f30ad" + integrity sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw== + +"@rollup/rollup-linux-x64-musl@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz#7b7deddce240400eb87f2406a445061b4fed99a8" + integrity sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg== + +"@rollup/rollup-win32-arm64-msvc@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz#a0ca0c5149c2cfb26fab32e6ba3f16996fbdb504" + integrity sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ== + +"@rollup/rollup-win32-ia32-msvc@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz#aae2886beec3024203dbb5569db3a137bc385f8e" + integrity sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw== + +"@rollup/rollup-win32-x64-msvc@4.21.2": + version "4.21.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz#e4291e3c1bc637083f87936c333cdbcad22af63b" + integrity sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA== "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" @@ -856,91 +804,103 @@ "@svgr/hast-util-to-babel-ast" "8.0.0" svg-parser "^2.0.4" -"@swc/core-darwin-arm64@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.0.tgz#fdc694dd6e8543f3efea0619a6fba9ce82939205" - integrity sha512-2ylhM7f0HwUwLrFYZAe/dse8PCbPsYcJS3Dt7Q8NT3PUn7vy6QOMxNcOPPuDrnmaXqQQO3oxdmRapguTxaat9g== - -"@swc/core-darwin-x64@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.0.tgz#a9a78ace5c7e43c8cb68d11c53d33a0bf966ca8e" - integrity sha512-SgVnN4gT1Rb9YfTkp4FCUITqSs7Yj0uB2SUciu5CV3HuGvS5YXCUzh+KrwpLFtx8NIgivISKcNnb41mJi98X8Q== - -"@swc/core-linux-arm-gnueabihf@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.0.tgz#6861ac82fda01b68b44970d3b9aaa955d7311d98" - integrity sha512-+Z9Dayart1iKJQEJJ9N/KS4z5EdXJE3WPFikY0jonKTo4Dd8RuyVz5yLvqcIMeVdz/SwximATaL6iJXw7hZS9A== - -"@swc/core-linux-arm64-gnu@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.0.tgz#aa0e3dac17807c73d501f52526115666d60ea7a6" - integrity sha512-UnLrCiZ1EI4shznJn0xP6DLgsXUSwtfsdgHhGYCrvbgVBBve3S9iFgVFEB3SPl7Q/TdowNbrN4zHU0oChfiNfw== - -"@swc/core-linux-arm64-musl@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.0.tgz#4bb226a4e9eabac4e1a3b3ffd7ea5955629c84ed" - integrity sha512-H724UANA+ptsfwKRr9mnaDa9cb5fw0oFysiGKTgb3DMYcgk3Od0jMTnXVPFSVpo7FlmyxeC9K8ueUPBOoOK6XA== - -"@swc/core-linux-x64-gnu@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.0.tgz#ee65d1362214e91de89414f41b3310ba5302c2c5" - integrity sha512-SY3HA0K0Dpqt1HIfMLGpwL4hd4UaL2xHP5oZXPlRQPhUDZrbb4PbI3ZJnh66c63eL4ZR8EJ+HRFI0Alx5p69Zw== - -"@swc/core-linux-x64-musl@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.0.tgz#0868518771004753acb07d9871cf5b143b51dc30" - integrity sha512-cEJ2ebtV1v/5Ilb55E05J6F5SrHKQWzUttIhR5Mkayyo+yvPslcpByuFC3D+J7X1ebziTOBpWuMpUdjLfh3SMQ== - -"@swc/core-win32-arm64-msvc@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.0.tgz#43048d67f871e798566c3883c991bed521ef3b9e" - integrity sha512-ecQOOmzEssz+m0pR4xDYCGuvn3E/l0nQ3tk5jp1NA1lsAy4bMV0YbYCHjptYvWL/UjhIerIp3IlCJ8x5DodSog== - -"@swc/core-win32-ia32-msvc@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.0.tgz#6e98f413e6469cfd00dcc7c106cb69f2c709e581" - integrity sha512-gz81seZkRn3zMnVOc7L5k6F4vQC82gIxmHiL+GedK+A37XI/X26AASU3zxvORnqQbwQYXQ+AEVckxBmFlz3v2g== - -"@swc/core-win32-x64-msvc@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.0.tgz#79dfce878552f0a066a40c9cef524f4a8f872674" - integrity sha512-b5Fd1xEOw9uqBpj2lqsaR4Iq9UhiL84hNDcEsi6DQA7Y1l85waQAslTbS0E4/pJ1PISAs0jW0zIGLco1eaWBOg== +"@swc/core-darwin-arm64@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.23.tgz#4ba141f07ba9b90cfc153582cbd874ebb11542fb" + integrity sha512-yyOHPfti6yKlQulfVWMt7BVKst+SyEZYCWuQSGMn1KgmNCH/bYufRWfQXIhkGSj44ZkEepJmsJ8tDyIb4k5WyA== + +"@swc/core-darwin-x64@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.23.tgz#09083175361340066c51303e24577c2bfd20c445" + integrity sha512-GzqHwQ0Y1VyjdI/bBKFX2GKm5HD3PIB6OhuAQtWZMTtEr2yIrlT0YK2T+XKh7oIg31JwxGBeQdBk3KTI7DARmQ== + +"@swc/core-linux-arm-gnueabihf@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.23.tgz#6295056530c4620c868889099c26cb183ee99e3d" + integrity sha512-qwX4gB41OS6/OZkHcpTqLFGsdmvoZyffnJIlgB/kZKwH3lfeJWzv6vx57zXtNpM/t7GoQEe0VZUVdmNjxSxBZw== + +"@swc/core-linux-arm64-gnu@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.23.tgz#b25a298883bc3e71faebc485ce9c0ac49808f975" + integrity sha512-TsrbUZdMaUwzI7+g/8rHPLWbntMKYSu5Bn5IBSqVKPeyqaXxNnlIUnWXgXcUcRAc+T+Y8ADfr7EiFz9iz5DuSA== + +"@swc/core-linux-arm64-musl@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.23.tgz#4b528e5d3cdba87a6bca420e9d7fe388ae2e5e7f" + integrity sha512-JEdtwdthazKq4PBz53KSubwwK8MvqODAihGSAzc8u3Unq4ojcvaS8b0CwLBeD+kTQ78HpxOXTt3DsFIxpgaCAA== + +"@swc/core-linux-x64-gnu@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.23.tgz#eded88bbd3f8acde4375a016b858f6a93781d690" + integrity sha512-V51gFPWaVAHbI1yg9ahsoya3aB4uawye3SZ5uQWgcP7wdCdiv60dw4F5nuPJf5Z1oXD3U/BslXuamv8Oh9vXqQ== + +"@swc/core-linux-x64-musl@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.23.tgz#28c06eb3709c2a170ba8a6de5ea6aa8b30fc2c43" + integrity sha512-BBqQi4+UdeRqag3yM4IJjaHG4yc1o3l9ksENHToE0o/u2DT0FY5+K/DiYGZLC1JHbSFzNqRCYsa7DIzRtZ0A1A== + +"@swc/core-win32-arm64-msvc@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.23.tgz#f7242c9f623145e6475ff5687102a5386560e247" + integrity sha512-JPk6pvCKncL6bXG7p+NLZf8PWx4FakVvKNdwGeMrYunb+yk1IZf7qf9LJk8+GDGF5QviDXPs8opZrTrfsW80fA== + +"@swc/core-win32-ia32-msvc@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.23.tgz#619346c6a0c859b6a16dbbf6b89a6f48c7d148a6" + integrity sha512-2Whxi8d+bLQBzJcQ5qYPHlk02YYVGsMVav0fWk+FnX2z1QRREIu1L1xvrpi7gBpjXp6BIU40ya8GiKeekNT2bg== + +"@swc/core-win32-x64-msvc@1.7.23": + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.23.tgz#fa7c87db0753e727cc1c167f6dc99ca55c9677df" + integrity sha512-82fARk4/yJ40kwWKY/gdKDisPdtgJE9jgpl/vkNG3alyJxrCzuNM7+CtiKoYbXLeqM8GQTS3wlvCaJu9oQ8dag== "@swc/core@^1.5.7": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.0.tgz#81f4e7dadf03e1d7f9a5e48a87f5d857e8fc1468" - integrity sha512-d4vMzH6ICllDwlPuhset2h8gu/USHdbyfJim+2hQEdxC0UONtfpmu38XBgNqRjStrji1Q5M10jfeUZL3cu1i8g== + version "1.7.23" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.23.tgz#1a98a0f73fac6ea1bf2ab452258caf5e29f3a9e4" + integrity sha512-VDNkpDvDlreGh2E3tlDj8B3piiuLhhQA/7rIVZpiLUvG1YpucAa6N7iDXA7Gc/+Hah8spaCg/qvEaBkCmcIYCQ== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.9" + "@swc/types" "^0.1.12" optionalDependencies: - "@swc/core-darwin-arm64" "1.7.0" - "@swc/core-darwin-x64" "1.7.0" - "@swc/core-linux-arm-gnueabihf" "1.7.0" - "@swc/core-linux-arm64-gnu" "1.7.0" - "@swc/core-linux-arm64-musl" "1.7.0" - "@swc/core-linux-x64-gnu" "1.7.0" - "@swc/core-linux-x64-musl" "1.7.0" - "@swc/core-win32-arm64-msvc" "1.7.0" - "@swc/core-win32-ia32-msvc" "1.7.0" - "@swc/core-win32-x64-msvc" "1.7.0" + "@swc/core-darwin-arm64" "1.7.23" + "@swc/core-darwin-x64" "1.7.23" + "@swc/core-linux-arm-gnueabihf" "1.7.23" + "@swc/core-linux-arm64-gnu" "1.7.23" + "@swc/core-linux-arm64-musl" "1.7.23" + "@swc/core-linux-x64-gnu" "1.7.23" + "@swc/core-linux-x64-musl" "1.7.23" + "@swc/core-win32-arm64-msvc" "1.7.23" + "@swc/core-win32-ia32-msvc" "1.7.23" + "@swc/core-win32-x64-msvc" "1.7.23" "@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.9": +"@swc/types@^0.1.12": version "0.1.12" resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.12.tgz#7f632c06ab4092ce0ebd046ed77ff7557442282f" integrity sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA== dependencies: "@swc/counter" "^0.1.3" +"@tanstack/query-core@5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.54.1.tgz#8d6c5e6691dd023f9181d69f7f9d790f52f1bdda" + integrity sha512-hKS+WRpT5zBFip21pB6Jx1C0hranWQrbv5EJ7qPoiV5MYI3C8rTCqWC9DdBseiPT1JgQWh8Y55YthuYZNiw3Xw== + +"@tanstack/react-query@^5.54.1": + version "5.54.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.54.1.tgz#55d9d9b290362160008bf5d5d7dedd485afbfc5e" + integrity sha512-SuMi4JBYv49UtmiRyqjxY7XAnE1qwLht9nlkC8sioxFXz5Uzj30lepiKf2mYXuXfC7fHYjTrAPkNx+427pRHXA== + dependencies: + "@tanstack/query-core" "5.54.1" + "@types/eslint@*": - version "9.6.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.0.tgz#51d4fe4d0316da9e9f2c80884f2c20ed5fb022ff" - integrity sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg== + version "9.6.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-9.6.1.tgz#d5795ad732ce81715f27f75da913004a56751584" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -973,9 +933,9 @@ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/node@^22.5.0": - version "22.5.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.0.tgz#10f01fe9465166b4cab72e75f60d8b99d019f958" - integrity sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg== + version "22.5.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.3.tgz#91a374e42c6e7ccb5893a87f1775f36ce1671d65" + integrity sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ== dependencies: undici-types "~6.19.2" @@ -1022,126 +982,126 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react-transition-group@^4.4.10": - version "4.4.10" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.10.tgz#6ee71127bdab1f18f11ad8fb3322c6da27c327ac" - integrity sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q== +"@types/react-transition-group@^4.4.10", "@types/react-transition-group@^4.4.11": + version "4.4.11" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.11.tgz#d963253a611d757de01ebb241143b1017d5d63d5" + integrity sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA== dependencies: "@types/react" "*" "@types/react@*", "@types/react@^18.2.66": - 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== + version "18.3.5" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.5.tgz#5f524c2ad2089c0ff372bbdabc77ca2c4dbadf8f" + integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== dependencies: "@types/prop-types" "*" csstype "^3.0.2" -"@typescript-eslint/eslint-plugin@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz#bf50e9c8dac6bdf15dd1b52ca29448550903558e" - integrity sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A== +"@typescript-eslint/eslint-plugin@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz#188c65610ef875a086404b5bfe105df936b035da" + integrity sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.2.0" - "@typescript-eslint/type-utils" "8.2.0" - "@typescript-eslint/utils" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/scope-manager" "8.4.0" + "@typescript-eslint/type-utils" "8.4.0" + "@typescript-eslint/utils" "8.4.0" + "@typescript-eslint/visitor-keys" "8.4.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/eslint-plugin@^7.2.0": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz#f5f5da52db674b1f2cdb9d5f3644e5b2ec750465" - integrity sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.16.1" - "@typescript-eslint/type-utils" "7.16.1" - "@typescript-eslint/utils" "7.16.1" - "@typescript-eslint/visitor-keys" "7.16.1" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.2.0.tgz#de3993304feb98576d9ffbf10c83ca1bcb68a5dd" - integrity sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg== +"@typescript-eslint/parser@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.4.0.tgz#36b7cd7643a1c190d49dc0278192b2450f615a6f" + integrity sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA== dependencies: - "@typescript-eslint/scope-manager" "8.2.0" - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/typescript-estree" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/scope-manager" "8.4.0" + "@typescript-eslint/types" "8.4.0" + "@typescript-eslint/typescript-estree" "8.4.0" + "@typescript-eslint/visitor-keys" "8.4.0" debug "^4.3.4" "@typescript-eslint/parser@^7.2.0": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.16.1.tgz#84c581cf86c8b2becd48d33ddc41a6303d57b274" - integrity sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA== - dependencies: - "@typescript-eslint/scope-manager" "7.16.1" - "@typescript-eslint/types" "7.16.1" - "@typescript-eslint/typescript-estree" "7.16.1" - "@typescript-eslint/visitor-keys" "7.16.1" + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz#2b43041caabf8ddd74512b8b550b9fc53ca3afa1" - integrity sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw== +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: - "@typescript-eslint/types" "7.16.1" - "@typescript-eslint/visitor-keys" "7.16.1" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/scope-manager@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz#4a4bd7e7df5522acc8795c3b6f21e8c41b951138" - integrity sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw== +"@typescript-eslint/scope-manager@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz#8a13d3c0044513d7960348db6f4789d2a06fa4b4" + integrity sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A== dependencies: - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/types" "8.4.0" + "@typescript-eslint/visitor-keys" "8.4.0" -"@typescript-eslint/type-utils@7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz#4d7ae4f3d9e3c8cbdabae91609b1a431de6aa6ca" - integrity sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA== +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: - "@typescript-eslint/typescript-estree" "7.16.1" - "@typescript-eslint/utils" "7.16.1" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/type-utils@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz#5cd7fef50f492e5a0f508bdd40678861a57c3549" - integrity sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w== +"@typescript-eslint/type-utils@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz#4a91b5789f41946adb56d73e2fb4639fdcf37af7" + integrity sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A== dependencies: - "@typescript-eslint/typescript-estree" "8.2.0" - "@typescript-eslint/utils" "8.2.0" + "@typescript-eslint/typescript-estree" "8.4.0" + "@typescript-eslint/utils" "8.4.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.16.1.tgz#bbab066276d18e398bc64067b23f1ce84dfc6d8c" - integrity sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/types@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.2.0.tgz#dfe9895a2812f7c6bf7af863054c22a67060420c" - integrity sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ== +"@typescript-eslint/types@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.4.0.tgz#b44d6a90a317a6d97a3e5fabda5196089eec6171" + integrity sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw== -"@typescript-eslint/typescript-estree@7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz#9b145ba4fd1dde1986697e1ce57dc501a1736dd3" - integrity sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ== +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: - "@typescript-eslint/types" "7.16.1" - "@typescript-eslint/visitor-keys" "7.16.1" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1149,54 +1109,54 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz#fbdb93a1c7ac7f1f96ae2de4fc97cd64c60ae894" - integrity sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA== +"@typescript-eslint/typescript-estree@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz#00ed79ae049e124db37315cde1531a900a048482" + integrity sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A== dependencies: - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/visitor-keys" "8.2.0" + "@typescript-eslint/types" "8.4.0" + "@typescript-eslint/visitor-keys" "8.4.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" minimatch "^9.0.4" semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.16.1.tgz#df42dc8ca5a4603016fd102db0346cdab415cdb7" - integrity sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA== +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.16.1" - "@typescript-eslint/types" "7.16.1" - "@typescript-eslint/typescript-estree" "7.16.1" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/utils@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.2.0.tgz#02d442285925f28d520587185f295f932702e733" - integrity sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg== +"@typescript-eslint/utils@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.4.0.tgz#35c552a404858c853a1f62ba6df2214f1988afc3" + integrity sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.2.0" - "@typescript-eslint/types" "8.2.0" - "@typescript-eslint/typescript-estree" "8.2.0" + "@typescript-eslint/scope-manager" "8.4.0" + "@typescript-eslint/types" "8.4.0" + "@typescript-eslint/typescript-estree" "8.4.0" -"@typescript-eslint/visitor-keys@7.16.1": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz#4287bcf44c34df811ff3bb4d269be6cfc7d8c74b" - integrity sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@typescript-eslint/types" "7.16.1" + "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@8.2.0": - version "8.2.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz#f6abb3b6508898a117175ddc11f9b9869cc96834" - integrity sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q== +"@typescript-eslint/visitor-keys@8.4.0": + version "8.4.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz#1e8a8b8fd3647db1e42361fdd8de3e1679dec9d2" + integrity sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A== dependencies: - "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/types" "8.4.0" eslint-visitor-keys "^3.4.3" "@vitejs/plugin-react-swc@^3.5.0": @@ -1251,9 +1211,9 @@ ansi-styles@^4.1.0: color-convert "^2.0.1" apexcharts@^3.50.0: - version "3.51.0" - resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.51.0.tgz#f99d8a7f49045b61bab795522f35233faac5fe94" - integrity sha512-WpCdVdGiJjf9SAyEeg2rl3q5OqCcNqiEmH0+filMraUiH6Vqyn5GFeMMyH0pon44xjNr1G0xzIRERKRmsGEuRA== + version "3.53.0" + resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.53.0.tgz#9ea2b4d837d9faf2c0bff79d228db48e75b2220a" + integrity sha512-QESZHZY3w9LPQ64PGh1gEdfjYjJ5Jp+Dfy0D/CLjsLOPTpXzdxwlNMqRj+vPbTcP0nAHgjWv1maDqcEq6u5olw== dependencies: "@yr/monotone-cubic-spline" "^1.0.3" svg.draggable.js "^2.2.2" @@ -1310,13 +1270,13 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.23.1: - version "4.23.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" - integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001640" - electron-to-chromium "^1.4.820" - node-releases "^2.0.14" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" update-browserslist-db "^1.1.0" callsites@^3.0.0: @@ -1329,10 +1289,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001640: - version "1.0.30001643" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz#9c004caef315de9452ab970c3da71085f8241dbd" - integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg== +caniuse-lite@^1.0.30001646: + version "1.0.30001655" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz#0ce881f5a19a2dcfda2ecd927df4d5c1684b982f" + integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== chalk@^2.4.2: version "2.4.2" @@ -1441,14 +1401,14 @@ csstype@^3.0.2, csstype@^3.1.3: integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== dayjs@^1.11.12: - version "1.11.12" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" - integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" @@ -1480,10 +1440,10 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -electron-to-chromium@^1.4.820: - version "1.4.832" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.832.tgz#d25882ce0a9237577b039bffa124ecef1822003b" - integrity sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA== +electron-to-chromium@^1.5.4: + version "1.5.13" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz#1abf0410c5344b2b829b7247e031f02810d442e6" + integrity sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q== entities@^4.4.0: version "4.5.0" @@ -1527,9 +1487,9 @@ esbuild@^0.21.3: "@esbuild/win32-x64" "0.21.5" 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== + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.5: version "1.0.5" @@ -1552,9 +1512,9 @@ eslint-plugin-react-hooks@^4.6.0: integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react-refresh@^0.4.6: - version "0.4.9" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz#bf870372b353b12e1e6fb7fc41b282d9cbc8d93d" - integrity sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA== + version "0.4.11" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.11.tgz#e450761a2bdb260aa10cfb73f846209a737827cb" + integrity sha512-wrAKxMbVr8qhXTtIKfXqAn5SAtRZt0aXxe5P23Fh4pUAdC6XEsybGLB8P0PI4j1yYqOgUEUlzKAGDfo7rJOjcw== eslint-scope@^8.0.2: version "8.0.2" @@ -1575,15 +1535,15 @@ eslint-visitor-keys@^4.0.0: integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== eslint@^9.9.0: - version "9.9.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.0.tgz#8d214e69ae4debeca7ae97daebbefe462072d975" - integrity sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA== + version "9.9.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.9.1.tgz#147ac9305d56696fb84cf5bdecafd6517ddc77ec" + integrity sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.11.0" - "@eslint/config-array" "^0.17.1" + "@eslint/config-array" "^0.18.0" "@eslint/eslintrc" "^3.1.0" - "@eslint/js" "9.9.0" + "@eslint/js" "9.9.1" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.3.0" "@nodelib/fs.walk" "^1.2.8" @@ -1657,7 +1617,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: +fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -1811,9 +1771,9 @@ hoist-non-react-statics@^3.3.1: react-is "^16.7.0" ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -1834,9 +1794,9 @@ is-arrayish@^0.2.1: integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-core-module@^2.13.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" - integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" @@ -2027,10 +1987,10 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-releases@^2.0.14: - version "2.0.17" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.17.tgz#d74bc4fec38d839eec5db2a3c9c963d4f33cb366" - integrity sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== notistack@^3.0.1: version "3.0.1" @@ -2109,19 +2069,19 @@ path-type@^4.0.0: integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 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== + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -postcss@^8.4.39: - version "8.4.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" - integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== +postcss@^8.4.43: + version "8.4.45" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.45.tgz#538d13d89a16ef71edbf75d895284ae06b79e603" + integrity sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q== dependencies: nanoid "^3.3.7" picocolors "^1.0.1" @@ -2182,12 +2142,12 @@ react-is@^18.3.1: integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-router-dom@^6.23.1: - version "6.25.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.25.1.tgz#b89f8d63fc8383ea4e89c44bf31c5843e1f7afa0" - integrity sha512-0tUDpbFvk35iv+N89dWNrJp+afLgd+y4VtorJZuOCXK0kkCWjEvb3vTJM++SYvMEpbVwXKf3FjeVveVEb6JpDQ== + version "6.26.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.1.tgz#a408892b41767a49dc94b3564b0e7d8e3959f623" + integrity sha512-veut7m41S1fLql4pLhxeSW3jlqs+4MtjRLj0xvuCEXsxusJCbs6I8yn9BxzzDX2XDgafrccY6hwjmd/bL54tFw== dependencies: - "@remix-run/router" "1.18.0" - react-router "6.25.1" + "@remix-run/router" "1.19.1" + react-router "6.26.1" react-router-hash-link@^2.4.3: version "2.4.3" @@ -2196,17 +2156,17 @@ react-router-hash-link@^2.4.3: dependencies: prop-types "^15.7.2" -react-router@6.25.1: - version "6.25.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.25.1.tgz#70b4f1af79954cfcfd23f6ddf5c883e8c904203e" - integrity sha512-u8ELFr5Z6g02nUtpPAggP73Jigj1mRePSwhS/2nkTrlPU5yEkH1vYzWNyvSnSzeeE2DNqWdH+P8OhIh9wuXhTw== +react-router@6.26.1: + version "6.26.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.1.tgz#88c64837e05ffab6899a49df2a1484a22471e4ce" + integrity sha512-kIwJveZNwp7teQRI5QmwWo39A5bXRyqpH0COKKmPnyD2vBvDwgFXSqDUYtt1h+FEyfnE8eXr7oe0MxRzVwCcvQ== dependencies: - "@remix-run/router" "1.18.0" + "@remix-run/router" "1.19.1" react-tooltip@^5.27.0: - version "5.27.1" - resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.27.1.tgz#a94481ba146d828d31642f14d6ab29b56998fcda" - integrity sha512-a+micPXcMOMt11CYlwJD4XShcqGziasHco4NPe1OFw298WBTILMyzUgNC1LAFViAe791JdHNVSJIpzhZm2MvDA== + version "5.28.0" + resolved "https://registry.yarnpkg.com/react-tooltip/-/react-tooltip-5.28.0.tgz#c7b5343ab2d740a428494a3d8315515af1f26f46" + integrity sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg== dependencies: "@floating-ui/dom" "^1.6.1" classnames "^2.3.0" @@ -2252,29 +2212,29 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rollup@^4.13.0: - version "4.19.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.19.0.tgz#83b08cc0b2bc38c26c194cb7f2cdabd84a2a8c02" - integrity sha512-5r7EYSQIowHsK4eTZ0Y81qpZuJz+MUuYeqmmYmRMl1nwhdmbiYqt5jwzf6u7wyOzJgYqtCRMtVRKOtHANBz7rA== +rollup@^4.20.0: + version "4.21.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.21.2.tgz#f41f277a448d6264e923dd1ea179f0a926aaf9b7" + integrity sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.19.0" - "@rollup/rollup-android-arm64" "4.19.0" - "@rollup/rollup-darwin-arm64" "4.19.0" - "@rollup/rollup-darwin-x64" "4.19.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.19.0" - "@rollup/rollup-linux-arm-musleabihf" "4.19.0" - "@rollup/rollup-linux-arm64-gnu" "4.19.0" - "@rollup/rollup-linux-arm64-musl" "4.19.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.19.0" - "@rollup/rollup-linux-riscv64-gnu" "4.19.0" - "@rollup/rollup-linux-s390x-gnu" "4.19.0" - "@rollup/rollup-linux-x64-gnu" "4.19.0" - "@rollup/rollup-linux-x64-musl" "4.19.0" - "@rollup/rollup-win32-arm64-msvc" "4.19.0" - "@rollup/rollup-win32-ia32-msvc" "4.19.0" - "@rollup/rollup-win32-x64-msvc" "4.19.0" + "@rollup/rollup-android-arm-eabi" "4.21.2" + "@rollup/rollup-android-arm64" "4.21.2" + "@rollup/rollup-darwin-arm64" "4.21.2" + "@rollup/rollup-darwin-x64" "4.21.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.21.2" + "@rollup/rollup-linux-arm-musleabihf" "4.21.2" + "@rollup/rollup-linux-arm64-gnu" "4.21.2" + "@rollup/rollup-linux-arm64-musl" "4.21.2" + "@rollup/rollup-linux-powerpc64le-gnu" "4.21.2" + "@rollup/rollup-linux-riscv64-gnu" "4.21.2" + "@rollup/rollup-linux-s390x-gnu" "4.21.2" + "@rollup/rollup-linux-x64-gnu" "4.21.2" + "@rollup/rollup-linux-x64-musl" "4.21.2" + "@rollup/rollup-win32-arm64-msvc" "4.21.2" + "@rollup/rollup-win32-ia32-msvc" "4.21.2" + "@rollup/rollup-win32-x64-msvc" "4.21.2" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -2455,9 +2415,9 @@ ts-api-utils@^1.3.0: integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== tslib@^2.0.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -2467,13 +2427,13 @@ type-check@^0.4.0, type-check@~0.4.0: prelude-ls "^1.2.1" typescript-eslint@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.2.0.tgz#90d75636b663a9f5e391e9b3a33f3031236a25c8" - integrity sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw== + version "8.4.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.4.0.tgz#3fa38bd279994cdb40ba9264ef5262a17cf4cfa0" + integrity sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw== dependencies: - "@typescript-eslint/eslint-plugin" "8.2.0" - "@typescript-eslint/parser" "8.2.0" - "@typescript-eslint/utils" "8.2.0" + "@typescript-eslint/eslint-plugin" "8.4.0" + "@typescript-eslint/parser" "8.4.0" + "@typescript-eslint/utils" "8.4.0" typescript@^5.5.4: version "5.5.4" @@ -2510,13 +2470,13 @@ vite-plugin-svgr@^4.2.0: "@svgr/plugin-jsx" "^8.1.0" vite@^5.2.0: - version "5.3.4" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.4.tgz#b36ebd47c8a5e3a8727046375d5f10bf9fdf8715" - integrity sha512-Cw+7zL3ZG9/NZBB8C+8QbQZmR54GwqIz+WMI4b3JgdYJvX+ny9AjJXqkGQlDXSXRP9rP0B4tbciRMOVEKulVOA== + version "5.4.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.3.tgz#771c470e808cb6732f204e1ee96c2ed65b97a0eb" + integrity sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q== dependencies: esbuild "^0.21.3" - postcss "^8.4.39" - rollup "^4.13.0" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3"