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"