diff --git a/mobile/traque-app/.eslintrc.js b/mobile/traque-app/.eslintrc.js
index 5e0f171..57eeb0d 100644
--- a/mobile/traque-app/.eslintrc.js
+++ b/mobile/traque-app/.eslintrc.js
@@ -21,6 +21,12 @@ module.exports = {
"react",
"react-native"
],
+ "ignorePatterns": [
+ "android/",
+ ".expo/",
+ "node_modules/",
+ "src/assets/",
+ ],
"rules": {
"react/react-in-jsx-scope": "off",
"react/prop-types": "off",
@@ -29,6 +35,11 @@ module.exports = {
"react-native/no-unused-styles": "warn",
"react-native/no-single-element-style-arrays": "warn",
'import/extensions': 'off',
+ "import/no-unresolved": "off",
+ "import/named": "off",
+ "import/namespace": "off",
+ "import/default": "off",
+ "import/no-named-as-default-member": "off"
},
"settings": {
"react": {
@@ -38,9 +49,9 @@ module.exports = {
"react-native"
],
'import/resolver': {
- node: {
- extensions: ['.js', '.jsx', '.ts', '.tsx'],
- },
+ "node": {
+ "extensions": ['.js', '.jsx', '.ts', '.tsx'],
+ }
},
}
-};
\ No newline at end of file
+};
diff --git a/mobile/traque-app/app/(auth)/_layout.jsx b/mobile/traque-app/app/(auth)/_layout.jsx
new file mode 100644
index 0000000..96ccf70
--- /dev/null
+++ b/mobile/traque-app/app/(auth)/_layout.jsx
@@ -0,0 +1,8 @@
+// Expo
+import { Slot } from 'expo-router';
+
+const AuthLayout = () => {
+ return ;
+};
+
+export default AuthLayout;
diff --git a/mobile/traque-app/app/(auth)/location-permission.jsx b/mobile/traque-app/app/(auth)/location-permission.jsx
new file mode 100644
index 0000000..5ec6f86
--- /dev/null
+++ b/mobile/traque-app/app/(auth)/location-permission.jsx
@@ -0,0 +1,7 @@
+import { Text } from 'react-native';
+
+const LocationPermission = () => {
+ return {"Veuillez activer la géolocalisation en arrière plan dans les paramètres, puis relancez l'application."};
+};
+
+export default LocationPermission;
diff --git a/mobile/traque-app/app/(auth)/login.jsx b/mobile/traque-app/app/(auth)/login.jsx
new file mode 100644
index 0000000..30bd9b8
--- /dev/null
+++ b/mobile/traque-app/app/(auth)/login.jsx
@@ -0,0 +1,132 @@
+// React
+import { useState } from 'react';
+import { ScrollView, View, Text, StyleSheet, Image, Alert, TouchableHighlight } from 'react-native';
+import { useTranslation } from 'react-i18next';
+// Components
+import { TouchableImage } from '@/components/common/Image';
+import { CustomTextInput } from '@/components/common/Input';
+// Contexts
+import { useAuth } from "@/contexts/authContext";
+// Hooks
+import { usePickImage } from '@/hooks/usePickImage';
+// Services
+import { uploadTeamImage } from '@/services/api/image';
+// Constants
+import { COLORS } from '@/constants';
+
+const Login = () => {
+ const { t } = useTranslation();
+ const { login } = useAuth();
+ const { image, pickImage } = usePickImage();
+ const [teamId, setTeamId] = useState("");
+ const [isSubmitting, setIsSubmitting] = useState(false);
+
+ const handleSubmit = async () => {
+ if (isSubmitting) return;
+
+ setIsSubmitting(true);
+
+ const regex = /^\d{6}$/;
+ if (!regex.test(teamId)) {
+ setTimeout(() => Alert.alert(t("error.title"), t("error.invalid_team_id")), 100);
+ return;
+ }
+
+ try {
+ const response = await login(teamId);
+
+ if (response) {
+ uploadTeamImage(teamId, image?.uri);
+ setTeamId("");
+ } else {
+ setTimeout(() => Alert.alert(t("error.title"), t("error.unknown_team_id")), 100);
+ }
+ } catch (error) {
+ setTimeout(() => Alert.alert(t("error.title"), t("error.server_connection")), 100);
+ } finally {
+ setIsSubmitting(false);
+ }
+ };
+
+ return (
+
+
+
+
+ {t("index.header.title")}
+
+
+
+
+
+ {t("index.form.image_label")}
+ {t("index.form.image_sublabel")}
+
+
+
+
+
+ {isSubmitting ? "..." : t("index.form.validate_button")}
+
+
+
+
+
+ );
+};
+
+export default Login;
+
+const styles = StyleSheet.create({
+ container: {
+ flexGrow: 1,
+ alignItems: 'center',
+ paddingVertical: 20,
+ backgroundColor: COLORS.background
+ },
+ transitionContainer: {
+ flexGrow: 1,
+ width: '80%',
+ maxWidth: 600,
+ alignItems: 'center',
+ },
+ subContainer: {
+ flexGrow: 1,
+ width: "100%",
+ alignItems: 'center',
+ justifyContent: 'center',
+ margin: 10,
+ },
+ logoImage: {
+ width: 130,
+ height: 130,
+ margin: 10,
+ },
+ logoText: {
+ fontSize: 50,
+ fontWeight: 'bold',
+ },
+ buttonContainer: {
+ width: "100%",
+ maxWidth: 240,
+ height: 80,
+ alignItems: 'center',
+ justifyContent: 'center',
+ padding: 3,
+ borderWidth: 4,
+ borderColor: '#888',
+ borderRadius: 18
+ },
+ button: {
+ borderRadius: 10,
+ width: '100%',
+ height: '100%',
+ alignItems: 'center',
+ justifyContent: 'center',
+ backgroundColor: '#555'
+ },
+ buttonLabel: {
+ color: '#fff',
+ fontSize: 16,
+ },
+});
diff --git a/mobile/traque-app/app/(game)/_layout.jsx b/mobile/traque-app/app/(game)/_layout.jsx
new file mode 100644
index 0000000..6314d03
--- /dev/null
+++ b/mobile/traque-app/app/(game)/_layout.jsx
@@ -0,0 +1,8 @@
+// Expo
+import { Slot } from 'expo-router';
+
+const GameLayout = () => {
+ return ;
+};
+
+export default GameLayout;
diff --git a/mobile/traque-app/app/(game)/end.jsx b/mobile/traque-app/app/(game)/end.jsx
new file mode 100644
index 0000000..a48d891
--- /dev/null
+++ b/mobile/traque-app/app/(game)/end.jsx
@@ -0,0 +1,31 @@
+// React
+import { View, Text, StyleSheet } from 'react-native';
+// Components
+import { Header } from '@/components/game/Header';
+// Constants
+import { COLORS } from '@/constants';
+
+const End = () => {
+ return (
+
+
+
+ Fin de la partie !
+
+
+ );
+};
+
+export default End;
+
+const styles = StyleSheet.create({
+ globalContainer: {
+ backgroundColor: COLORS.background,
+ flex: 1,
+ },
+ topContainer: {
+ width: '100%',
+ alignItems: 'center',
+ padding: 15,
+ }
+});
diff --git a/mobile/traque-app/app/(game)/play.jsx b/mobile/traque-app/app/(game)/play.jsx
new file mode 100644
index 0000000..f100231
--- /dev/null
+++ b/mobile/traque-app/app/(game)/play.jsx
@@ -0,0 +1,110 @@
+// React
+import { useState } from 'react';
+import { View, Alert, StyleSheet } from 'react-native';
+import LinearGradient from 'react-native-linear-gradient';
+import { useTranslation } from 'react-i18next';
+// Components
+import { Map } from '@/components/common/Map';
+import { TimerMMSS } from '@/components/common/Timer';
+import { Show } from '@/components/common/Show';
+import { PositionMarker } from '@/components/common/Layers';
+import { IconButton } from '@/components/common/IconButton';
+import { Header } from '@/components/game/Header';
+import { TargetInfoDrawer } from '@/components/game/TargetInfoDrawer';
+import { Toasts } from '@/components/game/Toasts';
+import { GameZone, StartZone } from '@/components/game/MapLayers';
+// Contexts
+import { useTeam } from '@/contexts/teamContext';
+// Hooks
+import { useUserState } from '@/hooks/useUserState';
+// Services
+import { emitSendPosition } from '@/services/socket/emitters';
+// Constants
+import { COLORS, USER_STATE } from '@/constants';
+
+const Play = () => {
+ const { t } = useTranslation();
+ const { teamInfos, nextZoneDate } = useTeam();
+ const { locationSendDeadline, hasHandicap, enemyLocation, lastSentLocation } = teamInfos;
+ const userState = useUserState();
+ const [bottomContainerHeight, setBottomContainerHeight] = useState(0);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ setBottomContainerHeight(event.nativeEvent.layout.height)}>
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Play;
+
+const styles = StyleSheet.create({
+ globalContainer: {
+ backgroundColor: COLORS.background,
+ flex: 1,
+ },
+ topContainer: {
+ width: '100%',
+ alignItems: 'center',
+ padding: 15,
+ },
+ infoContainer: {
+ width: '100%',
+ alignItems: 'center',
+ justifyContent: 'center',
+ flexDirection: 'row',
+ marginTop: 15
+ },
+ bottomContainer: {
+ flex: 1,
+ borderTopLeftRadius: 30,
+ borderTopRightRadius: 30,
+ overflow: 'hidden',
+ },
+ updatePosition: {
+ position: 'absolute',
+ right: 30,
+ bottom: 80,
+ width: 60,
+ height: 60,
+ borderRadius: 30,
+ backgroundColor: 'white',
+ borderWidth: 4,
+ borderColor: 'black'
+ },
+ gradient: {
+ position: "absolute",
+ width: "100%",
+ height: 40,
+ }
+});
diff --git a/mobile/traque-app/app/(game)/wait.jsx b/mobile/traque-app/app/(game)/wait.jsx
new file mode 100644
index 0000000..fadc55b
--- /dev/null
+++ b/mobile/traque-app/app/(game)/wait.jsx
@@ -0,0 +1,31 @@
+// React
+import { View, Text, StyleSheet } from 'react-native';
+// Components
+import { Header } from '@/components/game/Header';
+// Constants
+import { COLORS } from '@/constants';
+
+const Wait = () => {
+ return (
+
+
+
+ Veuillez patienter, la partie va bientôt commencer !
+
+
+ );
+};
+
+export default Wait;
+
+const styles = StyleSheet.create({
+ globalContainer: {
+ backgroundColor: COLORS.background,
+ flex: 1,
+ },
+ topContainer: {
+ width: '100%',
+ alignItems: 'center',
+ padding: 15,
+ }
+});
diff --git a/mobile/traque-app/app/_layout.jsx b/mobile/traque-app/app/_layout.jsx
index 1b9a1f8..71f171e 100644
--- a/mobile/traque-app/app/_layout.jsx
+++ b/mobile/traque-app/app/_layout.jsx
@@ -1,17 +1,86 @@
+// React
+import { useEffect } from 'react';
// Expo
-import { Slot } from 'expo-router';
+import { Slot, useRouter, usePathname } from 'expo-router';
// Contexts
-import { AuthProvider } from "../src/contexts/authContext";
-import { TeamProvider } from "../src/contexts/teamContext";
+import { AuthProvider } from "@/contexts/authContext";
+import { TeamProvider } from "@/contexts/teamContext";
+// Services
+import { startLocationTracking , stopLocationTracking } from '@/services/tasks/backgroundLocation';
+// Constants
+import { USER_STATE } from '@/constants';
+// Traduction
+import '@/i18n/config';
+import { useUserState } from '@/hooks/useUserState';
-const Layout = () => {
+const NavigationManager = () => {
+ const router = useRouter();
+ const pathname = usePathname();
+ const userState = useUserState();
+
+ // Location tracking
+ useEffect(() => {
+ const trackingStates = [
+ USER_STATE.WAITING,
+ USER_STATE.PLACEMENT,
+ USER_STATE.PLAYING,
+ USER_STATE.CAPTURED,
+ USER_STATE.FINISHED
+ ];
+
+ if (trackingStates.includes(userState)) {
+ startLocationTracking();
+ } else {
+ stopLocationTracking();
+ }
+ }, [userState]);
+
+ // Routing
+ useEffect(() => {
+ let targetRoute;
+
+ switch (userState) {
+ case USER_STATE.LOADING:
+ return;
+ case USER_STATE.NO_LOCATION:
+ targetRoute = "/location-permission";
+ break;
+ case USER_STATE.OFFLINE:
+ targetRoute = "/login";
+ break;
+ case USER_STATE.WAITING:
+ targetRoute = "/wait";
+ break;
+ case USER_STATE.PLACEMENT:
+ case USER_STATE.PLAYING:
+ targetRoute = "/play";
+ break;
+ case USER_STATE.CAPTURED:
+ case USER_STATE.FINISHED:
+ targetRoute = "/end";
+ break;
+ default:
+ targetRoute = "/";
+ break;
+ }
+
+ if (pathname !== targetRoute) {
+ router.replace(targetRoute);
+ }
+ }, [router, pathname, userState]);
+
+ return null;
+};
+
+const RootLayout = () => {
return (
+
);
};
-export default Layout;
+export default RootLayout;
diff --git a/mobile/traque-app/app/index.jsx b/mobile/traque-app/app/index.jsx
index da9bced..3e1f6c3 100644
--- a/mobile/traque-app/app/index.jsx
+++ b/mobile/traque-app/app/index.jsx
@@ -1,121 +1,5 @@
-// React
-import { useState, useEffect } from 'react';
-import { ScrollView, View, Text, StyleSheet, Image, Alert } from 'react-native';
-// Expo
-import { useRouter } from 'expo-router';
-// Components
-import { CustomButton } from '../src/components/button';
-import { CustomImage } from '../src/components/image';
-import { CustomTextInput } from '../src/components/input';
-// Contexts
-import { useAuth } from "../src/contexts/authContext";
-// Hooks
-import { usePickImage } from '../src/hooks/usePickImage';
-// Services
-import { uploadTeamImage } from '../src/services/api/image';
-import { getLocationAuthorization, stopLocationTracking } from '../src/services/tasks/backgroundLocation';
-// Constants
-import { COLORS } from '../src/constants';
-
const Index = () => {
- const router = useRouter();
- const { loggedIn, login } = useAuth();
- const { image, pickImage } = usePickImage();
- const [teamId, setTeamId] = useState("");
- const [isSubmitting, setIsSubmitting] = useState(false);
-
- // Disbaling location tracking and asking permissions
- useEffect(() => {
- stopLocationTracking();
- getLocationAuthorization();
- }, []);
-
- // Routeur
- useEffect(() => {
- if (loggedIn) {
- router.replace("/interface");
- }
- }, [router, loggedIn, image]);
-
- const handleSubmit = async () => {
- if (isSubmitting || !getLocationAuthorization()) return;
-
- setIsSubmitting(true);
-
- const regex = /^\d{6}$/;
- if (!regex.test(teamId)) {
- setTimeout(() => Alert.alert("Erreur", "Veuillez entrer un ID d'équipe valide."), 100);
- return;
- }
-
- try {
- const response = await login(teamId);
-
- if (response.isLoggedIn) {
- uploadTeamImage(teamId, image?.uri);
- setTeamId("");
- } else {
- setTimeout(() => Alert.alert("Échec", "L'ID d'équipe est inconnu."), 100);
- }
- } catch (error) {
- setTimeout(() => Alert.alert("Échec", "La connexion au serveur a échoué."), 100);
- } finally {
- setIsSubmitting(false);
- }
- };
-
- return (
-
-
-
-
- LA TRAQUE
-
-
-
-
-
- Appuyer pour changer la photo d'équipe
- (Le haut du corps doit être visible)
-
-
-
-
-
-
-
- );
+ return null;
};
export default Index;
-
-const styles = StyleSheet.create({
- container: {
- flexGrow: 1,
- alignItems: 'center',
- paddingVertical: 20,
- backgroundColor: COLORS.background
- },
- transitionContainer: {
- flexGrow: 1,
- width: '80%',
- maxWidth: 600,
- alignItems: 'center',
- },
- subContainer: {
- flexGrow: 1,
- width: "100%",
- alignItems: 'center',
- justifyContent: 'center',
- margin: 10,
- },
- logoImage: {
- width: 130,
- height: 130,
- margin: 10,
- },
- logoText: {
- fontSize: 50,
- fontWeight: 'bold',
- }
-});
diff --git a/mobile/traque-app/app/interface.jsx b/mobile/traque-app/app/interface.jsx
deleted file mode 100644
index c619dbe..0000000
--- a/mobile/traque-app/app/interface.jsx
+++ /dev/null
@@ -1,179 +0,0 @@
-// React
-import { useState, useEffect, useMemo, Fragment } from 'react';
-import { View, Text, Image, Alert, StyleSheet, TouchableOpacity } from 'react-native';
-// Expo
-import { useRouter } from 'expo-router';
-// Components
-import { CustomMap } from '../src/components/map';
-import { Drawer } from '../src/components/drawer';
-import { TimerMMSS } from '../src/components/timer';
-// Contexts
-import { useAuth } from '../src/contexts/authContext';
-import { useTeam } from '../src/contexts/teamContext';
-// Hooks
-import { useTimeDifference } from '../src/hooks/useTimeDifference';
-// Services
-import { emitSendPosition } from '../src/services/socket/emitters';
-import { startLocationTracking } from '../src/services/tasks/backgroundLocation';
-// Util
-import { secondsToMMSS } from '../src/utils/functions';
-// Constants
-import { GAME_STATE, COLORS } from '../src/constants';
-
-const Interface = () => {
- const router = useRouter();
- const {teamInfos, messages, nextZoneDate, gameState} = useTeam();
- const {name, ready, captured, locationSendDeadline, outOfZone, outOfZoneDeadline, hasHandicap, enemyHasHandicap} = teamInfos;
- const { loggedIn, logout } = useAuth();
- const [timeLeftSendLocation] = useTimeDifference(locationSendDeadline, 1000);
- const [timeLeftNextZone] = useTimeDifference(nextZoneDate, 1000);
- const [timeLeftOutOfZone] = useTimeDifference(outOfZoneDeadline, 1000);
- const [bottomContainerHeight, setBottomContainerHeight] = useState(0);
-
- const statusMessage = useMemo(() => {
- switch (gameState) {
- case GAME_STATE.SETUP:
- return messages?.waiting || "Préparation de la partie";
- case GAME_STATE.PLACEMENT:
- return "Phase de placement";
- case GAME_STATE.PLAYING:
- if (captured) return messages?.captured || "Vous avez été éliminé...";
- if (!outOfZone) return "La partie est en cours";
- if (!hasHandicap) return `Veuillez retourner dans la zone\nHandicap dans ${secondsToMMSS(-timeLeftOutOfZone)}`;
- else return `Veuillez retourner dans la zone\nVotre position est révélée en continue`;
- case GAME_STATE.FINISHED:
- return `Vous avez ${captured ? (messages?.loser || "perdu...") : (messages?.winner || "gagné !")}`;
- default:
- return "Inconnue";
- }
- }, [gameState, messages, outOfZone, hasHandicap, timeLeftOutOfZone, captured]);
-
- // Router
- useEffect(() => {
- if (!loggedIn) {
- router.replace("/");
- }
- }, [router, loggedIn]);
-
- // Activating geolocation tracking
- useEffect(() => {
- startLocationTracking();
- }, []);
-
- return (
-
-
-
-
-
-
- Alert.alert("Settings")}>
-
-
-
-
- {(name ?? "Indisponible")}
-
-
-
- {statusMessage}
-
-
-
- { gameState == GAME_STATE.PLACEMENT &&
-
- {ready ? "Placé" : "Non placé"}
-
- }
- { gameState == GAME_STATE.PLAYING && !captured &&
-
-
- }
-
- { enemyHasHandicap &&
- Position ennemie révélée en continue !
- }
-
- setBottomContainerHeight(event.nativeEvent.layout.height)}>
-
- { gameState == GAME_STATE.PLAYING && !captured && !hasHandicap &&
-
-
-
- }
- { gameState == GAME_STATE.PLAYING && !captured &&
-
- }
-
-
- );
-};
-
-export default Interface;
-
-const styles = StyleSheet.create({
- globalContainer: {
- backgroundColor: COLORS.background,
- flex: 1,
- },
- topContainer: {
- width: '100%',
- alignItems: 'center',
- padding: 15,
- },
- topheadContainer: {
- width: "100%",
- flexDirection: "row",
- justifyContent: 'space-between'
- },
- teamNameContainer: {
- width: '100%',
- alignItems: 'center',
- justifyContent: 'center'
- },
- logContainer: {
- width: '100%',
- alignItems: 'center',
- justifyContent: 'center',
- marginTop: 15
- },
- gameState: {
- borderWidth: 2,
- borderRadius: 10,
- width: "100%",
- backgroundColor: 'white',
- padding: 10,
- },
- infoContainer: {
- width: '100%',
- alignItems: 'center',
- justifyContent: 'center',
- flexDirection: 'row',
- marginTop: 15
- },
- readyIndicator: {
- width: "100%",
- maxWidth: 240,
- height: 61,
- alignItems: 'center',
- justifyContent: 'center',
- padding: 3,
- borderRadius: 10
- },
- bottomContainer: {
- flex: 1,
- },
- updatePosition: {
- position: 'absolute',
- right: 30,
- bottom: 80,
- width: 60,
- height: 60,
- borderRadius: 30,
- backgroundColor: 'white',
- borderWidth: 4,
- borderColor: 'black',
- alignItems: 'center',
- justifyContent: 'center',
- },
-});
diff --git a/mobile/traque-app/assets.d.ts b/mobile/traque-app/assets.d.ts
new file mode 100644
index 0000000..7fff825
--- /dev/null
+++ b/mobile/traque-app/assets.d.ts
@@ -0,0 +1,5 @@
+declare module "*.png";
+declare module "*.jpg";
+declare module "*.jpeg";
+declare module "*.svg";
+declare module "*.gif";
diff --git a/mobile/traque-app/babel.config.js b/mobile/traque-app/babel.config.js
new file mode 100644
index 0000000..92152b2
--- /dev/null
+++ b/mobile/traque-app/babel.config.js
@@ -0,0 +1,17 @@
+module.exports = function (api) {
+ api.cache(true);
+ return {
+ presets: ['babel-preset-expo'],
+ plugins: [
+ [
+ 'module-resolver',
+ {
+ root: ['./'],
+ alias: {
+ '@': './src',
+ },
+ },
+ ],
+ ],
+ };
+};
diff --git a/mobile/traque-app/jsconfig.json b/mobile/traque-app/jsconfig.json
new file mode 100644
index 0000000..75eecf1
--- /dev/null
+++ b/mobile/traque-app/jsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "allowSyntheticDefaultImports": true,
+ "baseUrl": ".",
+ "paths": {"@/*": ["src/*"]},
+ "jsx": "react-native",
+ "checkJs": true,
+ },
+ "include": ["src/**/*", "app.json", "assets.d.ts"],
+ "exclude": ["node_modules", ".expo", "android", "ios"],
+}
diff --git a/mobile/traque-app/package-lock.json b/mobile/traque-app/package-lock.json
index 6a562b7..a627b30 100644
--- a/mobile/traque-app/package-lock.json
+++ b/mobile/traque-app/package-lock.json
@@ -13,6 +13,7 @@
"@react-navigation/native": "^7.0.14",
"@react-navigation/stack": "^7.1.1",
"axxios": "^0.1.0",
+ "babel-plugin-module-resolver": "^5.0.2",
"expo": "~52.0.46",
"expo-build-properties": "~0.13.3",
"expo-constants": "~17.0.2",
@@ -25,8 +26,10 @@
"expo-splash-screen": "~0.29.24",
"expo-status-bar": "~2.0.0",
"expo-task-manager": "~12.0.6",
+ "i18next": "^25.8.10",
"react": "18.3.1",
"react-dom": "18.3.1",
+ "react-i18next": "^16.5.4",
"react-native": "0.76.9",
"react-native-collapsible": "^1.6.2",
"react-native-device-info": "^14.0.4",
@@ -2196,9 +2199,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.27.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.4.tgz",
- "integrity": "sha512-t3yaEOuGu9NlIZ+hIeGbBjFtZT7j2cb2tg0fuaJKeGotchRjjLfrBA9Kwf8quhpP1EUuxModQg04q/mBwyg8uA==",
+ "version": "7.28.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
+ "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -4125,9 +4128,9 @@
}
},
"node_modules/@jest/console/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -4252,9 +4255,9 @@
}
},
"node_modules/@jest/core/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -4580,9 +4583,9 @@
}
},
"node_modules/@jest/globals/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -4793,9 +4796,9 @@
}
},
"node_modules/@jest/reporters/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -4811,7 +4814,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -5017,9 +5020,9 @@
}
},
"node_modules/@jest/test-result/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -5058,9 +5061,9 @@
}
},
"node_modules/@jest/test-sequencer/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -5247,6 +5250,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@leichtgewicht/ip-codec": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
+ "license": "MIT"
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -6729,9 +6738,9 @@
}
},
"node_modules/@types/estree": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
- "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
"license": "MIT"
},
"node_modules/@types/geojson": {
@@ -7001,12 +7010,12 @@
}
},
"node_modules/@types/webpack-sources/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
"node_modules/@types/webpack/node_modules/source-map": {
@@ -7186,9 +7195,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -8515,6 +8524,386 @@
"web-vitals": "^1.1.2"
}
},
+ "node_modules/axxios/node_modules/@babel/core": {
+ "version": "7.12.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
+ "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.12.1",
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helpers": "^7.12.1",
+ "@babel/parser": "^7.12.3",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.12.1",
+ "@babel/types": "^7.12.1",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.19",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/axxios/node_modules/@babel/core/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/axxios/node_modules/@jest/transform": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
+ "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^26.6.2",
+ "babel-plugin-istanbul": "^6.0.0",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.2.4",
+ "jest-haste-map": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-util": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "pirates": "^4.0.1",
+ "slash": "^3.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/axxios/node_modules/@jest/transform/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/axxios/node_modules/@jest/types": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/axxios/node_modules/@pmmmwh/react-refresh-webpack-plugin": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz",
+ "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-html": "^0.0.7",
+ "error-stack-parser": "^2.0.6",
+ "html-entities": "^1.2.1",
+ "native-url": "^0.2.6",
+ "schema-utils": "^2.6.5",
+ "source-map": "^0.7.3"
+ },
+ "engines": {
+ "node": ">= 10.x"
+ },
+ "peerDependencies": {
+ "@types/webpack": "4.x",
+ "react-refresh": ">=0.8.3 <0.10.0",
+ "sockjs-client": "^1.4.0",
+ "type-fest": "^0.13.1",
+ "webpack": ">=4.43.0 <6.0.0",
+ "webpack-dev-server": "3.x",
+ "webpack-hot-middleware": "2.x",
+ "webpack-plugin-serve": "0.x || 1.x"
+ },
+ "peerDependenciesMeta": {
+ "@types/webpack": {
+ "optional": true
+ },
+ "sockjs-client": {
+ "optional": true
+ },
+ "type-fest": {
+ "optional": true
+ },
+ "webpack-dev-server": {
+ "optional": true
+ },
+ "webpack-hot-middleware": {
+ "optional": true
+ },
+ "webpack-plugin-serve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/axxios/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/axxios/node_modules/@types/yargs": {
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/axxios/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/axxios/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/axxios/node_modules/babel-jest": {
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
+ "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/babel__core": "^7.1.7",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-preset-jest": "^26.6.2",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.4",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/axxios/node_modules/babel-plugin-jest-hoist": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
+ "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.0.0",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/axxios/node_modules/babel-preset-jest": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
+ "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^26.6.2",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/axxios/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/axxios/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/axxios/node_modules/dotenv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/axxios/node_modules/dotenv-expand": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
+ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/axxios/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "license": "MIT",
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/axxios/node_modules/jest-haste-map": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
+ "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^26.6.2",
+ "@types/graceful-fs": "^4.1.2",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.4",
+ "jest-regex-util": "^26.0.0",
+ "jest-serializer": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-worker": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.1.2"
+ }
+ },
+ "node_modules/axxios/node_modules/jest-regex-util": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
+ "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/axxios/node_modules/jest-util": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
+ "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^26.6.2",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.4",
+ "is-ci": "^2.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/axxios/node_modules/jest-worker": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/axxios/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "license": "MIT"
+ },
+ "node_modules/axxios/node_modules/jsonfile": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/axxios/node_modules/prompts": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
+ "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/axxios/node_modules/react": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
@@ -8542,6 +8931,112 @@
"react": "17.0.2"
}
},
+ "node_modules/axxios/node_modules/react-refresh": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
+ "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/axxios/node_modules/react-scripts": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz",
+ "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "7.12.3",
+ "@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
+ "@svgr/webpack": "5.5.0",
+ "@typescript-eslint/eslint-plugin": "^4.5.0",
+ "@typescript-eslint/parser": "^4.5.0",
+ "babel-eslint": "^10.1.0",
+ "babel-jest": "^26.6.0",
+ "babel-loader": "8.1.0",
+ "babel-plugin-named-asset-import": "^0.3.7",
+ "babel-preset-react-app": "^10.0.0",
+ "bfj": "^7.0.2",
+ "camelcase": "^6.1.0",
+ "case-sensitive-paths-webpack-plugin": "2.3.0",
+ "css-loader": "4.3.0",
+ "dotenv": "8.2.0",
+ "dotenv-expand": "5.1.0",
+ "eslint": "^7.11.0",
+ "eslint-config-react-app": "^6.0.0",
+ "eslint-plugin-flowtype": "^5.2.0",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-jest": "^24.1.0",
+ "eslint-plugin-jsx-a11y": "^6.3.1",
+ "eslint-plugin-react": "^7.21.5",
+ "eslint-plugin-react-hooks": "^4.2.0",
+ "eslint-plugin-testing-library": "^3.9.2",
+ "eslint-webpack-plugin": "^2.5.2",
+ "file-loader": "6.1.1",
+ "fs-extra": "^9.0.1",
+ "html-webpack-plugin": "4.5.0",
+ "identity-obj-proxy": "3.0.0",
+ "jest": "26.6.0",
+ "jest-circus": "26.6.0",
+ "jest-resolve": "26.6.0",
+ "jest-watch-typeahead": "0.6.1",
+ "mini-css-extract-plugin": "0.11.3",
+ "optimize-css-assets-webpack-plugin": "5.0.4",
+ "pnp-webpack-plugin": "1.6.4",
+ "postcss-flexbugs-fixes": "4.2.1",
+ "postcss-loader": "3.0.0",
+ "postcss-normalize": "8.0.1",
+ "postcss-preset-env": "6.7.0",
+ "postcss-safe-parser": "5.0.2",
+ "prompts": "2.4.0",
+ "react-app-polyfill": "^2.0.0",
+ "react-dev-utils": "^11.0.3",
+ "react-refresh": "^0.8.3",
+ "resolve": "1.18.1",
+ "resolve-url-loader": "^3.1.2",
+ "sass-loader": "^10.0.5",
+ "semver": "7.3.2",
+ "style-loader": "1.3.0",
+ "terser-webpack-plugin": "4.2.3",
+ "ts-pnp": "1.2.0",
+ "url-loader": "4.1.1",
+ "webpack": "4.44.2",
+ "webpack-dev-server": "3.11.1",
+ "webpack-manifest-plugin": "2.2.0",
+ "workbox-webpack-plugin": "5.1.4"
+ },
+ "bin": {
+ "react-scripts": "bin/react-scripts.js"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.1.3"
+ },
+ "peerDependencies": {
+ "react": ">= 16",
+ "typescript": "^3.2.1 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/axxios/node_modules/resolve": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
+ "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.0.0",
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/axxios/node_modules/scheduler": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
@@ -8552,6 +9047,86 @@
"object-assign": "^4.1.1"
}
},
+ "node_modules/axxios/node_modules/schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/axxios/node_modules/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/axxios/node_modules/type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "license": "(MIT OR CC0-1.0)",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/axxios/node_modules/typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/axxios/node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/axxios/node_modules/write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
"node_modules/babel-core": {
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
@@ -8781,6 +9356,71 @@
"node": ">=10"
}
},
+ "node_modules/babel-plugin-module-resolver": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-5.0.2.tgz",
+ "integrity": "sha512-9KtaCazHee2xc0ibfqsDeamwDps6FZNo5S0Q81dUqEuFzVwPhcT4J5jOqIVvgCA3Q/wO9hKYxN/Ds3tIsp5ygg==",
+ "license": "MIT",
+ "dependencies": {
+ "find-babel-config": "^2.1.1",
+ "glob": "^9.3.3",
+ "pkg-up": "^3.1.0",
+ "reselect": "^4.1.7",
+ "resolve": "^1.22.8"
+ }
+ },
+ "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/babel-plugin-module-resolver/node_modules/glob": {
+ "version": "9.3.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
+ "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "minimatch": "^8.0.2",
+ "minipass": "^4.2.4",
+ "path-scurry": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/babel-plugin-module-resolver/node_modules/minimatch": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
+ "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/babel-plugin-module-resolver/node_modules/minipass": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
+ "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/babel-plugin-named-asset-import": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz",
@@ -9258,16 +9898,16 @@
"license": "MIT"
},
"node_modules/bonjour": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
- "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.1.tgz",
+ "integrity": "sha512-xONzj4PfpPJw6xSqCcT2SmQkBOXpUINUz3o3qXcWJwYlXbkZNcNaUae0o5lle7tKt4HHV6dTgkIRhAXZ3nBMsQ==",
"license": "MIT",
"dependencies": {
"array-flatten": "^2.1.0",
"deep-equal": "^1.0.1",
"dns-equal": "^1.0.0",
"dns-txt": "^2.0.2",
- "multicast-dns": "^6.0.1",
+ "multicast-dns": "^7.2.3",
"multicast-dns-service-types": "^1.1.0"
}
},
@@ -9384,24 +10024,23 @@
}
},
"node_modules/browserify-sign": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz",
- "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz",
+ "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==",
"license": "ISC",
"dependencies": {
- "bn.js": "^5.2.1",
- "browserify-rsa": "^4.1.0",
+ "bn.js": "^5.2.2",
+ "browserify-rsa": "^4.1.1",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
- "elliptic": "^6.5.5",
- "hash-base": "~3.0",
+ "elliptic": "^6.6.1",
"inherits": "^2.0.4",
- "parse-asn1": "^5.1.7",
+ "parse-asn1": "^5.1.9",
"readable-stream": "^2.3.8",
"safe-buffer": "^5.2.1"
},
"engines": {
- "node": ">= 0.12"
+ "node": ">= 0.10"
}
},
"node_modules/browserify-sign/node_modules/isarray": {
@@ -9982,13 +10621,14 @@
}
},
"node_modules/cipher-base": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz",
- "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz",
+ "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==",
"license": "MIT",
"dependencies": {
"inherits": "^2.0.4",
- "safe-buffer": "^5.2.1"
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.2"
},
"engines": {
"node": ">= 0.10"
@@ -10293,9 +10933,9 @@
}
},
"node_modules/collect-v8-coverage": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
- "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz",
+ "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==",
"license": "MIT"
},
"node_modules/collection-visit": {
@@ -10635,18 +11275,18 @@
"license": "MIT"
},
"node_modules/cookie": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
- "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz",
+ "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
"license": "MIT"
},
"node_modules/copy-concurrently": {
@@ -10668,7 +11308,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -11222,9 +11862,9 @@
}
},
"node_modules/css-loader/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -11334,9 +11974,9 @@
}
},
"node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
+ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
"license": "BSD-2-Clause",
"engines": {
"node": ">= 6"
@@ -11575,9 +12215,9 @@
}
},
"node_modules/cssnano/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
@@ -11870,9 +12510,9 @@
}
},
"node_modules/decimal.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
+ "version": "10.6.0",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz",
+ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
"license": "MIT"
},
"node_modules/decode-uri-component": {
@@ -12342,13 +12982,15 @@
"license": "MIT"
},
"node_modules/dns-packet": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
- "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
+ "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
"license": "MIT",
"dependencies": {
- "ip": "^1.1.0",
- "safe-buffer": "^5.0.1"
+ "@leichtgewicht/ip-codec": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/dns-txt": {
@@ -14781,39 +15423,39 @@
"license": "Apache-2.0"
},
"node_modules/express": {
- "version": "4.21.2",
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
- "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
+ "version": "4.22.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz",
+ "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==",
"license": "MIT",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
- "body-parser": "1.20.3",
- "content-disposition": "0.5.4",
+ "body-parser": "~1.20.3",
+ "content-disposition": "~0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.7.1",
- "cookie-signature": "1.0.6",
+ "cookie": "~0.7.1",
+ "cookie-signature": "~1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
- "finalhandler": "1.3.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
+ "finalhandler": "~1.3.1",
+ "fresh": "~0.5.2",
+ "http-errors": "~2.0.0",
"merge-descriptors": "1.0.3",
"methods": "~1.1.2",
- "on-finished": "2.4.1",
+ "on-finished": "~2.4.1",
"parseurl": "~1.3.3",
- "path-to-regexp": "0.1.12",
+ "path-to-regexp": "~0.1.12",
"proxy-addr": "~2.0.7",
- "qs": "6.13.0",
+ "qs": "~6.14.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
- "send": "0.19.0",
- "serve-static": "1.16.2",
+ "send": "~0.19.0",
+ "serve-static": "~1.16.2",
"setprototypeof": "1.2.0",
- "statuses": "2.0.1",
+ "statuses": "~2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
@@ -14841,12 +15483,6 @@
"ms": "2.0.0"
}
},
- "node_modules/express/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
"node_modules/express/node_modules/encodeurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
@@ -14857,34 +15493,28 @@
}
},
"node_modules/express/node_modules/finalhandler": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
- "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
+ "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==",
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
- "on-finished": "2.4.1",
+ "on-finished": "~2.4.1",
"parseurl": "~1.3.3",
- "statuses": "2.0.1",
+ "statuses": "~2.0.2",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
- "node_modules/express/node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
+ "node_modules/express/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
},
"node_modules/express/node_modules/path-to-regexp": {
"version": "0.1.12",
@@ -14892,43 +15522,25 @@
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"license": "MIT"
},
- "node_modules/express/node_modules/send": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
- "license": "MIT",
+ "node_modules/express/node_modules/qs": {
+ "version": "6.14.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz",
+ "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==",
+ "license": "BSD-3-Clause",
"dependencies": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
+ "side-channel": "^1.1.0"
},
"engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/express/node_modules/send/node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/express/node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
+ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -15319,6 +15931,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/find-babel-config": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-2.1.2.tgz",
+ "integrity": "sha512-ZfZp1rQyp4gyuxqt1ZqjFGVeVBvmpURMqdIWXbPRfB97Bf6BzdK/xSIbylEINzQ0kB5tlDQfn9HkNXXWsqTqLg==",
+ "license": "MIT",
+ "dependencies": {
+ "json5": "^2.2.3"
+ }
+ },
"node_modules/find-cache-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
@@ -16580,6 +17201,386 @@
"web-vitals": "^1.0.1"
}
},
+ "node_modules/hook-debounce/node_modules/@babel/core": {
+ "version": "7.12.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
+ "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.12.1",
+ "@babel/helper-module-transforms": "^7.12.1",
+ "@babel/helpers": "^7.12.1",
+ "@babel/parser": "^7.12.3",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.12.1",
+ "@babel/types": "^7.12.1",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.19",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@babel/core/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@jest/transform": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
+ "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^26.6.2",
+ "babel-plugin-istanbul": "^6.0.0",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.2.4",
+ "jest-haste-map": "^26.6.2",
+ "jest-regex-util": "^26.0.0",
+ "jest-util": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "pirates": "^4.0.1",
+ "slash": "^3.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@jest/transform/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@jest/types": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@pmmmwh/react-refresh-webpack-plugin": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz",
+ "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-html": "^0.0.7",
+ "error-stack-parser": "^2.0.6",
+ "html-entities": "^1.2.1",
+ "native-url": "^0.2.6",
+ "schema-utils": "^2.6.5",
+ "source-map": "^0.7.3"
+ },
+ "engines": {
+ "node": ">= 10.x"
+ },
+ "peerDependencies": {
+ "@types/webpack": "4.x",
+ "react-refresh": ">=0.8.3 <0.10.0",
+ "sockjs-client": "^1.4.0",
+ "type-fest": "^0.13.1",
+ "webpack": ">=4.43.0 <6.0.0",
+ "webpack-dev-server": "3.x",
+ "webpack-hot-middleware": "2.x",
+ "webpack-plugin-serve": "0.x || 1.x"
+ },
+ "peerDependenciesMeta": {
+ "@types/webpack": {
+ "optional": true
+ },
+ "sockjs-client": {
+ "optional": true
+ },
+ "type-fest": {
+ "optional": true
+ },
+ "webpack-dev-server": {
+ "optional": true
+ },
+ "webpack-hot-middleware": {
+ "optional": true
+ },
+ "webpack-plugin-serve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/@types/yargs": {
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/babel-jest": {
+ "version": "26.6.3",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
+ "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/transform": "^26.6.2",
+ "@jest/types": "^26.6.2",
+ "@types/babel__core": "^7.1.7",
+ "babel-plugin-istanbul": "^6.0.0",
+ "babel-preset-jest": "^26.6.2",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.4",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/babel-plugin-jest-hoist": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
+ "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.0.0",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/babel-preset-jest": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
+ "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^26.6.2",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "license": "MIT"
+ },
+ "node_modules/hook-debounce/node_modules/dotenv": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
+ "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/dotenv-expand": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
+ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/hook-debounce/node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "license": "MIT",
+ "dependencies": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/jest-haste-map": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
+ "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^26.6.2",
+ "@types/graceful-fs": "^4.1.2",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.4",
+ "jest-regex-util": "^26.0.0",
+ "jest-serializer": "^26.6.2",
+ "jest-util": "^26.6.2",
+ "jest-worker": "^26.6.2",
+ "micromatch": "^4.0.2",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.1.2"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/jest-regex-util": {
+ "version": "26.0.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
+ "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/jest-util": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
+ "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^26.6.2",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.4",
+ "is-ci": "^2.0.0",
+ "micromatch": "^4.0.2"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/jest-worker": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+ "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "license": "MIT"
+ },
+ "node_modules/hook-debounce/node_modules/jsonfile": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
+ "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
+ "license": "MIT",
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/prompts": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
+ "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/hook-debounce/node_modules/react": {
"version": "17.0.2",
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
@@ -16607,6 +17608,112 @@
"react": "17.0.2"
}
},
+ "node_modules/hook-debounce/node_modules/react-refresh": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
+ "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/react-scripts": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz",
+ "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "7.12.3",
+ "@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
+ "@svgr/webpack": "5.5.0",
+ "@typescript-eslint/eslint-plugin": "^4.5.0",
+ "@typescript-eslint/parser": "^4.5.0",
+ "babel-eslint": "^10.1.0",
+ "babel-jest": "^26.6.0",
+ "babel-loader": "8.1.0",
+ "babel-plugin-named-asset-import": "^0.3.7",
+ "babel-preset-react-app": "^10.0.0",
+ "bfj": "^7.0.2",
+ "camelcase": "^6.1.0",
+ "case-sensitive-paths-webpack-plugin": "2.3.0",
+ "css-loader": "4.3.0",
+ "dotenv": "8.2.0",
+ "dotenv-expand": "5.1.0",
+ "eslint": "^7.11.0",
+ "eslint-config-react-app": "^6.0.0",
+ "eslint-plugin-flowtype": "^5.2.0",
+ "eslint-plugin-import": "^2.22.1",
+ "eslint-plugin-jest": "^24.1.0",
+ "eslint-plugin-jsx-a11y": "^6.3.1",
+ "eslint-plugin-react": "^7.21.5",
+ "eslint-plugin-react-hooks": "^4.2.0",
+ "eslint-plugin-testing-library": "^3.9.2",
+ "eslint-webpack-plugin": "^2.5.2",
+ "file-loader": "6.1.1",
+ "fs-extra": "^9.0.1",
+ "html-webpack-plugin": "4.5.0",
+ "identity-obj-proxy": "3.0.0",
+ "jest": "26.6.0",
+ "jest-circus": "26.6.0",
+ "jest-resolve": "26.6.0",
+ "jest-watch-typeahead": "0.6.1",
+ "mini-css-extract-plugin": "0.11.3",
+ "optimize-css-assets-webpack-plugin": "5.0.4",
+ "pnp-webpack-plugin": "1.6.4",
+ "postcss-flexbugs-fixes": "4.2.1",
+ "postcss-loader": "3.0.0",
+ "postcss-normalize": "8.0.1",
+ "postcss-preset-env": "6.7.0",
+ "postcss-safe-parser": "5.0.2",
+ "prompts": "2.4.0",
+ "react-app-polyfill": "^2.0.0",
+ "react-dev-utils": "^11.0.3",
+ "react-refresh": "^0.8.3",
+ "resolve": "1.18.1",
+ "resolve-url-loader": "^3.1.2",
+ "sass-loader": "^10.0.5",
+ "semver": "7.3.2",
+ "style-loader": "1.3.0",
+ "terser-webpack-plugin": "4.2.3",
+ "ts-pnp": "1.2.0",
+ "url-loader": "4.1.1",
+ "webpack": "4.44.2",
+ "webpack-dev-server": "3.11.1",
+ "webpack-manifest-plugin": "2.2.0",
+ "workbox-webpack-plugin": "5.1.4"
+ },
+ "bin": {
+ "react-scripts": "bin/react-scripts.js"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.1.3"
+ },
+ "peerDependencies": {
+ "react": ">= 16",
+ "typescript": "^3.2.1 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/hook-debounce/node_modules/resolve": {
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
+ "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.0.0",
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/hook-debounce/node_modules/scheduler": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
@@ -16617,6 +17724,86 @@
"object-assign": "^4.1.1"
}
},
+ "node_modules/hook-debounce/node_modules/schema-utils": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
+ "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.5",
+ "ajv": "^6.12.4",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 8.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/type-fest": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
+ "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
+ "license": "(MIT OR CC0-1.0)",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/typescript": {
+ "version": "4.9.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/hook-debounce/node_modules/write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
"node_modules/hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -16790,6 +17977,15 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"license": "MIT"
},
+ "node_modules/html-parse-stringify": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
+ "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
+ "license": "MIT",
+ "dependencies": {
+ "void-elements": "3.1.0"
+ }
+ },
"node_modules/html-webpack-plugin": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz",
@@ -17121,6 +18317,37 @@
"integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==",
"license": "BSD-3-Clause"
},
+ "node_modules/i18next": {
+ "version": "25.8.10",
+ "resolved": "https://registry.npmjs.org/i18next/-/i18next-25.8.10.tgz",
+ "integrity": "sha512-CtPJLMAz1G8sxo+mIzfBjGgLxWs7d6WqIjlmmv9BTsOat4pJIfwZ8cm07n3kFS6bP9c6YwsYutYrwsEeJVBo2g==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://locize.com"
+ },
+ {
+ "type": "individual",
+ "url": "https://locize.com/i18next.html"
+ },
+ {
+ "type": "individual",
+ "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4"
+ },
+ "peerDependencies": {
+ "typescript": "^5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -18327,9 +19554,9 @@
}
},
"node_modules/istanbul-lib-report/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -18362,9 +19589,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
- "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz",
+ "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==",
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
@@ -18454,9 +19681,9 @@
}
},
"node_modules/jest-changed-files/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -18608,9 +19835,9 @@
}
},
"node_modules/jest-circus/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -18784,9 +20011,9 @@
}
},
"node_modules/jest-cli/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -19145,9 +20372,9 @@
}
},
"node_modules/jest-config/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -19228,7 +20455,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -19520,9 +20747,9 @@
}
},
"node_modules/jest-each/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -19639,9 +20866,9 @@
}
},
"node_modules/jest-environment-jsdom/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -19844,9 +21071,9 @@
}
},
"node_modules/jest-jasmine2/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -20187,9 +21414,9 @@
}
},
"node_modules/jest-resolve-dependencies/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -20221,9 +21448,9 @@
}
},
"node_modules/jest-resolve/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -20344,9 +21571,9 @@
}
},
"node_modules/jest-runner/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -20605,9 +21832,9 @@
}
},
"node_modules/jest-runtime/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -20665,7 +21892,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -21043,9 +22270,9 @@
}
},
"node_modules/jest-snapshot/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -21223,9 +22450,9 @@
}
},
"node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -21401,9 +22628,9 @@
}
},
"node_modules/jest-watcher/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
+ "version": "15.0.20",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz",
+ "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==",
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
@@ -21592,9 +22819,9 @@
}
},
"node_modules/jsdom/node_modules/acorn": {
- "version": "8.14.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
- "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -21723,20 +22950,20 @@
}
},
"node_modules/jsonpath": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz",
- "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.2.1.tgz",
+ "integrity": "sha512-Jl6Jhk0jG+kP3yk59SSeGq7LFPR4JQz1DU0K+kXTysUhMostbhU3qh5mjTuf0PqFcXpAT7kvmMt9WxV10NyIgQ==",
"license": "MIT",
"dependencies": {
- "esprima": "1.2.2",
- "static-eval": "2.0.2",
- "underscore": "1.12.1"
+ "esprima": "1.2.5",
+ "static-eval": "2.1.1",
+ "underscore": "1.13.6"
}
},
"node_modules/jsonpath/node_modules/esprima": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz",
- "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz",
+ "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -23624,7 +24851,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -23661,12 +24888,12 @@
"license": "MIT"
},
"node_modules/multicast-dns": {
- "version": "6.2.3",
- "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
- "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+ "version": "7.2.5",
+ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz",
+ "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==",
"license": "MIT",
"dependencies": {
- "dns-packet": "^1.3.1",
+ "dns-packet": "^5.2.2",
"thunky": "^1.0.2"
},
"bin": {
@@ -23691,9 +24918,9 @@
}
},
"node_modules/nan": {
- "version": "2.22.2",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz",
- "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==",
+ "version": "2.25.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz",
+ "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==",
"license": "MIT",
"optional": true
},
@@ -23952,9 +25179,9 @@
}
},
"node_modules/node-notifier/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"optional": true,
"bin": {
@@ -24121,9 +25348,9 @@
"license": "MIT"
},
"node_modules/nwsapi": {
- "version": "2.2.20",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
- "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
+ "version": "2.2.23",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz",
+ "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==",
"license": "MIT"
},
"node_modules/ob1": {
@@ -24301,21 +25528,21 @@
}
},
"node_modules/object.getownpropertydescriptors": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz",
- "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==",
+ "version": "2.1.9",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz",
+ "integrity": "sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g==",
"license": "MIT",
"dependencies": {
- "array.prototype.reduce": "^1.0.6",
- "call-bind": "^1.0.7",
+ "array.prototype.reduce": "^1.0.8",
+ "call-bind": "^1.0.8",
"define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0",
- "gopd": "^1.0.1",
- "safe-array-concat": "^1.1.2"
+ "es-abstract": "^1.24.0",
+ "es-object-atoms": "^1.1.1",
+ "gopd": "^1.2.0",
+ "safe-array-concat": "^1.1.3"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -24728,16 +25955,15 @@
}
},
"node_modules/parse-asn1": {
- "version": "5.1.7",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz",
- "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz",
+ "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==",
"license": "ISC",
"dependencies": {
"asn1.js": "^4.10.1",
"browserify-aes": "^1.2.0",
"evp_bytestokey": "^1.0.3",
- "hash-base": "~3.0",
- "pbkdf2": "^3.1.2",
+ "pbkdf2": "^3.1.5",
"safe-buffer": "^5.2.1"
},
"engines": {
@@ -24900,19 +26126,20 @@
}
},
"node_modules/pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz",
+ "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==",
"license": "MIT",
"dependencies": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "ripemd160": "^2.0.3",
+ "safe-buffer": "^5.2.1",
+ "sha.js": "^2.4.12",
+ "to-buffer": "^1.2.1"
},
"engines": {
- "node": ">=0.12"
+ "node": ">= 0.10"
}
},
"node_modules/performance-now": {
@@ -25178,9 +26405,9 @@
}
},
"node_modules/portfinder": {
- "version": "1.0.37",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz",
- "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==",
+ "version": "1.0.38",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.38.tgz",
+ "integrity": "sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==",
"license": "MIT",
"dependencies": {
"async": "^3.2.6",
@@ -26623,9 +27850,9 @@
}
},
"node_modules/postcss-load-config/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
@@ -29824,9 +31051,9 @@
}
},
"node_modules/react-app-polyfill/node_modules/core-js": {
- "version": "3.42.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz",
- "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==",
+ "version": "3.48.0",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz",
+ "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==",
"hasInstallScript": true,
"license": "MIT",
"funding": {
@@ -30233,6 +31460,33 @@
"react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0"
}
},
+ "node_modules/react-i18next": {
+ "version": "16.5.4",
+ "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-16.5.4.tgz",
+ "integrity": "sha512-6yj+dcfMncEC21QPhOTsW8mOSO+pzFmT6uvU7XXdvM/Cp38zJkmTeMeKmTrmCMD5ToT79FmiE/mRWiYWcJYW4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.4",
+ "html-parse-stringify": "^3.0.1",
+ "use-sync-external-store": "^1.6.0"
+ },
+ "peerDependencies": {
+ "i18next": ">= 25.6.2",
+ "react": ">= 16.8.0",
+ "typescript": "^5"
+ },
+ "peerDependenciesMeta": {
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/react-is": {
"version": "19.1.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz",
@@ -30679,557 +31933,6 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
- "node_modules/react-scripts": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.3.tgz",
- "integrity": "sha512-S5eO4vjUzUisvkIPB7jVsKtuH2HhWcASREYWHAQ1FP5HyCv3xgn+wpILAEWkmy+A+tTNbSZClhxjT3qz6g4L1A==",
- "license": "MIT",
- "dependencies": {
- "@babel/core": "7.12.3",
- "@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
- "@svgr/webpack": "5.5.0",
- "@typescript-eslint/eslint-plugin": "^4.5.0",
- "@typescript-eslint/parser": "^4.5.0",
- "babel-eslint": "^10.1.0",
- "babel-jest": "^26.6.0",
- "babel-loader": "8.1.0",
- "babel-plugin-named-asset-import": "^0.3.7",
- "babel-preset-react-app": "^10.0.0",
- "bfj": "^7.0.2",
- "camelcase": "^6.1.0",
- "case-sensitive-paths-webpack-plugin": "2.3.0",
- "css-loader": "4.3.0",
- "dotenv": "8.2.0",
- "dotenv-expand": "5.1.0",
- "eslint": "^7.11.0",
- "eslint-config-react-app": "^6.0.0",
- "eslint-plugin-flowtype": "^5.2.0",
- "eslint-plugin-import": "^2.22.1",
- "eslint-plugin-jest": "^24.1.0",
- "eslint-plugin-jsx-a11y": "^6.3.1",
- "eslint-plugin-react": "^7.21.5",
- "eslint-plugin-react-hooks": "^4.2.0",
- "eslint-plugin-testing-library": "^3.9.2",
- "eslint-webpack-plugin": "^2.5.2",
- "file-loader": "6.1.1",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "4.5.0",
- "identity-obj-proxy": "3.0.0",
- "jest": "26.6.0",
- "jest-circus": "26.6.0",
- "jest-resolve": "26.6.0",
- "jest-watch-typeahead": "0.6.1",
- "mini-css-extract-plugin": "0.11.3",
- "optimize-css-assets-webpack-plugin": "5.0.4",
- "pnp-webpack-plugin": "1.6.4",
- "postcss-flexbugs-fixes": "4.2.1",
- "postcss-loader": "3.0.0",
- "postcss-normalize": "8.0.1",
- "postcss-preset-env": "6.7.0",
- "postcss-safe-parser": "5.0.2",
- "prompts": "2.4.0",
- "react-app-polyfill": "^2.0.0",
- "react-dev-utils": "^11.0.3",
- "react-refresh": "^0.8.3",
- "resolve": "1.18.1",
- "resolve-url-loader": "^3.1.2",
- "sass-loader": "^10.0.5",
- "semver": "7.3.2",
- "style-loader": "1.3.0",
- "terser-webpack-plugin": "4.2.3",
- "ts-pnp": "1.2.0",
- "url-loader": "4.1.1",
- "webpack": "4.44.2",
- "webpack-dev-server": "3.11.1",
- "webpack-manifest-plugin": "2.2.0",
- "workbox-webpack-plugin": "5.1.4"
- },
- "bin": {
- "react-scripts": "bin/react-scripts.js"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.1.3"
- },
- "peerDependencies": {
- "react": ">= 16",
- "typescript": "^3.2.1 || ^4"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/react-scripts/node_modules/@babel/core": {
- "version": "7.12.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz",
- "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.1",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.1",
- "@babel/parser": "^7.12.3",
- "@babel/template": "^7.10.4",
- "@babel/traverse": "^7.12.1",
- "@babel/types": "^7.12.1",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/react-scripts/node_modules/@babel/core/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/react-scripts/node_modules/@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/react-scripts/node_modules/@jest/transform/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-scripts/node_modules/@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/react-scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz",
- "integrity": "sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ==",
- "license": "MIT",
- "dependencies": {
- "ansi-html": "^0.0.7",
- "error-stack-parser": "^2.0.6",
- "html-entities": "^1.2.1",
- "native-url": "^0.2.6",
- "schema-utils": "^2.6.5",
- "source-map": "^0.7.3"
- },
- "engines": {
- "node": ">= 10.x"
- },
- "peerDependencies": {
- "@types/webpack": "4.x",
- "react-refresh": ">=0.8.3 <0.10.0",
- "sockjs-client": "^1.4.0",
- "type-fest": "^0.13.1",
- "webpack": ">=4.43.0 <6.0.0",
- "webpack-dev-server": "3.x",
- "webpack-hot-middleware": "2.x",
- "webpack-plugin-serve": "0.x || 1.x"
- },
- "peerDependenciesMeta": {
- "@types/webpack": {
- "optional": true
- },
- "sockjs-client": {
- "optional": true
- },
- "type-fest": {
- "optional": true
- },
- "webpack-dev-server": {
- "optional": true
- },
- "webpack-hot-middleware": {
- "optional": true
- },
- "webpack-plugin-serve": {
- "optional": true
- }
- }
- },
- "node_modules/react-scripts/node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/react-scripts/node_modules/@types/yargs": {
- "version": "15.0.19",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz",
- "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==",
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/react-scripts/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/react-scripts/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/react-scripts/node_modules/babel-jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
- "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
- "license": "MIT",
- "dependencies": {
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/babel__core": "^7.1.7",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^26.6.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/babel-plugin-jest-hoist": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
- "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/react-scripts/node_modules/babel-preset-jest": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
- "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
- "license": "MIT",
- "dependencies": {
- "babel-plugin-jest-hoist": "^26.6.2",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-scripts/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "license": "MIT"
- },
- "node_modules/react-scripts/node_modules/dotenv": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
- "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-scripts/node_modules/dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
- "license": "BSD-2-Clause"
- },
- "node_modules/react-scripts/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/react-scripts/node_modules/jest-haste-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
- "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^26.6.2",
- "@types/graceful-fs": "^4.1.2",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^26.0.0",
- "jest-serializer": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
- },
- "engines": {
- "node": ">= 10.14.2"
- },
- "optionalDependencies": {
- "fsevents": "^2.1.2"
- }
- },
- "node_modules/react-scripts/node_modules/jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/react-scripts/node_modules/jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
- "license": "MIT",
- "dependencies": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/react-scripts/node_modules/jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/react-scripts/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "license": "MIT"
- },
- "node_modules/react-scripts/node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/react-scripts/node_modules/prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/react-scripts/node_modules/react-refresh": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
- "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-scripts/node_modules/resolve": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
- "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.0.0",
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/react-scripts/node_modules/schema-utils": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
- "license": "MIT",
- "dependencies": {
- "@types/json-schema": "^7.0.5",
- "ajv": "^6.12.4",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/react-scripts/node_modules/semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/react-scripts/node_modules/type-fest": {
- "version": "0.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
- "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
- "license": "(MIT OR CC0-1.0)",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-scripts/node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/react-scripts/node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
"node_modules/react-tween-state": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/react-tween-state/-/react-tween-state-0.1.5.tgz",
@@ -31718,6 +32421,12 @@
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"license": "MIT"
},
+ "node_modules/reselect": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
+ "license": "MIT"
+ },
"node_modules/resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -32096,15 +32805,75 @@
}
},
"node_modules/ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz",
+ "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==",
"license": "MIT",
"dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
+ "hash-base": "^3.1.2",
+ "inherits": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
+ "node_modules/ripemd160/node_modules/hash-base": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz",
+ "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==",
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^2.3.8",
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ripemd160/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "license": "MIT"
+ },
+ "node_modules/ripemd160/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/ripemd160/node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/ripemd160/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/ripemd160/node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
"node_modules/rmc-align": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/rmc-align/-/rmc-align-1.0.0.tgz",
@@ -33056,9 +33825,9 @@
}
},
"node_modules/sass-loader/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -33238,21 +34007,25 @@
}
},
"node_modules/serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz",
+ "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==",
"license": "MIT",
"dependencies": {
- "accepts": "~1.3.4",
+ "accepts": "~1.3.8",
"batch": "0.6.1",
"debug": "2.6.9",
"escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
+ "http-errors": "~1.8.0",
+ "mime-types": "~2.1.35",
+ "parseurl": "~1.3.3"
},
"engines": {
"node": ">= 0.8.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/serve-index/node_modules/debug": {
@@ -33274,38 +34047,27 @@
}
},
"node_modules/serve-index/node_modules/http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
"license": "MIT",
"dependencies": {
"depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.1"
},
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/serve-index/node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "license": "ISC"
- },
"node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
- "node_modules/serve-index/node_modules/setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "license": "ISC"
- },
"node_modules/serve-static": {
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
@@ -33506,16 +34268,23 @@
"license": "ISC"
},
"node_modules/sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "version": "2.4.12",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
+ "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
"license": "(MIT AND BSD-3-Clause)",
"dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "^2.0.4",
+ "safe-buffer": "^5.2.1",
+ "to-buffer": "^1.2.0"
},
"bin": {
"sha.js": "bin.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/shallow-clone": {
@@ -34129,9 +34898,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.21",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
- "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+ "version": "3.0.22",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
+ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
"license": "CC0-1.0"
},
"node_modules/spdy": {
@@ -34259,103 +35028,12 @@
}
},
"node_modules/static-eval": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz",
- "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.1.tgz",
+ "integrity": "sha512-MgWpQ/ZjGieSVB3eOJVs4OA2LT/q1vx98KPCTTQPzq/aLr0YUXTsgryTXr4SLfR0ZfUUCiedM9n/ABeDIyy4mA==",
"license": "MIT",
"dependencies": {
- "escodegen": "^1.8.1"
- }
- },
- "node_modules/static-eval/node_modules/escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1"
- },
- "bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
- },
- "engines": {
- "node": ">=4.0"
- },
- "optionalDependencies": {
- "source-map": "~0.6.1"
- }
- },
- "node_modules/static-eval/node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/static-eval/node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/static-eval/node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "license": "MIT",
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/static-eval/node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/static-eval/node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-eval/node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
+ "escodegen": "^2.1.0"
}
},
"node_modules/static-extend": {
@@ -35252,9 +35930,9 @@
}
},
"node_modules/svgo/node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
@@ -35708,7 +36386,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -35887,9 +36565,9 @@
}
},
"node_modules/terser-webpack-plugin/node_modules/semver": {
- "version": "7.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -36132,6 +36810,26 @@
"integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
"license": "MIT"
},
+ "node_modules/to-buffer": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz",
+ "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==",
+ "license": "MIT",
+ "dependencies": {
+ "isarray": "^2.0.5",
+ "safe-buffer": "^5.2.1",
+ "typed-array-buffer": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/to-buffer/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "license": "MIT"
+ },
"node_modules/to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@@ -36468,9 +37166,9 @@
}
},
"node_modules/typescript": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
- "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"license": "Apache-2.0",
"peer": true,
"bin": {
@@ -36478,7 +37176,7 @@
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=14.17"
}
},
"node_modules/ua-parser-js": {
@@ -36526,9 +37224,9 @@
}
},
"node_modules/underscore": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz",
- "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==",
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
"license": "MIT"
},
"node_modules/undici": {
@@ -36922,9 +37620,9 @@
}
},
"node_modules/use-sync-external-store": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
- "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
"license": "MIT",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
@@ -37013,12 +37711,12 @@
"license": "MIT"
},
"node_modules/v8-to-istanbul/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
"node_modules/validate-npm-package-license": {
@@ -37077,6 +37775,15 @@
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
"license": "MIT"
},
+ "node_modules/void-elements": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
+ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
@@ -37896,7 +38603,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -38615,7 +39322,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -38888,6 +39595,7 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "deprecated": "Use @exodus/bytes instead for a more spec-conformant and faster implementation",
"license": "MIT",
"dependencies": {
"iconv-lite": "0.4.24"
@@ -39149,7 +39857,7 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -39167,12 +39875,12 @@
}
},
"node_modules/workbox-build/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 8"
+ "node": ">= 12"
}
},
"node_modules/workbox-build/node_modules/temp-dir": {
diff --git a/mobile/traque-app/package.json b/mobile/traque-app/package.json
index 8281c79..c896342 100644
--- a/mobile/traque-app/package.json
+++ b/mobile/traque-app/package.json
@@ -14,6 +14,7 @@
"@react-navigation/native": "^7.0.14",
"@react-navigation/stack": "^7.1.1",
"axxios": "^0.1.0",
+ "babel-plugin-module-resolver": "^5.0.2",
"expo": "~52.0.46",
"expo-build-properties": "~0.13.3",
"expo-constants": "~17.0.2",
@@ -26,8 +27,10 @@
"expo-splash-screen": "~0.29.24",
"expo-status-bar": "~2.0.0",
"expo-task-manager": "~12.0.6",
+ "i18next": "^25.8.10",
"react": "18.3.1",
"react-dom": "18.3.1",
+ "react-i18next": "^16.5.4",
"react-native": "0.76.9",
"react-native-collapsible": "^1.6.2",
"react-native-device-info": "^14.0.4",
diff --git a/mobile/traque-app/src/components/button.jsx b/mobile/traque-app/src/components/button.jsx
deleted file mode 100644
index bde22a2..0000000
--- a/mobile/traque-app/src/components/button.jsx
+++ /dev/null
@@ -1,39 +0,0 @@
-// React
-import { forwardRef } from 'react';
-import { TouchableHighlight, View, Text, StyleSheet } from "react-native";
-
-export const CustomButton = forwardRef(function CustomButton({ label, onPress }, ref) {
- return (
-
-
- {label}
-
-
- );
-});
-
-const styles = StyleSheet.create({
- buttonContainer: {
- width: "100%",
- maxWidth: 240,
- height: 80,
- alignItems: 'center',
- justifyContent: 'center',
- padding: 3,
- borderWidth: 4,
- borderColor: '#888',
- borderRadius: 18
- },
- button: {
- borderRadius: 10,
- width: '100%',
- height: '100%',
- alignItems: 'center',
- justifyContent: 'center',
- backgroundColor: '#555'
- },
- buttonLabel: {
- color: '#fff',
- fontSize: 16,
- },
-});
diff --git a/mobile/traque-app/src/components/common/Drawer.jsx b/mobile/traque-app/src/components/common/Drawer.jsx
new file mode 100644
index 0000000..ff654be
--- /dev/null
+++ b/mobile/traque-app/src/components/common/Drawer.jsx
@@ -0,0 +1,67 @@
+// React
+import { useState } from 'react';
+import { ScrollView, View, Image, StyleSheet, TouchableHighlight } from 'react-native';
+import Collapsible from 'react-native-collapsible';
+import LinearGradient from 'react-native-linear-gradient';
+// Constants
+import { COLORS } from '@/constants';
+
+export const Drawer = ({ height, children }) => {
+ const [collapsibleState, setCollapsibleState] = useState(true);
+
+ return (
+
+
+
+ setCollapsibleState(!collapsibleState)}>
+
+
+
+
+ {children}
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ outerDrawerContainer: {
+ position: 'absolute',
+ bottom: 0,
+ left: 0,
+ right: 0,
+ },
+ gradient: {
+ position: "absolute",
+ top: -30,
+ width: "100%",
+ height: 70,
+ },
+ innerDrawerContainer: {
+ width: "100%",
+ backgroundColor: COLORS.background,
+ borderTopLeftRadius: 30,
+ borderTopRightRadius: 30,
+ overflow: 'hidden',
+ },
+ collapsibleButton: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ width: "100%",
+ height: 45
+ },
+ arrow: {
+ width: 20,
+ height: 20,
+ },
+ collapsibleWindow: {
+ width: "100%",
+ justifyContent: 'center',
+ backgroundColor: COLORS.background,
+ },
+ collapsibleContent: {
+ paddingHorizontal: 15,
+ }
+});
diff --git a/mobile/traque-app/src/components/common/IconButton.jsx b/mobile/traque-app/src/components/common/IconButton.jsx
new file mode 100644
index 0000000..4bf1639
--- /dev/null
+++ b/mobile/traque-app/src/components/common/IconButton.jsx
@@ -0,0 +1,23 @@
+// React
+import { TouchableOpacity, Image, StyleSheet } from 'react-native';
+
+export const IconButton = ({ style = {}, source, onPress = () => {} }) => {
+ return (
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ button: {
+ width: 50,
+ height: 50,
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ icon: {
+ width: "80%",
+ height: "80%",
+ },
+});
diff --git a/mobile/traque-app/src/components/image.jsx b/mobile/traque-app/src/components/common/Image.jsx
similarity index 69%
rename from mobile/traque-app/src/components/image.jsx
rename to mobile/traque-app/src/components/common/Image.jsx
index 8b58407..88b41ec 100644
--- a/mobile/traque-app/src/components/image.jsx
+++ b/mobile/traque-app/src/components/common/Image.jsx
@@ -3,19 +3,28 @@ import { useState } from 'react';
import { StyleSheet, View, Image, TouchableOpacity } from "react-native";
import ImageViewing from 'react-native-image-viewing';
-export const CustomImage = ({ source, canZoom, onPress }) => {
- // canZoom : boolean
+export const TouchableImage = ({ source, onPress }) => {
+
+ return (
+
+
+
+ );
+};
+
+export const ExpandableImage = ({ source }) => {
const [isModalVisible, setIsModalVisible] = useState(false);
return (
- setIsModalVisible(true) : onPress}>
+ setIsModalVisible(true)}>
setIsModalVisible(false)}
+ imageIndex={0}
swipeToCloseEnabled={false}
doubleTapToZoomEnabled={false}
/>
diff --git a/mobile/traque-app/src/components/input.jsx b/mobile/traque-app/src/components/common/Input.jsx
similarity index 85%
rename from mobile/traque-app/src/components/input.jsx
rename to mobile/traque-app/src/components/common/Input.jsx
index 1148506..f50010c 100644
--- a/mobile/traque-app/src/components/input.jsx
+++ b/mobile/traque-app/src/components/common/Input.jsx
@@ -1,7 +1,7 @@
// React
import { TextInput, StyleSheet } from 'react-native';
-export const CustomTextInput = ({ style, value, inputMode, placeholder, onChangeText }) => {
+export const CustomTextInput = ({ style = {}, value, inputMode, placeholder, onChangeText }) => {
return (
{} }) => {
+ if (!position) return null;
+
+ return (
+
+
+
+ );
+};
export const InvertedPolygon = ({id, coordinates, fillColor}) => {
// We create 3 rectangles covering earth, with the first rectangle centered on the hole
@@ -57,7 +75,7 @@ export const InvertedCircle = ({id, center, radius, fillColor}) => {
return ;
};
-export const DashedCircle = ({id, center, radius, fillColor, strokeColor, strokeWidth, lineDashPattern}) => {
+export const DashedCircle = ({id, center, radius, fillColor = "rgba(0, 0, 0, 0)", strokeColor, strokeWidth, lineDashPattern}) => {
return (
{
+ const { location } = useLocation();
+ const [centerMap, setCenterMap] = useState(true);
+ const mapRef = useRef(null);
+
+ // Center the map on user position
+ useEffect(() => {
+ if (centerMap && location && mapRef.current) {
+ mapRef.current.animateToRegion({latitude: location[0], longitude: location[1], latitudeDelta: 0, longitudeDelta: 0.02}, 1000);
+ }
+ }, [centerMap, location]);
+
+ return (
+
+ setCenterMap(false)} toolbarEnabled={false}>
+ {children}
+
+
+
+ setCenterMap(true)} />
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ },
+ mapView: {
+ flex: 1,
+ },
+ centerMap: {
+ position: 'absolute',
+ right: 20,
+ top: 20,
+ width: 40,
+ height: 40,
+ borderRadius: 20,
+ backgroundColor: 'white',
+ borderWidth: 2,
+ borderColor: 'black'
+ },
+});
diff --git a/mobile/traque-app/src/components/common/Show.jsx b/mobile/traque-app/src/components/common/Show.jsx
new file mode 100644
index 0000000..88fc1ca
--- /dev/null
+++ b/mobile/traque-app/src/components/common/Show.jsx
@@ -0,0 +1,3 @@
+export const Show = ({ when, children }) => {
+ return when ? children : null;
+};
diff --git a/mobile/traque-app/src/components/common/Timer.jsx b/mobile/traque-app/src/components/common/Timer.jsx
new file mode 100644
index 0000000..3bf7615
--- /dev/null
+++ b/mobile/traque-app/src/components/common/Timer.jsx
@@ -0,0 +1,30 @@
+// React
+import { View, Text, StyleSheet } from 'react-native';
+// Util
+import { secondsToMMSS } from '@/utils/functions';
+import { useCountdownSeconds } from '@/hooks/useTimeDelta';
+
+export const TimerMMSS = ({ title, date, style }) => {
+ const timeUntilDate = useCountdownSeconds(date);
+
+ return (
+
+ {title}
+ {secondsToMMSS(timeUntilDate)}
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ title: {
+ fontSize: 15
+ },
+ timer: {
+ fontSize: 30,
+ fontWeight: "bold"
+ }
+});
diff --git a/mobile/traque-app/src/components/drawer.jsx b/mobile/traque-app/src/components/drawer.jsx
deleted file mode 100644
index de5b3f0..0000000
--- a/mobile/traque-app/src/components/drawer.jsx
+++ /dev/null
@@ -1,177 +0,0 @@
-// React
-import { useState, useEffect, useMemo, Fragment } from 'react';
-import { ScrollView, View, Text, Image, StyleSheet, TouchableOpacity, TouchableHighlight, Alert } from 'react-native';
-import Collapsible from 'react-native-collapsible';
-import LinearGradient from 'react-native-linear-gradient';
-// Components
-import { CustomImage } from './image';
-import { CustomTextInput } from './input';
-import { Stat } from './stat';
-// Contexts
-import { useAuth } from '../contexts/authContext';
-import { useTeam } from '../contexts/teamContext';
-// Hooks
-import { useTimeDifference } from '../hooks/useTimeDifference';
-// Services
-import { emitCapture } from '../services/socket/emitters';
-import { enemyImage } from '../services/api/image';
-// Util
-import { secondsToHHMMSS } from '../utils/functions';
-// Constants
-import { GAME_STATE, COLORS } from '../constants';
-
-export const Drawer = ({ height }) => {
- const { teamId } = useAuth();
- const [collapsibleState, setCollapsibleState] = useState(true);
- const [enemyCaptureCode, setEnemyCaptureCode] = useState("");
- const {teamInfos, gameState, startDate} = useTeam();
- const {enemyName, captureCode, name, distance, finishDate, nCaptures, nSentLocation, hasHandicap} = teamInfos;
- const [timeSinceStart] = useTimeDifference(startDate, 1000);
- const [captureStatus, setCaptureStatus] = useState(0); // 0 : no capture | 1 : waiting for response from server | 2 : capture failed | 3 : capture succesful
- const captureStatusColor = {0: "#777", 1: "#FFA500", 2: "#FF6B6B", 3: "#81C784"};
-
- const avgSpeed = useMemo(() => {
- const hours = (finishDate ? (finishDate - startDate) : timeSinceStart*1000) / 1000 / 3600;
- if (hours <= 0 || distance <= 0) return 0;
- const km = distance / 1000;
- const speed = km / hours;
-
- return parseFloat(speed.toFixed(1));
- }, [finishDate, startDate, timeSinceStart, distance]);
-
- // Capture state update
- useEffect(() => {
- if (captureStatus == 2 || captureStatus == 3) {
- const timeout = setTimeout(() => {
- setCaptureStatus(0);
- }, 3000);
- return () => clearTimeout(timeout);
- }
- }, [captureStatus]);
-
- const handleCapture = () => {
- if (captureStatus != 1) {
- setCaptureStatus(1);
- emitCapture(enemyCaptureCode)
- .then((response) => {
- if (response.hasCaptured) {
- setCaptureStatus(3);
- } else {
- setCaptureStatus(2);
- }
- })
- .catch(() => {
- Alert.alert("Échec", "La connexion au serveur a échoué.");
- setCaptureStatus(2);
- });
- setEnemyCaptureCode("");
- }
- };
-
- return (
-
-
-
- setCollapsibleState(!collapsibleState)} style={styles.collapsibleButton} underlayColor="#d9d9d9">
-
-
-
-
- { gameState == GAME_STATE.PLAYING &&
- Code de {(name ?? "Indisponible")} : {String(captureCode).padStart(4,"0")}
- }
- { gameState == GAME_STATE.PLAYING && !hasHandicap &&
-
- {"Cible (" + (enemyName ?? "Indisponible") + ")"}
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
-
- {Math.floor(distance / 100) / 10}km
- {secondsToHHMMSS((finishDate ? Math.floor((finishDate - startDate) / 1000) : timeSinceStart))}
- {avgSpeed}km/h
-
-
- {nCaptures}
- {nSentLocation}
-
-
-
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- outerDrawerContainer: {
- position: 'absolute',
- bottom: 0,
- left: 0,
- right: 0,
- },
- innerDrawerContainer: {
- width: "100%",
- backgroundColor: COLORS.background,
- borderTopLeftRadius: 30,
- borderTopRightRadius: 30,
- overflow: 'hidden',
- },
- collapsibleButton: {
- justifyContent: 'center',
- alignItems: 'center',
- width: "100%",
- height: 45
- },
- collapsibleWindow: {
- width: "100%",
- justifyContent: 'center',
- backgroundColor: COLORS.background,
- },
- collapsibleContent: {
- paddingHorizontal: 15,
- },
- imageContainer: {
- width: "100%",
- alignItems: "center",
- justifyContent: "center",
- marginTop: 15
- },
- actionsContainer: {
- flexDirection: "row",
- width: "100%",
- alignItems: 'center',
- justifyContent: 'space-between',
- marginTop: 15
- },
- actionsLeftContainer: {
- flexGrow: 1,
- alignItems: 'center',
- justifyContent: 'center',
- marginRight: 15
- },
- actionsRightContainer: {
- width: 100,
- alignItems: 'center',
- justifyContent: 'center'
- },
- button: {
- borderRadius: 12,
- width: '100%',
- height: 75,
- alignItems: 'center',
- justifyContent: 'center',
- backgroundColor: '#444'
- },
-});
diff --git a/mobile/traque-app/src/components/game/Header.jsx b/mobile/traque-app/src/components/game/Header.jsx
new file mode 100644
index 0000000..f6674e6
--- /dev/null
+++ b/mobile/traque-app/src/components/game/Header.jsx
@@ -0,0 +1,46 @@
+// React
+import { View, Text, Alert, StyleSheet } from 'react-native';
+// Contexts
+import { useAuth } from '@/contexts/authContext';
+import { useTeam } from '@/contexts/teamContext';
+// Components
+import { IconButton } from '@/components/common/IconButton';
+
+export const Header = () => {
+ const { logout } = useAuth();
+ const { teamInfos } = useTeam();
+ const { name } = teamInfos;
+
+ return (
+
+
+
+ Alert.alert("Settings")} />
+
+
+ {name ?? "Inconnue"}
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ width: '100%',
+ alignItems: 'center'
+ },
+ buttonsContainer: {
+ width: "100%",
+ flexDirection: "row",
+ justifyContent: 'space-between'
+ },
+ nameContainer: {
+ width: '100%',
+ alignItems: 'center',
+ justifyContent: 'center'
+ },
+ name: {
+ fontSize: 36,
+ fontWeight: "bold"
+ }
+});
diff --git a/mobile/traque-app/src/components/game/MapLayers.jsx b/mobile/traque-app/src/components/game/MapLayers.jsx
new file mode 100644
index 0000000..222969a
--- /dev/null
+++ b/mobile/traque-app/src/components/game/MapLayers.jsx
@@ -0,0 +1,93 @@
+// React
+import { useMemo } from 'react';
+import { Circle, Polygon } from 'react-native-maps';
+// Components
+import { DashedCircle, InvertedCircle, InvertedPolygon } from '@/components/common/Layers';
+// Contexts
+import { useTeam } from '@/contexts/teamContext';
+// Constants
+import { ZONE_TYPES } from '@/constants';
+
+export const StartZone = () => {
+ const { teamInfos } = useTeam();
+ const { startingArea } = teamInfos;
+
+ return useMemo(() => {
+ if (startingArea) return null;
+
+ return (
+
+ );
+ }, [startingArea]);
+};
+
+const latToLatitude = (pos) => ({latitude: pos.lat, longitude: pos.lng});
+
+export const GameZone = () => {
+ const { zoneType, zoneExtremities } = useTeam();
+
+ return useMemo(() => {
+ if (!zoneExtremities) return null;
+
+ const items = [];
+
+ const nextZoneStrokeColor = "rgb(90, 90, 90)";
+ const zoneColor = "rgba(25, 83, 169, 0.4)";
+ const strokeWidth = 3;
+ const lineDashPattern = [30, 10];
+
+ switch (zoneType) {
+ case ZONE_TYPES.CIRCLE:
+ if (zoneExtremities.begin) items.push(
+
+ );
+ if (zoneExtremities.end) items.push(
+
+ );
+ break;
+ case ZONE_TYPES.POLYGON:
+ if (zoneExtremities.begin) items.push(
+ latToLatitude(pos))}
+ fillColor={zoneColor}
+ />
+ );
+ if (zoneExtremities.end) items.push(
+ latToLatitude(pos))}
+ strokeColor={nextZoneStrokeColor}
+ strokeWidth={strokeWidth}
+ lineDashPattern={lineDashPattern}
+ />
+ );
+ break;
+ default:
+ return null;
+ }
+
+ return items.length ? items : null;
+ }, [zoneType, zoneExtremities]);
+};
diff --git a/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx b/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx
new file mode 100644
index 0000000..f7626d6
--- /dev/null
+++ b/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx
@@ -0,0 +1,105 @@
+// React
+import { useState } from 'react';
+import { View, Text, Image, StyleSheet, TouchableOpacity, Alert } from 'react-native';
+import { useTranslation } from 'react-i18next';
+// Components
+import { ExpandableImage } from '@/components/common/Image';
+import { CustomTextInput } from '@/components/common/Input';
+import { Drawer } from '@/components/common/Drawer';
+import { Show } from '@/components/common/Show';
+import { TeamStats } from '@/components/game/TeamStats';
+// Contexts
+import { useAuth } from '@/contexts/authContext';
+import { useTeam } from '@/contexts/teamContext';
+// Services
+import { emitCapture } from '@/services/socket/emitters';
+import { enemyImage } from '@/services/api/image';
+
+export const TargetInfoDrawer = ({ height }) => {
+ const { t } = useTranslation();
+ const { teamId } = useAuth();
+ const { teamInfos } = useTeam();
+ const { enemyName, captureCode, name, hasHandicap } = teamInfos;
+ const [enemyCaptureCode, setEnemyCaptureCode] = useState("");
+ const [isCapturing, setIsCapturing] = useState(false);
+
+ const handleCapture = () => {
+ if (isCapturing) return;
+
+ setIsCapturing(true);
+
+ emitCapture(enemyCaptureCode)
+ .then((response) => {
+ if (response.hasCaptured) {
+ Alert.alert("Bravo !", "Vous avez réussi à capturer votre cible. Une nouvelle cible vient de vous être attribuée.");
+ setEnemyCaptureCode("");
+ } else {
+ Alert.alert("Échec !", "Le code que vous venez de rentrer n'est pas celui de votre cible.");
+ }
+ })
+ .catch(() => {
+ Alert.alert(t("error.title"), t("error.server_connection"));
+ })
+ .finally(() => setIsCapturing(false));
+ };
+
+ return (
+
+
+ {t("interface.drawer.capture_code", {name: name ?? t("general.no_value"), code: String(captureCode).padStart(4,"0")})}
+
+
+
+ {t("interface.drawer.target_name", {name: enemyName ?? t("general.no_value")})}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ imageContainer: {
+ width: "100%",
+ alignItems: "center",
+ justifyContent: "center",
+ marginTop: 15
+ },
+ actionsContainer: {
+ flexDirection: "row",
+ width: "100%",
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ marginTop: 15
+ },
+ actionsLeftContainer: {
+ flexGrow: 1,
+ alignItems: 'center',
+ justifyContent: 'center',
+ marginRight: 15
+ },
+ actionsRightContainer: {
+ width: 100,
+ alignItems: 'center',
+ justifyContent: 'center'
+ },
+ button: {
+ borderRadius: 12,
+ width: '100%',
+ height: 75,
+ alignItems: 'center',
+ justifyContent: 'center',
+ backgroundColor: '#444'
+ },
+});
diff --git a/mobile/traque-app/src/components/game/TeamStats.jsx b/mobile/traque-app/src/components/game/TeamStats.jsx
new file mode 100644
index 0000000..730742f
--- /dev/null
+++ b/mobile/traque-app/src/components/game/TeamStats.jsx
@@ -0,0 +1,75 @@
+// React
+import { useMemo } from 'react';
+import { StyleSheet, View, TouchableOpacity, Image, Text, Alert } from 'react-native';
+import { useTranslation } from 'react-i18next';
+// Contexts
+import { useTeam } from '@/contexts/teamContext';
+// Hook
+import { useTimeSinceSeconds } from '@/hooks/useTimeDelta';
+// Util
+import { secondsToHHMMSS } from '@/utils/functions';
+
+const Stat = ({ children, source, description }) => {
+ return (
+ Alert.alert("Info", description) : null}>
+
+ {children}
+
+ );
+};
+
+export const TeamStats = () => {
+ const { t } = useTranslation();
+ const { teamInfos, startDate } = useTeam();
+ const { distance, finishDate, nCaptures, nSentLocation } = teamInfos;
+ const timeSinceGameStart = useTimeSinceSeconds(startDate);
+
+ const avgSpeed = useMemo(() => {
+ const hours = (finishDate ? (finishDate - startDate) : timeSinceGameStart*1000) / 1000 / 3600;
+ if (hours <= 0 || distance <= 0) return 0;
+ const km = distance / 1000;
+ const speed = km / hours;
+
+ return parseFloat(speed.toFixed(1));
+ }, [finishDate, startDate, timeSinceGameStart, distance]);
+
+ return (
+
+
+ {Math.floor(distance / 100) / 10}km
+ {secondsToHHMMSS((finishDate ? Math.floor((finishDate - startDate) / 1000) : timeSinceGameStart))}
+ {avgSpeed}km/h
+
+
+ {nCaptures}
+ {nSentLocation}
+
+
+ );
+};
+
+const styles = StyleSheet.create({
+ statContainer: {
+ height: 30,
+ flexDirection: "row",
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ image: {
+ width: 30,
+ height: 30,
+ marginRight: 5
+ },
+ text: {
+ fontSize: 15
+ },
+ statsContainer: {
+ gap: 15,
+ width: "100%",
+ marginVertical: 15
+ },
+ row: {
+ flexDirection: "row",
+ justifyContent: "space-around"
+ }
+});
diff --git a/mobile/traque-app/src/components/game/Toasts.jsx b/mobile/traque-app/src/components/game/Toasts.jsx
new file mode 100644
index 0000000..a3eb814
--- /dev/null
+++ b/mobile/traque-app/src/components/game/Toasts.jsx
@@ -0,0 +1,80 @@
+// React
+import { View, Text, StyleSheet } from 'react-native';
+import { useTranslation } from 'react-i18next';
+// Contexts
+import { useTeam } from '@/contexts/teamContext';
+// Hooks
+import { useUserState } from '@/hooks/useUserState';
+// Util
+import { secondsToMMSS } from '@/utils/functions';
+// Constants
+import { USER_STATE } from '@/constants';
+import { useCountdownSeconds } from '@/hooks/useTimeDelta';
+
+export const Toasts = () => {
+ const { t } = useTranslation();
+ const { teamInfos } = useTeam();
+ const { outOfZone, outOfZoneDeadline, hasHandicap, enemyHasHandicap, ready } = teamInfos;
+ const userState = useUserState();
+ const outOfZoneTimeLeft = useCountdownSeconds(outOfZoneDeadline);
+
+ const toastData = [
+ {
+ condition: userState === USER_STATE.PLACEMENT,
+ id: 'placement',
+ text: ready ? t("interface.placed") : t("interface.not_placed"),
+ toastColor: ready ? "rgb(25, 165, 25)" : "rgb(204, 51, 51)" ,
+ textColor: "white"
+ },
+ {
+ condition: userState === USER_STATE.PLAYING && !outOfZone && enemyHasHandicap,
+ id: 'enemy_revealed',
+ text: t("interface.enemy_position_revealed"),
+ toastColor: "white",
+ textColor: "black"
+ },
+ {
+ condition: userState === USER_STATE.PLAYING && outOfZone && hasHandicap,
+ id: 'out_of_zone',
+ text: `${t("interface.go_in_zone")}\n${t("interface.team_position_revealed")}`,
+ toastColor: "white",
+ textColor: "black"
+ },
+ {
+ condition: userState === USER_STATE.PLAYING && outOfZone && !hasHandicap,
+ id: 'has_handicap',
+ text: `${t("interface.go_in_zone")}\n${t("interface.out_of_zone_message", {time: secondsToMMSS(outOfZoneTimeLeft)})}`,
+ toastColor: "white",
+ textColor: "black"
+ }
+ ];
+
+ return (
+
+ {toastData.filter(item => item.condition).map((item) => (
+
+
+ {item.text}
+
+
+ ))}
+
+ );
+};
+
+const styles = StyleSheet.create({
+ container: {
+ position: 'absolute',
+ top: 5,
+ left: "50%",
+ transform: [{ translateX: '-50%' }],
+ maxWidth: "60%"
+ },
+ toast: {
+ margin: 5,
+ padding: 10,
+ borderRadius: 15,
+ backgroundColor: 'white',
+ elevation: 5
+ },
+});
diff --git a/mobile/traque-app/src/components/map.jsx b/mobile/traque-app/src/components/map.jsx
deleted file mode 100644
index b810e40..0000000
--- a/mobile/traque-app/src/components/map.jsx
+++ /dev/null
@@ -1,171 +0,0 @@
-// React
-import { useState, useEffect, useMemo, useRef } from 'react';
-import { View, Image, Alert, StyleSheet, TouchableOpacity } from 'react-native';
-import MapView, { Marker, Circle, Polygon } from 'react-native-maps';
-import LinearGradient from 'react-native-linear-gradient';
-// Components
-import { DashedCircle, InvertedCircle, InvertedPolygon } from './layer';
-// Contexts
-import { useTeam } from '../contexts/teamContext';
-// Hook
-import { useLocation } from '../hooks/useLocation';
-// Util
-import { ZONE_TYPES, INITIAL_REGIONS, GAME_STATE } from '../constants';
-
-export const CustomMap = () => {
- const { location } = useLocation();
- const {teamInfos, zoneType, zoneExtremities, gameState} = useTeam();
- const {enemyLocation, startingArea, lastSentLocation, hasHandicap} = teamInfos;
- const [centerMap, setCenterMap] = useState(true);
- const mapRef = useRef(null);
-
- // Center the map on user position
- useEffect(() => {
- if (centerMap && location && mapRef.current) {
- mapRef.current.animateToRegion({...location, latitudeDelta: 0, longitudeDelta: 0.02}, 1000);
- }
- }, [centerMap, location]);
-
-
- // Map layers
-
- const latToLatitude = (pos) => ({latitude: pos.lat, longitude: pos.lng});
-
- const startZone = useMemo(() => {
- if (gameState != GAME_STATE.PLACEMENT || !startingArea) return null;
-
- return (
-
- );
- }, [gameState, startingArea]);
-
- const gameZone = useMemo(() => {
- if (gameState !== GAME_STATE.PLAYING || !zoneExtremities) return null;
-
- const items = [];
-
- const nextZoneStrokeColor = "rgb(90, 90, 90)";
- const zoneColor = "rgba(25, 83, 169, 0.4)";
- const strokeWidth = 3;
- const lineDashPattern = [30, 10];
-
- if (zoneType === ZONE_TYPES.CIRCLE) {
- if (zoneExtremities.begin) items.push(
-
- );
- if (zoneExtremities.end) items.push(
-
- );
- } else if (zoneType === ZONE_TYPES.POLYGON) {
- if (zoneExtremities.begin) items.push(
- latToLatitude(pos))}
- fillColor={zoneColor}
- />
- );
- if (zoneExtremities.end) items.push(
- latToLatitude(pos))}
- strokeColor={nextZoneStrokeColor}
- strokeWidth={strokeWidth}
- lineDashPattern={lineDashPattern}
- />
- );
- }
-
- return items.length ? items : null;
- }, [gameState, zoneType, zoneExtremities]);
-
- const currentPositionMarker = useMemo(() => {
- if (!location) return null;
-
- return (
- Alert.alert("Position actuelle", "Ceci est votre position")}>
-
-
- );
- }, [location]);
-
- const lastPositionMarker = useMemo(() => {
- if (gameState != GAME_STATE.PLAYING || !lastSentLocation || hasHandicap) return null;
-
- return (
- Alert.alert("Position envoyée", "Ceci est votre dernière position connue par le serveur")}>
-
-
- );
- }, [gameState, hasHandicap, lastSentLocation]);
-
- const enemyPositionMarker = useMemo(() => {
- if (gameState != GAME_STATE.PLAYING || !enemyLocation || hasHandicap) return null;
-
- return (
- Alert.alert("Position ennemie", "Ceci est la dernière position de vos ennemis connue")}>
-
-
- );
- }, [gameState, hasHandicap, enemyLocation]);
-
-
- return (
-
- setCenterMap(false)} toolbarEnabled={false}>
- {startZone}
- {gameZone}
- {currentPositionMarker}
- {lastPositionMarker}
- {enemyPositionMarker}
-
-
- { !centerMap &&
- setCenterMap(true)}>
-
-
- }
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- flex: 1,
- width: '100%',
- borderTopLeftRadius: 30,
- borderTopRightRadius: 30,
- overflow: 'hidden',
- },
- centerMap: {
- position: 'absolute',
- right: 20,
- top: 20,
- width: 40,
- height: 40,
- borderRadius: 20,
- backgroundColor: 'white',
- borderWidth: 2,
- borderColor: 'black',
- alignItems: 'center',
- justifyContent: 'center',
- },
- markerImage: {
- width: 24,
- height: 24
- }
-});
diff --git a/mobile/traque-app/src/components/stat.jsx b/mobile/traque-app/src/components/stat.jsx
deleted file mode 100644
index 714a093..0000000
--- a/mobile/traque-app/src/components/stat.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-// React
-import { TouchableOpacity, View, Image, Text, Alert } from 'react-native';
-
-export const Stat = ({ children, source, description }) => {
- return (
- Alert.alert("Info", description) : null}>
-
- {source && }
- {children}
-
-
- );
-};
diff --git a/mobile/traque-app/src/components/timer.jsx b/mobile/traque-app/src/components/timer.jsx
deleted file mode 100644
index f8eb36d..0000000
--- a/mobile/traque-app/src/components/timer.jsx
+++ /dev/null
@@ -1,20 +0,0 @@
-// React
-import { View, Text, StyleSheet } from 'react-native';
-// Util
-import { secondsToMMSS } from '../utils/functions';
-
-export const TimerMMSS = ({ title, seconds, style }) => {
- return (
-
- {title}
- {secondsToMMSS(seconds)}
-
- );
-};
-
-const styles = StyleSheet.create({
- container: {
- alignItems: 'center',
- justifyContent: 'center',
- }
-});
diff --git a/mobile/traque-app/src/constants/game.js b/mobile/traque-app/src/constants/game.js
index 2815623..6801e9c 100644
--- a/mobile/traque-app/src/constants/game.js
+++ b/mobile/traque-app/src/constants/game.js
@@ -5,6 +5,17 @@ export const GAME_STATE = {
FINISHED: "finished"
};
+export const USER_STATE = {
+ LOADING: "loading",
+ NO_LOCATION: "no_location",
+ OFFLINE: "offline",
+ WAITING: "waiting",
+ PLACEMENT: "placement",
+ PLAYING: "playing",
+ CAPTURED: "captured",
+ FINISHED: "finished"
+};
+
export const ZONE_TYPES = {
CIRCLE: "circle",
POLYGON: "polygon"
diff --git a/mobile/traque-app/src/contexts/authContext.jsx b/mobile/traque-app/src/contexts/authContext.jsx
index e85aad3..9f3a63e 100644
--- a/mobile/traque-app/src/contexts/authContext.jsx
+++ b/mobile/traque-app/src/contexts/authContext.jsx
@@ -2,11 +2,11 @@
import { createContext, useContext, useState, useEffect, useCallback, useMemo } from "react";
import DeviceInfo from 'react-native-device-info';
// Hook
-import { useLocalStorage } from '../hooks/useLocalStorage';
+import { useLocalStorage } from '@/hooks/useLocalStorage';
// Services
-import { emitLogin, emitLogout, emitBattery, emitDeviceInfo } from "../services/socket/emitters";
+import { emitLogin, emitLogout, emitBattery, emitDeviceInfo } from "@/services/socket/emitters";
-const AuthContext = createContext();
+const AuthContext = createContext(null);
export const AuthProvider = ({ children }) => {
const [loggedIn, setLoggedIn] = useState(false);
@@ -34,12 +34,14 @@ export const AuthProvider = ({ children }) => {
emitLogout();
}, [loggedIn, setTeamId]);
+ /*
// Try to log in with saved teamId
useEffect(() => {
if (!loggedIn && teamId) {
login(teamId);
}
}, [loggedIn, teamId, login]);
+ */
// Emit battery level and phone model at log in
useEffect(() => {
diff --git a/mobile/traque-app/src/contexts/teamContext.jsx b/mobile/traque-app/src/contexts/teamContext.jsx
index 7859163..df7531d 100644
--- a/mobile/traque-app/src/contexts/teamContext.jsx
+++ b/mobile/traque-app/src/contexts/teamContext.jsx
@@ -1,13 +1,13 @@
// React
import { createContext, useContext, useMemo, useState, useEffect } from "react";
// Context
-import { useAuth } from "./authContext";
+import { useAuth } from "@/contexts/authContext";
// Services
-import { socket } from "../services/socket/connection";
+import { socket } from "@/services/socket/connection";
// Constants
-import { GAME_STATE } from "../constants";
+import { GAME_STATE } from "@/constants";
-const TeamContext = createContext();
+const TeamContext = createContext(null);
const useOnEvent = (event, callback) => {
useEffect(() => {
diff --git a/mobile/traque-app/src/hooks/useLocation.jsx b/mobile/traque-app/src/hooks/useLocation.jsx
index bdba8ef..2fc1751 100644
--- a/mobile/traque-app/src/hooks/useLocation.jsx
+++ b/mobile/traque-app/src/hooks/useLocation.jsx
@@ -3,7 +3,7 @@ import { useState, useEffect } from 'react';
// Expo
import * as Location from 'expo-location';
// Constants
-import { LOCATION_PARAMETERS } from '../constants';
+import { LOCATION_PARAMETERS } from '@/constants';
export const useLocation = () => {
const [location, setLocation] = useState(null);
@@ -17,8 +17,8 @@ export const useLocation = () => {
if (status !== 'granted') return;
subscription = await Location.watchPositionAsync(
- LOCATION_PARAMETERS,
- (location) => setLocation(location.coords)
+ LOCATION_PARAMETERS.LOCAL,
+ (location) => setLocation([location.coords.latitude, location.coords.longitude])
);
};
diff --git a/mobile/traque-app/src/hooks/usePickImage.jsx b/mobile/traque-app/src/hooks/usePickImage.jsx
index d75396b..5809b2b 100644
--- a/mobile/traque-app/src/hooks/usePickImage.jsx
+++ b/mobile/traque-app/src/hooks/usePickImage.jsx
@@ -1,10 +1,12 @@
// React
import { useState, useCallback } from 'react';
import { Alert } from 'react-native';
+import { useTranslation } from 'react-i18next';
// Expo
import { launchImageLibraryAsync, requestMediaLibraryPermissionsAsync } from 'expo-image-picker';
export const usePickImage = () => {
+ const { t } = useTranslation();
const [image, setImage] = useState(null);
const pickImage = useCallback(async () => {
@@ -12,7 +14,7 @@ export const usePickImage = () => {
const permissionResult = await requestMediaLibraryPermissionsAsync();
if (permissionResult.granted === false) {
- Alert.alert("Permission refusée", "Activez l'accès au stockage ou à la gallerie dans les paramètres.");
+ Alert.alert(t("error.permission.title"), t("error.permission.storage_acces"));
return;
}
let result = await launchImageLibraryAsync({
@@ -31,9 +33,9 @@ export const usePickImage = () => {
}
} catch (error) {
console.error('Error picking image;', error);
- Alert.alert('Erreur', "Une erreur est survenue lors de la sélection d'une image.");
+ Alert.alert(t("error.title"), t("error.image_selection"));
}
- }, []);
+ }, [t]);
return { image, pickImage };
};
diff --git a/mobile/traque-app/src/hooks/useTimeDelta.jsx b/mobile/traque-app/src/hooks/useTimeDelta.jsx
new file mode 100644
index 0000000..bd9b334
--- /dev/null
+++ b/mobile/traque-app/src/hooks/useTimeDelta.jsx
@@ -0,0 +1,61 @@
+// React
+import { useState, useEffect } from 'react';
+
+export const useCountdownSeconds = (date) => {
+ const [time, setTime] = useState(0);
+
+ useEffect(() => {
+ if (!date) {
+ setTime(0);
+ return;
+ }
+
+ let interval;
+
+ const updateTime = () => {
+ const timeLeft = Math.floor((date - Date.now()) / 1000);
+
+ if (timeLeft <= 0) {
+ setTime(0);
+ clearInterval(interval);
+ } else {
+ setTime(timeLeft);
+ }
+ };
+
+ updateTime();
+ interval = setInterval(updateTime, 1000);
+
+ return () => clearInterval(interval);
+ }, [date]);
+
+ return time;
+};
+
+export const useTimeSinceSeconds = (date) => {
+ const [time, setTime] = useState(0);
+
+ useEffect(() => {
+ if (!date) {
+ setTime(0);
+ return;
+ }
+
+ const updateTime = () => {
+ const timeSince = Math.floor((Date.now() - date) / 1000);
+
+ if (timeSince <= 0) {
+ setTime(0);
+ } else {
+ setTime(timeSince);
+ }
+ };
+
+ updateTime();
+ const interval = setInterval(updateTime, 1000);
+
+ return () => clearInterval(interval);
+ }, [date]);
+
+ return time;
+};
diff --git a/mobile/traque-app/src/hooks/useTimeDifference.jsx b/mobile/traque-app/src/hooks/useTimeDifference.jsx
deleted file mode 100644
index c1cea5d..0000000
--- a/mobile/traque-app/src/hooks/useTimeDifference.jsx
+++ /dev/null
@@ -1,24 +0,0 @@
-// React
-import { useEffect, useState } from "react";
-
-/**
- * If refTime is in the past, time will be positive
- * If refTime is in the future, time will be negative
- * The time is updated every timeout milliseconds
- */
-export const useTimeDifference = (refTime, timeout) => {
- const [time, setTime] = useState(0);
-
- useEffect(() => {
- const updateTime = () => {
- setTime(Math.floor((Date.now() - refTime) / 1000));
- };
-
- updateTime();
- const interval = setInterval(updateTime, timeout);
-
- return () => clearInterval(interval);
- }, [refTime, timeout]);
-
- return [time];
-};
diff --git a/mobile/traque-app/src/hooks/useUserState.jsx b/mobile/traque-app/src/hooks/useUserState.jsx
new file mode 100644
index 0000000..ef103bc
--- /dev/null
+++ b/mobile/traque-app/src/hooks/useUserState.jsx
@@ -0,0 +1,43 @@
+// React
+import { useState, useEffect, useMemo } from "react";
+// Contexts
+import { useAuth } from "@/contexts/authContext";
+import { useTeam } from "@/contexts/teamContext";
+// Constants
+import { GAME_STATE, USER_STATE } from '@/constants';
+import { getLocationAuthorization } from '@/services/tasks/backgroundLocation';
+
+export const useUserState = () => {
+ const { loggedIn } = useAuth();
+ const { teamInfos, gameState } = useTeam();
+ const { captured } = teamInfos;
+ const [isLocationAuthorized, setIsLocationAuthorized] = useState(null);
+
+ useEffect(() => {
+ const checkLocationAuth = async () => {
+ const result = await getLocationAuthorization();
+ setIsLocationAuthorized(result);
+ };
+
+ checkLocationAuth();
+ }, []);
+
+ return useMemo(() => {
+ if (isLocationAuthorized == null) return USER_STATE.LOADING;
+ if (!isLocationAuthorized) return USER_STATE.NO_LOCATION;
+ if (!loggedIn) return USER_STATE.OFFLINE;
+
+ switch (gameState) {
+ case GAME_STATE.SETUP:
+ return USER_STATE.WAITING;
+ case GAME_STATE.PLACEMENT:
+ return USER_STATE.PLACEMENT;
+ case GAME_STATE.PLAYING:
+ return captured ? USER_STATE.CAPTURED : USER_STATE.PLAYING;
+ case GAME_STATE.FINISHED:
+ return USER_STATE.FINISHED;
+ default:
+ return USER_STATE.WAITING;
+ }
+ }, [loggedIn, gameState, captured, isLocationAuthorized]);
+};
diff --git a/mobile/traque-app/src/i18n/config.js b/mobile/traque-app/src/i18n/config.js
new file mode 100644
index 0000000..491f9cb
--- /dev/null
+++ b/mobile/traque-app/src/i18n/config.js
@@ -0,0 +1,26 @@
+import i18n from 'i18next';
+import { initReactI18next } from 'react-i18next';
+
+// Importation des fichiers de traduction
+import fr from './locales/fr.json';
+import en from './locales/en.json';
+
+// eslint-disable-next-line import/no-named-as-default-member
+i18n
+ .use(initReactI18next)
+ .init({
+ resources: {
+ en: { translation: en },
+ fr: { translation: fr }
+ },
+ lng: 'fr',
+ fallbackLng: 'en',
+ interpolation: {
+ escapeValue: false
+ },
+ react: {
+ useSuspense: false
+ }
+ });
+
+export default i18n;
diff --git a/mobile/traque-app/src/i18n/locales/en.json b/mobile/traque-app/src/i18n/locales/en.json
new file mode 100644
index 0000000..0db3279
--- /dev/null
+++ b/mobile/traque-app/src/i18n/locales/en.json
@@ -0,0 +1,3 @@
+{
+
+}
diff --git a/mobile/traque-app/src/i18n/locales/fr.json b/mobile/traque-app/src/i18n/locales/fr.json
new file mode 100644
index 0000000..a7ad7cc
--- /dev/null
+++ b/mobile/traque-app/src/i18n/locales/fr.json
@@ -0,0 +1,61 @@
+{
+ "general": {
+ "no_value": "Indisponible"
+ },
+ "index": {
+ "header": {
+ "title": "LA TRAQUE"
+ },
+ "form": {
+ "team_id_input": "ID de l'équipe",
+ "image_label": "Appuyer pour changer la photo d'équipe",
+ "image_sublabel": "Le haut du corps doit être visible",
+ "validate_button": "Valider"
+ }
+ },
+ "interface": {
+ "placed": "Placé",
+ "not_placed": "Non placé",
+ "zone_reduction_label": "Réduction de la zone dans",
+ "send_position_label": "Position envoyée dans",
+ "enemy_position_revealed": "Position ennemie révélée en continue !",
+ "waiting_default_message": "Préparation de la partie",
+ "placement_default_message": "Phase de placement",
+ "go_in_zone": "Retournez dans la zone !",
+ "team_position_revealed": "Position révélée en continue.",
+ "out_of_zone_message": "Handicap dans {{time}}",
+ "playing_message": "La partie est en cours",
+ "winner_message": "Vous avez gagné !",
+ "loser_message": "Vous avez perdu...",
+ "captured_message": "Vous avez été éliminé...",
+ "map": {
+ "team_marker_title": "Position actuelle",
+ "team_marker_description": "Ceci est votre position",
+ "previous_marker_title": "Position envoyée",
+ "previous_marker_description": "Ceci est votre dernière position connue par le serveur",
+ "enemy_marker_title": "Position ennemie",
+ "enemy_marker_description": "Ceci est la dernière position de vos ennemis connue"
+ },
+ "drawer": {
+ "capture_code": "Code de {{name}} : {{code}}",
+ "target_name": "Cible ({{name}})",
+ "target_code_input": "Code cible",
+ "stat_distance_label": "Distance parcourue",
+ "stat_time_label": "Temps écoulé au format HH:MM:SS",
+ "stat_speed_label": "Vitesse moyenne",
+ "stat_capture_label": "Nombre total de captures par votre équipe",
+ "stat_reveal_label": "Nombre total d'envois de votre position"
+ }
+ },
+ "error": {
+ "title": "Erreur",
+ "invalid_team_id": "Veuillez entrer un ID d'équipe valide.",
+ "unknown_team_id": "L'ID d'équipe est inconnu.",
+ "server_connection": "La connexion au serveur a échoué.",
+ "image_selection": "Une erreur est survenue lors de la sélection d'une image.",
+ "permission": {
+ "title": "Permission refusée",
+ "storage_acces": "Activez l'accès au stockage ou à la gallerie dans les paramètres."
+ }
+ }
+}
diff --git a/mobile/traque-app/src/services/api/image.js b/mobile/traque-app/src/services/api/image.js
index f14fb1f..db4f1ec 100644
--- a/mobile/traque-app/src/services/api/image.js
+++ b/mobile/traque-app/src/services/api/image.js
@@ -1,10 +1,11 @@
// Constants
-import { SERVER_URL } from "../../constants";
+import { SERVER_URL } from "@/constants";
export const uploadTeamImage = async (id, imageUri) => {
if (!imageUri || !id) return;
const data = new FormData();
+ // @ts-ignore
data.append('file', {
uri: imageUri,
name: 'photo.jpg',
@@ -26,7 +27,7 @@ export const uploadTeamImage = async (id, imageUri) => {
};
export const enemyImage = (id) => {
- if (!id) return require('../assets/images/missing_image.jpg');
+ if (!id) return require('@/assets/images/missing_image.jpg');
return {uri: `${SERVER_URL}/photo/enemy?team=${id}`};
};
diff --git a/mobile/traque-app/src/services/socket/connection.js b/mobile/traque-app/src/services/socket/connection.js
index 429d5ec..42c19ee 100644
--- a/mobile/traque-app/src/services/socket/connection.js
+++ b/mobile/traque-app/src/services/socket/connection.js
@@ -1,7 +1,7 @@
// Socket
import { io } from "socket.io-client";
// Constants
-import { SOCKET_URL } from "../../constants";
+import { SOCKET_URL } from "@/constants";
export const socket = io(SOCKET_URL, {
path: "/back/socket.io"
diff --git a/mobile/traque-app/src/services/socket/emitters.js b/mobile/traque-app/src/services/socket/emitters.js
index b29a1a3..415f0ec 100644
--- a/mobile/traque-app/src/services/socket/emitters.js
+++ b/mobile/traque-app/src/services/socket/emitters.js
@@ -1,5 +1,5 @@
// Services
-import { socket } from "./connection";
+import { socket } from "@/services/socket/connection";
const customEmit = (event, ...args) => {
if (!socket?.connected) return false;
@@ -21,7 +21,8 @@ const customEmitCallback = (event, ...args) => {
socket.emit(event, ...args, (response) => {
clearTimeout(timeout);
- resolve(response.length > 1 ? response : response[0]);
+ console.log("Received : ", response);
+ resolve(response);
});
});
};
diff --git a/mobile/traque-app/src/services/tasks/backgroundLocation.js b/mobile/traque-app/src/services/tasks/backgroundLocation.js
index 5112ceb..39c1965 100644
--- a/mobile/traque-app/src/services/tasks/backgroundLocation.js
+++ b/mobile/traque-app/src/services/tasks/backgroundLocation.js
@@ -2,9 +2,9 @@
import { defineTask, isTaskRegisteredAsync } from "expo-task-manager";
import * as Location from 'expo-location';
// Services
-import { emitUpdatePosition } from "../socket/emitters";
+import { emitUpdatePosition } from "@/services/socket/emitters";
// Constants
-import { TASKS, LOCATION_PARAMETERS } from "../../constants";
+import { TASKS, LOCATION_PARAMETERS } from "@/constants";
// Task
@@ -15,6 +15,7 @@ defineTask(TASKS.BACKGROUND_LOCATION, async ({ data, error }) => {
return;
}
if (data) {
+ // @ts-ignore
const { locations } = data;
if (locations.length == 0) {
console.log("No location measured.");
diff --git a/mobile/traque-app/src/utils/functions.js b/mobile/traque-app/src/utils/functions.js
index 9e8e5c4..314c41f 100644
--- a/mobile/traque-app/src/utils/functions.js
+++ b/mobile/traque-app/src/utils/functions.js
@@ -24,7 +24,7 @@ export const secondsToMMSS = (seconds) => {
return strMinutes.padStart(2,"0") + ":" + strSeconds.padStart(2,"0");
};
-export const secondsToHHMMSS = (seconds) => {
+export const secondsToHHMMSS = (seconds) => {
if (!Number.isInteger(seconds)) return "Inconnue";
if (seconds < 0) seconds = 0;
const strHours = String(Math.floor(seconds / 3600));