diff --git a/mobile/tradeverse/.eslintignore b/mobile/tradeverse/.eslintignore new file mode 100644 index 00000000..6c7fc15b --- /dev/null +++ b/mobile/tradeverse/.eslintignore @@ -0,0 +1 @@ +babel.config.js \ No newline at end of file diff --git a/mobile/tradeverse/.eslintrc b/mobile/tradeverse/.eslintrc new file mode 100644 index 00000000..6ffeea08 --- /dev/null +++ b/mobile/tradeverse/.eslintrc @@ -0,0 +1,23 @@ +{ + "extends": [ + "airbnb-base", + "prettier", + "plugin:react/recommended", + "plugin:react-hooks/recommended", + ], + "plugins": ["prettier", "react", "react-hooks"], + "rules": { + "prettier/prettier": ["error"], + "eqeqeq": "off", + "comma-dangle": "off", + "no-underscore-dangle": "off", + }, + "settings": { + "import/resolver": { + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx"], + }, + "babel-module": {}, + }, + }, +} diff --git a/mobile/tradeverse/.prettierrc b/mobile/tradeverse/.prettierrc new file mode 100644 index 00000000..36301bc5 --- /dev/null +++ b/mobile/tradeverse/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "singleQuote": true, + "trailingComma": "es5" +} diff --git a/mobile/tradeverse/app.json b/mobile/tradeverse/app.json index bda2f019..fbb507a3 100644 --- a/mobile/tradeverse/app.json +++ b/mobile/tradeverse/app.json @@ -19,18 +19,25 @@ "adaptiveIcon": { "foregroundImage": "./assets/images/adaptive-icon.png", "backgroundColor": "#ffffff" - } + }, + "package": "com.huseyin.karatas.tradeverse" }, "web": { "bundler": "metro", "output": "static", "favicon": "./assets/images/favicon.png" }, - "plugins": [ - "expo-router" - ], + "plugins": ["expo-router"], "experiments": { "typedRoutes": true + }, + "extra": { + "router": { + "origin": false + }, + "eas": { + "projectId": "afbaffdd-20ea-4bb5-85ee-988716e97ea4" + } } } } diff --git a/mobile/tradeverse/app/(tabs)/_layout.jsx b/mobile/tradeverse/app/(tabs)/_layout.jsx index 9cba63f6..241f61f0 100644 --- a/mobile/tradeverse/app/(tabs)/_layout.jsx +++ b/mobile/tradeverse/app/(tabs)/_layout.jsx @@ -1,13 +1,17 @@ /* eslint-disable react/self-closing-comp */ -import { Tabs } from "expo-router"; -import { COLORS } from "../../constants/theme"; -import { NAV_OPTIONS } from "../../config/navigation"; -import AuthGuard from "../../auth/context/auth-guard"; +import { Tabs } from 'expo-router' +import { COLORS } from '../../constants/theme' +import { NAV_OPTIONS } from '../../config/navigation' +import AuthGuard from '../../auth/context/auth-guard' +import CustomTabBar from '../../components/ui/tabbar/index' export default function Layout() { return ( - + } + initialRouteName="home" + > {NAV_OPTIONS.map((option) => ( { - return opt.focused ? option.activeIcon : option.icon; + return opt.focused ? option.activeIcon : option.icon }, tabBarActiveTintColor: COLORS.primary, }} @@ -24,5 +28,5 @@ export default function Layout() { ))} - ); + ) } diff --git a/mobile/tradeverse/app/(tabs)/account/_layout.jsx b/mobile/tradeverse/app/(tabs)/account/_layout.jsx index f645a49e..27011f71 100644 --- a/mobile/tradeverse/app/(tabs)/account/_layout.jsx +++ b/mobile/tradeverse/app/(tabs)/account/_layout.jsx @@ -1,10 +1,10 @@ -import { Stack } from 'expo-router'; -import React from 'react'; +import { Stack } from 'expo-router' +import React from 'react' export default function StackLayout() { return ( - + - ); + ) } diff --git a/mobile/tradeverse/app/(tabs)/account/followed-topics.jsx b/mobile/tradeverse/app/(tabs)/account/followed-topics.jsx index e9a049a1..b09e3c74 100644 --- a/mobile/tradeverse/app/(tabs)/account/followed-topics.jsx +++ b/mobile/tradeverse/app/(tabs)/account/followed-topics.jsx @@ -3,7 +3,5 @@ import React from 'react' import FollowedTopicsScreen from '../../../screens/followed-topics' export default function FollowedTopics() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/account/followed-users.jsx b/mobile/tradeverse/app/(tabs)/account/followed-users.jsx index 0ada008c..c912e39d 100644 --- a/mobile/tradeverse/app/(tabs)/account/followed-users.jsx +++ b/mobile/tradeverse/app/(tabs)/account/followed-users.jsx @@ -4,7 +4,5 @@ import AssetDetailScreen from '../../../screens/asset-detail' import FollowedUsersScreen from '../../../screens/followed-users' export default function AssetDetail() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/account/index.jsx b/mobile/tradeverse/app/(tabs)/account/index.jsx index c62097ae..8a9d1e12 100644 --- a/mobile/tradeverse/app/(tabs)/account/index.jsx +++ b/mobile/tradeverse/app/(tabs)/account/index.jsx @@ -1,8 +1,6 @@ -import React from 'react'; -import AccountRootScreen from '../../../screens/account-root'; +import React from 'react' +import AccountRootScreen from '../../../screens/account-root' export default function Account() { - return ( - - ); + return } diff --git a/mobile/tradeverse/app/(tabs)/account/portfolio.jsx b/mobile/tradeverse/app/(tabs)/account/portfolio.jsx index 1ade5eb3..13180247 100644 --- a/mobile/tradeverse/app/(tabs)/account/portfolio.jsx +++ b/mobile/tradeverse/app/(tabs)/account/portfolio.jsx @@ -3,7 +3,5 @@ import React from 'react' import PortfolioScreen from '../../../screens/portfolio' export default function Profile() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/account/profile.jsx b/mobile/tradeverse/app/(tabs)/account/profile.jsx index 90c88a82..34110bea 100644 --- a/mobile/tradeverse/app/(tabs)/account/profile.jsx +++ b/mobile/tradeverse/app/(tabs)/account/profile.jsx @@ -3,7 +3,5 @@ import React from 'react' import AccountProfileScreen from '../../../screens/account-profile' export default function Profile() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/create/_layout.jsx b/mobile/tradeverse/app/(tabs)/create/_layout.jsx index 41abe3ab..27011f71 100644 --- a/mobile/tradeverse/app/(tabs)/create/_layout.jsx +++ b/mobile/tradeverse/app/(tabs)/create/_layout.jsx @@ -1,11 +1,10 @@ -import { Stack } from 'expo-router'; -import React from 'react'; +import { Stack } from 'expo-router' +import React from 'react' export default function StackLayout() { return ( - + - ); + ) } - diff --git a/mobile/tradeverse/app/(tabs)/create/add-post.jsx b/mobile/tradeverse/app/(tabs)/create/add-post.jsx index 0395db53..a2ccd827 100644 --- a/mobile/tradeverse/app/(tabs)/create/add-post.jsx +++ b/mobile/tradeverse/app/(tabs)/create/add-post.jsx @@ -3,7 +3,5 @@ import React from 'react' import CreatePostScreen from '../../../screens/create-post' export default function post() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/create/add-subforum.jsx b/mobile/tradeverse/app/(tabs)/create/add-subforum.jsx index 6152c05c..f37d05b6 100644 --- a/mobile/tradeverse/app/(tabs)/create/add-subforum.jsx +++ b/mobile/tradeverse/app/(tabs)/create/add-subforum.jsx @@ -1,6 +1,6 @@ -import React from "react"; -import CreateSubForumScreen from "../../../screens/create-subforum"; +import React from 'react' +import CreateSubForumScreen from '../../../screens/create-subforum' export default function post() { - return ; + return } diff --git a/mobile/tradeverse/app/(tabs)/create/index.jsx b/mobile/tradeverse/app/(tabs)/create/index.jsx index ef5c8bf6..40c002ef 100644 --- a/mobile/tradeverse/app/(tabs)/create/index.jsx +++ b/mobile/tradeverse/app/(tabs)/create/index.jsx @@ -1,8 +1,6 @@ -import React from 'react'; -import CreateRootScreen from '../../../screens/create-root'; +import React from 'react' +import CreateRootScreen from '../../../screens/create-root' export default function Create() { - return ( - - ); + return } diff --git a/mobile/tradeverse/app/(tabs)/explore/_layout.jsx b/mobile/tradeverse/app/(tabs)/explore/_layout.jsx index f645a49e..27011f71 100644 --- a/mobile/tradeverse/app/(tabs)/explore/_layout.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/_layout.jsx @@ -1,10 +1,10 @@ -import { Stack } from 'expo-router'; -import React from 'react'; +import { Stack } from 'expo-router' +import React from 'react' export default function StackLayout() { return ( - + - ); + ) } diff --git a/mobile/tradeverse/app/(tabs)/explore/index.jsx b/mobile/tradeverse/app/(tabs)/explore/index.jsx index b0cdcbaf..07a80f9f 100644 --- a/mobile/tradeverse/app/(tabs)/explore/index.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/index.jsx @@ -1,9 +1,7 @@ -import React from 'react'; -import { Text } from 'react-native'; -import ExploreRootScreen from '../../../screens/explore-root'; +import React from 'react' +import { Text } from 'react-native' +import ExploreRootScreen from '../../../screens/explore-root' export default function Explore() { - return ( - - ); + return } diff --git a/mobile/tradeverse/app/(tabs)/explore/post-detail.jsx b/mobile/tradeverse/app/(tabs)/explore/post-detail.jsx index c5aa66dc..d607bcaf 100644 --- a/mobile/tradeverse/app/(tabs)/explore/post-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/post-detail.jsx @@ -1,8 +1,7 @@ import { View, Text } from 'react-native' import React from 'react' import PostDetailScreen from '../../../screens/post-detail' + export default function PostDetail() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/explore/search/asset-detail.jsx b/mobile/tradeverse/app/(tabs)/explore/search/asset-detail.jsx index aa6a8c0e..21095bfa 100644 --- a/mobile/tradeverse/app/(tabs)/explore/search/asset-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/search/asset-detail.jsx @@ -1,6 +1,7 @@ -import { View, Text } from "react-native"; -import React from "react"; -import AssetDetailScreen from "../../../../screens/asset-detail"; +import { View, Text } from 'react-native' +import React from 'react' +import AssetDetailScreen from '../../../../screens/asset-detail' + export default function AssetDetail() { - return ; + return } diff --git a/mobile/tradeverse/app/(tabs)/explore/search/index.jsx b/mobile/tradeverse/app/(tabs)/explore/search/index.jsx index d80b5d99..5029d7e9 100644 --- a/mobile/tradeverse/app/(tabs)/explore/search/index.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/search/index.jsx @@ -1,8 +1,6 @@ -import React from 'react'; -import SearchResultsScreen from '../../../../screens/explore-search-results'; - -export default function SearchItem() { - return ( - - ); -} +import React from 'react' +import SearchResultsScreen from '../../../../screens/explore-search-results' + +export default function SearchItem() { + return +} diff --git a/mobile/tradeverse/app/(tabs)/explore/search/post-detail.jsx b/mobile/tradeverse/app/(tabs)/explore/search/post-detail.jsx index 455430f2..2c27c69d 100644 --- a/mobile/tradeverse/app/(tabs)/explore/search/post-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/search/post-detail.jsx @@ -1,8 +1,7 @@ import { View, Text } from 'react-native' import React from 'react' import PostDetailScreen from '../../../../screens/post-detail' + export default function PostDetail() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/explore/search/subforum-detail.jsx b/mobile/tradeverse/app/(tabs)/explore/search/subforum-detail.jsx index 0731423f..9f565d71 100644 --- a/mobile/tradeverse/app/(tabs)/explore/search/subforum-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/search/subforum-detail.jsx @@ -1,9 +1,7 @@ import { View, Text } from 'react-native' import React from 'react' import SubForumDetailScreen from '../../../../screens/subforum-detail' -export default function SubForumDetail() { - return ( - - ) -} \ No newline at end of file +export default function SubForumDetail() { + return +} diff --git a/mobile/tradeverse/app/(tabs)/explore/search/user-profile.jsx b/mobile/tradeverse/app/(tabs)/explore/search/user-profile.jsx index c6f0a6ad..81aceca6 100644 --- a/mobile/tradeverse/app/(tabs)/explore/search/user-profile.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/search/user-profile.jsx @@ -3,7 +3,5 @@ import React from 'react' import UserProfileScreen from '../../../../screens/profile' export default function UserProfile() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/explore/subforum-detail.jsx b/mobile/tradeverse/app/(tabs)/explore/subforum-detail.jsx index b10aa235..0ab9ee69 100644 --- a/mobile/tradeverse/app/(tabs)/explore/subforum-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/subforum-detail.jsx @@ -1,9 +1,7 @@ import { View, Text } from 'react-native' import React from 'react' import SubForumDetailScreen from '../../../screens/subforum-detail' -export default function SubForumDetail() { - return ( - - ) -} \ No newline at end of file +export default function SubForumDetail() { + return +} diff --git a/mobile/tradeverse/app/(tabs)/explore/user-profile.jsx b/mobile/tradeverse/app/(tabs)/explore/user-profile.jsx index 8140e5a3..e17b456e 100644 --- a/mobile/tradeverse/app/(tabs)/explore/user-profile.jsx +++ b/mobile/tradeverse/app/(tabs)/explore/user-profile.jsx @@ -3,7 +3,5 @@ import React from 'react' import UserProfileScreen from '../../../screens/profile' export default function UserProfile() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/home/_layout.jsx b/mobile/tradeverse/app/(tabs)/home/_layout.jsx index f645a49e..27011f71 100644 --- a/mobile/tradeverse/app/(tabs)/home/_layout.jsx +++ b/mobile/tradeverse/app/(tabs)/home/_layout.jsx @@ -1,10 +1,10 @@ -import { Stack } from 'expo-router'; -import React from 'react'; +import { Stack } from 'expo-router' +import React from 'react' export default function StackLayout() { return ( - + - ); + ) } diff --git a/mobile/tradeverse/app/(tabs)/home/index.jsx b/mobile/tradeverse/app/(tabs)/home/index.jsx index e384a213..4b72fd99 100644 --- a/mobile/tradeverse/app/(tabs)/home/index.jsx +++ b/mobile/tradeverse/app/(tabs)/home/index.jsx @@ -1,9 +1,7 @@ -import React from "react"; -import { Text } from "react-native"; -import HomeRootScreen from "../../../screens/home-root"; +import React from 'react' +import { Text } from 'react-native' +import HomeRootScreen from '../../../screens/home-root' export default function Home() { - return ( - - ); + return } diff --git a/mobile/tradeverse/app/(tabs)/home/post-detail.jsx b/mobile/tradeverse/app/(tabs)/home/post-detail.jsx index c5aa66dc..d607bcaf 100644 --- a/mobile/tradeverse/app/(tabs)/home/post-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/home/post-detail.jsx @@ -1,8 +1,7 @@ import { View, Text } from 'react-native' import React from 'react' import PostDetailScreen from '../../../screens/post-detail' + export default function PostDetail() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/home/subforum-detail.jsx b/mobile/tradeverse/app/(tabs)/home/subforum-detail.jsx index b10aa235..0ab9ee69 100644 --- a/mobile/tradeverse/app/(tabs)/home/subforum-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/home/subforum-detail.jsx @@ -1,9 +1,7 @@ import { View, Text } from 'react-native' import React from 'react' import SubForumDetailScreen from '../../../screens/subforum-detail' -export default function SubForumDetail() { - return ( - - ) -} \ No newline at end of file +export default function SubForumDetail() { + return +} diff --git a/mobile/tradeverse/app/(tabs)/home/user-profile.jsx b/mobile/tradeverse/app/(tabs)/home/user-profile.jsx index 8140e5a3..e17b456e 100644 --- a/mobile/tradeverse/app/(tabs)/home/user-profile.jsx +++ b/mobile/tradeverse/app/(tabs)/home/user-profile.jsx @@ -3,7 +3,5 @@ import React from 'react' import UserProfileScreen from '../../../screens/profile' export default function UserProfile() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/portfolio/_layout.jsx b/mobile/tradeverse/app/(tabs)/portfolio/_layout.jsx index f645a49e..27011f71 100644 --- a/mobile/tradeverse/app/(tabs)/portfolio/_layout.jsx +++ b/mobile/tradeverse/app/(tabs)/portfolio/_layout.jsx @@ -1,10 +1,10 @@ -import { Stack } from 'expo-router'; -import React from 'react'; +import { Stack } from 'expo-router' +import React from 'react' export default function StackLayout() { return ( - + - ); + ) } diff --git a/mobile/tradeverse/app/(tabs)/portfolio/add-asset.jsx b/mobile/tradeverse/app/(tabs)/portfolio/add-asset.jsx index 85a495b4..fb0aecb3 100644 --- a/mobile/tradeverse/app/(tabs)/portfolio/add-asset.jsx +++ b/mobile/tradeverse/app/(tabs)/portfolio/add-asset.jsx @@ -1,10 +1,8 @@ -import React from 'react'; -import { Text } from 'react-native'; -import PortfolioScreen from '../../../screens/portfolio'; -import AddAssetScreen from '../../../screens/add-asset'; +import React from 'react' +import { Text } from 'react-native' +import PortfolioScreen from '../../../screens/portfolio' +import AddAssetScreen from '../../../screens/add-asset' export default function AddAsset() { - return ( - - ); + return } diff --git a/mobile/tradeverse/app/(tabs)/portfolio/asset-detail.jsx b/mobile/tradeverse/app/(tabs)/portfolio/asset-detail.jsx index f8cff29c..b5970b99 100644 --- a/mobile/tradeverse/app/(tabs)/portfolio/asset-detail.jsx +++ b/mobile/tradeverse/app/(tabs)/portfolio/asset-detail.jsx @@ -3,7 +3,5 @@ import React from 'react' import AssetDetailScreen from '../../../screens/asset-detail' export default function AssetDetail() { - return ( - - ) -} \ No newline at end of file + return +} diff --git a/mobile/tradeverse/app/(tabs)/portfolio/index.jsx b/mobile/tradeverse/app/(tabs)/portfolio/index.jsx index 5c89836c..3fd7562f 100644 --- a/mobile/tradeverse/app/(tabs)/portfolio/index.jsx +++ b/mobile/tradeverse/app/(tabs)/portfolio/index.jsx @@ -1,9 +1,7 @@ -import React from 'react'; -import { Text } from 'react-native'; -import PortfolioScreen from '../../../screens/portfolio'; +import React from 'react' +import { Text } from 'react-native' +import PortfolioScreen from '../../../screens/portfolio' export default function Portfolio() { - return ( - - ); + return } diff --git a/mobile/tradeverse/app/[...unmatched].jsx b/mobile/tradeverse/app/[...unmatched].jsx index 00ba22f8..304a4119 100644 --- a/mobile/tradeverse/app/[...unmatched].jsx +++ b/mobile/tradeverse/app/[...unmatched].jsx @@ -1,5 +1,5 @@ -import { Redirect } from 'expo-router'; +import { Redirect } from 'expo-router' export default function Unmatched() { - return ; + return } diff --git a/mobile/tradeverse/app/_layout.jsx b/mobile/tradeverse/app/_layout.jsx index 9b5682a7..c46e244a 100644 --- a/mobile/tradeverse/app/_layout.jsx +++ b/mobile/tradeverse/app/_layout.jsx @@ -1,9 +1,9 @@ -import { Stack } from "expo-router"; -import * as SplashScreen from "expo-splash-screen"; -import "react-native-reanimated"; -import AuthProvider from "../auth/context/auth-provider"; +import { Stack } from 'expo-router' +import * as SplashScreen from 'expo-splash-screen' +import 'react-native-reanimated' +import AuthProvider from '../auth/context/auth-provider' // Prevent the splash screen from auto-hiding before asset loading is complete. -SplashScreen.preventAutoHideAsync(); +SplashScreen.preventAutoHideAsync() export default function RootLayout() { return ( @@ -14,5 +14,5 @@ export default function RootLayout() { - ); + ) } diff --git a/mobile/tradeverse/app/auth.jsx b/mobile/tradeverse/app/auth.jsx index dee02851..ac40ed95 100644 --- a/mobile/tradeverse/app/auth.jsx +++ b/mobile/tradeverse/app/auth.jsx @@ -1,6 +1,6 @@ -import React from 'react'; -import LoginScreen from '../auth/screens/login'; +import React from 'react' +import LoginScreen from '../auth/screens/login' export default function AuthScreen() { - return ; + return } diff --git a/mobile/tradeverse/app/splash.jsx b/mobile/tradeverse/app/splash.jsx index 738fd9d4..bc907802 100644 --- a/mobile/tradeverse/app/splash.jsx +++ b/mobile/tradeverse/app/splash.jsx @@ -1,7 +1,7 @@ -import { View, Text } from "react-native"; -import React from "react"; -import WelcomingScreen from "../screens/welcoming"; +import { View, Text } from 'react-native' +import React from 'react' +import WelcomingScreen from '../screens/welcoming' export default function SplashScreen() { - return ; + return } diff --git a/mobile/tradeverse/auth/context/auth-context.jsx b/mobile/tradeverse/auth/context/auth-context.jsx index 24614c32..13e4a40d 100644 --- a/mobile/tradeverse/auth/context/auth-context.jsx +++ b/mobile/tradeverse/auth/context/auth-context.jsx @@ -1,5 +1,5 @@ -import { createContext } from "react"; +import { createContext } from 'react' -const AuthContext = createContext(); +const AuthContext = createContext() -export default AuthContext; +export default AuthContext diff --git a/mobile/tradeverse/auth/context/auth-guard.jsx b/mobile/tradeverse/auth/context/auth-guard.jsx index 22230cb8..339780e5 100644 --- a/mobile/tradeverse/auth/context/auth-guard.jsx +++ b/mobile/tradeverse/auth/context/auth-guard.jsx @@ -1,30 +1,30 @@ -import React, { useContext } from 'react'; -import { Redirect, useRouter } from 'expo-router'; -import { useRoute } from '@react-navigation/native'; -import { AuthContext } from '.'; -import Loader from '../ui/AuthLoader'; +import React, { useContext } from 'react' +import { Redirect, useRouter } from 'expo-router' +import { useRoute } from '@react-navigation/native' +import { AuthContext } from '.' +import Loader from '../ui/AuthLoader' export default function AuthGuard({ children }) { - const router = useRouter(); - const route = useRoute(); - const { isLoggedin, loading } = useContext(AuthContext); + const router = useRouter() + const route = useRoute() + const { isLoggedin, loading } = useContext(AuthContext) const handleNavigate = (opt) => { - if (opt.name === route.name) return; + if (opt.name === route.name) return if (route.name === '/') { - router.navigate(opt.path); + router.navigate(opt.path) } else { - router.replace(opt.path); + router.replace(opt.path) } - }; + } if (!isLoggedin && !loading) { - return ; + return } if (loading) { - return ; + return } - return children; + return children } diff --git a/mobile/tradeverse/auth/context/auth-provider.jsx b/mobile/tradeverse/auth/context/auth-provider.jsx index 6ce94ba4..bc7776a7 100644 --- a/mobile/tradeverse/auth/context/auth-provider.jsx +++ b/mobile/tradeverse/auth/context/auth-provider.jsx @@ -1,150 +1,152 @@ -import React, { useCallback, useEffect, useMemo, useState } from 'react'; -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { router } from 'expo-router'; -import api from '../../services/_axios'; -import AuthContext from './auth-context'; -import { getMe, register, login } from '../../services/auth'; -import { getUserByUsername } from '../../services/user'; +import React, { useCallback, useEffect, useMemo, useState } from 'react' +import AsyncStorage from '@react-native-async-storage/async-storage' +import { router } from 'expo-router' +import api from '../../services/_axios' +import AuthContext from './auth-context' +import { getMe, register, login } from '../../services/auth' +import { getUserByUsername } from '../../services/user' export default function AuthProvider({ children }) { - const [loading, setLoading] = useState(false); - const [user, setUser] = useState(null); - const [isLoggedin, setIsLoggedIn] = useState(false); - - const [isTagSelected, setIsTagSelected] = useState(false); - - useEffect(() => { - isAuthenticated(); - }, [isAuthenticated]); - - useEffect(()=>{ - console.log('===================================='); - console.log('isTagSelected',isTagSelected); - console.log('===================================='); - if(isAuthenticated){ - if(isTagSelected){ - router.replace('(tabs)'); - } - else{ - router.replace('splash'); - } - } - else{ - router.replace('auth'); - } - },[isTagSelected,isAuthenticated]); + const [loading, setLoading] = useState(false) + const [user, setUser] = useState(null) + const [isLoggedin, setIsLoggedIn] = useState(false) + + const [isTagSelected, setIsTagSelected] = useState(false) + + // useEffect(()=>{ + // console.log('isTagSelected',isTagSelected); + // console.log('isAuthenticated',isLoggedin); + + // if(isLoggedin){ + // if(isTagSelected){ + // router.replace('(tabs)'); + // } + // else{ + // router.replace('splash'); + // } + // } + // else{ + // router.replace('auth'); + // } + // },[isTagSelected, isAuthenticated]); const signIn = useCallback(async ({ username, password }) => { try { - // setLoading(true); - const res = await login({ username, password }); + const res = await login({ username, password }) if (res.status === 200) { - await AsyncStorage.setItem('authToken', res.data?.token); - await AsyncStorage.setItem('username', username); - const userProfile = await getUserByUsername({ username }); - - setUser(userProfile); - setIsLoggedIn(true); - router.replace('(tabs)'); + await AsyncStorage.setItem('authToken', res.data?.token) + await AsyncStorage.setItem('username', username) + const userProfile = await getUserByUsername({ username }) + setUser(userProfile) + setIsLoggedIn(true) + router.replace('(tabs)') } } catch (error) { - throw new Error(error.message); + throw new Error(error.message) } finally { // setLoading(false); } - }, []); - - const signUp = useCallback(async ({ email, password, name, tag=0,profilePhoto, username }) => { - try { - // setLoading(true); - const res = await register({ - email, - password, - name, - tag, - profilePhoto, - username - }); - if (res.status === 200) { - await AsyncStorage.setItem('authToken', res.data?.token); - await AsyncStorage.setItem('username', username); - const userProfile = await getUserByUsername({ username }); - - setUser(userProfile); - setIsLoggedIn(true); - router.replace('(tabs)'); - // setUser(res.data?.user); + }, []) + + const signUp = useCallback( + async ({ email, password, name, tag = 0, profilePhoto, username }) => { + try { + // setLoading(true); + const res = await register({ + email, + password, + name, + tag, + profilePhoto, + username, + }) + if (res.status === 200) { + await AsyncStorage.setItem('authToken', res.data?.token) + await AsyncStorage.setItem('username', username) + const userProfile = await getUserByUsername({ username }) + + setUser(userProfile) + setIsLoggedIn(true) + // router.replace('(tabs)'); + router.replace('splash') + // setUser(res.data?.user); + } + } catch (error) { + throw new Error(error.message ?? 'Giriş başarısız') + } finally { + // setLoading(false); } - } catch (error) { - throw new Error(error.message ?? 'Giriş başarısız'); - } finally { - // setLoading(false); - } - }, []); + }, + [], + ) const logout = useCallback(async () => { - setLoading(true); - setIsLoggedIn(false); - setUser(null); - router.replace('auth'); - await AsyncStorage.removeItem('authToken'); - await AsyncStorage.removeItem('username'); - setLoading(false); - }, []); + setLoading(true) + setIsLoggedIn(false) + setUser(null) + router.replace('auth') + await AsyncStorage.removeItem('authToken') + await AsyncStorage.removeItem('username') + setLoading(false) + }, []) const refetchUser = useCallback(async () => { - setLoading(true); + setLoading(true) - const token = await AsyncStorage.getItem('authToken'); - const username = await AsyncStorage.getItem('username'); + const token = await AsyncStorage.getItem('authToken') + const username = await AsyncStorage.getItem('username') - api.defaults.headers.common.Authorization = `Bearer ${token}`; + api.defaults.headers.common.Authorization = `Bearer ${token}` - const loggedinUser = await getMe({ authToken: token,username }); + const loggedinUser = await getMe({ authToken: token, username }) if (loggedinUser) { - setIsLoggedIn(true); - setUser(loggedinUser); + setIsLoggedIn(true) + setUser(loggedinUser) } else { - setUser(null); + setUser(null) } - setLoading(false); - }, []); + setLoading(false) + }, []) const setUserProfile = useCallback((profile) => { - setUser((prevUser) => ({ ...prevUser, profile })); - }, []); + setUser((prevUser) => ({ ...prevUser, profile })) + }, []) const isAuthenticated = useCallback(async () => { - let result = false; + let result = false - setLoading(true); + setLoading(true) - const token = await AsyncStorage.getItem('authToken'); - const username = await AsyncStorage.getItem('username'); + const token = await AsyncStorage.getItem('authToken') + const username = await AsyncStorage.getItem('username') - api.defaults.headers.common.Authorization = `Bearer ${token}`; + api.defaults.headers.common.Authorization = `Bearer ${token}` if (token || username) { - const loggedinUser = await getMe({ authToken: token, username }); + const loggedinUser = await getMe({ authToken: token, username }) if (loggedinUser) { - setIsLoggedIn(true); - setUser(loggedinUser); - result = true; + setIsLoggedIn(true) + setUser(loggedinUser) + result = true } else { - await AsyncStorage.removeItem('authToken'); - setIsLoggedIn(false); - setUser(null); - result = false; + await AsyncStorage.removeItem('authToken') + setIsLoggedIn(false) + setUser(null) + result = false } } else { - setUser(null); - setIsLoggedIn(false); - result = false; + setUser(null) + setIsLoggedIn(false) + result = false } - setLoading(false); - return result; - }, []); + setLoading(false) + return result + }, []) + + useEffect(() => { + isAuthenticated() + }, [isAuthenticated]) const contextValue = useMemo( () => ({ @@ -158,9 +160,9 @@ export default function AuthProvider({ children }) { signUp, isTagSelected, userProfile: user?.profile, - isAuthenticated, + // isAuthenticated, logout, - setUser + setUser, }), [ user, @@ -173,11 +175,11 @@ export default function AuthProvider({ children }) { setIsTagSelected, signUp, logout, - isAuthenticated - ] - ); + // isAuthenticated + ], + ) return ( {children} - ); + ) } diff --git a/mobile/tradeverse/auth/context/index.jsx b/mobile/tradeverse/auth/context/index.jsx index 52f586b6..2fcb53cd 100644 --- a/mobile/tradeverse/auth/context/index.jsx +++ b/mobile/tradeverse/auth/context/index.jsx @@ -1,2 +1,2 @@ -export { default as AuthProvider } from "./auth-provider"; -export { default as AuthContext } from "./auth-context"; +export { default as AuthProvider } from './auth-provider' +export { default as AuthContext } from './auth-context' diff --git a/mobile/tradeverse/auth/screens/login/index.jsx b/mobile/tradeverse/auth/screens/login/index.jsx index 5170e6c5..001e78ab 100644 --- a/mobile/tradeverse/auth/screens/login/index.jsx +++ b/mobile/tradeverse/auth/screens/login/index.jsx @@ -1,4 +1,4 @@ -import React, { useState, useContext, useEffect } from "react"; +import React, { useState, useContext, useEffect } from 'react' import { View, StyleSheet, @@ -6,21 +6,21 @@ import { Text, Image, TouchableOpacity, -} from "react-native"; -import { Stack } from "expo-router"; +} from 'react-native' +import { Stack } from 'expo-router' -import { Controller, useForm } from "react-hook-form"; -import { z } from "zod"; -import { zodResolver } from "@hookform/resolvers/zod"; +import { Controller, useForm } from 'react-hook-form' +import { z } from 'zod' +import { zodResolver } from '@hookform/resolvers/zod' -import { AuthContext } from "../../context"; -import PaddedContainer from "../../../components/ui/padded-container"; -import MainButton from "../../../components/buttons/main-button"; -import { COLORS, SIZE_CONSTANT, SIZES } from "../../../constants/theme"; -import TextField from "../../../components/inputs/TextField"; +import { AuthContext } from '../../context' +import PaddedContainer from '../../../components/ui/padded-container' +import MainButton from '../../../components/buttons/main-button' +import { COLORS, SIZE_CONSTANT, SIZES } from '../../../constants/theme' +import TextField from '../../../components/inputs/TextField' function ErrorMessage({ message }) { - return {message}; + return {message} } function ErrorBox({ message }) { @@ -28,38 +28,38 @@ function ErrorBox({ message }) { {message} - ); + ) } export default function LoginScreen() { - const [mode, setMode] = useState(1); // 1:signIn, 2:signUp - const { signIn, signUp } = useContext(AuthContext); + const [mode, setMode] = useState(1) // 1:signIn, 2:signUp + const { signIn, signUp } = useContext(AuthContext) const loginSchema = z.object({ - username: z.string().min({ message: "Username is required." }), - password: z.string().min(1, { message: "Password is required." }), - }); + username: z.string().min({ message: 'Username is required.' }), + password: z.string().min(1, { message: 'Password is required.' }), + }) useEffect(() => { - clearErrors(); - }, [mode, clearErrors]); + clearErrors() + }, [mode, clearErrors]) const registerSchema = z.object({ - email: z.string().email({ message: "Please enter a valid email." }), + email: z.string().email({ message: 'Please enter a valid email.' }), password: z .string() - .min(1, { message: "Password cannot be empty." }) + .min(1, { message: 'Password cannot be empty.' }) .max(50, { - message: "Max 50 characters allowed for password.", + message: 'Max 50 characters allowed for password.', }), name: z .string() - .min(2, { message: "At least 2 characters required." }) + .min(2, { message: 'At least 2 characters required.' }) .max(50, { - message: "Max 50 characters allowed for name.", + message: 'Max 50 characters allowed for name.', }), - username: z.string().min(1, { message: "Username is required" }), - }); + username: z.string().min(1, { message: 'Username is required' }), + }) const { control, @@ -69,26 +69,26 @@ export default function LoginScreen() { clearErrors, } = useForm({ defaultValues: { - email: "", - password: "", - name: "", - username: "", - profilePhoto: "", + email: '', + password: '', + name: '', + username: '', + profilePhoto: '', tag: 0, }, resolver: zodResolver(mode === 1 ? loginSchema : registerSchema), - }); + }) const handleLogin = async (data) => { try { - await signIn({ username: data.username, password: data.password }); + await signIn({ username: data.username, password: data.password }) } catch (error) { - setError("root", { - type: "value", - message: error.message ?? "Login failed.", - }); + setError('root', { + type: 'value', + message: error.message ?? 'Login failed.', + }) } - }; + } const handleRegister = async (data) => { try { await signUp({ @@ -96,14 +96,14 @@ export default function LoginScreen() { password: data.password, name: data.name, username: data.username, - }); + }) } catch (error) { - setError("root", { - type: "value", - message: error.message ?? "Register failed.", - }); + setError('root', { + type: 'value', + message: error.message ?? 'Register failed.', + }) } - }; + } return ( @@ -119,7 +119,7 @@ export default function LoginScreen() { style={{ fontSize: 24, color: COLORS.primary900, - fontWeight: "bold", + fontWeight: 'bold', letterSpacing: -0.4, }} > @@ -227,45 +227,45 @@ export default function LoginScreen() { : handleSubmit(handleRegister) } loading={isSubmitting} - textStyle={{ fontWeight: "bold" }} - text={mode === 2 ? "Kayıt Ol" : "Giriş Yap"} + textStyle={{ fontWeight: 'bold' }} + text={mode === 2 ? 'Kayıt Ol' : 'Giriş Yap'} /> { - setMode(mode === 1 ? 2 : 1); + setMode(mode === 1 ? 2 : 1) }} variant="secondary" - text={mode === 1 ? "Kayıt Ol" : "Giriş Yap"} + text={mode === 1 ? 'Kayıt Ol' : 'Giriş Yap'} /> - ); + ) } const styles = StyleSheet.create({ screenContainer: { backgroundColor: COLORS.white, - height: "100%", + height: '100%', }, container: { paddingHorizontal: SIZE_CONSTANT * 2, - display: "flex", - marginVertical: "auto", + display: 'flex', + marginVertical: 'auto', backgroundColor: COLORS.white, }, logoContainer: { - display: "flex", - flexDirection: "row", - justifyContent: "center", + display: 'flex', + flexDirection: 'row', + justifyContent: 'center', marginBottom: SIZE_CONSTANT * 5.6, }, inputsContainer: { - display: "flex", - flexDirection: "column", + display: 'flex', + flexDirection: 'column', gap: SIZE_CONSTANT * 1, }, buttonsContainer: { @@ -273,57 +273,57 @@ const styles = StyleSheet.create({ gap: SIZE_CONSTANT * 1, }, seperatorContainer: { - display: "flex", - flexDirection: "row", - alignItems: "center", - justifyContent: "space-between", + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', marginTop: SIZE_CONSTANT * 5, }, seperatorLine: { - width: "42%", + width: '42%', height: 1, - backgroundColor: "#eee", + backgroundColor: '#eee', }, seperatorText: { - minWidth: "auto", + minWidth: 'auto', fontSize: SIZES.xSmall, - color: "#eee", + color: '#eee', }, oAuthButton: { - flexBasis: "100%", + flexBasis: '100%', flexShrink: 1, height: SIZE_CONSTANT * 4.4, borderWidth: 1.3, - borderColor: "#f2f2f2", - display: "flex", + borderColor: '#f2f2f2', + display: 'flex', paddingVertical: SIZE_CONSTANT * 0.6, - alignItems: "center", + alignItems: 'center', borderRadius: SIZE_CONSTANT * 0.6, }, oAuthIcon: { - maxWidth: "20%", - maxHeight: "100%", - resizeMode: "contain", + maxWidth: '20%', + maxHeight: '100%', + resizeMode: 'contain', }, oAuthButtonsContainer: { marginTop: SIZE_CONSTANT * 5, - display: "flex", - justifyContent: "center", - flexDirection: "row", + display: 'flex', + justifyContent: 'center', + flexDirection: 'row', gap: SIZE_CONSTANT * 1, }, errorMessage: { - textAlign: "left", + textAlign: 'left', fontSize: SIZES.xSmall, color: COLORS.error, marginLeft: SIZE_CONSTANT * 0.5, }, errorBoxContainer: { - backgroundColor: "#FFF6F6", + backgroundColor: '#FFF6F6', padding: SIZE_CONSTANT * 1, borderRadius: SIZE_CONSTANT * 0.5, }, -}); +}) diff --git a/mobile/tradeverse/auth/ui/AuthLoader.js b/mobile/tradeverse/auth/ui/AuthLoader.js index 0c25351b..957fe5c0 100644 --- a/mobile/tradeverse/auth/ui/AuthLoader.js +++ b/mobile/tradeverse/auth/ui/AuthLoader.js @@ -1,22 +1,22 @@ -import { COLORS } from "@/constants/theme"; -import React from "react"; -import { ActivityIndicator, Text, View } from "react-native"; +import React from 'react' +import { ActivityIndicator, Text, View } from 'react-native' +import { COLORS } from '@/constants/theme' export default function AuthLoader() { return ( @@ -24,7 +24,7 @@ export default function AuthLoader() { style={{ fontSize: 24, color: COLORS.blackContent, - fontWeight: "bold", + fontWeight: 'bold', transform: [{ translateY: -24 }], }} @@ -33,5 +33,5 @@ export default function AuthLoader() { - ); + ) } diff --git a/mobile/tradeverse/babel.config.js b/mobile/tradeverse/babel.config.js index 33acf985..ba63e4f9 100644 --- a/mobile/tradeverse/babel.config.js +++ b/mobile/tradeverse/babel.config.js @@ -1,6 +1,17 @@ module.exports = function (api) { - api.cache(true); + api.cache(true) return { - presets: ['babel-preset-expo'] - }; -}; + presets: ['babel-preset-expo'], + plugins: [ + [ + 'module-resolver', + { + root: ['./'], + alias: { + '@': './', + }, + }, + ], + ], + } +} diff --git a/mobile/tradeverse/components/buttons/main-button.jsx b/mobile/tradeverse/components/buttons/main-button.jsx index 8364b579..85e46e4c 100644 --- a/mobile/tradeverse/components/buttons/main-button.jsx +++ b/mobile/tradeverse/components/buttons/main-button.jsx @@ -1,33 +1,41 @@ -import React from 'react'; -import { ActivityIndicator, Alert, Pressable, StyleSheet, Text } from 'react-native'; -import { COLORS, SIZE_CONSTANT } from '../../constants/theme'; +import React from 'react' +import { + ActivityIndicator, + Alert, + Pressable, + StyleSheet, + Text, +} from 'react-native' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' export default function MainButton({ - onPress=()=>{Alert.alert("Not Implemented")}, + onPress = () => { + Alert.alert('Not Implemented') + }, loading, disabled, style, textStyle, variant = 'primary', - text = 'Press' + text = 'Press', }) { - const selectedStyle = styles[variant]; + const selectedStyle = styles[variant] return ( { - e.preventDefault(); - onPress(); + e.preventDefault() + onPress() }} - role='button' + role="button" disabled={disabled} style={[ selectedStyle.container, style, { opacity: disabled ? 0.5 : 1, - pointerEvents: disabled ? 'none' : 'auto' - } + pointerEvents: disabled ? 'none' : 'auto', + }, ]} > {loading ? ( @@ -36,7 +44,7 @@ export default function MainButton({ {text} )} - ); + ) } const primaryStyle = StyleSheet.create({ @@ -48,14 +56,14 @@ const primaryStyle = StyleSheet.create({ display: 'flex', justifyContent: 'center', alignItems: 'center', - borderRadius: 6 + borderRadius: 6, }, text: { color: COLORS.white, fontSize: SIZE_CONSTANT * 1.4, fontWeight: '600', - } -}); + }, +}) const secondaryStyle = StyleSheet.create({ container: { @@ -68,16 +76,16 @@ const secondaryStyle = StyleSheet.create({ alignItems: 'center', borderRadius: 6, borderColor: '#F2F2F2', - borderWidth: 1 + borderWidth: 1, }, text: { color: COLORS.primary950, fontSize: 14, - fontWeight: 'regular' - } -}); + fontWeight: 'regular', + }, +}) const styles = { primary: primaryStyle, - secondary: secondaryStyle -}; \ No newline at end of file + secondary: secondaryStyle, +} diff --git a/mobile/tradeverse/components/images/content-image.jsx b/mobile/tradeverse/components/images/content-image.jsx index 08dfc0b6..f90318ba 100644 --- a/mobile/tradeverse/components/images/content-image.jsx +++ b/mobile/tradeverse/components/images/content-image.jsx @@ -1,21 +1,20 @@ -import React from 'react'; -import { Image, StyleSheet } from 'react-native'; -import IMAGES from '../../constants/images'; +import React from 'react' +import { Image, StyleSheet } from 'react-native' +import IMAGES from '../../constants/images' export default function ContentImage({ src, style }) { return ( - ); + ) } const styles = StyleSheet.create({ image: { width: '100%', height: '100%', - resizeMode: 'cover' - } -}); + resizeMode: 'cover', + }, +}) diff --git a/mobile/tradeverse/components/images/profile-image.jsx b/mobile/tradeverse/components/images/profile-image.jsx index d5965b36..3689cb88 100644 --- a/mobile/tradeverse/components/images/profile-image.jsx +++ b/mobile/tradeverse/components/images/profile-image.jsx @@ -1,14 +1,28 @@ -import React from 'react'; -import { Image, StyleSheet } from 'react-native'; -import IMAGES from '../../constants/images'; +import React from 'react' +import { Image, StyleSheet } from 'react-native' +import IMAGES from '../../constants/images' -export default function ProfileImage({ src='', style, deviceReference=false }) { - if(deviceReference) { - return ; +export default function ProfileImage({ + src = '', + style, + deviceReference = false, +}) { + if (deviceReference) { + return ( + + ) } - return ; + return ( + + ) } const styles = StyleSheet.create({ - image: {} -}); + image: {}, +}) diff --git a/mobile/tradeverse/components/inputs/RHFTextArea.jsx b/mobile/tradeverse/components/inputs/RHFTextArea.jsx index 9beb4a1e..4a658ee8 100644 --- a/mobile/tradeverse/components/inputs/RHFTextArea.jsx +++ b/mobile/tradeverse/components/inputs/RHFTextArea.jsx @@ -1,7 +1,7 @@ -import React from 'react'; -import { Controller, useFormContext } from 'react-hook-form'; -import styles from './TextField.style'; -import TextField from './TextField'; +import React from 'react' +import { Controller, useFormContext } from 'react-hook-form' +import styles from './TextField.style' +import TextField from './TextField' export default function RHFTextArea({ placeholder, @@ -14,8 +14,8 @@ export default function RHFTextArea({ defaultValue, showErrorMessage, }) { - const selectedStyle = styles[variant]; - const formContext = useFormContext(); + const selectedStyle = styles[variant] + const formContext = useFormContext() return ( )} /> - ); + ) } diff --git a/mobile/tradeverse/components/inputs/RHFTextField.jsx b/mobile/tradeverse/components/inputs/RHFTextField.jsx index 37f89d46..98d246f9 100644 --- a/mobile/tradeverse/components/inputs/RHFTextField.jsx +++ b/mobile/tradeverse/components/inputs/RHFTextField.jsx @@ -1,7 +1,7 @@ -import React from 'react'; -import { Controller, useFormContext } from 'react-hook-form'; -import styles from './TextField.style'; -import TextField from './TextField'; +import React from 'react' +import { Controller, useFormContext } from 'react-hook-form' +import styles from './TextField.style' +import TextField from './TextField' export default function RHFTextField({ placeholder, @@ -14,28 +14,31 @@ export default function RHFTextField({ defaultValue, showErrorMessage, }) { - const selectedStyle = styles[variant]; - const formContext = useFormContext(); + const selectedStyle = styles[variant] + const formContext = useFormContext() return ( - ( )} + render={({ field: { onChange, value } }) => ( + + )} /> - - ); + ) } diff --git a/mobile/tradeverse/components/inputs/TextField.jsx b/mobile/tradeverse/components/inputs/TextField.jsx index af2ffa82..d62f10bb 100644 --- a/mobile/tradeverse/components/inputs/TextField.jsx +++ b/mobile/tradeverse/components/inputs/TextField.jsx @@ -1,7 +1,7 @@ -import { View, Text, TextInput } from 'react-native'; -import React from 'react'; -import styles from './TextField.style'; -import { COLORS } from '../../constants/theme'; +import { View, Text, TextInput } from 'react-native' +import React from 'react' +import styles from './TextField.style' +import { COLORS } from '../../constants/theme' export default function TextField({ onChangeText = () => {}, @@ -17,16 +17,16 @@ export default function TextField({ multiline = false, defaultValue = '', error = '', - showErrorMessage = false // helperText | container. + showErrorMessage = false, // helperText | container. }) { - const selectedStyle = styles[variant]; + const selectedStyle = styles[variant] return ( {label && ( {label} @@ -41,7 +41,7 @@ export default function TextField({ onBlur={onBlur} name={name} defaultValue={defaultValue} - placeholderTextColor='#3C3B3B' + placeholderTextColor="#3C3B3B" value={value} placeholder={placeholder} autoCapitalize={autoCapitalize} @@ -50,5 +50,5 @@ export default function TextField({ style={[selectedStyle, style, error && styles[variant].error.container]} /> - ); + ) } diff --git a/mobile/tradeverse/components/inputs/TextField.style.js b/mobile/tradeverse/components/inputs/TextField.style.jsx similarity index 76% rename from mobile/tradeverse/components/inputs/TextField.style.js rename to mobile/tradeverse/components/inputs/TextField.style.jsx index e41a1f05..81c0358b 100644 --- a/mobile/tradeverse/components/inputs/TextField.style.js +++ b/mobile/tradeverse/components/inputs/TextField.style.jsx @@ -1,9 +1,9 @@ -import { StyleSheet } from 'react-native'; -import { SIZES, SIZE_CONSTANT } from '../../constants/theme'; +import { SIZE_CONSTANT, SIZES } from '@/constants/theme' +import { StyleSheet } from 'react-native' const outlinedStyle = StyleSheet.create({ - width: '100%' -}); + width: '100%', +}) const filledStyle = StyleSheet.create({ width: '100%', @@ -23,21 +23,21 @@ const filledStyle = StyleSheet.create({ fontSize: SIZES.small, fontWeight: 'regular', marginBottom: SIZE_CONSTANT * 0.4, - paddingLeft: SIZE_CONSTANT * 0.4 + paddingLeft: SIZE_CONSTANT * 0.4, }, error: { - label:{ + label: { color: '#D63A3A', }, container: { backgroundColor: '#FEF6F6', - borderColor: "transparent", + borderColor: 'transparent', }, helperText: { - color: '#D63A3A' - } - } -}); + color: '#D63A3A', + }, + }, +}) const borderedStyle = StyleSheet.create({ width: '100%', @@ -56,25 +56,25 @@ const borderedStyle = StyleSheet.create({ fontSize: SIZES.small, fontWeight: 'regular', marginBottom: SIZE_CONSTANT * 0.4, - paddingLeft: SIZE_CONSTANT * 0.4 + paddingLeft: SIZE_CONSTANT * 0.4, }, error: { - label:{ + label: { color: '#D63A3A', }, container: { borderColor: '#D63A3A', }, helperText: { - color: '#D63A3A' - } - } -}); + color: '#D63A3A', + }, + }, +}) const styles = { outlined: outlinedStyle, filled: filledStyle, - bordered: borderedStyle -}; + bordered: borderedStyle, +} -export default styles; +export default styles diff --git a/mobile/tradeverse/components/links/asset-link.jsx b/mobile/tradeverse/components/links/asset-link.jsx index 0af0e521..3ad053e0 100644 --- a/mobile/tradeverse/components/links/asset-link.jsx +++ b/mobile/tradeverse/components/links/asset-link.jsx @@ -1,7 +1,7 @@ -import React from "react"; -import { Pressable } from "react-native"; -import paths from "../../config/screen-paths"; -import { router } from "expo-router"; +import React from 'react' +import { Pressable } from 'react-native' +import paths from '../../config/screen-paths' +import { router } from 'expo-router' export default function AssetLink({ children, @@ -11,10 +11,10 @@ export default function AssetLink({ return ( { - router.push(`${target}?assetId=${asset?.id}`); + router.push(`${target}?assetId=${asset?.id}`) }} > {children} - ); + ) } diff --git a/mobile/tradeverse/components/links/post-link.jsx b/mobile/tradeverse/components/links/post-link.jsx index 49e817f3..3673a0de 100644 --- a/mobile/tradeverse/components/links/post-link.jsx +++ b/mobile/tradeverse/components/links/post-link.jsx @@ -1,20 +1,20 @@ -import React from "react"; -import { Pressable } from "react-native"; -import paths from "../../config/screen-paths"; -import { router } from "expo-router"; +import React from 'react' +import { Pressable } from 'react-native' +import paths from '../../config/screen-paths' +import { router } from 'expo-router' export default function PostLink({ children, target = paths.EXPLORE.POST_DETAIL, - post + post, }) { return ( { - router.push(`${target}?postId=${post?.id}`); + router.push(`${target}?postId=${post?.id}`) }} > {children} - ); + ) } diff --git a/mobile/tradeverse/components/links/subforum-link.jsx b/mobile/tradeverse/components/links/subforum-link.jsx index a0f4bf31..a82a5da8 100644 --- a/mobile/tradeverse/components/links/subforum-link.jsx +++ b/mobile/tradeverse/components/links/subforum-link.jsx @@ -1,7 +1,7 @@ -import React from "react"; -import { Pressable } from "react-native"; -import paths from "../../config/screen-paths"; -import { router } from "expo-router"; +import React from 'react' +import { Pressable } from 'react-native' +import paths from '../../config/screen-paths' +import { router } from 'expo-router' export default function SubforumLink({ children, @@ -11,10 +11,10 @@ export default function SubforumLink({ return ( { - router.push(`${target}?subforumId=${subForum?.id}`); + router.push(`${target}?subforumId=${subForum?.id}`) }} > {children} - ); + ) } diff --git a/mobile/tradeverse/components/links/user-link.jsx b/mobile/tradeverse/components/links/user-link.jsx index d51af61f..49b61b7b 100644 --- a/mobile/tradeverse/components/links/user-link.jsx +++ b/mobile/tradeverse/components/links/user-link.jsx @@ -1,20 +1,20 @@ -import { View, Text, Pressable } from "react-native"; -import React from "react"; -import { router } from "expo-router"; -import paths from "../../config/screen-paths"; +import { View, Text, Pressable } from 'react-native' +import React from 'react' +import { router } from 'expo-router' +import paths from '../../config/screen-paths' export default function UserLink({ children, target = paths.EXPLORE.USER_PROFILE, - user + user, }) { return ( { - router.push(`${target}?username=${user?.username}`); + router.push(`${target}?username=${user?.username}`) }} > {children} - ); + ) } diff --git a/mobile/tradeverse/components/ui/full-scroll-view.jsx b/mobile/tradeverse/components/ui/full-scroll-view.jsx index 50de84d0..27cbc4a4 100644 --- a/mobile/tradeverse/components/ui/full-scroll-view.jsx +++ b/mobile/tradeverse/components/ui/full-scroll-view.jsx @@ -1,16 +1,19 @@ import React from 'react' import { ScrollView, StyleSheet } from 'react-native' -export default function FullScrollView({children,style}) { +export default function FullScrollView({ children, style }) { return ( - - {children} + + {children} ) } const styles = StyleSheet.create({ - container: { - minHeight: '100%', - } -}) \ No newline at end of file + container: { + minHeight: '100%', + }, +}) diff --git a/mobile/tradeverse/components/ui/global-screen.jsx b/mobile/tradeverse/components/ui/global-screen.jsx index 3c1e5fcb..92197976 100644 --- a/mobile/tradeverse/components/ui/global-screen.jsx +++ b/mobile/tradeverse/components/ui/global-screen.jsx @@ -1,19 +1,32 @@ -import React from 'react'; -import { SafeAreaView, StyleSheet } from 'react-native'; -import PaddedContainer from './padded-container'; -import { COLORS } from '../../constants/theme'; +import React from 'react' +import { Platform, SafeAreaView, StyleSheet } from 'react-native' +import PaddedContainer from './padded-container' +import { COLORS } from '../../constants/theme' -export default function GlobalScreen({ children, style, paddingTop=28, containerStyle }) { +export default function GlobalScreen({ + children, + style, + paddingTop = 28, + containerStyle, +}) { + const platform = Platform.OS return ( - - {children} + + + {children} + - ); + ) } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: COLORS.white, - } -}); + }, +}) diff --git a/mobile/tradeverse/components/ui/padded-container.jsx b/mobile/tradeverse/components/ui/padded-container.jsx index 9edebcb6..b4ef3402 100644 --- a/mobile/tradeverse/components/ui/padded-container.jsx +++ b/mobile/tradeverse/components/ui/padded-container.jsx @@ -1,14 +1,14 @@ -import { View, StyleSheet } from 'react-native'; -import React from 'react'; -import { SIZE_CONSTANT } from '../../constants/theme'; +import { View, StyleSheet } from 'react-native' +import React from 'react' +import { SIZE_CONSTANT } from '../../constants/theme' export default function PaddedContainer({ style, children }) { - return {children}; + return {children} } const styles = StyleSheet.create({ container: { width: '100%', paddingHorizontal: SIZE_CONSTANT * 2, - } -}); + }, +}) diff --git a/mobile/tradeverse/components/ui/tabbar/index.jsx b/mobile/tradeverse/components/ui/tabbar/index.jsx new file mode 100644 index 00000000..9e224d59 --- /dev/null +++ b/mobile/tradeverse/components/ui/tabbar/index.jsx @@ -0,0 +1,128 @@ +/* eslint-disable no-nested-ternary */ +import { useEffect, useState } from 'react' +import Animated, { + useAnimatedStyle, + useSharedValue, + withSpring, +} from 'react-native-reanimated' + +import { View, StyleSheet, Platform } from 'react-native' +import TabBarButton from './tabbar-button' +import { NAV_OPTIONS } from '../../../config/navigation' +import { COLORS, SIZE_CONSTANT } from '@/constants/theme' + +export default function CustomTabBar({ state, descriptors, navigation }) { + const [tabBarDimensions, setTabBarDimensions] = useState({ + width: 0, + height: 0, + }) + + const buttonWidth = tabBarDimensions.width / state.routes.length + + const onLayoutChange = (e) => { + setTabBarDimensions({ + width: e.nativeEvent.layout.width, + height: e.nativeEvent.layout.height, + }) + } + + const buttonPositionX = useSharedValue(0) + + useEffect(() => { + buttonPositionX.value = withSpring(buttonWidth * state.index, { + duration: 1220, + reduceMotion: true, + }) + }, [buttonWidth, state.index, buttonPositionX]) + + const animatedStyle = useAnimatedStyle(() => ({ + transform: [ + { + translateX: buttonPositionX.value, + }, + ], + })) + + return ( + + + + + {state.routes.map((route, index) => { + const { options } = descriptors[route.key] + const label = + options.tabBarLabel !== undefined + ? options.tabBarLabel + : options.title !== undefined + ? options.title + : route.name + + const isFocused = state.index === index + + const onPress = () => { + const event = navigation.emit({ + type: 'tabPress', + target: route.key, + canPreventDefault: true, + }) + + if (!isFocused && !event.defaultPrevented) { + navigation.navigate(route.name, route.params) + } + } + + return ( + + ) + })} + + ) +} + +const styles = StyleSheet.create({ + tabBar: { + flexDirection: 'row', + backgroundColor: COLORS.primary500, + height: SIZE_CONSTANT * 5.2, + justifyContent: 'space-between', + alignItems: 'center', + position: 'absolute', + borderRadius: 32, + bottom: 32, + left: 12, + right: 12, + shadowColor: '#000', + shadowOffset: { width: 0, height: 10 }, + shadowRadius: 10, + shadowOpacity: 0.1, + elevation: 12, + }, + focusCircle: { + width: 42, + height: 42, + borderRadius: 30, + // backgroundColor: COLORS.primary500, + backgroundColor: COLORS.white, + }, + focusCircleContainer: { + position: 'absolute', + display: 'flex', + top: 0, + left: 0, + bottom: 0, + justifyContent: 'center', + alignItems: 'center', + }, +}) diff --git a/mobile/tradeverse/components/ui/tabbar/tabbar-button.jsx b/mobile/tradeverse/components/ui/tabbar/tabbar-button.jsx new file mode 100644 index 00000000..182ea911 --- /dev/null +++ b/mobile/tradeverse/components/ui/tabbar/tabbar-button.jsx @@ -0,0 +1,91 @@ +import { View, Text, StyleSheet, Pressable } from 'react-native' +import Animated, { + interpolate, + useAnimatedStyle, + useSharedValue, + withSpring, +} from 'react-native-reanimated' +import React, { useEffect } from 'react' +import { COLORS, SIZE_CONSTANT, SIZES } from '../../../constants/theme' + +export default function TabBarButton({ + key, + onPress, + isFocused = false, + icons, + label, +}) { + const scale = useSharedValue(1) + + useEffect(() => { + scale.value = withSpring(isFocused ? 1 : 0, { + duration: 350, + }) + }, [scale, isFocused]) + + const animatedTextStyle = useAnimatedStyle(() => { + const opacity = interpolate(scale.value, [0, 1], [1, 0]) + + return { + opacity, + } + }) + + const animatedIconStyle = useAnimatedStyle(() => { + const scaleValue = interpolate(scale.value, [0, 1], [0.8, 0.92]) + const topValue = interpolate(scale.value, [0, 1], [0, 0]) + return { + transform: [ + { + scale: scaleValue, + }, + ], + top: topValue, + } + }) + + return ( + + + {isFocused + ? icons.active(styles.activeIcon) + : icons.inactive(styles.inactiveIcon)} + + {/* + {label} + */} + + ) +} + +const styles = StyleSheet.create({ + tabBarItem: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + zIndex: 90, + }, + tabBarItemText: { + fontSize: SIZES.xxSmall, + color: COLORS.white, + fontWeight: 'light', + }, + inactiveIcon: { + strokeWidth: 1.5, + size: SIZE_CONSTANT * 3, + // color: COLORS.primary500 + color: COLORS.white, + }, + activeIcon: { + strokeWidth: 2, + size: SIZE_CONSTANT * 3, + color: COLORS.primary500, + }, +}) diff --git a/mobile/tradeverse/config/navigation.js b/mobile/tradeverse/config/navigation.js deleted file mode 100644 index 9c9f3186..00000000 --- a/mobile/tradeverse/config/navigation.js +++ /dev/null @@ -1,95 +0,0 @@ -/* eslint-disable react/jsx-props-no-spreading */ -/* eslint-disable import/prefer-default-export */ -import { - IconHome, - IconHomeFilled, - IconLabelFilled, - IconLayout, - IconLayoutFilled, - IconPlus, - IconSearch, - IconUser, - IconUserFilled, - } from '@tabler/icons-react-native'; -import { SIZE_CONSTANT,COLORS } from '@/constants/theme'; -import paths from '@/config/screen-paths'; - -const roots = { - HOME: 'home', - EXPLORE:'explore', - ADD:'add', - PORTFOLIO:'portfolio', - ACCOUNT:'account', - }; - - const DefaultIconStyle = { - strokeWidth: 1.8, - size: SIZE_CONSTANT * 2.8, - color: COLORS.primary500 - }; - - const DefaultFilledIconStyle = { - strokeWidth: 0, - size: SIZE_CONSTANT * 2.8, - fill: COLORS.primary500 - }; - - export const NAV_OPTIONS = [ - { - icon: , - label: 'Home', - activeIcon: , - path: paths.HOME.ROOT, - name: 'home', - routeValue: 'home/index', - headerOptions:{ - headerShown:false - } - }, - - { - icon: , - activeIcon: , - label: 'Explore', - path: paths.EXPLORE.ROOT, - name:'explore', - routeValue: 'explore/index', - headerOptions:{ - headerShown:false - } - } -, - { - icon:, - activeIcon:, - label:'Add', - path: paths.CREATE.ROOT, - name:'create', - routeValue:'create/index', - headerOptions:{ - headerShown:false - } - }, - { - icon:, - activeIcon:, - label:'Portfolio', - name:'portfolio', - routeValue:'portfolio/index', - headerOptions:{ - headerShown:false - } - }, - { - icon:, - activeIcon:, - label:'Account', - name:'account', - routeValue:'account/index', - headerOptions:{ - headerShown:false - } - } - - ]; - \ No newline at end of file diff --git a/mobile/tradeverse/config/navigation.jsx b/mobile/tradeverse/config/navigation.jsx new file mode 100644 index 00000000..b04b72f0 --- /dev/null +++ b/mobile/tradeverse/config/navigation.jsx @@ -0,0 +1,87 @@ +/* eslint-disable react/jsx-props-no-spreading */ +/* eslint-disable import/prefer-default-export */ +import React from 'react' +import { + IconHome, + IconLayout, + IconPlus, + IconSearch, + IconUser, +} from '@tabler/icons-react-native' + +import paths from './screen-paths' + +export const NAV_OPTIONS = [ + { + icons: { + active: (style) => , + inactive: (style) => , + }, + label: 'Home', + path: paths.HOME.ROOT, + name: 'home', + routeValue: 'home/index', + headerOptions: { + headerShown: false, + }, + }, + + { + // icon: , + // activeIcon: , + icons: { + active: (style) => , + inactive: (style) => , + }, + label: 'Explore', + path: paths.EXPLORE.ROOT, + name: 'explore', + routeValue: 'explore/index', + headerOptions: { + headerShown: false, + }, + }, + { + // icon:, + // activeIcon:, + icons: { + active: (style) => , + inactive: (style) => , + }, + label: 'Add', + path: paths.CREATE.ROOT, + name: 'create', + routeValue: 'create/index', + headerOptions: { + headerShown: false, + }, + }, + { + // icon:, + // activeIcon:, + icons: { + active: (style) => , + inactive: (style) => , + }, + label: 'Portfolio', + name: 'portfolio', + routeValue: 'portfolio/index', + headerOptions: { + headerShown: false, + }, + }, + { + // icon:, + // activeIcon:, + icons: { + active: (style) => , + inactive: (style) => , + }, + label: 'Account', + name: 'account', + routeValue: 'account/index', + headerOptions: { + headerShown: false, + }, + }, +] diff --git a/mobile/tradeverse/config/screen-paths.js b/mobile/tradeverse/config/screen-paths.js index 71cc37f9..5f7c01ce 100644 --- a/mobile/tradeverse/config/screen-paths.js +++ b/mobile/tradeverse/config/screen-paths.js @@ -1,50 +1,49 @@ const roots = { - HOME: 'home', - EXPLORE:'explore', - CREATE:'create', - PORTFOLIO:'portfolio', - ACCOUNT:'account', - }; - - const paths = { - HOME: { - ROOT: roots.HOME, - USER_PROFILE: `${roots.HOME}/user-profile`, - SUBFORUM_DETAIL: `${roots.HOME}/subforum-detail`, - POST_DETAIL: `${roots.HOME}/post-detail`, + HOME: 'home', + EXPLORE: 'explore', + CREATE: 'create', + PORTFOLIO: 'portfolio', + ACCOUNT: 'account', +} + +const paths = { + HOME: { + ROOT: roots.HOME, + USER_PROFILE: `${roots.HOME}/user-profile`, + SUBFORUM_DETAIL: `${roots.HOME}/subforum-detail`, + POST_DETAIL: `${roots.HOME}/post-detail`, + }, + EXPLORE: { + ROOT: roots.EXPLORE, + SEARCH: `${roots.EXPLORE}/search`, + SEARCH_RESULTS: { + ASSET_DETAIL: `${roots.EXPLORE}/search/asset-detail`, + POST_DETAIL: `${roots.EXPLORE}/search/post-detail`, + USER_PROFILE: `${roots.EXPLORE}/search/user-profile`, + SUBFORUM_DETAIL: `${roots.EXPLORE}/search/subforum-detail`, }, - EXPLORE: { - ROOT: roots.EXPLORE, - SEARCH: `${roots.EXPLORE}/search`, - SEARCH_RESULTS:{ - ASSET_DETAIL: `${roots.EXPLORE}/search/asset-detail`, - POST_DETAIL: `${roots.EXPLORE}/search/post-detail`, - USER_PROFILE: `${roots.EXPLORE}/search/user-profile`, - SUBFORUM_DETAIL: `${roots.EXPLORE}/search/subforum-detail`, - }, - USER_PROFILE: `${roots.EXPLORE}/user-profile`, - SUBFORUM_DETAIL: `${roots.EXPLORE}/subforum-detail`, - POST_DETAIL: `${roots.EXPLORE}/post-detail`, - ASSET_DETAIL: `${roots.EXPLORE}/asset-detail`, - TAG_DETAIL: `${roots.EXPLORE}/tag-detail`, - }, - CREATE: { - ROOT: roots.CREATE, - ADD_POST: `${roots.CREATE}/add-post`, - ADD_SUBFORUM: `${roots.CREATE}/add-subforum`, - }, - PORTFOLIO: { - ROOT: roots.PORTFOLIO, - ADD_ASSET: `${roots.PORTFOLIO}/add-asset`, - ASSET_DETAIL: `${roots.PORTFOLIO}/asset-detail`, - }, - ACCOUNT: { - ROOT: roots.ACCOUNT, - PROFILE: `${roots.ACCOUNT}/profile`, - PORTFOLIO: `${roots.ACCOUNT}/portfolio`, - FOLLOWED_TOPICS: `${roots.ACCOUNT}/followed-topics`, - FOLLOWED_USERS: `${roots.ACCOUNT}/followed-users`, - }, - }; - export default paths; - \ No newline at end of file + USER_PROFILE: `${roots.EXPLORE}/user-profile`, + SUBFORUM_DETAIL: `${roots.EXPLORE}/subforum-detail`, + POST_DETAIL: `${roots.EXPLORE}/post-detail`, + ASSET_DETAIL: `${roots.EXPLORE}/asset-detail`, + TAG_DETAIL: `${roots.EXPLORE}/tag-detail`, + }, + CREATE: { + ROOT: roots.CREATE, + ADD_POST: `${roots.CREATE}/add-post`, + ADD_SUBFORUM: `${roots.CREATE}/add-subforum`, + }, + PORTFOLIO: { + ROOT: roots.PORTFOLIO, + ADD_ASSET: `${roots.PORTFOLIO}/add-asset`, + ASSET_DETAIL: `${roots.PORTFOLIO}/asset-detail`, + }, + ACCOUNT: { + ROOT: roots.ACCOUNT, + PROFILE: `${roots.ACCOUNT}/profile`, + PORTFOLIO: `${roots.ACCOUNT}/portfolio`, + FOLLOWED_TOPICS: `${roots.ACCOUNT}/followed-topics`, + FOLLOWED_USERS: `${roots.ACCOUNT}/followed-users`, + }, +} +export default paths diff --git a/mobile/tradeverse/constants/images.jsx b/mobile/tradeverse/constants/images.jsx index 2fe642b5..a0082270 100644 --- a/mobile/tradeverse/constants/images.jsx +++ b/mobile/tradeverse/constants/images.jsx @@ -1,6 +1,7 @@ -import NO_PROFILE_IMG from '../assets/images/profile.png'; -import NO_CONTENT_IMG from '../assets/images/no-content.png'; +import NO_PROFILE_IMG from '../assets/images/profile.png' +import NO_CONTENT_IMG from '../assets/images/no-content.png' + export default { NO_PROFILE_IMG, - NO_CONTENT_IMG -}; + NO_CONTENT_IMG, +} diff --git a/mobile/tradeverse/constants/theme.jsx b/mobile/tradeverse/constants/theme.jsx index 511b4ca4..3abc6adc 100644 --- a/mobile/tradeverse/constants/theme.jsx +++ b/mobile/tradeverse/constants/theme.jsx @@ -1,56 +1,49 @@ export const COLORS = { - black: '#000000', - white: '#FFFFFF', - - graytext: '#A0A0A0', - - primary50: '#EEF2FF', - primary100: '#E0E7FF', - primary200: '#C7D2FE', - primary300: '#A6B4FB', - primary400: '#828CF7', - primary500: '#5D5FEF', - primary600: '#5147E4', - primary700: '#4539C9', - primary800: '#3931A2', - primary900: '#332F80', - primary950: '#1E1B4B', - - error: '#E83939', - errorDark: '#840F0F', - }; - - - export const FONT = { - regular: 'DMRegular', - medium: 'DMMedium', - bold: 'DMBold' - }; - - export const SIZE_CONSTANT = 11; - + black: '#000000', + white: '#FFFFFF', + + graytext: '#A0A0A0', + + primary50: '#EEF2FF', + primary100: '#E0E7FF', + primary200: '#C7D2FE', + primary300: '#A6B4FB', + primary400: '#828CF7', + primary500: '#5D5FEF', + primary600: '#5147E4', + primary700: '#4539C9', + primary800: '#3931A2', + primary900: '#332F80', + primary950: '#1E1B4B', + + error: '#E83939', + errorDark: '#840F0F', +} - export const SIZES = { - xxSmall: SIZE_CONSTANT * 1, - xSmall: SIZE_CONSTANT * 1.2, - small: SIZE_CONSTANT * 1.4, - medium: SIZE_CONSTANT * 1.6, - large: SIZE_CONSTANT * 2, - xLarge: SIZE_CONSTANT * 2.4, - xxLarge: SIZE_CONSTANT * 3.2 - }; +export const FONT = { + regular: 'DMRegular', + medium: 'DMMedium', + bold: 'DMBold', +} +export const SIZE_CONSTANT = 11 +export const SIZES = { + xxSmall: SIZE_CONSTANT * 1, + xSmall: SIZE_CONSTANT * 1.2, + small: SIZE_CONSTANT * 1.4, + medium: SIZE_CONSTANT * 1.6, + large: SIZE_CONSTANT * 2, + xLarge: SIZE_CONSTANT * 2.4, + xxLarge: SIZE_CONSTANT * 3.2, +} export const FONT_WEIGHTS = { - thin: '100', - light: '200', - regular: '400', - medium: '500', - semibold: '600', - bold: '700', - black: '900' + thin: '100', + light: '200', + regular: '400', + medium: '500', + semibold: '600', + bold: '700', + black: '900', } - - - \ No newline at end of file diff --git a/mobile/tradeverse/eas.json b/mobile/tradeverse/eas.json new file mode 100644 index 00000000..0c52c5d7 --- /dev/null +++ b/mobile/tradeverse/eas.json @@ -0,0 +1,21 @@ +{ + "build": { + "preview": { + "android": { + "buildType": "apk" + } + }, + "preview2": { + "android": { + "gradleCommand": ":app:assembleRelease" + } + }, + "preview3": { + "developmentClient": true + }, + "preview4": { + "distribution": "internal" + }, + "production": {} + } +} diff --git a/mobile/tradeverse/mock-data/HomeData.js b/mobile/tradeverse/mock-data/HomeData.js index b9a35379..5b1253b7 100644 --- a/mobile/tradeverse/mock-data/HomeData.js +++ b/mobile/tradeverse/mock-data/HomeData.js @@ -1,40 +1,36 @@ -import { allSubforums } from "./all-subforums"; - -const allPosts = allSubforums.reduce((acc, subforum) => { - return acc.concat(subforum.posts); -}, []); - -export const HomeData = { - ForYouPosts: [ - { - title: "How to pass bruh to moment here.", - content: [ - { - type: "text", - value: "Rising inflation impacts everyone’s wallet...", - }, - { type: "tag", value: "investments" }, - { type: "text", value: "and tracking key economic indicators." }, - { type: "tag", value: "Inflation" }, - { type: "tag", value: "FinanceTips" }, - ], - date: "2021-01-01", - likes: 10, - dislikes: 2, - comments: 5, - views: 1200, - subforum: { - name: "Future Investment", - id: 1, - }, - author: { - name: "Daron", - surname: "Acemoglu", - username: "daronacemoglu", - avatar: - "https://img.kitapyurdu.com/v1/getImage/fn:10642557/wi:200/wh:526d5c04e", - id: 1, - }, - }, - ], -}; +const HomeData = { + ForYouPosts: [ + { + title: 'How to pass bruh to moment here.', + content: [ + { + type: 'text', + value: 'Rising inflation impacts everyone’s wallet...', + }, + { type: 'tag', value: 'investments' }, + { type: 'text', value: 'and tracking key economic indicators.' }, + { type: 'tag', value: 'Inflation' }, + { type: 'tag', value: 'FinanceTips' }, + ], + date: '2021-01-01', + likes: 10, + dislikes: 2, + comments: 5, + views: 1200, + subforum: { + name: 'Future Investment', + id: 1, + }, + author: { + name: 'Daron', + surname: 'Acemoglu', + username: 'daronacemoglu', + avatar: + 'https://img.kitapyurdu.com/v1/getImage/fn:10642557/wi:200/wh:526d5c04e', + id: 1, + }, + }, + ], +} + +export default HomeData diff --git a/mobile/tradeverse/mock-data/Portfolio.js b/mobile/tradeverse/mock-data/Portfolio.js index 6c137d69..754625c0 100644 --- a/mobile/tradeverse/mock-data/Portfolio.js +++ b/mobile/tradeverse/mock-data/Portfolio.js @@ -1,26 +1,28 @@ -export const Portfolio = [ - { - symbol: "BTC", - name: "Bitcoin", - value: "0.005", - logo: "https://s2.coinmarketcap.com/static/img/coins/64x64/1.png", - }, - { - symbol: "USD", - name: "US Dollar", - value: "$31.82", - logo: "https://s2.coinmarketcap.com/static/img/coins/64x64/2781.png", - }, - { - symbol: "EUR", - name: "Euro", - value: "€52.96", - logo: "https://s2.coinmarketcap.com/static/img/coins/64x64/2790.png", - }, - { - symbol: "JPY", - name: "Japanese Yen", - value: "¥4000.50", - logo: "https://s2.coinmarketcap.com/static/img/coins/64x64/2793.png", - }, -]; +const Portfolio = [ + { + symbol: 'BTC', + name: 'Bitcoin', + value: '0.005', + logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1.png', + }, + { + symbol: 'USD', + name: 'US Dollar', + value: '$31.82', + logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/2781.png', + }, + { + symbol: 'EUR', + name: 'Euro', + value: '€52.96', + logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/2790.png', + }, + { + symbol: 'JPY', + name: 'Japanese Yen', + value: '¥4000.50', + logo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/2793.png', + }, +] + +export default Portfolio diff --git a/mobile/tradeverse/mock-data/all-assets.js b/mobile/tradeverse/mock-data/all-assets.js index 0a9368b3..750f7b23 100644 --- a/mobile/tradeverse/mock-data/all-assets.js +++ b/mobile/tradeverse/mock-data/all-assets.js @@ -1,243 +1,243 @@ // -export const allAssets = [ +const allAssets = [ { - abbreviation: "BTC", - label: "Bitcoin", - image: "https://example.com/btc.png", + abbreviation: 'BTC', + label: 'Bitcoin', + image: 'https://example.com/btc.png', }, { - abbreviation: "ETH", - label: "Ethereum", - image: "https://example.com/eth.png", + abbreviation: 'ETH', + label: 'Ethereum', + image: 'https://example.com/eth.png', }, { - abbreviation: "LTC", - label: "Litecoin", - image: "https://example.com/ltc.png", + abbreviation: 'LTC', + label: 'Litecoin', + image: 'https://example.com/ltc.png', }, { - abbreviation: "AAPL", - label: "Apple Inc.", - image: "https://example.com/aapl.png", + abbreviation: 'AAPL', + label: 'Apple Inc.', + image: 'https://example.com/aapl.png', }, { - abbreviation: "GOOGL", - label: "Alphabet Inc.", - image: "https://example.com/googl.png", + abbreviation: 'GOOGL', + label: 'Alphabet Inc.', + image: 'https://example.com/googl.png', }, { - abbreviation: "AMZN", - label: "Amazon.com Inc.", - image: "https://example.com/amzn.png", + abbreviation: 'AMZN', + label: 'Amazon.com Inc.', + image: 'https://example.com/amzn.png', }, { - abbreviation: "TSLA", - label: "Tesla Inc.", - image: "https://example.com/tsla.png", + abbreviation: 'TSLA', + label: 'Tesla Inc.', + image: 'https://example.com/tsla.png', }, { - abbreviation: "XAU", - label: "Gold", - image: "https://example.com/xau.png", + abbreviation: 'XAU', + label: 'Gold', + image: 'https://example.com/xau.png', }, { - abbreviation: "XAG", - label: "Silver", - image: "https://example.com/xag.png", + abbreviation: 'XAG', + label: 'Silver', + image: 'https://example.com/xag.png', }, { - abbreviation: "EURUSD", - label: "Euro/US Dollar", - image: "https://example.com/eurusd.png", + abbreviation: 'EURUSD', + label: 'Euro/US Dollar', + image: 'https://example.com/eurusd.png', }, { - abbreviation: "GBPUSD", - label: "British Pound/US Dollar", - image: "https://example.com/gbpusd.png", + abbreviation: 'GBPUSD', + label: 'British Pound/US Dollar', + image: 'https://example.com/gbpusd.png', }, { - abbreviation: "USDJPY", - label: "US Dollar/Japanese Yen", - image: "https://example.com/usdjpy.png", + abbreviation: 'USDJPY', + label: 'US Dollar/Japanese Yen', + image: 'https://example.com/usdjpy.png', }, { - abbreviation: "USDCAD", - label: "US Dollar/Canadian Dollar", - image: "https://example.com/usdcad.png", + abbreviation: 'USDCAD', + label: 'US Dollar/Canadian Dollar', + image: 'https://example.com/usdcad.png', }, { - abbreviation: "WTI", - label: "West Texas Intermediate (Crude Oil)", - image: "https://example.com/wti.png", + abbreviation: 'WTI', + label: 'West Texas Intermediate (Crude Oil)', + image: 'https://example.com/wti.png', }, { - abbreviation: "BRN", - label: "Brent Crude Oil", - image: "https://example.com/brn.png", + abbreviation: 'BRN', + label: 'Brent Crude Oil', + image: 'https://example.com/brn.png', }, { - abbreviation: "SP500", - label: "S&P 500 Index", - image: "https://example.com/sp500.png", + abbreviation: 'SP500', + label: 'S&P 500 Index', + image: 'https://example.com/sp500.png', }, { - abbreviation: "DJIA", - label: "Dow Jones Industrial Average", - image: "https://example.com/djia.png", + abbreviation: 'DJIA', + label: 'Dow Jones Industrial Average', + image: 'https://example.com/djia.png', }, { - abbreviation: "NDAQ", - label: "NASDAQ 100 Index", - image: "https://example.com/ndaq.png", + abbreviation: 'NDAQ', + label: 'NASDAQ 100 Index', + image: 'https://example.com/ndaq.png', }, { - abbreviation: "BABA", - label: "Alibaba Group", - image: "https://example.com/baba.png", + abbreviation: 'BABA', + label: 'Alibaba Group', + image: 'https://example.com/baba.png', }, { - abbreviation: "NFLX", - label: "Netflix Inc.", - image: "https://example.com/nflx.png", + abbreviation: 'NFLX', + label: 'Netflix Inc.', + image: 'https://example.com/nflx.png', }, { - abbreviation: "MSFT", - label: "Microsoft Corporation", - image: "https://example.com/msft.png", + abbreviation: 'MSFT', + label: 'Microsoft Corporation', + image: 'https://example.com/msft.png', }, { - abbreviation: "V", - label: "Visa Inc.", - image: "https://example.com/visa.png", + abbreviation: 'V', + label: 'Visa Inc.', + image: 'https://example.com/visa.png', }, { - abbreviation: "JPM", - label: "JPMorgan Chase & Co.", - image: "https://example.com/jpm.png", + abbreviation: 'JPM', + label: 'JPMorgan Chase & Co.', + image: 'https://example.com/jpm.png', }, { - abbreviation: "FB", - label: "Meta Platforms (Facebook)", - image: "https://example.com/fb.png", + abbreviation: 'FB', + label: 'Meta Platforms (Facebook)', + image: 'https://example.com/fb.png', }, { - abbreviation: "BA", - label: "The Boeing Company", - image: "https://example.com/ba.png", + abbreviation: 'BA', + label: 'The Boeing Company', + image: 'https://example.com/ba.png', }, { - abbreviation: "NVDA", - label: "NVIDIA Corporation", - image: "https://example.com/nvda.png", + abbreviation: 'NVDA', + label: 'NVIDIA Corporation', + image: 'https://example.com/nvda.png', }, { - abbreviation: "EUR", - label: "Euro", - image: "https://example.com/eur.png", + abbreviation: 'EUR', + label: 'Euro', + image: 'https://example.com/eur.png', }, { - abbreviation: "USD", - label: "US Dollar", - image: "https://example.com/usd.png", + abbreviation: 'USD', + label: 'US Dollar', + image: 'https://example.com/usd.png', }, { - abbreviation: "GBP", - label: "British Pound", - image: "https://example.com/gbp.png", + abbreviation: 'GBP', + label: 'British Pound', + image: 'https://example.com/gbp.png', }, { - abbreviation: "JPY", - label: "Japanese Yen", - image: "https://example.com/jpy.png", + abbreviation: 'JPY', + label: 'Japanese Yen', + image: 'https://example.com/jpy.png', }, { - abbreviation: "CAD", - label: "Canadian Dollar", - image: "https://example.com/cad.png", + abbreviation: 'CAD', + label: 'Canadian Dollar', + image: 'https://example.com/cad.png', }, { - abbreviation: "AUD", - label: "Australian Dollar", - image: "https://example.com/aud.png", + abbreviation: 'AUD', + label: 'Australian Dollar', + image: 'https://example.com/aud.png', }, { - abbreviation: "CHF", - label: "Swiss Franc", - image: "https://example.com/chf.png", + abbreviation: 'CHF', + label: 'Swiss Franc', + image: 'https://example.com/chf.png', }, { - abbreviation: "CNY", - label: "Chinese Yuan", - image: "https://example.com/cny.png", + abbreviation: 'CNY', + label: 'Chinese Yuan', + image: 'https://example.com/cny.png', }, { - abbreviation: "MXN", - label: "Mexican Peso", - image: "https://example.com/mxn.png", + abbreviation: 'MXN', + label: 'Mexican Peso', + image: 'https://example.com/mxn.png', }, { - abbreviation: "SGD", - label: "Singapore Dollar", - image: "https://example.com/sgd.png", + abbreviation: 'SGD', + label: 'Singapore Dollar', + image: 'https://example.com/sgd.png', }, { - abbreviation: "KRW", - label: "South Korean Won", - image: "https://example.com/krw.png", + abbreviation: 'KRW', + label: 'South Korean Won', + image: 'https://example.com/krw.png', }, { - abbreviation: "RUB", - label: "Russian Ruble", - image: "https://example.com/rub.png", + abbreviation: 'RUB', + label: 'Russian Ruble', + image: 'https://example.com/rub.png', }, { - abbreviation: "ZAR", - label: "South African Rand", - image: "https://example.com/zar.png", + abbreviation: 'ZAR', + label: 'South African Rand', + image: 'https://example.com/zar.png', }, { - abbreviation: "TRY", - label: "Turkish Lira", - image: "https://example.com/try.png", + abbreviation: 'TRY', + label: 'Turkish Lira', + image: 'https://example.com/try.png', }, { - abbreviation: "HKD", - label: "Hong Kong Dollar", - image: "https://example.com/hkd.png", + abbreviation: 'HKD', + label: 'Hong Kong Dollar', + image: 'https://example.com/hkd.png', }, { - abbreviation: "INR", - label: "Indian Rupee", - image: "https://example.com/inr.png", + abbreviation: 'INR', + label: 'Indian Rupee', + image: 'https://example.com/inr.png', }, { - abbreviation: "BRL", - label: "Brazilian Real", - image: "https://example.com/brl.png", + abbreviation: 'BRL', + label: 'Brazilian Real', + image: 'https://example.com/brl.png', }, { - abbreviation: "ARS", - label: "Argentine Peso", - image: "https://example.com/ars.png", + abbreviation: 'ARS', + label: 'Argentine Peso', + image: 'https://example.com/ars.png', }, { - abbreviation: "CLP", - label: "Chilean Peso", - image: "https://example.com/clp.png", + abbreviation: 'CLP', + label: 'Chilean Peso', + image: 'https://example.com/clp.png', }, { - abbreviation: "NZD", - label: "New Zealand Dollar", - image: "https://example.com/nzd.png", + abbreviation: 'NZD', + label: 'New Zealand Dollar', + image: 'https://example.com/nzd.png', }, { - abbreviation: "COP", - label: "Colombian Peso", - image: "https://example.com/cop.png", + abbreviation: 'COP', + label: 'Colombian Peso', + image: 'https://example.com/cop.png', }, -].map((asset, index) => { - return { - ...asset, - id: index + 1, - }; -}); +].map((asset, index) => ({ + ...asset, + id: index + 1, +})) + +export default allAssets diff --git a/mobile/tradeverse/mock-data/all-subforums.js b/mobile/tradeverse/mock-data/all-subforums.js index 0f17974b..d95c7e2c 100644 --- a/mobile/tradeverse/mock-data/all-subforums.js +++ b/mobile/tradeverse/mock-data/all-subforums.js @@ -1,422 +1,440 @@ -export const allSubforums = [ +const allSubforums = [ { id: 1, - title: "Behavioral Economics", - totalPosts:4, - totalFollowers:103231, - totalPeople:123000, + title: 'Behavioral Economics', + totalPosts: 4, + totalFollowers: 103231, + totalPeople: 123000, posts: [ { id: 1, - title: "Understanding Behavioral Economics", + title: 'Understanding Behavioral Economics', content: [ { - type: "text", + type: 'text', value: - "Behavioral economics offers insights into why people make irrational financial decisions.", + 'Behavioral economics offers insights into why people make irrational financial decisions.', }, - { type: "tag", value: "BehavioralEconomics" }, - { type: "tag", value: "DecisionMaking" }, + { type: 'tag', value: 'BehavioralEconomics' }, + { type: 'tag', value: 'DecisionMaking' }, ], - date: "2023-03-21", + date: '2023-03-21', likes: 90, dislikes: 1, comments: 30, views: 2300, author: { - name: "Gulsen", - surname: "Sabak", - username: "gulsensabak", - avatar: "https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs", + name: 'Gulsen', + surname: 'Sabak', + username: 'gulsensabak', + avatar: + 'https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs', }, }, { id: 2, - title: "The Role of Gender in Economic Participation", + title: 'The Role of Gender in Economic Participation', content: [ { - type: "text", + type: 'text', value: - "Women’s participation in the workforce is critical for economic development.", + 'Women’s participation in the workforce is critical for economic development.', }, - { type: "tag", value: "BehavioralEconomics" }, - { type: "tag", value: "Workforce" }, + { type: 'tag', value: 'BehavioralEconomics' }, + { type: 'tag', value: 'Workforce' }, ], - date: "2023-05-11", + date: '2023-05-11', likes: 110, dislikes: 3, comments: 25, views: 3100, author: { - name: "Gulsen", - surname: "Sabak", - username: "gulsensabak", - avatar: "https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs", + name: 'Gulsen', + surname: 'Sabak', + username: 'gulsensabak', + avatar: + 'https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs', }, }, { id: 3, - title: "How to Analyze Company Fundamentals", + title: 'How to Analyze Company Fundamentals', content: [ { - type: "text", + type: 'text', value: "Fundamental analysis is critical when evaluating a company's long-term potential.", }, - { type: "tag", value: "BehavioralEconomics" }, - { type: "tag", value: "CompanyAnalysis" }, + { type: 'tag', value: 'BehavioralEconomics' }, + { type: 'tag', value: 'CompanyAnalysis' }, ], - date: "2023-05-03", + date: '2023-05-03', likes: 185, dislikes: 6, comments: 85, views: 6700, author: { - name: "Warren", - surname: "Buffet", - username: "warrenbuffet", - avatar: "https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg", + name: 'Warren', + surname: 'Buffet', + username: 'warrenbuffet', + avatar: + 'https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg', }, }, { id: 4, - title: "Inflation trends in emerging markets", + title: 'Inflation trends in emerging markets', content: [ { - type: "text", + type: 'text', value: - "Emerging markets face volatile inflation rates due to various factors like commodity prices and currency fluctuations.", + 'Emerging markets face volatile inflation rates due to various factors like commodity prices and currency fluctuations.', }, - { type: "tag", value: "BehavioralEconomics" }, - { type: "tag", value: "EmergingMarkets" }, + { type: 'tag', value: 'BehavioralEconomics' }, + { type: 'tag', value: 'EmergingMarkets' }, ], - date: "2023-07-15", + date: '2023-07-15', likes: 120, dislikes: 5, comments: 60, views: 5000, author: { - name: "Daron", - surname: "Acemoglu", - avatar: "https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd", - username: "daronnacemoglu", + name: 'Daron', + surname: 'Acemoglu', + avatar: + 'https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd', + username: 'daronnacemoglu', }, }, ], }, { id: 2, - totalPosts:4, - totalFollowers:103231, - totalPeople:123000, + totalPosts: 4, + totalFollowers: 103231, + totalPeople: 123000, - title: "Economic Growth", + title: 'Economic Growth', posts: [ { id: 5, - title: "The impact of technology on economic growth", + title: 'The impact of technology on economic growth', content: [ { - type: "text", - value: "Technological progress drives economies forward.", + type: 'text', + value: 'Technological progress drives economies forward.', }, - { type: "tag", value: "EconomicGrowth" }, - { type: "tag", value: "TechImpact" }, + { type: 'tag', value: 'EconomicGrowth' }, + { type: 'tag', value: 'TechImpact' }, ], - date: "2023-06-01", + date: '2023-06-01', likes: 85, dislikes: 2, comments: 45, views: 3200, author: { - name: "Daron", - surname: "Acemoglu", - avatar: "https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd", - username: "daronnacemoglu", + name: 'Daron', + surname: 'Acemoglu', + avatar: + 'https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd', + username: 'daronnacemoglu', }, }, { id: 6, - title: "The Role of Institutions in Economic Development", + title: 'The Role of Institutions in Economic Development', content: [ { - type: "text", + type: 'text', value: - "Strong institutions are key to sustainable economic growth.", + 'Strong institutions are key to sustainable economic growth.', }, - { type: "tag", value: "Institutions" }, - { type: "tag", value: "EconomicDevelopment" }, + { type: 'tag', value: 'Institutions' }, + { type: 'tag', value: 'EconomicDevelopment' }, ], - date: "2023-04-04", + date: '2023-04-04', likes: 80, dislikes: 2, comments: 25, views: 2200, author: { - name: "Kıvanç", - surname: "Karaman", - username: "kivanc_karaman", - avatar: "https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg", + name: 'Kıvanç', + surname: 'Karaman', + username: 'kivanc_karaman', + avatar: + 'https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg', }, }, { id: 7, - title: "The Importance of Education in Economic Growth", + title: 'The Importance of Education in Economic Growth', content: [ { - type: "text", + type: 'text', value: - "A well-educated population is the foundation for economic success.", + 'A well-educated population is the foundation for economic success.', }, - { type: "tag", value: "Education" }, - { type: "tag", value: "EconomicGrowth" }, + { type: 'tag', value: 'Education' }, + { type: 'tag', value: 'EconomicGrowth' }, ], - date: "2023-08-29", + date: '2023-08-29', likes: 150, dislikes: 8, comments: 70, views: 5800, author: { - name: "Kıvanç", - surname: "Karaman", - username: "kivanc_karaman", - avatar: "https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg", + name: 'Kıvanç', + surname: 'Karaman', + username: 'kivanc_karaman', + avatar: + 'https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg', }, }, { id: 8, - title: "Why Financial Literacy Matters", + title: 'Why Financial Literacy Matters', content: [ { - type: "text", + type: 'text', value: - "Improving financial literacy leads to better decision-making and long-term financial health.", + 'Improving financial literacy leads to better decision-making and long-term financial health.', }, - { type: "tag", value: "FinancialLiteracy" }, - { type: "tag", value: "EconomicGrowth" }, + { type: 'tag', value: 'FinancialLiteracy' }, + { type: 'tag', value: 'EconomicGrowth' }, ], - date: "2023-07-02", + date: '2023-07-02', likes: 140, dislikes: 5, comments: 65, views: 4600, author: { - name: "Warren", - surname: "Buffet", - username: "warrenbuffet", - avatar: "https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg", + name: 'Warren', + surname: 'Buffet', + username: 'warrenbuffet', + avatar: + 'https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg', }, }, ], }, { id: 3, - title: "Investing Market", - totalPosts:4, - totalFollowers:103231, - totalPeople:123000, + title: 'Investing Market', + totalPosts: 4, + totalFollowers: 103231, + totalPeople: 123000, posts: [ { id: 9, - title: "Cryptocurrency adoption in global markets", + title: 'Cryptocurrency adoption in global markets', content: [ { - type: "text", + type: 'text', value: - "Cryptocurrency is becoming an increasingly accepted form of payment and investment in various countries.", + 'Cryptocurrency is becoming an increasingly accepted form of payment and investment in various countries.', }, - { type: "tag", value: "Cryptocurrency" }, - { type: "tag", value: "GlobalMarkets" }, + { type: 'tag', value: 'Cryptocurrency' }, + { type: 'tag', value: 'GlobalMarkets' }, ], - date: "2023-08-10", + date: '2023-08-10', likes: 200, dislikes: 10, comments: 80, views: 7500, author: { - name: "Daron", - surname: "Acemoglu", - avatar: "https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd", - username: "daronnacemoglu", + name: 'Daron', + surname: 'Acemoglu', + avatar: + 'https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd', + username: 'daronnacemoglu', }, }, { id: 10, - title: "How Globalization Impacts Emerging Markets", + title: 'How Globalization Impacts Emerging Markets', content: [ { - type: "text", + type: 'text', value: - "Globalization presents both opportunities and challenges for emerging economies.", + 'Globalization presents both opportunities and challenges for emerging economies.', }, - { type: "tag", value: "Globalization" }, - { type: "tag", value: "EmergingMarkets" }, + { type: 'tag', value: 'Globalization' }, + { type: 'tag', value: 'EmergingMarkets' }, ], - date: "2023-06-18", + date: '2023-06-18', likes: 115, dislikes: 3, comments: 40, views: 4000, author: { - name: "Kıvanç", - surname: "Karaman", - username: "kivanc_karaman", - avatar: "https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg", + name: 'Kıvanç', + surname: 'Karaman', + username: 'kivanc_karaman', + avatar: + 'https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg', }, }, { id: 11, - title: "Diversification: Reducing Risk in Your Portfolio", + title: 'Diversification: Reducing Risk in Your Portfolio', content: [ { - type: "text", + type: 'text', value: - "Diversification is the cornerstone of risk management in investing.", + 'Diversification is the cornerstone of risk management in investing.', }, - { type: "tag", value: "Diversification" }, - { type: "tag", value: "Investing" }, + { type: 'tag', value: 'Diversification' }, + { type: 'tag', value: 'Investing' }, ], - date: "2023-08-17", + date: '2023-08-17', likes: 250, dislikes: 9, comments: 100, views: 9400, author: { - name: "Warren", - surname: "Buffet", - username: "warrenbuffet", - avatar: "https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg", + name: 'Warren', + surname: 'Buffet', + username: 'warrenbuffet', + avatar: + 'https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg', }, }, { id: 12, - title: "Why Value Investing Always Wins", + title: 'Why Value Investing Always Wins', content: [ { - type: "text", + type: 'text', value: "Value investing outperforms because it focuses on companies' intrinsic worth.", }, - { type: "tag", value: "ValueInvesting" }, - { type: "tag", value: "Markets" }, + { type: 'tag', value: 'ValueInvesting' }, + { type: 'tag', value: 'Markets' }, ], - date: "2023-09-30", + date: '2023-09-30', likes: 300, dislikes: 12, comments: 150, views: 12000, author: { - name: "Warren", - surname: "Buffet", - username: "warrenbuffet", - avatar: "https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg", + name: 'Warren', + surname: 'Buffet', + username: 'warrenbuffet', + avatar: + 'https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg', }, }, ], }, { id: 4, - title: "Sustainability And Green Finance", - totalPosts:4, - totalFollowers:103231, - totalPeople:123000, + title: 'Sustainability And Green Finance', + totalPosts: 4, + totalFollowers: 103231, + totalPeople: 123000, posts: [ { id: 13, - title: "The future of renewable energy investments", + title: 'The future of renewable energy investments', content: [ { - type: "text", + type: 'text', value: - "Investing in renewable energy sources is seen as a key driver for sustainable economic growth in the coming decades.", + 'Investing in renewable energy sources is seen as a key driver for sustainable economic growth in the coming decades.', }, - { type: "tag", value: "RenewableEnergy" }, - { type: "tag", value: "Investments" }, + { type: 'tag', value: 'RenewableEnergy' }, + { type: 'tag', value: 'Investments' }, ], - date: "2023-09-22", + date: '2023-09-22', likes: 95, dislikes: 3, comments: 55, views: 4100, author: { - name: "Daron", - surname: "Acemoglu", - avatar: "https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd", - username: "daronnacemoglu", + name: 'Daron', + surname: 'Acemoglu', + avatar: + 'https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd', + username: 'daronnacemoglu', }, }, { id: 14, - title: "The Rise of Green Finance", + title: 'The Rise of Green Finance', content: [ { - type: "text", + type: 'text', value: - "Green finance is transforming how we approach investments, focusing on sustainability.", + 'Green finance is transforming how we approach investments, focusing on sustainability.', }, - { type: "tag", value: "GreenFinance" }, - { type: "tag", value: "Sustainability" }, + { type: 'tag', value: 'GreenFinance' }, + { type: 'tag', value: 'Sustainability' }, ], - date: "2023-09-14", + date: '2023-09-14', likes: 75, dislikes: 2, comments: 40, views: 2500, author: { - name: "Gulsen", - surname: "Sabak", - username: "gulsensabak", - avatar: "https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs", + name: 'Gulsen', + surname: 'Sabak', + username: 'gulsensabak', + avatar: + 'https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs', }, }, { id: 15, - title: "The Power of Long-Term Investment", + title: 'The Power of Long-Term Investment', content: [ { - type: "text", + type: 'text', value: - "Successful investing requires patience and a long-term view. This is especially true for sustainable projects.", + 'Successful investing requires patience and a long-term view. This is especially true for sustainable projects.', }, - { type: "tag", value: "Sustainability" }, - { type: "tag", value: "LongTermInvestment" }, + { type: 'tag', value: 'Sustainability' }, + { type: 'tag', value: 'LongTermInvestment' }, ], - date: "2023-01-20", + date: '2023-01-20', likes: 210, dislikes: 3, comments: 120, views: 8000, author: { - name: "Warren", - surname: "Buffet", - username: "warrenbuffet", - avatar: "https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg", + name: 'Warren', + surname: 'Buffet', + username: 'warrenbuffet', + avatar: + 'https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg', }, }, { id: 16, - title: "Income Inequality: A Threat to Economic Stability", + title: 'Income Inequality: A Threat to Economic Stability', content: [ { - type: "text", + type: 'text', value: - "Rising income inequality can destabilize economies and hinder sustainable development.", + 'Rising income inequality can destabilize economies and hinder sustainable development.', }, - { type: "tag", value: "Sustainability" }, - { type: "tag", value: "IncomeInequality" }, + { type: 'tag', value: 'Sustainability' }, + { type: 'tag', value: 'IncomeInequality' }, ], - date: "2023-10-05", + date: '2023-10-05', likes: 95, dislikes: 5, comments: 50, views: 3300, author: { - name: "Kıvanç", - surname: "Karaman", - username: "kivanc_karaman", - avatar: "https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg", + name: 'Kıvanç', + surname: 'Karaman', + username: 'kivanc_karaman', + avatar: + 'https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg', }, }, ], }, -]; +] + +export default allSubforums diff --git a/mobile/tradeverse/mock-data/all-tags.js b/mobile/tradeverse/mock-data/all-tags.js index eb47c469..ccc2eb21 100644 --- a/mobile/tradeverse/mock-data/all-tags.js +++ b/mobile/tradeverse/mock-data/all-tags.js @@ -1,302 +1,316 @@ -export const allTags = [ +const allTags = [ { id: 1, - label: "Investments", + label: 'Investments', posts: 3213, people: 134, }, { id: 2, - label: "Cryptocurrency", + label: 'Cryptocurrency', posts: 5871, people: 257, }, { id: 3, - label: "RealEstate", + label: 'RealEstate', posts: 2459, people: 98, }, { id: 4, - label: "Stocks", + label: 'Stocks', posts: 7654, people: 312, }, { id: 5, - label: "Bonds", + label: 'Bonds', posts: 1492, people: 58, }, { id: 6, - label: "Commodities", + label: 'Commodities', posts: 1893, people: 76, }, { id: 7, - label: "Gold&Silver", + label: 'Gold&Silver', posts: 1324, people: 43, }, { id: 8, - label: "PensionPlans", + label: 'PensionPlans', posts: 1021, people: 56, }, { id: 9, - label: "PersonalFinance", + label: 'PersonalFinance', posts: 9847, people: 431, }, { id: 10, - label: "Budgeting", + label: 'Budgeting', posts: 4035, people: 187, }, { id: 11, - label: "Savings", + label: 'Savings', posts: 6578, people: 224, }, { id: 12, - label: "DebtManagement", + label: 'DebtManagement', posts: 3121, people: 143, }, { id: 13, - label: "Taxes", + label: 'Taxes', posts: 2754, people: 97, }, { id: 14, - label: "Retirement", + label: 'Retirement', posts: 3541, people: 126, }, { id: 15, - label: "Insurance", + label: 'Insurance', posts: 1932, people: 81, }, { id: 16, - label: "FinancialPlanning", + label: 'FinancialPlanning', posts: 4345, people: 212, }, { id: 17, - label: "WealthManagement", + label: 'WealthManagement', posts: 2871, people: 109, }, { id: 18, - label: "InvestmentStrategies", + label: 'InvestmentStrategies', posts: 5128, people: 183, }, { id: 19, - label: "TaxOptimization", + label: 'TaxOptimization', posts: 1832, people: 63, }, { id: 20, - label: "StockMarket", + label: 'StockMarket', posts: 9125, people: 378, }, { id: 21, - label: "ETF", + label: 'ETF', posts: 2741, people: 89, }, { id: 22, - label: "MutualFunds", + label: 'MutualFunds', posts: 3524, people: 123, }, { id: 23, - label: "HedgeFunds", + label: 'HedgeFunds', posts: 1987, people: 72, }, { id: 24, - label: "IndexFunds", + label: 'IndexFunds', posts: 2473, people: 84, }, { id: 25, - label: "ForexTrading", + label: 'ForexTrading', posts: 5648, people: 275, }, { id: 26, - label: "OptionsTrading", + label: 'OptionsTrading', posts: 2349, people: 110, }, { id: 27, - label: "FuturesTrading", + label: 'FuturesTrading', posts: 1287, people: 58, }, { id: 28, - label: "RealEstateInvestmentTrusts(REITs)", + label: 'RealEstateInvestmentTrusts(REITs)', posts: 1348, people: 49, }, { id: 29, - label: "DividendInvesting", + label: 'DividendInvesting', posts: 4523, people: 198, }, { id: 30, - label: "ValueInvesting", + label: 'ValueInvesting', posts: 3256, people: 139, }, { id: 31, - label: "GrowthInvesting", + label: 'GrowthInvesting', posts: 4129, people: 162, }, { id: 32, - label: "VentureCapital", + label: 'VentureCapital', posts: 1578, people: 61, }, { id: 33, - label: "AngelInvesting", + label: 'AngelInvesting', posts: 1432, people: 54, }, { id: 34, - label: "Crowdfunding", + label: 'Crowdfunding', posts: 1945, people: 72, }, { id: 35, - label: "Peer-to-PeerLending", + label: 'Peer-to-PeerLending', posts: 2187, people: 80, }, { id: 36, - label: "SavingsAccounts", + label: 'SavingsAccounts', posts: 1679, people: 67, }, { id: 37, - label: "CreditCards", + label: 'CreditCards', posts: 2983, people: 109, }, { id: 38, - label: "Loans", + label: 'Loans', posts: 3211, people: 118, }, { id: 39, - label: "Mortgage", + label: 'Mortgage', posts: 2746, people: 105, }, { id: 40, - label: "AutoLoans", + label: 'AutoLoans', posts: 1847, people: 69, }, { id: 41, - label: "StudentLoans", + label: 'StudentLoans', posts: 2412, people: 88, }, { id: 42, - label: "EmergencyFunds", + label: 'EmergencyFunds', posts: 1564, people: 58, }, { id: 43, - label: "FinancialIndependence", + label: 'FinancialIndependence', posts: 3724, people: 135, }, { id: 44, - label: "EarlyRetirement", + label: 'EarlyRetirement', posts: 2941, people: 116, }, { id: 45, - label: "FIREMovement", + label: 'FIREMovement', posts: 2132, people: 77, }, { id: 46, - label: "SideHustles", + label: 'SideHustles', posts: 4357, people: 196, }, { id: 47, - label: "Freelancing", + label: 'Freelancing', posts: 4892, people: 221, }, { id: 48, - label: "PassiveIncome", + label: 'PassiveIncome', posts: 5764, people: 243, }, { id: 49, - label: "SmallBusiness", + label: 'SmallBusiness', posts: 3921, people: 184, }, { id: 50, - label: "Entrepreneurship", + label: 'Entrepreneurship', posts: 6541, people: 267, }, -]; + { + id: 51, + label: 'MicroEconomy', + posts: 4321, + people: 189, + }, + { + id: 52, + label: 'CryptoEconomy', + posts: 5432, + people: 198, + }, +] + +export default allTags diff --git a/mobile/tradeverse/mock-data/all-users.js b/mobile/tradeverse/mock-data/all-users.js index b82bb577..90015fe0 100644 --- a/mobile/tradeverse/mock-data/all-users.js +++ b/mobile/tradeverse/mock-data/all-users.js @@ -1,44 +1,49 @@ -export const allUsers = [ +const allUsers = [ { - name: "Daron", - surname: "Acemoglu", - username: "daronnacemoglu", + name: 'Daron', + surname: 'Acemoglu', + username: 'daronnacemoglu', avatar: - "https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd", + 'https://mitsloan.mit.edu/sites/default/files/styles/profile_detail_headshot/public/profile-images/2024/06/19/profile-image-61349.jpeg?h=fbf7a813&itok=Iwywgvzd', followers: 150000, posts: 205, postList: [4, 5, 9, 13], - followedUsers: ["warrenbuffet", "gulsensabak"], + followedUsers: ['warrenbuffet', 'gulsensabak'], }, { - name: "Gulsen", - surname: "Sabak", - username: "gulsensabak", - avatar: "https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs", + name: 'Gulsen', + surname: 'Sabak', + username: 'gulsensabak', + avatar: + 'https://media.licdn.com/dms/image/v2/D4D03AQGTfgK0m3eIFw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1724777725675?e=1735171200&v=beta&t=tS9Smt7QoMB-GsvxoruAiPItiRKgJrQo8-xSdgWrYfs', followers: 85000, posts: 178, postList: [1, 2, 14], - followedUsers: ["daronnacemoglu", "warrenbuffet"], + followedUsers: ['daronnacemoglu', 'warrenbuffet'], }, { - name: "Kivanc", - surname: "Karaman", - username: "kivanc_karaman", - avatar: "https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg", + name: 'Kivanc', + surname: 'Karaman', + username: 'kivanc_karaman', + avatar: + 'https://pbs.twimg.com/profile_images/1495045642472861698/HUMUox6W_400x400.jpg', followers: 60000, posts: 124, postList: [6, 7, 10, 16], - followedUsers: ["daronnacemoglu", "gulsensabak"], + followedUsers: ['daronnacemoglu', 'gulsensabak'], }, { - name: "Warren", - surname: "Buffet", - username: "warrenbuffet", - avatar: "https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg", + name: 'Warren', + surname: 'Buffet', + username: 'warrenbuffet', + avatar: + 'https://i.gazeteoksijen.com/storage/files/images/2024/06/29/warren-buffett-vasiyetini-acikladi-gates-vakfina-para-yok-j4wu.jpg', followers: 450000, posts: 310, postList: [11, 3, 15, 12, 8], - followedUsers: ["daronnacemoglu", "kivanc_karaman"], + followedUsers: ['daronnacemoglu', 'kivanc_karaman'], }, -]; +] + +export default allUsers diff --git a/mobile/tradeverse/mock-services/assets.js b/mobile/tradeverse/mock-services/assets.js index fa9cb7f2..28dab736 100644 --- a/mobile/tradeverse/mock-services/assets.js +++ b/mobile/tradeverse/mock-services/assets.js @@ -1,13 +1,15 @@ -import { allAssets } from "../mock-data/all-assets"; +import allAssets from '../mock-data/all-assets' + export const searchAssets = (searchTerm) => { if (!searchTerm) { - return allAssets; + return allAssets } - return allAssets.filter((asset) => - asset.label.toLowerCase().includes(searchTerm.toLowerCase()) - ); -}; - -export const getAssetById = (assetId) => { - return allAssets.find((asset) => asset.id == assetId); + return allAssets.filter( + (asset) => + asset.label.toLowerCase().includes(searchTerm.toLowerCase()) || + asset.abbreviation.toLowerCase().includes(searchTerm.toLowerCase()) + ) } + +export const getAssetById = (assetId) => + allAssets.find((asset) => asset.id == assetId) diff --git a/mobile/tradeverse/mock-services/explore.js b/mobile/tradeverse/mock-services/explore.js index da09f222..9acba7bc 100644 --- a/mobile/tradeverse/mock-services/explore.js +++ b/mobile/tradeverse/mock-services/explore.js @@ -1,19 +1,19 @@ -import { searchAssets } from "./assets"; -import { searchPosts } from "./post"; -import { searchSubforums } from "./subforums"; -import { searchTags } from "./tags"; -import { searchUsers } from "./users"; +import { searchAssets } from './assets' +import { searchPosts } from './post' +import { searchSubforums } from './subforums' +import searchTags from './tags' +import { searchUsers } from './users' export const getExploreFeed = () => { - const allPosts = searchPosts(""); + const allPosts = searchPosts('') return { popular: allPosts.slice(0, 8), recent: allPosts.slice(8, 16), - }; -}; + } +} export const searchOnExplore = (searchTerm) => { - const allPosts = searchPosts(searchTerm); + const allPosts = searchPosts(searchTerm) return { popular: allPosts.slice(0, 12), assets: searchAssets(searchTerm), @@ -21,5 +21,5 @@ export const searchOnExplore = (searchTerm) => { subforums: searchSubforums(searchTerm), posts: searchPosts(searchTerm), users: searchUsers(searchTerm), - }; -}; + } +} diff --git a/mobile/tradeverse/mock-services/home.js b/mobile/tradeverse/mock-services/home.js index fea52a54..8613b58c 100644 --- a/mobile/tradeverse/mock-services/home.js +++ b/mobile/tradeverse/mock-services/home.js @@ -1,15 +1,15 @@ -import { searchPosts } from "./post"; +import { searchPosts } from './post' -export const getHomeFeed = () => { - const allPosts = searchPosts(""); +export default function getHomeFeed() { + const allPosts = searchPosts('') - const forYouPosts = allPosts.slice(0, 4); - const followedTopicsPosts = allPosts.slice(4, 7); - const followedPeoplePosts = allPosts.slice(7, 15); + const forYouPosts = allPosts.slice(0, 4) + const followedTopicsPosts = allPosts.slice(4, 7) + const followedPeoplePosts = allPosts.slice(7, 15) return { forYouPosts, followedTopicsPosts, followedPeoplePosts, - }; -}; + } +} diff --git a/mobile/tradeverse/mock-services/post.js b/mobile/tradeverse/mock-services/post.js index 7f924f72..ae0b2f45 100644 --- a/mobile/tradeverse/mock-services/post.js +++ b/mobile/tradeverse/mock-services/post.js @@ -1,29 +1,28 @@ -import { allSubforums } from "../mock-data/all-subforums"; +import allSubforums from '../mock-data/all-subforums' -const _getAllPosts = () => { - return allSubforums.reduce((acc, sforum) => { - return acc.concat( - sforum.posts.map((post) => ({ - ...post, - subforum: { id: sforum.id, title: sforum.title }, - })) - ); - }, []); -}; +const _getAllPosts = () => + allSubforums.reduce( + (acc, sforum) => + acc.concat( + sforum.posts.map((post) => ({ + ...post, + subforum: { id: sforum.id, title: sforum.title }, + })) + ), + [] + ) -export const getPostById = (postId) => { - return _getAllPosts().find((post) => post.id == postId); -}; +export const getPostById = (postId) => + _getAllPosts().find((post) => post.id == postId) export const searchPosts = (searchTerm) => { if (!searchTerm) { - return _getAllPosts(); + return _getAllPosts() } return _getAllPosts().filter((post) => post.title.toLowerCase().includes(searchTerm.toLowerCase()) - ); -}; + ) +} -export const getPostsByUser = (uName) => { - return _getAllPosts().filter((post) => post.author.username === uName); -}; +export const getPostsByUser = (uName) => + _getAllPosts().filter((post) => post.author.username === uName) diff --git a/mobile/tradeverse/mock-services/subforums.js b/mobile/tradeverse/mock-services/subforums.js index 11b59929..06247396 100644 --- a/mobile/tradeverse/mock-services/subforums.js +++ b/mobile/tradeverse/mock-services/subforums.js @@ -1,13 +1,13 @@ -import { allSubforums } from "../mock-data/all-subforums"; +import allSubforums from '../mock-data/all-subforums' + export const searchSubforums = (searchTerm) => { if (!searchTerm) { - return allSubforums; + return allSubforums } return allSubforums.filter((subforum) => subforum.title.toLowerCase().includes(searchTerm.toLowerCase()) - ); -}; + ) +} -export const getSubForumById = (subforumId) => { - return allSubforums.find((subforum) => subforum.id == subforumId); -}; +export const getSubForumById = (subforumId) => + allSubforums.find((subforum) => subforum.id == subforumId) diff --git a/mobile/tradeverse/mock-services/tags.js b/mobile/tradeverse/mock-services/tags.js index b5712ad0..1dda3124 100644 --- a/mobile/tradeverse/mock-services/tags.js +++ b/mobile/tradeverse/mock-services/tags.js @@ -1,11 +1,11 @@ -import { allTags } from "../mock-data/all-tags"; +import allTags from '../mock-data/all-tags' -export const searchTags = (searchKey) => { +export default function searchTags(searchKey) { if (!searchKey) { - return allTags; + return allTags } return allTags.filter((tag) => tag.label.toLowerCase().includes(searchKey.toLowerCase()) - ); -}; + ) +} diff --git a/mobile/tradeverse/mock-services/users.js b/mobile/tradeverse/mock-services/users.js index c29179c0..a4d5a9a5 100644 --- a/mobile/tradeverse/mock-services/users.js +++ b/mobile/tradeverse/mock-services/users.js @@ -1,25 +1,21 @@ -import { allSubforums } from "../mock-data/all-subforums"; -import { getAllPosts, getPostsByUser } from "./post"; -import { allUsers } from "../mock-data/all-users"; +import { getPostsByUser } from './post' +import allUsers from '../mock-data/all-users' -export const getAllUsers = () => { - return allUsers; -}; +export const getAllUsers = () => allUsers -export const getUserByUsername = (uName='') => { - if(!uName) return null; - const user = allUsers.find((user) => user.username == uName); +export const getUserByUsername = (uName = '') => { + if (!uName) return null + const user = allUsers.find((u) => u.username == uName) return { ...user, posts: getPostsByUser(uName), - }; -}; + } +} -export const searchUsers = (searchTerm) => { - return allUsers.filter( +export const searchUsers = (searchTerm) => + allUsers.filter( (user) => user.username.toLowerCase().includes(searchTerm.toLowerCase()) || user.name.toLowerCase().includes(searchTerm.toLowerCase()) || user.surname.toLowerCase().includes(searchTerm.toLowerCase()) - ); -}; + ) diff --git a/mobile/tradeverse/package-lock.json b/mobile/tradeverse/package-lock.json index ef083c7b..ee325a39 100644 --- a/mobile/tradeverse/package-lock.json +++ b/mobile/tradeverse/package-lock.json @@ -15,6 +15,9 @@ "@react-navigation/native": "^6.0.2", "@tabler/icons-react-native": "^3.19.0", "axios": "^1.7.7", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react-hooks": "^5.0.0", "expo": "~51.0.28", "expo-font": "~12.0.9", "expo-image-picker": "^15.0.7", @@ -38,8 +41,16 @@ "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~18.2.45", + "babel-plugin-module-resolver": "^5.0.2", + "eslint": "^8.57.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-import-resolver-babel-module": "^5.3.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.2", "jest": "^29.2.1", "jest-expo": "~51.0.3", + "prettier": "^3.3.3", "react-test-renderer": "18.2.0", "typescript": "~5.3.3" } @@ -130,19 +141,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", - "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", - "peer": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", @@ -413,85 +411,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", - "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", - "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", - "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", - "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/plugin-transform-optional-chaining": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", - "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.20.7", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", @@ -656,18 +575,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "peer": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -771,25 +678,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", - "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", + "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.25.7" }, @@ -948,22 +841,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", @@ -978,23 +855,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.8.tgz", - "integrity": "sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-remap-async-to-generator": "^7.25.7", - "@babel/traverse": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", @@ -1011,21 +871,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", - "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", @@ -1040,38 +885,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", - "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.8.tgz", - "integrity": "sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, "node_modules/@babel/plugin-transform-classes": { "version": "7.25.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", @@ -1120,13 +933,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", - "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", - "peer": true, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", + "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { @@ -1136,13 +947,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-keys": { + "node_modules/@babel/plugin-transform-flow-strip-types": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", - "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz", + "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-flow": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1151,27 +962,26 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-function-name": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", - "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.8.tgz", - "integrity": "sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==", - "peer": true, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dependencies": { "@babel/helper-plugin-utils": "^7.25.7" }, @@ -1182,14 +992,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { + "node_modules/@babel/plugin-transform-modules-commonjs": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", - "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1198,27 +1008,27 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.8.tgz", - "integrity": "sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.7.tgz", - "integrity": "sha512-q8Td2PPc6/6I73g96SreSUCKEcwMXCwcXSIAVTyTTN6CpJe0dMj8coxu1fg1T9vfBLi6Rsi6a4ECcFBbKabS5w==", + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", + "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-syntax-flow": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1227,14 +1037,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", - "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", - "peer": true, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", + "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", "dependencies": { + "@babel/helper-compilation-targets": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1243,14 +1053,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", - "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", + "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1259,11 +1068,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.8.tgz", - "integrity": "sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==", - "peer": true, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.25.7" }, @@ -1274,11 +1082,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-literals": { + "node_modules/@babel/plugin-transform-private-methods": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", - "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { @@ -1288,12 +1097,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.8.tgz", - "integrity": "sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", + "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { @@ -1303,11 +1113,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-member-expression-literals": { + "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", - "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", + "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", "dependencies": { "@babel/helper-plugin-utils": "^7.25.7" }, @@ -1318,14 +1127,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-amd": { + "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", - "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", + "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1334,32 +1145,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { + "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", - "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", + "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", - "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/plugin-transform-react-jsx": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1368,13 +1159,11 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-umd": { + "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", - "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz", + "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==", "dependencies": { - "@babel/helper-module-transforms": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { @@ -1384,27 +1173,26 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", - "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz", + "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-new-target": { + "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", - "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", + "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { @@ -1414,12 +1202,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.8.tgz", - "integrity": "sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz", + "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1428,11 +1221,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.8.tgz", - "integrity": "sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==", - "peer": true, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dependencies": { "@babel/helper-plugin-utils": "^7.25.7" }, @@ -1443,14 +1235,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.8.tgz", - "integrity": "sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-transform-parameters": "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1459,14 +1250,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-object-super": { + "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", - "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-replace-supers": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1475,11 +1264,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.8.tgz", - "integrity": "sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==", - "peer": true, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dependencies": { "@babel/helper-plugin-utils": "^7.25.7" }, @@ -1490,13 +1278,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.8.tgz", - "integrity": "sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz", + "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==", "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-syntax-typescript": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1505,11 +1296,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-parameters": { + "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", - "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.7", "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { @@ -1519,13 +1311,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-private-methods": { + "node_modules/@babel/preset-flow": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", - "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.7.tgz", + "integrity": "sha512-q2x3g0YHzo/Ohsr51KOYS/BtZMsvkzVd8qEyhZAyTatYdobfgXCuyppTqTuIhdq5kR/P3nyyVvZ6H5dMc4PnCQ==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-flow-strip-types": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1534,14 +1327,17 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.8.tgz", - "integrity": "sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==", + "node_modules/@babel/preset-react": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", + "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-transform-react-display-name": "^7.25.7", + "@babel/plugin-transform-react-jsx": "^7.25.7", + "@babel/plugin-transform-react-jsx-development": "^7.25.7", + "@babel/plugin-transform-react-pure-annotations": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1550,13 +1346,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-property-literals": { + "node_modules/@babel/preset-typescript": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", - "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", - "peer": true, + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz", + "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-syntax-jsx": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-typescript": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1565,12 +1364,16 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-display-name": { + "node_modules/@babel/register": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.7.tgz", - "integrity": "sha512-r0QY7NVU8OnrwE+w2IWiRom0wwsTbjx4+xH2RTd7AVdof3uurXOF+/mXHQDRk+2jIvWgSaCHKMgggfvM4dyUGA==", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.7.tgz", + "integrity": "sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.6", + "source-map-support": "^0.5.16" }, "engines": { "node": ">=6.9.0" @@ -1579,629 +1382,679 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.7.tgz", - "integrity": "sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==", + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/plugin-syntax-jsx": "^7.25.7", - "@babel/types": "^7.25.7" + "pify": "^4.0.1", + "semver": "^5.6.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=6" } }, - "node_modules/@babel/plugin-transform-react-jsx-development": { + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/runtime": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.7.tgz", - "integrity": "sha512-5yd3lH1PWxzW6IZj+p+Y4OLQzz0/LzlOG8vGqonHfVR3euf1vyzyMUJk9Ac+m97BH46mFc/98t9PmYLyvgL3qg==", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.7" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { + "node_modules/@babel/template": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz", - "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { + "node_modules/@babel/traverse": { "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz", - "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.7.tgz", - "integrity": "sha512-6YTHJ7yjjgYqGc8S+CbEXhLICODk0Tn92j+vNJo07HFk9t3bjFgAKxPLFhHwF2NjmQVSI1zBRfBWUeVBa2osfA==", + "node_modules/@babel/types": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", - "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", - "peer": true, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "regenerator-transform": "^0.15.2" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", - "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", - "peer": true, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.7.tgz", - "integrity": "sha512-Y9p487tyTzB0yDYQOtWnC+9HGOuogtP3/wNpun1xJXEEvI6vip59BSBTsHnekZLqxmPcgsrAKt46HAAb//xGhg==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", - "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", - "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", + "node_modules/@eslint/eslintrc/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=6" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", - "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "argparse": "^2.0.1" }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=4" } }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", - "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", - "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.7.tgz", - "integrity": "sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==", + "node_modules/@expo/bunyan": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", + "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.7", - "@babel/helper-create-class-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", - "@babel/plugin-syntax-typescript": "^7.25.7" + "uuid": "^8.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=0.10.0" } }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", - "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", - "peer": true, + "node_modules/@expo/cli": { + "version": "0.18.30", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.30.tgz", + "integrity": "sha512-V90TUJh9Ly8stYo8nwqIqNWCsYjE28GlVFWEhAFCUOp99foiQr8HSTpiiX5GIrprcPoWmlGoY+J5fQA29R4lFg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" + "@babel/runtime": "^7.20.0", + "@expo/code-signing-certificates": "0.0.5", + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/devcert": "^1.0.0", + "@expo/env": "~0.3.0", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@expo/metro-config": "0.18.11", + "@expo/osascript": "^2.0.31", + "@expo/package-manager": "^1.5.0", + "@expo/plist": "^0.1.0", + "@expo/prebuild-config": "7.0.9", + "@expo/rudder-sdk-node": "1.1.1", + "@expo/spawn-async": "^1.7.2", + "@expo/xcpretty": "^4.3.0", + "@react-native/dev-middleware": "0.74.85", + "@urql/core": "2.3.6", + "@urql/exchange-retry": "0.3.0", + "accepts": "^1.3.8", + "arg": "5.0.2", + "better-opn": "~3.0.2", + "bplist-creator": "0.0.7", + "bplist-parser": "^0.3.1", + "cacache": "^18.0.2", + "chalk": "^4.0.0", + "ci-info": "^3.3.0", + "connect": "^3.7.0", + "debug": "^4.3.4", + "env-editor": "^0.4.1", + "fast-glob": "^3.3.2", + "find-yarn-workspace-root": "~2.0.0", + "form-data": "^3.0.1", + "freeport-async": "2.0.0", + "fs-extra": "~8.1.0", + "getenv": "^1.0.0", + "glob": "^7.1.7", + "graphql": "15.8.0", + "graphql-tag": "^2.10.1", + "https-proxy-agent": "^5.0.1", + "internal-ip": "4.3.0", + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1", + "js-yaml": "^3.13.1", + "json-schema-deref-sync": "^0.13.0", + "lodash.debounce": "^4.0.8", + "md5hex": "^1.0.0", + "minimatch": "^3.0.4", + "node-fetch": "^2.6.7", + "node-forge": "^1.3.1", + "npm-package-arg": "^7.0.0", + "open": "^8.3.0", + "ora": "3.4.0", + "picomatch": "^3.0.1", + "pretty-bytes": "5.6.0", + "progress": "2.0.3", + "prompts": "^2.3.2", + "qrcode-terminal": "0.11.0", + "require-from-string": "^2.0.2", + "requireg": "^0.2.2", + "resolve": "^1.22.2", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.2", + "semver": "^7.6.0", + "send": "^0.18.0", + "slugify": "^1.3.4", + "source-map-support": "~0.5.21", + "stacktrace-parser": "^0.1.10", + "structured-headers": "^0.4.1", + "tar": "^6.0.5", + "temp-dir": "^2.0.0", + "tempy": "^0.7.1", + "terminal-link": "^2.1.1", + "text-table": "^0.2.0", + "url-join": "4.0.0", + "wrap-ansi": "^7.0.0", + "ws": "^8.12.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "bin": { + "expo-internal": "build/bin/cli" } }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", - "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", - "peer": true, + "node_modules/@expo/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", - "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", + "node_modules/@expo/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", - "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", - "peer": true, + "node_modules/@expo/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=7.0.0" } }, - "node_modules/@babel/preset-env": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.8.tgz", - "integrity": "sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.25.8", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.25.7", - "@babel/plugin-syntax-import-attributes": "^7.25.7", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.8", - "@babel/plugin-transform-async-to-generator": "^7.25.7", - "@babel/plugin-transform-block-scoped-functions": "^7.25.7", - "@babel/plugin-transform-block-scoping": "^7.25.7", - "@babel/plugin-transform-class-properties": "^7.25.7", - "@babel/plugin-transform-class-static-block": "^7.25.8", - "@babel/plugin-transform-classes": "^7.25.7", - "@babel/plugin-transform-computed-properties": "^7.25.7", - "@babel/plugin-transform-destructuring": "^7.25.7", - "@babel/plugin-transform-dotall-regex": "^7.25.7", - "@babel/plugin-transform-duplicate-keys": "^7.25.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", - "@babel/plugin-transform-dynamic-import": "^7.25.8", - "@babel/plugin-transform-exponentiation-operator": "^7.25.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.8", - "@babel/plugin-transform-for-of": "^7.25.7", - "@babel/plugin-transform-function-name": "^7.25.7", - "@babel/plugin-transform-json-strings": "^7.25.8", - "@babel/plugin-transform-literals": "^7.25.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.8", - "@babel/plugin-transform-member-expression-literals": "^7.25.7", - "@babel/plugin-transform-modules-amd": "^7.25.7", - "@babel/plugin-transform-modules-commonjs": "^7.25.7", - "@babel/plugin-transform-modules-systemjs": "^7.25.7", - "@babel/plugin-transform-modules-umd": "^7.25.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", - "@babel/plugin-transform-new-target": "^7.25.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.8", - "@babel/plugin-transform-numeric-separator": "^7.25.8", - "@babel/plugin-transform-object-rest-spread": "^7.25.8", - "@babel/plugin-transform-object-super": "^7.25.7", - "@babel/plugin-transform-optional-catch-binding": "^7.25.8", - "@babel/plugin-transform-optional-chaining": "^7.25.8", - "@babel/plugin-transform-parameters": "^7.25.7", - "@babel/plugin-transform-private-methods": "^7.25.7", - "@babel/plugin-transform-private-property-in-object": "^7.25.8", - "@babel/plugin-transform-property-literals": "^7.25.7", - "@babel/plugin-transform-regenerator": "^7.25.7", - "@babel/plugin-transform-reserved-words": "^7.25.7", - "@babel/plugin-transform-shorthand-properties": "^7.25.7", - "@babel/plugin-transform-spread": "^7.25.7", - "@babel/plugin-transform-sticky-regex": "^7.25.7", - "@babel/plugin-transform-template-literals": "^7.25.7", - "@babel/plugin-transform-typeof-symbol": "^7.25.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.7", - "@babel/plugin-transform-unicode-property-regex": "^7.25.7", - "@babel/plugin-transform-unicode-regex": "^7.25.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, + "node_modules/@expo/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@expo/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=6.9.0" + "node": ">=8" + } + }, + "node_modules/@expo/cli/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10" } }, - "node_modules/@babel/preset-flow": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.7.tgz", - "integrity": "sha512-q2x3g0YHzo/Ohsr51KOYS/BtZMsvkzVd8qEyhZAyTatYdobfgXCuyppTqTuIhdq5kR/P3nyyVvZ6H5dMc4PnCQ==", + "node_modules/@expo/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-transform-flow-strip-types": "^7.25.7" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=8" } }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "peer": true, + "node_modules/@expo/code-signing-certificates": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", + "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + "node-forge": "^1.2.1", + "nullthrows": "^1.1.1" } }, - "node_modules/@babel/preset-react": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.7.tgz", - "integrity": "sha512-GjV0/mUEEXpi1U5ZgDprMRRgajGMRW3G5FjMr5KLKD8nT2fTG8+h/klV3+6Dm5739QE+K5+2e91qFKAYI3pmRg==", + "node_modules/@expo/config": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", + "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-transform-react-display-name": "^7.25.7", - "@babel/plugin-transform-react-jsx": "^7.25.7", - "@babel/plugin-transform-react-jsx-development": "^7.25.7", - "@babel/plugin-transform-react-pure-annotations": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/code-frame": "~7.10.4", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/json-file": "^8.3.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "require-from-string": "^2.0.2", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "slugify": "^1.3.4", + "sucrase": "3.34.0" } }, - "node_modules/@babel/preset-typescript": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.25.7.tgz", - "integrity": "sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==", + "node_modules/@expo/config-plugins": { + "version": "8.0.10", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.10.tgz", + "integrity": "sha512-KG1fnSKRmsudPU9BWkl59PyE0byrE2HTnqbOrgwr2FAhqh7tfr9nRs6A9oLS/ntpGzmFxccTEcsV0L4apsuxxg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", - "@babel/plugin-syntax-jsx": "^7.25.7", - "@babel/plugin-transform-modules-commonjs": "^7.25.7", - "@babel/plugin-transform-typescript": "^7.25.7" + "@expo/config-types": "^51.0.3", + "@expo/json-file": "~8.3.0", + "@expo/plist": "^0.1.0", + "@expo/sdk-runtime-versions": "^1.0.0", + "chalk": "^4.1.2", + "debug": "^4.3.1", + "find-up": "~5.0.0", + "getenv": "^1.0.0", + "glob": "7.1.6", + "resolve-from": "^5.0.0", + "semver": "^7.5.4", + "slash": "^3.0.0", + "slugify": "^1.6.6", + "xcode": "^3.0.1", + "xml2js": "0.6.0" + } + }, + "node_modules/@expo/config-plugins/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/register": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.7.tgz", - "integrity": "sha512-qHTd2Rhn/rKhSUwdY6+n98FmwXN+N+zxSVx3zWqRe9INyvTpv+aQ5gDV2+43ACd3VtMBzPPljbb0gZb8u5ma6Q==", + "node_modules/@expo/config-plugins/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/@expo/config-plugins/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6" + "node": ">=7.0.0" } }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } + "node_modules/@expo/config-plugins/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@babel/runtime": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", - "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "node_modules/@expo/config-plugins/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { - "regenerator-runtime": "^0.14.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6.9.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" - }, + "node_modules/@expo/config-plugins/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", - "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", - "debug": "^4.3.1", - "globals": "^11.1.0" + "node_modules/@expo/config-plugins/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" } }, - "node_modules/@babel/types": { - "version": "7.25.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", - "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "node_modules/@expo/config-plugins/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "node_modules/@expo/config-types": { + "version": "51.0.3", + "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", + "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" }, - "node_modules/@expo/bunyan": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", - "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", - "dependencies": { - "uuid": "^8.0.0" + "node_modules/@expo/config/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@expo/config/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@expo/cli": { - "version": "0.18.30", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.18.30.tgz", - "integrity": "sha512-V90TUJh9Ly8stYo8nwqIqNWCsYjE28GlVFWEhAFCUOp99foiQr8HSTpiiX5GIrprcPoWmlGoY+J5fQA29R4lFg==", + "node_modules/@expo/config/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@expo/devcert": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", + "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "0.0.5", - "@expo/config": "~9.0.0-beta.0", - "@expo/config-plugins": "~8.0.8", - "@expo/devcert": "^1.0.0", - "@expo/env": "~0.3.0", - "@expo/image-utils": "^0.5.0", - "@expo/json-file": "^8.3.0", - "@expo/metro-config": "0.18.11", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "^1.5.0", - "@expo/plist": "^0.1.0", - "@expo/prebuild-config": "7.0.9", - "@expo/rudder-sdk-node": "1.1.1", - "@expo/spawn-async": "^1.7.2", - "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.74.85", - "@urql/core": "2.3.6", - "@urql/exchange-retry": "0.3.0", - "accepts": "^1.3.8", - "arg": "5.0.2", - "better-opn": "~3.0.2", - "bplist-creator": "0.0.7", - "bplist-parser": "^0.3.1", - "cacache": "^18.0.2", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "connect": "^3.7.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "fast-glob": "^3.3.2", - "find-yarn-workspace-root": "~2.0.0", - "form-data": "^3.0.1", - "freeport-async": "2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "glob": "^7.1.7", - "graphql": "15.8.0", - "graphql-tag": "^2.10.1", - "https-proxy-agent": "^5.0.1", - "internal-ip": "4.3.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "js-yaml": "^3.13.1", - "json-schema-deref-sync": "^0.13.0", - "lodash.debounce": "^4.0.8", - "md5hex": "^1.0.0", - "minimatch": "^3.0.4", - "node-fetch": "^2.6.7", - "node-forge": "^1.3.1", - "npm-package-arg": "^7.0.0", - "open": "^8.3.0", - "ora": "3.4.0", - "picomatch": "^3.0.1", - "pretty-bytes": "5.6.0", - "progress": "2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve": "^1.22.2", - "resolve-from": "^5.0.0", - "resolve.exports": "^2.0.2", - "semver": "^7.6.0", - "send": "^0.18.0", - "slugify": "^1.3.4", - "source-map-support": "~0.5.21", - "stacktrace-parser": "^0.1.10", - "structured-headers": "^0.4.1", - "tar": "^6.0.5", - "temp-dir": "^2.0.0", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "text-table": "^0.2.0", - "url-join": "4.0.0", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" + "application-config-path": "^0.1.0", + "command-exists": "^1.2.4", + "debug": "^3.1.0", + "eol": "^0.9.1", + "get-port": "^3.2.0", + "glob": "^10.4.2", + "lodash": "^4.17.21", + "mkdirp": "^0.5.1", + "password-prompt": "^1.0.4", + "sudo-prompt": "^8.2.0", + "tmp": "^0.0.33", + "tslib": "^2.4.0" + } + }, + "node_modules/@expo/devcert/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@expo/devcert/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@expo/devcert/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { - "expo-internal": "build/bin/cli" + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@expo/cli/node_modules/ansi-styles": { + "node_modules/@expo/devcert/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@expo/env": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", + "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", + "dependencies": { + "chalk": "^4.0.0", + "debug": "^4.3.4", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "getenv": "^1.0.0" + } + }, + "node_modules/@expo/env/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2215,7 +2068,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/cli/node_modules/chalk": { + "node_modules/@expo/env/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2230,7 +2083,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/cli/node_modules/color-convert": { + "node_modules/@expo/env/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2241,12 +2094,12 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/cli/node_modules/color-name": { + "node_modules/@expo/env/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/cli/node_modules/has-flag": { + "node_modules/@expo/env/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2254,18 +2107,7 @@ "node": ">=8" } }, - "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/cli/node_modules/supports-color": { + "node_modules/@expo/env/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2276,56 +2118,24 @@ "node": ">=8" } }, - "node_modules/@expo/code-signing-certificates": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", - "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", - "dependencies": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/@expo/config": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-9.0.4.tgz", - "integrity": "sha512-g5ns5u1JSKudHYhjo1zaSfkJ/iZIcWmUmIQptMJZ6ag1C0ShL2sj8qdfU8MmAMuKLOgcIfSaiWlQnm4X3VJVkg==", + "node_modules/@expo/image-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", + "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~8.0.8", - "@expo/config-types": "^51.0.3", - "@expo/json-file": "^8.3.0", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.0.0", + "fs-extra": "9.0.0", "getenv": "^1.0.0", - "glob": "7.1.6", - "require-from-string": "^2.0.2", + "jimp-compact": "0.16.1", + "node-fetch": "^2.6.0", + "parse-png": "^2.1.0", "resolve-from": "^5.0.0", "semver": "^7.6.0", - "slugify": "^1.3.4", - "sucrase": "3.34.0" + "tempy": "0.3.0" } }, - "node_modules/@expo/config-plugins": { - "version": "8.0.10", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-8.0.10.tgz", - "integrity": "sha512-KG1fnSKRmsudPU9BWkl59PyE0byrE2HTnqbOrgwr2FAhqh7tfr9nRs6A9oLS/ntpGzmFxccTEcsV0L4apsuxxg==", - "dependencies": { - "@expo/config-types": "^51.0.3", - "@expo/json-file": "~8.3.0", - "@expo/plist": "^0.1.0", - "@expo/sdk-runtime-versions": "^1.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.1", - "find-up": "~5.0.0", - "getenv": "^1.0.0", - "glob": "7.1.6", - "resolve-from": "^5.0.0", - "semver": "^7.5.4", - "slash": "^3.0.0", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/@expo/config-plugins/node_modules/ansi-styles": { + "node_modules/@expo/image-utils/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2339,7 +2149,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/config-plugins/node_modules/chalk": { + "node_modules/@expo/image-utils/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2354,7 +2164,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/config-plugins/node_modules/color-convert": { + "node_modules/@expo/image-utils/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2365,32 +2175,34 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/config-plugins/node_modules/color-name": { + "node_modules/@expo/image-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/config-plugins/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/@expo/image-utils/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@expo/image-utils/node_modules/fs-extra": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", + "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=10" } }, - "node_modules/@expo/config-plugins/node_modules/has-flag": { + "node_modules/@expo/image-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2398,7 +2210,26 @@ "node": ">=8" } }, - "node_modules/@expo/config-plugins/node_modules/semver": { + "node_modules/@expo/image-utils/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/image-utils/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", @@ -2409,7 +2240,7 @@ "node": ">=10" } }, - "node_modules/@expo/config-plugins/node_modules/supports-color": { + "node_modules/@expo/image-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2420,131 +2251,98 @@ "node": ">=8" } }, - "node_modules/@expo/config-types": { - "version": "51.0.3", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-51.0.3.tgz", - "integrity": "sha512-hMfuq++b8VySb+m9uNNrlpbvGxYc8OcFCUX9yTmi9tlx6A4k8SDabWFBgmnr4ao3wEArvWrtUQIfQCVtPRdpKA==" - }, - "node_modules/@expo/config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" + "node_modules/@expo/image-utils/node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "engines": { + "node": ">=4" } }, - "node_modules/@expo/config/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/@expo/image-utils/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/@expo/config/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@expo/image-utils/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/devcert": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", - "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", - "dependencies": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^10.4.2", - "lodash": "^4.17.21", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" + "node": ">=6" } }, - "node_modules/@expo/devcert/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@expo/image-utils/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dependencies": { - "balanced-match": "^1.0.0" + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" + "node_modules/@expo/image-utils/node_modules/universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/@expo/devcert/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/@expo/json-file": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", + "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@babel/code-frame": "~7.10.4", + "json5": "^2.2.2", + "write-file-atomic": "^2.3.0" } }, - "node_modules/@expo/devcert/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "@babel/highlight": "^7.10.4" } }, - "node_modules/@expo/env": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.3.0.tgz", - "integrity": "sha512-OtB9XVHWaXidLbHvrVDeeXa09yvTl3+IQN884sO6PhIi2/StXfgSH/9zC7IvzrDB8kW3EBJ1PPLuCUJ2hxAT7Q==", + "node_modules/@expo/metro-config": { + "version": "0.18.11", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.11.tgz", + "integrity": "sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==", "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "getenv": "^1.0.0" + "@babel/core": "^7.20.0", + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.20.0", + "@babel/types": "^7.20.0", + "@expo/config": "~9.0.0-beta.0", + "@expo/env": "~0.3.0", + "@expo/json-file": "~8.3.0", + "@expo/spawn-async": "^1.7.2", + "chalk": "^4.1.0", + "debug": "^4.3.2", + "find-yarn-workspace-root": "~2.0.0", + "fs-extra": "^9.1.0", + "getenv": "^1.0.0", + "glob": "^7.2.3", + "jsc-safe-url": "^0.2.4", + "lightningcss": "~1.19.0", + "postcss": "~8.4.32", + "resolve-from": "^5.0.0" } }, - "node_modules/@expo/env/node_modules/ansi-styles": { + "node_modules/@expo/metro-config/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2558,7 +2356,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/env/node_modules/chalk": { + "node_modules/@expo/metro-config/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2573,7 +2371,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/env/node_modules/color-convert": { + "node_modules/@expo/metro-config/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2584,12 +2382,26 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/env/node_modules/color-name": { + "node_modules/@expo/metro-config/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/env/node_modules/has-flag": { + "node_modules/@expo/metro-config/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==", + "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/@expo/metro-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2597,7 +2409,18 @@ "node": ">=8" } }, - "node_modules/@expo/env/node_modules/supports-color": { + "node_modules/@expo/metro-config/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@expo/metro-config/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2608,24 +2431,54 @@ "node": ">=8" } }, - "node_modules/@expo/image-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.5.1.tgz", - "integrity": "sha512-U/GsFfFox88lXULmFJ9Shfl2aQGcwoKPF7fawSCLixIKtMCpsI+1r0h+5i0nQnmt9tHuzXZDL8+Dg1z6OhkI9A==", + "node_modules/@expo/metro-config/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/metro-runtime": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.3.tgz", + "integrity": "sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==", + "peerDependencies": { + "react-native": "*" + } + }, + "node_modules/@expo/osascript": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.3.tgz", + "integrity": "sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA==", + "dependencies": { + "@expo/spawn-async": "^1.7.2", + "exec-async": "^2.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@expo/package-manager": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.5.2.tgz", + "integrity": "sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA==", "dependencies": { + "@expo/json-file": "^8.3.0", "@expo/spawn-async": "^1.7.2", + "ansi-regex": "^5.0.0", "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "node-fetch": "^2.6.0", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "tempy": "0.3.0" + "find-up": "^5.0.0", + "find-yarn-workspace-root": "~2.0.0", + "js-yaml": "^3.13.1", + "micromatch": "^4.0.2", + "npm-package-arg": "^7.0.0", + "ora": "^3.4.0", + "split": "^1.0.1", + "sudo-prompt": "9.1.1" } }, - "node_modules/@expo/image-utils/node_modules/ansi-styles": { + "node_modules/@expo/package-manager/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2639,7 +2492,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/image-utils/node_modules/chalk": { + "node_modules/@expo/package-manager/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2654,7 +2507,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/image-utils/node_modules/color-convert": { + "node_modules/@expo/package-manager/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2665,42 +2518,81 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/image-utils/node_modules/color-name": { + "node_modules/@expo/package-manager/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/image-utils/node_modules/crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "node_modules/@expo/package-manager/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@expo/image-utils/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", + "node_modules/@expo/package-manager/node_modules/sudo-prompt": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", + "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" + }, + "node_modules/@expo/package-manager/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@expo/plist": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", + "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", + "dependencies": { + "@xmldom/xmldom": "~0.7.7", + "base64-js": "^1.2.3", + "xmlbuilder": "^14.0.0" + } + }, + "node_modules/@expo/prebuild-config": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.9.tgz", + "integrity": "sha512-9i6Cg7jInpnGEHN0jxnW0P+0BexnePiBzmbUvzSbRXpdXihYUX2AKMu73jgzxn5P1hXOSkzNS7umaY+BZ+aBag==", + "dependencies": { + "@expo/config": "~9.0.0-beta.0", + "@expo/config-plugins": "~8.0.8", + "@expo/config-types": "^51.0.3", + "@expo/image-utils": "^0.5.0", + "@expo/json-file": "^8.3.0", + "@react-native/normalize-colors": "0.74.85", + "debug": "^4.3.1", + "fs-extra": "^9.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.6.0", + "xml2js": "0.6.0" + }, + "peerDependencies": { + "expo-modules-autolinking": ">=0.8.1" + } + }, + "node_modules/@expo/prebuild-config/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==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", - "universalify": "^1.0.0" + "universalify": "^2.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/@expo/image-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@expo/image-utils/node_modules/jsonfile": { + "node_modules/@expo/prebuild-config/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", @@ -2711,15 +2603,7 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/semver": { + "node_modules/@expo/prebuild-config/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", @@ -2730,76 +2614,81 @@ "node": ">=10" } }, - "node_modules/@expo/image-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@expo/prebuild-config/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@expo/rudder-sdk-node": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", + "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", "dependencies": { - "has-flag": "^4.0.0" + "@expo/bunyan": "^4.0.0", + "@segment/loosely-validate-event": "^2.0.0", + "fetch-retry": "^4.1.1", + "md5": "^2.2.1", + "node-fetch": "^2.6.1", + "remove-trailing-slash": "^0.1.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/@expo/image-utils/node_modules/temp-dir": { + "node_modules/@expo/sdk-runtime-versions": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", + "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" }, - "node_modules/@expo/image-utils/node_modules/tempy": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", - "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "node_modules/@expo/server": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.4.4.tgz", + "integrity": "sha512-q9ADBzMN5rZ/fgQ2mz5YIJuZ8gelQlhG2CQqToD+UvBLZvbaHCNxTTSs2KI1LzJvAaW5CWgWMatGvGF6iUQ0LA==", "dependencies": { - "temp-dir": "^1.0.0", - "type-fest": "^0.3.1", - "unique-string": "^1.0.0" - }, - "engines": { - "node": ">=8" + "@remix-run/node": "^2.7.2", + "abort-controller": "^3.0.0", + "debug": "^4.3.4", + "source-map-support": "~0.5.21" } }, - "node_modules/@expo/image-utils/node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "node_modules/@expo/spawn-async": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", + "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "dependencies": { + "cross-spawn": "^7.0.3" + }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/@expo/image-utils/node_modules/unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "node_modules/@expo/vector-icons": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz", + "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==", "dependencies": { - "crypto-random-string": "^1.0.0" - }, - "engines": { - "node": ">=4" + "prop-types": "^15.8.1" } }, - "node_modules/@expo/image-utils/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/json-file": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-8.3.3.tgz", - "integrity": "sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A==", + "node_modules/@expo/xcpretty": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", + "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.2", - "write-file-atomic": "^2.3.0" + "@babel/code-frame": "7.10.4", + "chalk": "^4.1.0", + "find-up": "^5.0.0", + "js-yaml": "^4.1.0" + }, + "bin": { + "excpretty": "build/cli.js" } }, - "node_modules/@expo/json-file/node_modules/@babel/code-frame": { + "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", @@ -2807,32 +2696,7 @@ "@babel/highlight": "^7.10.4" } }, - "node_modules/@expo/metro-config": { - "version": "0.18.11", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.18.11.tgz", - "integrity": "sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.5", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "@expo/config": "~9.0.0-beta.0", - "@expo/env": "~0.3.0", - "@expo/json-file": "~8.3.0", - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "find-yarn-workspace-root": "~2.0.0", - "fs-extra": "^9.1.0", - "getenv": "^1.0.0", - "glob": "^7.2.3", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.19.0", - "postcss": "~8.4.32", - "resolve-from": "^5.0.0" - } - }, - "node_modules/@expo/metro-config/node_modules/ansi-styles": { + "node_modules/@expo/xcpretty/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2846,7 +2710,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/metro-config/node_modules/chalk": { + "node_modules/@expo/xcpretty/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@expo/xcpretty/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -2861,7 +2730,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/metro-config/node_modules/color-convert": { + "node_modules/@expo/xcpretty/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2872,26 +2741,12 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/metro-config/node_modules/color-name": { + "node_modules/@expo/xcpretty/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/@expo/metro-config/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==", - "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/@expo/metro-config/node_modules/has-flag": { + "node_modules/@expo/xcpretty/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -2899,18 +2754,18 @@ "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/@expo/xcpretty/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { - "universalify": "^2.0.0" + "argparse": "^2.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@expo/metro-config/node_modules/supports-color": { + "node_modules/@expo/xcpretty/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -2921,275 +2776,266 @@ "node": ">=8" } }, - "node_modules/@expo/metro-config/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/metro-runtime": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/@expo/metro-runtime/-/metro-runtime-3.2.3.tgz", - "integrity": "sha512-v5ji+fAGi7B9YavrxvekuF8gXEV/5fz0+PhaED5AaFDnbGB4IJIbpaiqK9nqZV1axjGZNQSw6Q8TsnFetCR3bQ==", + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", "peerDependencies": { - "react-native": "*" + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" } }, - "node_modules/@expo/osascript": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.3.tgz", - "integrity": "sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA==", + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "dependencies": { - "@expo/spawn-async": "^1.7.2", - "exec-async": "^2.2.0" - }, - "engines": { - "node": ">=12" + "@hapi/hoek": "^9.0.0" } }, - "node_modules/@expo/package-manager": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.5.2.tgz", - "integrity": "sha512-IuA9XtGBilce0q8cyxtWINqbzMB1Fia0Yrug/O53HNuRSwQguV/iqjV68bsa4z8mYerePhcFgtvISWLAlNEbUA==", - "dependencies": { - "@expo/json-file": "^8.3.0", - "@expo/spawn-async": "^1.7.2", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "find-yarn-workspace-root": "~2.0.0", - "js-yaml": "^3.13.1", - "micromatch": "^4.0.2", - "npm-package-arg": "^7.0.0", - "ora": "^3.4.0", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" + "node_modules/@hookform/resolvers": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz", + "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==", + "peerDependencies": { + "react-hook-form": "^7.0.0" } }, - "node_modules/@expo/package-manager/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.10.0" } }, - "node_modules/@expo/package-manager/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, "engines": { - "node": ">=10" + "node": ">=12.22" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@expo/package-manager/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { - "color-name": "~1.1.4" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/@expo/package-manager/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/@expo/package-manager/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/package-manager/node_modules/sudo-prompt": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", - "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==" + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/@expo/package-manager/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "has-flag": "^4.0.0" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/plist": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.1.3.tgz", - "integrity": "sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg==", - "dependencies": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "node_modules/@expo/prebuild-config": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-7.0.9.tgz", - "integrity": "sha512-9i6Cg7jInpnGEHN0jxnW0P+0BexnePiBzmbUvzSbRXpdXihYUX2AKMu73jgzxn5P1hXOSkzNS7umaY+BZ+aBag==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { - "@expo/config": "~9.0.0-beta.0", - "@expo/config-plugins": "~8.0.8", - "@expo/config-types": "^51.0.3", - "@expo/image-utils": "^0.5.0", - "@expo/json-file": "^8.3.0", - "@react-native/normalize-colors": "0.74.85", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "xml2js": "0.6.0" + "ansi-regex": "^6.0.1" }, - "peerDependencies": { - "expo-modules-autolinking": ">=0.8.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@expo/prebuild-config/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==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/prebuild-config/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" + "node": ">=12" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@expo/prebuild-config/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/@expo/rudder-sdk-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", - "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==" - }, - "node_modules/@expo/server": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@expo/server/-/server-0.4.4.tgz", - "integrity": "sha512-q9ADBzMN5rZ/fgQ2mz5YIJuZ8gelQlhG2CQqToD+UvBLZvbaHCNxTTSs2KI1LzJvAaW5CWgWMatGvGF6iUQ0LA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { - "@remix-run/node": "^2.7.2", - "abort-controller": "^3.0.0", - "debug": "^4.3.4", - "source-map-support": "~0.5.21" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@expo/spawn-async": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", - "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { - "cross-spawn": "^7.0.3" + "p-try": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@expo/vector-icons": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz", - "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { - "prop-types": "^15.8.1" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@expo/xcpretty": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.1.tgz", - "integrity": "sha512-sqXgo1SCv+j4VtYEwl/bukuOIBrVgx6euIoCat3Iyx5oeoXwEA2USCoeL0IPubflMxncA2INkqJ/Wr3NGrSgzw==", - "dependencies": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "bin": { - "excpretty": "build/cli.js" + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@expo/xcpretty/node_modules/ansi-styles": { + "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3200,15 +3046,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@expo/xcpretty/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@expo/xcpretty/node_modules/chalk": { + "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3220,10 +3062,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@expo/xcpretty/node_modules/color-convert": { + "node_modules/@jest/console/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3231,34 +3074,26 @@ "node": ">=7.0.0" } }, - "node_modules/@expo/xcpretty/node_modules/color-name": { + "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/@expo/xcpretty/node_modules/has-flag": { + "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/@expo/xcpretty/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@expo/xcpretty/node_modules/supports-color": { + "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3266,227 +3101,54 @@ "node": ">=8" } }, - "node_modules/@graphql-typed-document-node/core": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", - "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", - "peerDependencies": { - "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@hookform/resolvers": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz", - "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==", - "peerDependencies": { - "react-hook-form": "^7.0.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { + "node_modules/@jest/core": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", "jest-util": "^29.7.0", - "slash": "^3.0.0" + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@jest/console/node_modules/ansi-styles": { + "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -3501,7 +3163,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/console/node_modules/chalk": { + "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -3517,7 +3179,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/console/node_modules/color-convert": { + "node_modules/@jest/core/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -3529,13 +3191,13 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/console/node_modules/color-name": { + "node_modules/@jest/core/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/@jest/console/node_modules/has-flag": { + "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -3544,135 +3206,18 @@ "node": ">=8" } }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { @@ -4258,6 +3803,18 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@radix-ui/react-compose-refs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", @@ -6556,6 +6113,12 @@ "node": ">=10" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@segment/loosely-validate-event": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", @@ -6729,6 +6292,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/node": { "version": "18.19.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.55.tgz", @@ -6749,13 +6318,13 @@ "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "devOptional": true + "dev": true }, "node_modules/@types/react": { "version": "18.2.79", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.79.tgz", "integrity": "sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w==", - "devOptional": true, + "dev": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -6785,6 +6354,12 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@urql/core": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/@urql/core/-/core-2.3.6.tgz", @@ -6859,9 +6434,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -6879,6 +6454,15 @@ "acorn-walk": "^8.0.2" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", @@ -7089,6 +6673,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -7097,6 +6701,98 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", @@ -7343,41 +7039,105 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "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==", + "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "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-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "node_modules/babel-plugin-module-resolver/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "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==", + "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } }, "node_modules/babel-plugin-react-compiler": { "version": "0.0.0-experimental-592953e-20240517", @@ -8222,6 +7982,11 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, "node_modules/connect": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", @@ -8523,7 +8288,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true + "dev": true }, "node_modules/dag-map": { "version": "1.0.2", @@ -8665,6 +8430,12 @@ "node": ">=4.0.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -8709,9 +8480,488 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.6", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", + "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "dependencies": { + "dotenv": "^16.4.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.36", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.36.tgz", + "integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-editor": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", + "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz", + "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8720,456 +8970,555 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/escodegen/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==", + "dev": true, + "optional": true, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==" + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, "engines": { - "node": ">= 0.8" + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "bin": { - "detect-libc": "bin/detect-libc.js" + "eslint-config-prettier": "bin/cli.js" }, - "engines": { - "node": ">=0.10" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/eslint-import-resolver-babel-module": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-babel-module/-/eslint-import-resolver-babel-module-5.3.2.tgz", + "integrity": "sha512-K7D8n0O6p/JJncPote8yiuB7chJfu26Yn/Q3gzT53cNzJNS0NUCkI0iuimj4/vWVRHVQvPnYWeq07V8RvKjz/A==", "dev": true, + "dependencies": { + "pkg-up": "^3.1.0", + "resolve": "^1.20.0" + }, "engines": { - "node": ">=8" + "node": ">=10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "babel-plugin-module-resolver": "^3.0.0 || ^4.0.0 || ^5.0.0" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" + "ms": "^2.1.1" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "debug": "^3.2.7" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true } - ] + } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" + "ms": "^2.1.1" } }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, "dependencies": { - "domelementtype": "^2.3.0" + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" }, "engines": { - "node": ">= 4" + "node": ">=4" }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "ms": "^2.1.1" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" }, - "funding": { - "url": "https://dotenvx.com" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/dotenv-expand": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", - "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, "dependencies": { - "dotenv": "^16.4.4" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">=12" + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://dotenvx.com" + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.36", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.36.tgz", - "integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "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==", + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { - "once": "^1.4.0" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "bin": { - "envinfo": "dist/cli.js" + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "stackframe": "^1.3.4" + "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/errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.2.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=7.0.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "dependencies": { - "es-errors": "^1.3.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 0.4" + "node": ">=10.13.0" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "type-fest": "^0.20.2" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" + "argparse": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/eslint/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==", + "dev": true + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -9177,35 +9526,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=6.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/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==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -9220,6 +9555,30 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -9233,6 +9592,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -9817,6 +10177,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -9838,6 +10204,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "node_modules/fast-loops": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.4.tgz", @@ -9917,6 +10289,18 @@ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==" }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -9966,6 +10350,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "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==", + "dev": true, + "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", @@ -10089,6 +10482,26 @@ "micromatch": "^4.0.2" } }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/flow-enums-runtime": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", @@ -10439,6 +10852,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/graphql": { "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", @@ -10887,6 +11306,21 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -11001,6 +11435,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -11081,6 +11527,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -11170,6 +11628,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", @@ -11256,6 +11726,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -11267,6 +11749,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -11404,6 +11902,22 @@ "node": ">=8" } }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -13851,6 +14365,12 @@ "node": ">=6" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -13895,6 +14415,12 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -13914,6 +14440,30 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -13938,6 +14488,19 @@ "node": ">=6" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lighthouse-logger": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", @@ -14166,6 +14729,12 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", @@ -15338,23 +15907,85 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, "engines": { "node": ">= 0.4" } }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15417,6 +16048,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ora": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", @@ -15541,6 +16189,18 @@ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -15752,6 +16412,79 @@ "node": ">=8" } }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/plist": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", @@ -15829,6 +16562,42 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -16537,6 +17306,27 @@ "node": ">=0.10.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -16558,15 +17348,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", @@ -16669,6 +17450,12 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -17487,6 +18274,42 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -17721,6 +18544,22 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -18056,6 +18895,39 @@ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -18066,6 +18938,18 @@ "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==" }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -18177,7 +19061,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "devOptional": true, + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18352,6 +19236,15 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/url-join": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", @@ -18598,6 +19491,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", @@ -18626,6 +19569,15 @@ "resolved": "https://registry.npmjs.org/wonka/-/wonka-4.0.15.tgz", "integrity": "sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==" }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/mobile/tradeverse/package.json b/mobile/tradeverse/package.json index 9d4269dc..b1718c23 100644 --- a/mobile/tradeverse/package.json +++ b/mobile/tradeverse/package.json @@ -20,6 +20,9 @@ "@react-navigation/native": "^6.0.2", "@tabler/icons-react-native": "^3.19.0", "axios": "^1.7.7", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react-hooks": "^5.0.0", "expo": "~51.0.28", "expo-font": "~12.0.9", "expo-image-picker": "^15.0.7", @@ -43,8 +46,16 @@ "devDependencies": { "@babel/core": "^7.20.0", "@types/react": "~18.2.45", + "babel-plugin-module-resolver": "^5.0.2", + "eslint": "^8.57.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-import-resolver-babel-module": "^5.3.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.2", "jest": "^29.2.1", "jest-expo": "~51.0.3", + "prettier": "^3.3.3", "react-test-renderer": "18.2.0", "typescript": "~5.3.3" }, diff --git a/mobile/tradeverse/screens/account-profile/index.jsx b/mobile/tradeverse/screens/account-profile/index.jsx index f3ae48ce..8482b117 100644 --- a/mobile/tradeverse/screens/account-profile/index.jsx +++ b/mobile/tradeverse/screens/account-profile/index.jsx @@ -1,53 +1,54 @@ -import { View, Text } from "react-native"; -import React from "react"; -import GlobalScreen from "../../components/ui/global-screen"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import RHFTextArea from "../../components/inputs/RHFTextArea"; -import RHFTextField from "../../components/inputs/RHFTextField"; -import { FormProvider, useForm } from "react-hook-form"; -import { z } from "zod"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; -import ProfileImage from "../../components/images/profile-image"; -import { IconPencil } from "@tabler/icons-react-native"; -import { Stack } from "expo-router"; -import { useContext } from "react"; -import { AuthContext } from "../../auth/context"; +import { View, Text } from 'react-native' +import React from 'react' +import GlobalScreen from '../../components/ui/global-screen' +import FullScrollView from '../../components/ui/full-scroll-view' +import RHFTextArea from '../../components/inputs/RHFTextArea' +import RHFTextField from '../../components/inputs/RHFTextField' +import { FormProvider, useForm } from 'react-hook-form' +import { z } from 'zod' +import { zodResolver } from '@hookform/resolvers/zod' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import ProfileImage from '../../components/images/profile-image' +import { IconPencil } from '@tabler/icons-react-native' +import { Stack } from 'expo-router' +import { useContext } from 'react' +import { AuthContext } from '../../auth/context' export default function AccountProfileScreen() { const validationSchema = z.object({ - name: z.string().min(1, { message: "Bu alan gerekli." }), - description: z.string().min(1, { message: "Bu alan gerekli." }), - }); + name: z.string().min(1, { message: 'Bu alan gerekli.' }), + description: z.string().min(1, { message: 'Bu alan gerekli.' }), + }) const form = useForm({ defaultValues: { - name: "", - surname: "", - tag: "", - description: "", + name: '', + surname: '', + tag: '', + description: '', }, resolver: zodResolver(validationSchema), - }); + }) - const {user} = useContext(AuthContext); - + const { user } = useContext(AuthContext) return ( - + headerTitle: 'Profile Settings', + }} + /> - - - @{user?.username??'username'} + }} + > + + @{user?.username ?? 'username'} - - - + + + - ); + ) } diff --git a/mobile/tradeverse/screens/account-root/_components/account-option.jsx b/mobile/tradeverse/screens/account-root/_components/account-option.jsx index a5e32727..9853a3e2 100644 --- a/mobile/tradeverse/screens/account-root/_components/account-option.jsx +++ b/mobile/tradeverse/screens/account-root/_components/account-option.jsx @@ -1,7 +1,7 @@ -import React from "react"; -import { useRouter } from "expo-router"; -import { StyleSheet, Text, TouchableOpacity, View } from "react-native"; -import { COLORS, SIZES } from "../../../constants/theme"; +import React from 'react' +import { useRouter } from 'expo-router' +import { StyleSheet, Text, TouchableOpacity, View } from 'react-native' +import { COLORS, SIZES } from '../../../constants/theme' export default function ProfileOption({ icon = () => null, @@ -11,17 +11,17 @@ export default function ProfileOption({ disabled = false, isLastOption = false, }) { - const router = useRouter(); + const router = useRouter() const handlePress = () => { - if (action) action(); - else router.push(route); - }; + if (action) action() + else router.push(route) + } return ( - ); + ) } const styles = StyleSheet.create({ container: { - flexDirection: "row", - justifyContent: "space-between", + flexDirection: 'row', + justifyContent: 'space-between', gap: SIZES.xxSmall, }, leftContainer: { - flexDirection: "row", - alignItems: "center", + flexDirection: 'row', + alignItems: 'center', }, rightContainer: { - flexBasis: "100%", + flexBasis: '100%', borderBottomWidth: 1, - borderBottomColor: "#EEEEEE", + borderBottomColor: '#EEEEEE', paddingVertical: SIZES.medium, }, optionText: { fontSize: SIZES.small, - color: "#000", + color: '#000', }, -}); +}) diff --git a/mobile/tradeverse/screens/account-root/_components/top-profile-info.jsx b/mobile/tradeverse/screens/account-root/_components/top-profile-info.jsx index d91e7181..7104a901 100644 --- a/mobile/tradeverse/screens/account-root/_components/top-profile-info.jsx +++ b/mobile/tradeverse/screens/account-root/_components/top-profile-info.jsx @@ -1,64 +1,63 @@ -import { router } from "expo-router"; -import React, { useContext, useEffect } from "react"; -import { IconChevronRight } from "@tabler/icons-react-native"; -import { Alert, Pressable, StyleSheet, Text, TouchableOpacity, View } from "react-native"; +import { router } from 'expo-router' +import React, { useContext, useEffect } from 'react' +import { IconChevronRight } from '@tabler/icons-react-native' +import { + Alert, + Pressable, + StyleSheet, + Text, + TouchableOpacity, + View, +} from 'react-native' import { SIZES, COLORS, SIZE_CONSTANT, FONT_WEIGHTS, -} from "../../../constants/theme"; -import ProfileImage from "../../../components/images/profile-image"; -import paths from "../../../config/screen-paths"; -import { AuthContext } from "../../../auth/context"; +} from '../../../constants/theme' +import ProfileImage from '../../../components/images/profile-image' +import paths from '../../../config/screen-paths' +import { AuthContext } from '../../../auth/context' export default function ProfileInfo() { - - const {user} = useContext(AuthContext); + const { user } = useContext(AuthContext) - useEffect(()=>{ - console.log('===================================='); - console.log(user); - console.log('===================================='); - },[user]); return ( { - router.navigate(paths.ACCOUNT.PROFILE); + router.navigate(paths.ACCOUNT.PROFILE) }} > - + - - {user?.name} - + {user?.name} @{user?.username} - ); + ) } const styles = StyleSheet.create({ container: { - flexDirection: "row", + flexDirection: 'row', gap: SIZES.xSmall, marginBottom: SIZE_CONSTANT * 6, }, chevronContainer: { flex: 1, - alignItems: "flex-end", - justifyContent: "center", + alignItems: 'flex-end', + justifyContent: 'center', }, leftContainer: { - flexDirection: "row", - alignItems: "center", + flexDirection: 'row', + alignItems: 'center', }, avatar: { width: SIZE_CONSTANT * 3.6, @@ -66,9 +65,9 @@ const styles = StyleSheet.create({ borderRadius: SIZE_CONSTANT * 4, }, rightContainer: { - display: "flex", - flexDirection: "column", - justifyContent: "center", + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', }, nameText: { fontSize: SIZES.medium, @@ -79,4 +78,4 @@ const styles = StyleSheet.create({ fontSize: SIZES.xSmall, color: COLORS.graytext, }, -}); +}) diff --git a/mobile/tradeverse/screens/account-root/index.jsx b/mobile/tradeverse/screens/account-root/index.jsx index 0b640cdb..996a482e 100644 --- a/mobile/tradeverse/screens/account-root/index.jsx +++ b/mobile/tradeverse/screens/account-root/index.jsx @@ -1,15 +1,15 @@ -import React, { useContext } from "react"; -import { StyleSheet, Text, View } from "react-native"; -import ProfileOption from "./_components/account-option"; -import ProfileConfig from "./profile-config"; -import ProfileInfo from "./_components/top-profile-info"; -import GlobalScreen from "../../components/ui/global-screen"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import { AuthContext } from "../../auth/context"; +import React, { useContext } from 'react' +import { StyleSheet, Text, View } from 'react-native' +import ProfileOption from './_components/account-option' +import ProfileConfig from './profile-config' +import ProfileInfo from './_components/top-profile-info' +import GlobalScreen from '../../components/ui/global-screen' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import FullScrollView from '../../components/ui/full-scroll-view' +import { AuthContext } from '../../auth/context' export default function AccountRootScreen() { - const { logout } = useContext(AuthContext); + const { logout } = useContext(AuthContext) return ( @@ -25,14 +25,14 @@ export default function AccountRootScreen() { text={option.title} icon={option.icon} route={option.href} - action={option.value === "logout" ? logout : option.action} + action={option.value === 'logout' ? logout : option.action} /> ))} ))} - ); + ) } const styles = StyleSheet.create({ @@ -43,4 +43,4 @@ const styles = StyleSheet.create({ fontSize: SIZE_CONSTANT * 1, color: COLORS.graytext, }, -}); +}) diff --git a/mobile/tradeverse/screens/account-root/profile-config.js b/mobile/tradeverse/screens/account-root/profile-config.js index 9c7d2bfd..057846ac 100644 --- a/mobile/tradeverse/screens/account-root/profile-config.js +++ b/mobile/tradeverse/screens/account-root/profile-config.js @@ -1,4 +1,5 @@ /* eslint-disable react/jsx-props-no-spreading */ +import React from 'react' import { IconBookmark, IconCoins, @@ -7,17 +8,16 @@ import { IconTextCaption, IconUser, IconUserDown, - IconUserUp -} from '@tabler/icons-react-native'; -import { COLORS } from '../../constants/theme'; -import { SIZE_CONSTANT } from '../../constants/theme'; -import paths from '../../config/screen-paths'; + IconUserUp, +} from '@tabler/icons-react-native' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import paths from '../../config/screen-paths' const defaultIconProps = { strokeWidth: 1, color: COLORS.primary600, - size: SIZE_CONSTANT * 2.2 -}; + size: SIZE_CONSTANT * 2.2, +} const ProfileConfig = { sections: { @@ -28,28 +28,28 @@ const ProfileConfig = { value: 'my_profile', title: 'My Profile', icon: , - href: paths.ACCOUNT.PROFILE + href: paths.ACCOUNT.PROFILE, }, { - value:'portfolio', + value: 'portfolio', title: 'Portfolio', icon: , - href: paths.ACCOUNT.PORTFOLIO + href: paths.ACCOUNT.PORTFOLIO, }, { value: 'followed_topics', title: 'Followed Topics', icon: , - href: paths.ACCOUNT.FOLLOWED_TOPICS + href: paths.ACCOUNT.FOLLOWED_TOPICS, }, { value: 'my_posts', title: 'My Posts', icon: , href: '#', - disabled: true - } - ] + disabled: true, + }, + ], }, social: { title: 'Social', @@ -59,17 +59,17 @@ const ProfileConfig = { title: 'Followers', icon: , href: '#', - disabled: true + disabled: true, }, { value: 'my_following', title: 'Followings', icon: , href: paths.ACCOUNT.FOLLOWED_USERS, - } - ] + }, + ], }, - + settings: { title: 'Settings', options: [ @@ -78,17 +78,17 @@ const ProfileConfig = { title: 'Change Password', icon: , href: '#', - disabled: true + disabled: true, }, { value: 'logout', title: 'Log Out', icon: , - action: () => {} - } - ] - } - } -}; + action: () => {}, + }, + ], + }, + }, +} -export default ProfileConfig; +export default ProfileConfig diff --git a/mobile/tradeverse/screens/add-asset/index.jsx b/mobile/tradeverse/screens/add-asset/index.jsx index 31089e9d..531623b0 100644 --- a/mobile/tradeverse/screens/add-asset/index.jsx +++ b/mobile/tradeverse/screens/add-asset/index.jsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React, { useState } from 'react' import { View, TextInput, @@ -8,58 +8,56 @@ import { StyleSheet, Alert, Platform, -} from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import { Stack } from "expo-router"; +} from 'react-native' +import { Stack } from 'expo-router' +import GlobalScreen from '../../components/ui/global-screen' export default function AddAssetScreen() { // Sample list of assets - const assets = ["BTC", "ETH", "BNB", "ADA", "SOL", "XRP", "BCH"]; + const assets = ['BTC', 'ETH', 'BNB', 'ADA', 'SOL', 'XRP', 'BCH'] - const [input, setInput] = useState(""); - const [amount, setAmount] = useState(""); - const [filteredAssets, setFilteredAssets] = useState([]); + const [input, setInput] = useState('') + const [amount, setAmount] = useState('') + const [filteredAssets, setFilteredAssets] = useState([]) // Handle input change and filter suggestions const handleInputChange = (text) => { - setInput(text); + setInput(text) if (text) { const filtered = assets.filter((asset) => asset.toLowerCase().startsWith(text.toLowerCase()) - ); - setFilteredAssets(filtered); + ) + setFilteredAssets(filtered) } else { - setFilteredAssets([]); + setFilteredAssets([]) } - }; + } // Handle asset selection const handleSelectAsset = (asset) => { - setInput(asset); - setFilteredAssets([]); // Hide suggestions once selected - }; + setInput(asset) + setFilteredAssets([]) // Hide suggestions once selected + } // Handle Add to Portfolio with platform-specific alert const handleAddToPortfolio = () => { - - const alertFunction = Platform.OS === "web" ? window.alert : Alert.alert; + const alertFunction = Platform.OS === 'web' ? window.alert : Alert.alert if (!amount || isNaN(amount)) { // Popup alert when amount is not entered or is invalid alertFunction( - "You cannot add without entering a valid amount.", - "You cannot add without entering a valid amount." - ); - return; + 'You cannot add without entering a valid amount.', + 'You cannot add without entering a valid amount.' + ) } - }; + } return ( @@ -104,15 +102,15 @@ export default function AddAssetScreen() { - ); + ) } const styles = StyleSheet.create({ container: {}, title: { fontSize: 20, - fontWeight: "bold", - textAlign: "center", + fontWeight: 'bold', + textAlign: 'center', marginBottom: 20, }, label: { @@ -121,7 +119,7 @@ const styles = StyleSheet.create({ }, input: { height: 40, - borderColor: "#ccc", + borderColor: '#ccc', borderWidth: 1, paddingHorizontal: 10, marginBottom: 10, @@ -129,18 +127,18 @@ const styles = StyleSheet.create({ suggestion: { padding: 10, borderBottomWidth: 1, - borderBottomColor: "#ddd", - backgroundColor: "#ffffff", // Light background color for suggestion + borderBottomColor: '#ddd', + backgroundColor: '#ffffff', // Light background color for suggestion }, button: { - backgroundColor: "#7b61ff", + backgroundColor: '#7b61ff', padding: 15, - alignItems: "center", + alignItems: 'center', borderRadius: 5, marginTop: 20, }, buttonText: { - color: "#fff", + color: '#fff', fontSize: 16, }, -}); +}) diff --git a/mobile/tradeverse/screens/asset-detail/index.jsx b/mobile/tradeverse/screens/asset-detail/index.jsx index f11a3e0f..8849e5c1 100644 --- a/mobile/tradeverse/screens/asset-detail/index.jsx +++ b/mobile/tradeverse/screens/asset-detail/index.jsx @@ -1,41 +1,37 @@ -import React, { useEffect, useState } from "react"; -import { View, Text, StyleSheet, Image } from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import { IconCaretDown, IconCaretDownFilled } from "@tabler/icons-react-native"; -import { COLORS, SIZE_CONSTANT, SIZES } from "../../constants/theme"; -import { Stack, useLocalSearchParams } from "expo-router"; -import { getAssetById } from "../../mock-services/assets"; -import ContentImage from "../../components/images/content-image"; +import React, { useEffect, useState } from 'react' +import { View, Text, StyleSheet, Image } from 'react-native' +import { IconCaretDown, IconCaretDownFilled } from '@tabler/icons-react-native' +import { Stack, useLocalSearchParams } from 'expo-router' +import GlobalScreen from '../../components/ui/global-screen' +import { COLORS, SIZE_CONSTANT, SIZES } from '../../constants/theme' +import { getAssetById } from '../../mock-services/assets' +import ContentImage from '../../components/images/content-image' const AssetDisplay = () => { // State to store selected currency - const [selectedCurrency, setSelectedCurrency] = useState("USD"); + const [selectedCurrency, setSelectedCurrency] = useState('USD') - const [asset, setAsset] = useState(null); + const [asset, setAsset] = useState(null) // Currency conversion (for simplicity, using static values) const currencyRates = { USD: 1, EUR: 0.85, GBP: 0.74, - }; + } - const { assetId } = useLocalSearchParams(); + const { assetId } = useLocalSearchParams() useEffect(() => { - console.log('===================================='); - console.log('===================================='); - const res = getAssetById(assetId); - console.log('===================================='); - console.log('===================================='); - setAsset({...res,value: Math.floor(Math.random() * 10000)}); - }, [assetId]); + const res = getAssetById(assetId) + setAsset({ ...res, value: Math.floor(Math.random() * 10000) }) + }, [assetId]) return ( @@ -58,7 +54,7 @@ const AssetDisplay = () => { { )} - ); -}; + ) +} const styles = StyleSheet.create({ container: { - backgroundColor: "#fff", - justifyContent: "center", + backgroundColor: '#fff', + justifyContent: 'center', }, row: { - flexDirection: "row", - alignItems: "center", - justifyContent: "space-between", - backgroundColor: "#fff", + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + backgroundColor: '#fff', padding: 10, borderRadius: 10, marginBottom: 20, @@ -92,42 +88,42 @@ const styles = StyleSheet.create({ borderRadius: 20, }, assetText: { - fontSize:SIZE_CONSTANT * 2.4, + fontSize: SIZE_CONSTANT * 2.4, }, assetInfo: { - flexDirection: "row", - alignItems: "center", + flexDirection: 'row', + alignItems: 'center', flexGrow: 1, - justifyContent: "flex-end", + justifyContent: 'flex-end', }, valueText: { fontSize: 24, marginRight: 10, - fontWeight: "bold", // Make text bold - color: "purple", // Change text color to purple + fontWeight: 'bold', // Make text bold + color: 'purple', // Change text color to purple }, pickerContainer: { - backgroundColor: "#000000", // Updated to a consistent green color - borderColor: "#ccc", + backgroundColor: '#000000', // Updated to a consistent green color + borderColor: '#ccc', borderWidth: 1, borderRadius: 5, height: 40, width: 40, // Adjusted the width to provide more space for currency options - justifyContent: "center", + justifyContent: 'center', }, picker: { height: 40, - width: "100%", - color: "#000", // Text color white for contrast on green background + width: '100%', + color: '#000', // Text color white for contrast on green background }, imageContainer: { - alignItems: "center", + alignItems: 'center', marginTop: 20, }, graphImage: { - width: "100%", + width: '100%', height: 300, }, -}); +}) -export default AssetDisplay; +export default AssetDisplay diff --git a/mobile/tradeverse/screens/auth/login.jsx b/mobile/tradeverse/screens/auth/login.jsx index 5f3542ee..bb12ef20 100644 --- a/mobile/tradeverse/screens/auth/login.jsx +++ b/mobile/tradeverse/screens/auth/login.jsx @@ -1,44 +1,49 @@ -import React from 'react'; -import { View, Text, TextInput, TouchableOpacity, StyleSheet, Image } from 'react-native'; +import React from 'react' +import { + View, + Text, + TextInput, + TouchableOpacity, + StyleSheet, + Image, +} from 'react-native' -const LoginScreen = () => { - return ( - - {/* Logo */} - Tradeverse +const LoginScreen = () => ( + + {/* Logo */} + Tradeverse - {/* Email Input */} - + {/* Email Input */} + - {/* Password Input */} - + {/* Password Input */} + - {/* Login Button */} - - Login - + {/* Login Button */} + + Login + - {/* Register Link */} - - Register - + {/* Register Link */} + + Register + - {/* Forgot Password Section - replacing OR */} - - Forget Password? - - - ); -}; + {/* Forgot Password Section - replacing OR */} + + Forget Password? + + +) const styles = StyleSheet.create({ container: { @@ -90,6 +95,6 @@ const styles = StyleSheet.create({ fontSize: 16, fontWeight: 'bold', }, -}); +}) -export default LoginScreen; +export default LoginScreen diff --git a/mobile/tradeverse/screens/auth/register.jsx b/mobile/tradeverse/screens/auth/register.jsx index 3535248a..25eda0ed 100644 --- a/mobile/tradeverse/screens/auth/register.jsx +++ b/mobile/tradeverse/screens/auth/register.jsx @@ -1,58 +1,59 @@ -import React from 'react'; -import { View, Text, TextInput, TouchableOpacity, StyleSheet } from 'react-native'; +import React from 'react' +import { + View, + Text, + TextInput, + TouchableOpacity, + StyleSheet, +} from 'react-native' -const RegisterScreen = () => { - return ( - - {/* Logo */} - Tradeverse +const RegisterScreen = () => ( + + {/* Logo */} + Tradeverse - {/* Email Input */} - + {/* Email Input */} + + {/* Name Input */} + + {/* Surname Input */} + - {/* Name Input */} - + {/* Password Input */} + - {/* Surname Input */} - + {/* Sign-up Button */} + + Sign Up + - - {/* Password Input */} - - - {/* Sign-up Button */} - - Sign Up - - - {/* Already have an account - Sign In */} - - - Already have an account? Sign In - - - - ); -}; + {/* Already have an account - Sign In */} + + + Already have an account? Sign In + + + +) const styles = StyleSheet.create({ container: { @@ -99,6 +100,6 @@ const styles = StyleSheet.create({ signInLink: { fontWeight: 'bold', }, -}); +}) -export default RegisterScreen; +export default RegisterScreen diff --git a/mobile/tradeverse/screens/create-post/index.jsx b/mobile/tradeverse/screens/create-post/index.jsx index 57a03bcf..5988e590 100644 --- a/mobile/tradeverse/screens/create-post/index.jsx +++ b/mobile/tradeverse/screens/create-post/index.jsx @@ -1,42 +1,42 @@ -import { View, Text } from "react-native"; -import React from "react"; -import GlobalScreen from "../../components/ui/global-screen"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import RHFTextArea from "../../components/inputs/RHFTextArea"; -import RHFTextField from "../../components/inputs/RHFTextField"; -import { FormProvider, useForm } from "react-hook-form"; -import { z } from "zod"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { - COLORS, - FONT_WEIGHTS, - SIZE_CONSTANT, - SIZES, -} from "../../constants/theme"; -import { Stack } from "expo-router"; +import { View, Text } from 'react-native' +import React from 'react' +import { FormProvider, useForm } from 'react-hook-form' +import { z } from 'zod' +import { zodResolver } from '@hookform/resolvers/zod' +import { Stack } from 'expo-router' import { IconCaretDown, IconCaretDownFilled, IconImageInPicture, IconPaperclip, IconPhotoPlus, -} from "@tabler/icons-react-native"; -import MainButton from "../../components/buttons/main-button"; -import TextField from "../../components/inputs/TextField"; +} from '@tabler/icons-react-native' +import GlobalScreen from '../../components/ui/global-screen' +import FullScrollView from '../../components/ui/full-scroll-view' +import RHFTextArea from '../../components/inputs/RHFTextArea' +import RHFTextField from '../../components/inputs/RHFTextField' +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../constants/theme' +import MainButton from '../../components/buttons/main-button' +import TextField from '../../components/inputs/TextField' export default function CreatePostScreen() { const validationSchema = z.object({ - title: z.string().min(1, { message: "Bu alan gerekli." }), - content: z.string().min(1, { message: "Bu alan gerekli." }), - }); + title: z.string().min(1, { message: 'Bu alan gerekli.' }), + content: z.string().min(1, { message: 'Bu alan gerekli.' }), + }) const form = useForm({ defaultValues: { - title: "", - content: "", + title: '', + content: '', }, resolver: zodResolver(validationSchema), - }); + }) return ( @@ -44,13 +44,13 @@ export default function CreatePostScreen() { @@ -58,9 +58,9 @@ export default function CreatePostScreen() { @@ -71,7 +71,7 @@ export default function CreatePostScreen() { fontWeight: FONT_WEIGHTS.medium, }} > - Stock Market Trends & Future{" "} + Stock Market Trends & Future{' '} @@ -83,15 +83,14 @@ export default function CreatePostScreen() { > @@ -106,14 +105,14 @@ export default function CreatePostScreen() { /> - ); + ) } diff --git a/mobile/tradeverse/screens/create-root/index.jsx b/mobile/tradeverse/screens/create-root/index.jsx index d15d6185..ab6d3fa2 100644 --- a/mobile/tradeverse/screens/create-root/index.jsx +++ b/mobile/tradeverse/screens/create-root/index.jsx @@ -1,15 +1,15 @@ -import React from "react"; -import { StyleSheet, Text, View, TouchableOpacity } from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; -import FullScrollView from "../../components/ui/full-scroll-view"; +import React from 'react' +import { StyleSheet, Text, View, TouchableOpacity } from 'react-native' import { IconMessage, IconTextCaption, IconArrowRight, -} from "@tabler/icons-react-native"; -import { router } from "expo-router"; -import paths from "../../config/screen-paths"; +} from '@tabler/icons-react-native' +import { router } from 'expo-router' +import GlobalScreen from '../../components/ui/global-screen' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import FullScrollView from '../../components/ui/full-scroll-view' +import paths from '../../config/screen-paths' export default function CreateRootScreen() { return ( @@ -21,7 +21,7 @@ export default function CreateRootScreen() { { - router.push(paths.CREATE.ADD_POST); + router.push(paths.CREATE.ADD_POST) }} style={styles.button} > @@ -32,7 +32,7 @@ export default function CreateRootScreen() { { - router.push(paths.CREATE.ADD_SUBFORUM); + router.push(paths.CREATE.ADD_SUBFORUM) }} style={styles.button} > @@ -44,14 +44,14 @@ export default function CreateRootScreen() { - ); + ) } const styles = StyleSheet.create({ container: { flex: 1, - justifyContent: "space-between", - backgroundColor: "#fff", + justifyContent: 'space-between', + backgroundColor: '#fff', }, mainContent: { flex: 1, @@ -59,44 +59,44 @@ const styles = StyleSheet.create({ }, title: { fontSize: 22, - fontWeight: "bold", + fontWeight: 'bold', marginBottom: 20, - color: "#333", + color: '#333', }, button: { - flexDirection: "row", - alignItems: "center", - justifyContent: "space-between", + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', paddingVertical: 15, paddingHorizontal: 10, borderWidth: 1, - borderColor: "#EAEAEA", + borderColor: '#EAEAEA', borderRadius: 10, marginBottom: 15, }, buttonText: { fontSize: 16, - color: "#333", + color: '#333', flex: 1, marginLeft: 10, }, bottomNav: { - flexDirection: "row", - justifyContent: "space-around", - alignItems: "center", - backgroundColor: "#4B49F5", + flexDirection: 'row', + justifyContent: 'space-around', + alignItems: 'center', + backgroundColor: '#4B49F5', height: 60, }, navButton: { - justifyContent: "center", - alignItems: "center", + justifyContent: 'center', + alignItems: 'center', }, activeButton: { width: 50, height: 50, borderRadius: 25, - backgroundColor: "#624BF6", - justifyContent: "center", - alignItems: "center", + backgroundColor: '#624BF6', + justifyContent: 'center', + alignItems: 'center', }, -}); +}) diff --git a/mobile/tradeverse/screens/create-subforum/index.jsx b/mobile/tradeverse/screens/create-subforum/index.jsx index f8cdb98f..ed8cb342 100644 --- a/mobile/tradeverse/screens/create-subforum/index.jsx +++ b/mobile/tradeverse/screens/create-subforum/index.jsx @@ -1,57 +1,58 @@ -import { View, Text } from "react-native"; -import React from "react"; -import GlobalScreen from "../../components/ui/global-screen"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import RHFTextArea from "../../components/inputs/RHFTextArea"; -import RHFTextField from "../../components/inputs/RHFTextField"; -import { FormProvider, useForm } from "react-hook-form"; -import { z } from "zod"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { - COLORS, - FONT_WEIGHTS, - SIZE_CONSTANT, - SIZES, -} from "../../constants/theme"; -import { Stack } from "expo-router"; +import { View, Text } from 'react-native' +import React from 'react' +import { FormProvider, useForm } from 'react-hook-form' +import { z } from 'zod' +import { zodResolver } from '@hookform/resolvers/zod' +import { Stack } from 'expo-router' import { IconCaretDown, IconCaretDownFilled, IconImageInPicture, IconPaperclip, IconPhotoPlus, -} from "@tabler/icons-react-native"; -import MainButton from "../../components/buttons/main-button"; -import TextField from "../../components/inputs/TextField"; +} from '@tabler/icons-react-native' +import GlobalScreen from '../../components/ui/global-screen' +import FullScrollView from '../../components/ui/full-scroll-view' +import RHFTextArea from '../../components/inputs/RHFTextArea' +import RHFTextField from '../../components/inputs/RHFTextField' +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../constants/theme' +import MainButton from '../../components/buttons/main-button' +import TextField from '../../components/inputs/TextField' export default function CreateSubForumScreen() { const validationSchema = z.object({ - title: z.string().min(1, { message: "Bu alan gerekli." }), - content: z.string().min(1, { message: "Bu alan gerekli." }), - }); + title: z.string().min(1, { message: 'Bu alan gerekli.' }), + content: z.string().min(1, { message: 'Bu alan gerekli.' }), + }) const form = useForm({ defaultValues: { - title: "", - content: "", + title: '', + content: '', }, resolver: zodResolver(validationSchema), - }); + }) return ( @@ -74,15 +75,14 @@ export default function CreateSubForumScreen() { > @@ -128,5 +128,5 @@ export default function CreateSubForumScreen() { - ); + ) } diff --git a/mobile/tradeverse/screens/explore-root/_components/post-card.jsx b/mobile/tradeverse/screens/explore-root/_components/post-card.jsx index 8183b656..f18c96e6 100644 --- a/mobile/tradeverse/screens/explore-root/_components/post-card.jsx +++ b/mobile/tradeverse/screens/explore-root/_components/post-card.jsx @@ -1,158 +1,146 @@ -import { View, Text } from "react-native"; -import React from "react"; -import { - COLORS, - FONT_WEIGHTS, - SIZE_CONSTANT, - SIZES, -} from "../../../constants/theme"; -import ProfileImage from "../../../components/images/profile-image"; +import { View, Text } from 'react-native' +import React from 'react' import { IconEye, IconMessageCircle2, IconThumbDown, IconThumbUp, -} from "@tabler/icons-react-native"; -import UserLink from "../../../components/links/user-link"; -import SubforumLink from "../../../components/links/subforum-link"; -import PostLink from "../../../components/links/post-link"; -import paths from "../../../config/screen-paths"; +} from '@tabler/icons-react-native' +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../../constants/theme' +import ProfileImage from '../../../components/images/profile-image' +import UserLink from '../../../components/links/user-link' +import SubforumLink from '../../../components/links/subforum-link' +import PostLink from '../../../components/links/post-link' +import paths from '../../../config/screen-paths' -const AuthorInfo = ({ author }) => { - return ( - - - - - - ( + + + + - - {author.name} {author.surname} - - - @{author.username} - - + src={author.avatar} + /> - - ); -}; - -const SubforumInfo = ({ subforum }) => { - return ( - - {subforum.title} + {author.name} {author.surname} - - - ); -}; - -const TagText = ({ tag, index = 0, isLast = false }) => { - return ( - - {index === 0 ? "" : " "}@{tag.value} - - ); -}; - -const DefaultText = ({ text, index = 0 }) => { - return ( - - {index === 0 ? "" : " "} - {text.value} - - ); -}; - -const InteractionInfo = ({ icon = () => {}, value }) => { - return ( - - {icon({ prop: { color: "#444" } })} - - {value} + @{author.username} - ); -}; + +) + +const SubforumInfo = ({ subforum }) => ( + + + + {subforum.title} + + + +) + +const TagText = ({ tag, index = 0, isLast = false }) => ( + + {index === 0 ? '' : ' '}@{tag.value} + +) + +const DefaultText = ({ text, index = 0 }) => ( + + {index === 0 ? '' : ' '} + {text.value} + +) + +const InteractionInfo = ({ icon = () => {}, value }) => ( + + {icon({ prop: { color: '#444' } })} + + + {value} + + + +) export default function PostCard({ style, post }) { return ( @@ -163,15 +151,15 @@ export default function PostCard({ style, post }) { paddingTop: SIZE_CONSTANT * 1.2, paddingBottom: SIZE_CONSTANT * 1.4, borderBottomWidth: 0.5, - borderBottomColor: "#E5E5E5", + borderBottomColor: '#E5E5E5', }} > @@ -195,11 +183,11 @@ export default function PostCard({ style, post }) { {post.content.map((content, index) => { - if (content.type === "text") { - return ; + if (content.type === 'text') { + return } - if (content.type === "tag") { - return ; + if (content.type === 'tag') { + return } })} @@ -207,9 +195,9 @@ export default function PostCard({ style, post }) { @@ -220,8 +208,8 @@ export default function PostCard({ style, post }) { @@ -241,5 +229,5 @@ export default function PostCard({ style, post }) { - ); + ) } diff --git a/mobile/tradeverse/screens/explore-root/_components/search-bar.jsx b/mobile/tradeverse/screens/explore-root/_components/search-bar.jsx index 44e6a913..a3538b48 100644 --- a/mobile/tradeverse/screens/explore-root/_components/search-bar.jsx +++ b/mobile/tradeverse/screens/explore-root/_components/search-bar.jsx @@ -1,12 +1,12 @@ -import React, { useState } from 'react'; -import { IconSearch } from '@tabler/icons-react-native'; -import { View, TextInput, StyleSheet } from 'react-native'; -import { router } from 'expo-router'; -import { COLORS, SIZE_CONSTANT } from '../../../constants/theme'; -import paths from '../../../config/screen-paths'; +import React, { useState } from 'react' +import { IconSearch } from '@tabler/icons-react-native' +import { View, TextInput, StyleSheet } from 'react-native' +import { router } from 'expo-router' +import { COLORS, SIZE_CONSTANT } from '../../../constants/theme' +import paths from '../../../config/screen-paths' export default function SearchBar() { - const [searchKey, setSearchKey] = useState(''); + const [searchKey, setSearchKey] = useState('') return ( @@ -15,26 +15,26 @@ export default function SearchBar() { placeholder="Search for anything.." placeholderTextColor="#A8ADD9" onChangeText={(e) => { - setSearchKey(e); + setSearchKey(e) }} onSubmitEditing={() => { - router.push(`/${paths.EXPLORE.SEARCH}?searchKey=${searchKey}`); + router.push(`/${paths.EXPLORE.SEARCH}?searchKey=${searchKey}`) }} /> - ); + ) } const styles = StyleSheet.create({ container: { - width: '100%' + width: '100%', }, searchContainer: { - flexDirection: 'row' + flexDirection: 'row', }, - searchInput:{ + searchInput: { width: '80%', color: COLORS.primary950, }, @@ -46,6 +46,6 @@ const styles = StyleSheet.create({ borderRadius: SIZE_CONSTANT * 1, paddingVertical: 10, backgroundColor: `${COLORS.primary50}80`, - paddingHorizontal: 16 - } -}); + paddingHorizontal: 16, + }, +}) diff --git a/mobile/tradeverse/screens/explore-root/_components/tabs.jsx b/mobile/tradeverse/screens/explore-root/_components/tabs.jsx index ecf23b26..e6836587 100644 --- a/mobile/tradeverse/screens/explore-root/_components/tabs.jsx +++ b/mobile/tradeverse/screens/explore-root/_components/tabs.jsx @@ -1,24 +1,27 @@ import React from 'react' import { Pressable, View, Text } from 'react-native' -import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES } from '../../../constants/theme' - -export default function Tabs({selectedTab, setSelectedTab}) { - - - const TABS = [ - { - label: 'Popular', - value: 'popular', - }, - { - label: 'Recent', - value: 'recent', - } - ] +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../../constants/theme' +export default function Tabs({ selectedTab, setSelectedTab }) { + const TABS = [ + { + label: 'Popular', + value: 'popular', + }, + { + label: 'Recent', + value: 'recent', + }, + ] return ( - - {TABS.map((tab, index) => ( - setSelectedTab(tab.value)} - style={{ - flex: 1, - justifyContent: 'center', - alignItems: 'center', - paddingVertical: SIZE_CONSTANT * 1.4, - borderBottomWidth: selectedTab === tab.value ? SIZE_CONSTANT*0.3 : 0, - borderBottomColor: selectedTab === tab.value ? COLORS.primary500 : 'transparent' - }} - > - {tab.label} - - ))} - + borderBottomColor: '#f1f1f1', + }} + > + {TABS.map((tab, index) => ( + setSelectedTab(tab.value)} + style={{ + flex: 1, + justifyContent: 'center', + alignItems: 'center', + paddingVertical: SIZE_CONSTANT * 1.4, + borderBottomWidth: + selectedTab === tab.value ? SIZE_CONSTANT * 0.3 : 0, + borderBottomColor: + selectedTab === tab.value ? COLORS.primary500 : 'transparent', + }} + > + + {tab.label} + + + ))} ) } diff --git a/mobile/tradeverse/screens/explore-root/index.jsx b/mobile/tradeverse/screens/explore-root/index.jsx index 6e2c257e..57473da4 100644 --- a/mobile/tradeverse/screens/explore-root/index.jsx +++ b/mobile/tradeverse/screens/explore-root/index.jsx @@ -1,26 +1,26 @@ -import React, { useEffect, useState } from "react"; -import { StyleSheet, Text, View } from "react-native"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; -import SearchBar from "./_components/search-bar"; -import GlobalScreen from "../../components/ui/global-screen"; -import Tabs from "./_components/tabs"; -import PaddedContainer from "../../components/ui/padded-container"; -import PopularView from "./views/popular-view"; -import { getExploreFeed } from "../../mock-services/explore"; +import React, { useEffect, useState } from 'react' +import { StyleSheet, Text, View } from 'react-native' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import SearchBar from './_components/search-bar' +import GlobalScreen from '../../components/ui/global-screen' +import Tabs from './_components/tabs' +import PaddedContainer from '../../components/ui/padded-container' +import PopularView from './views/popular-view' +import { getExploreFeed } from '../../mock-services/explore' export default function ExploreRootScreen() { - const [selectedTab, setSelectedTab] = useState("popular"); + const [selectedTab, setSelectedTab] = useState('popular') const [data, setData] = useState({ popularPosts: [], recentPosts: [], - }); + }) useEffect(() => { - const result = getExploreFeed(); + const result = getExploreFeed() setData({ popularPosts: result.popular, recentPosts: result.recent, - }); - }, []); + }) + }, []) return ( {data && ( <> - {selectedTab === "popular" && ( + {selectedTab === 'popular' && ( )} - {selectedTab === "recent" && ( - - )} + {selectedTab === 'recent' && } )} - ); + ) } const styles = StyleSheet.create({ @@ -53,4 +51,4 @@ const styles = StyleSheet.create({ fontSize: SIZE_CONSTANT * 1, color: COLORS.graytext, }, -}); +}) diff --git a/mobile/tradeverse/screens/explore-root/views/popular-view.jsx b/mobile/tradeverse/screens/explore-root/views/popular-view.jsx index c923e0b9..4c38280b 100644 --- a/mobile/tradeverse/screens/explore-root/views/popular-view.jsx +++ b/mobile/tradeverse/screens/explore-root/views/popular-view.jsx @@ -1,7 +1,7 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import PostCard from "../_components/post-card"; -import PostLink from "../../../components/links/post-link"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import PostCard from '../_components/post-card' +import PostLink from '../../../components/links/post-link' export default function PopularView({ data }) { return ( @@ -12,5 +12,5 @@ export default function PopularView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/explore-root/views/recent-view.jsx b/mobile/tradeverse/screens/explore-root/views/recent-view.jsx index 9702b7d6..7c709121 100644 --- a/mobile/tradeverse/screens/explore-root/views/recent-view.jsx +++ b/mobile/tradeverse/screens/explore-root/views/recent-view.jsx @@ -1,6 +1,6 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import PostCard from "../_components/post-card"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import PostCard from '../_components/post-card' export default function RecentView({ data }) { return ( @@ -9,5 +9,5 @@ export default function RecentView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/asset-result.jsx b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/asset-result.jsx index ebe997d3..018fa740 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/asset-result.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/asset-result.jsx @@ -1,14 +1,14 @@ -import { Text, View } from "react-native"; -import React from "react"; +import { Text, View } from 'react-native' +import React from 'react' import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES, -} from "../../../../constants/theme"; -import ContentImage from "../../../../components/images/content-image"; -import AssetLink from "../../../../components/links/asset-link"; -import paths from "../../../../config/screen-paths"; +} from '../../../../constants/theme' +import ContentImage from '../../../../components/images/content-image' +import AssetLink from '../../../../components/links/asset-link' +import paths from '../../../../config/screen-paths' export default function AssetResult({ style, asset }) { return ( @@ -19,11 +19,11 @@ export default function AssetResult({ style, asset }) { paddingTop: SIZE_CONSTANT * 1.2, paddingBottom: SIZE_CONSTANT * 1.4, borderBottomWidth: 0.5, - borderBottomColor: "#E5E5E5", - display: "flex", - flexDirection: "row", + borderBottomColor: '#E5E5E5', + display: 'flex', + flexDirection: 'row', gap: SIZE_CONSTANT * 1.2, - alignItems: "center", + alignItems: 'center', }} > - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/post-result.jsx b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/post-result.jsx index 6e11f816..5455bfa8 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/post-result.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/post-result.jsx @@ -1,22 +1,22 @@ -import { View, Text } from "react-native"; -import React from "react"; -import { - COLORS, - FONT_WEIGHTS, - SIZE_CONSTANT, - SIZES, -} from "../../../../constants/theme"; -import ProfileImage from "../../../../components/images/profile-image"; +import { View, Text } from 'react-native' +import React from 'react' import { IconEye, IconMessageCircle2, IconThumbDown, IconThumbUp, -} from "@tabler/icons-react-native"; -import UserLink from "../../../../components/links/user-link"; -import paths from "../../../../config/screen-paths"; -import SubforumLink from "../../../../components/links/subforum-link"; -import PostLink from "../../../../components/links/post-link"; +} from '@tabler/icons-react-native' +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../../../constants/theme' +import ProfileImage from '../../../../components/images/profile-image' +import UserLink from '../../../../components/links/user-link' +import paths from '../../../../config/screen-paths' +import SubforumLink from '../../../../components/links/subforum-link' +import PostLink from '../../../../components/links/post-link' // { // title: 'Title', @@ -39,141 +39,132 @@ import PostLink from "../../../../components/links/post-link"; // }, // } -const AuthorInfo = ({ author }) => { - return ( - +const AuthorInfo = ({ author }) => ( + + - - - {author.name} {author.surname} - - - @{author.username} - - - - - - - - ); -}; - -const SubforumInfo = ({ subforum }) => { - return ( - - + {author.name} {author.surname} + - {subforum.title} + @{author.username} - - ); -}; + + + + + +) -const TagText = ({ tag, index = 0, isLast = false }) => { - return ( - ( + + - {index === 0 ? "" : " "}@{tag.value} - - ); -}; + + {subforum.title} + + + +) -const DefaultText = ({ text, index = 0 }) => { - return ( - - {index === 0 ? "" : " "} - {text.value} - - ); -}; +const TagText = ({ tag, index = 0, isLast = false }) => ( + + {index === 0 ? '' : ' '}@{tag.value} + +) -const InteractionInfo = ({ icon = () => {}, value }) => { - return ( - - {icon({ prop: { color: "#444" } })} - - - {value} - - +const DefaultText = ({ text, index = 0 }) => ( + + {index === 0 ? '' : ' '} + {text.value} + +) + +const InteractionInfo = ({ icon = () => {}, value }) => ( + + {icon({ prop: { color: '#444' } })} + + + {value} + - ); -}; + +) export default function PostResult({ style, post }) { return ( @@ -184,7 +175,7 @@ export default function PostResult({ style, post }) { paddingTop: SIZE_CONSTANT * 1.2, paddingBottom: SIZE_CONSTANT * 1.4, borderBottomWidth: 0.5, - borderBottomColor: "#E5E5E5", + borderBottomColor: '#E5E5E5', }} > @@ -203,10 +194,10 @@ export default function PostResult({ style, post }) { @@ -214,5 +205,5 @@ export default function PostResult({ style, post }) { - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/sub-forum-result.jsx b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/sub-forum-result.jsx index bf551741..7b7663d3 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/sub-forum-result.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/sub-forum-result.jsx @@ -1,81 +1,84 @@ -import { View, Text } from "react-native"; -import React from "react"; -import { COLORS, SIZE_CONSTANT, SIZES,FONT_WEIGHTS } from "../../../../constants/theme"; -import formatInteractionNumber from "../../../../util/format-number"; -import SubforumLink from "../../../../components/links/subforum-link"; -import paths from "../../../../config/screen-paths"; +import { View, Text } from 'react-native' +import React from 'react' +import { + COLORS, + SIZE_CONSTANT, + SIZES, + FONT_WEIGHTS, +} from '../../../../constants/theme' +import formatInteractionNumber from '../../../../util/format-number' +import SubforumLink from '../../../../components/links/subforum-link' +import paths from '../../../../config/screen-paths' export default function SubForumResult({ style, subForum }) { - const InteractionInfo = ({ icon, value }) => { - return ( - - {icon()} - - {formatInteractionNumber(value)} - - - ); - }; - return ( - - - + const InteractionInfo = ({ icon, value }) => ( + {icon()} - {subForum.title} + {formatInteractionNumber(value)} + + ) + return ( + - ✍️} - value={subForum.totalPosts} - /> - } - value={subForum.totalFollowers} - /> - 👤} - value={subForum.totalPeople} - /> + + {subForum.title} + + + ✍️} + value={subForum.totalPosts} + /> + } + value={subForum.totalFollowers} + /> + 👤} + value={subForum.totalPeople} + /> + - - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/tag-result.jsx b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/tag-result.jsx index 93c56446..f28942bb 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/tag-result.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/tag-result.jsx @@ -1,38 +1,40 @@ -import { View, Text } from "react-native"; -import React from "react"; -import { COLORS, SIZE_CONSTANT, SIZES,FONT_WEIGHTS } from "../../../../constants/theme"; -import formatInteractionNumber from "../../../../util/format-number"; +import { View, Text } from 'react-native' +import React from 'react' +import { + COLORS, + SIZE_CONSTANT, + SIZES, + FONT_WEIGHTS, +} from '../../../../constants/theme' +import formatInteractionNumber from '../../../../util/format-number' export default function TagResult({ style, tag }) { - const InteractionInfo = ({ icon, value }) => { - return ( - ( + + {icon()} + - {icon()} - - {formatInteractionNumber(value)} - - - ); - }; + {formatInteractionNumber(value)} + + + ) return ( @@ -67,5 +69,5 @@ export default function TagResult({ style, tag }) { /> - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/user-result.jsx b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/user-result.jsx index a392d9d8..8750e173 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/result-cards/user-result.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/result-cards/user-result.jsx @@ -1,28 +1,28 @@ -import { View, Text } from "react-native"; -import React from "react"; -import ProfileImage from "../../../../components/images/profile-image"; +import { View, Text } from 'react-native' +import React from 'react' +import ProfileImage from '../../../../components/images/profile-image' import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES, -} from "../../../../constants/theme"; -import UserLink from "../../../../components/links/user-link"; -import paths from "../../../../config/screen-paths"; +} from '../../../../constants/theme' +import UserLink from '../../../../components/links/user-link' +import paths from '../../../../config/screen-paths' export default function UserResult({ user }) { return ( @@ -37,8 +37,8 @@ export default function UserResult({ user }) { @@ -56,7 +56,7 @@ export default function UserResult({ user }) { - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/_components/search-bar.jsx b/mobile/tradeverse/screens/explore-search-results/_components/search-bar.jsx index 154d9021..0cbf0103 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/search-bar.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/search-bar.jsx @@ -1,16 +1,16 @@ -import React, { useEffect, useState } from "react"; -import { IconSearch } from "@tabler/icons-react-native"; -import { View, TextInput, StyleSheet } from "react-native"; -import { COLORS, SIZE_CONSTANT } from "../../../constants/theme"; +import React, { useEffect, useState } from 'react' +import { IconSearch } from '@tabler/icons-react-native' +import { View, TextInput, StyleSheet } from 'react-native' +import { COLORS, SIZE_CONSTANT } from '../../../constants/theme' export default function SearchBar({ value, onChange }) { - const [searchKey, setSearchKey] = useState(""); + const [searchKey, setSearchKey] = useState('') useEffect(() => { if (value) { - setSearchKey(value); + setSearchKey(value) } - }, [value]); + }, [value]) return ( @@ -20,8 +20,8 @@ export default function SearchBar({ value, onChange }) { placeholder="Search for anything.." placeholderTextColor="#A8ADD9" onChangeText={(e) => { - setSearchKey(e); - onChange(e); + setSearchKey(e) + onChange(e) }} onSubmitEditing={() => { // router.push(`/${paths.EXPLORE.SEARCH}?searchKey=${searchKey}`); @@ -30,30 +30,30 @@ export default function SearchBar({ value, onChange }) { - ); + ) } const styles = StyleSheet.create({ container: { - width: "100%", + width: '100%', }, searchContainer: { // width: "80%", - flex:1, - flexDirection: "row", + flex: 1, + flexDirection: 'row', }, searchInput: { - width: "80%", + width: '80%', color: COLORS.primary950, }, searchWrapper: { - width: "100%", - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", + width: '100%', + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', borderRadius: SIZE_CONSTANT * 1, paddingVertical: 10, backgroundColor: `${COLORS.primary50}80`, paddingHorizontal: 16, }, -}); +}) diff --git a/mobile/tradeverse/screens/explore-search-results/_components/tabs.jsx b/mobile/tradeverse/screens/explore-search-results/_components/tabs.jsx index 3b7c49e4..db30e47f 100644 --- a/mobile/tradeverse/screens/explore-search-results/_components/tabs.jsx +++ b/mobile/tradeverse/screens/explore-search-results/_components/tabs.jsx @@ -1,59 +1,59 @@ -import React from "react"; -import { Pressable, View, Text, ScrollView } from "react-native"; +import React from 'react' +import { Pressable, View, Text, ScrollView } from 'react-native' import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES, -} from "../../../constants/theme"; +} from '../../../constants/theme' export default function Tabs({ selectedTab, setSelectedTab }) { const TABS = [ { - label: "Popular", - value: "popular", + label: 'Popular', + value: 'popular', }, { - label: "Assets", - value: "assets", + label: 'Assets', + value: 'assets', }, { - label: "Tags", - value: "tags", + label: 'Tags', + value: 'tags', }, { - label: "Sub Forums", - value: "sub_forums", + label: 'Sub Forums', + value: 'sub_forums', }, { - label: "Posts", - value: "posts", + label: 'Posts', + value: 'posts', }, { - label: "People", - value: "people", + label: 'People', + value: 'people', }, - ]; + ] return ( {TABS.map((tab, index) => ( @@ -63,13 +63,13 @@ export default function Tabs({ selectedTab, setSelectedTab }) { style={{ flex: 1, minWidth: 72, - justifyContent: "center", - alignItems: "center", + justifyContent: 'center', + alignItems: 'center', paddingVertical: SIZE_CONSTANT * 1.4, borderBottomWidth: selectedTab === tab.value ? SIZE_CONSTANT * 0.3 : 0, borderBottomColor: - selectedTab === tab.value ? COLORS.primary500 : "transparent", + selectedTab === tab.value ? COLORS.primary500 : 'transparent', }} > - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/index.jsx b/mobile/tradeverse/screens/explore-search-results/index.jsx index 108946e7..2f52cb59 100644 --- a/mobile/tradeverse/screens/explore-search-results/index.jsx +++ b/mobile/tradeverse/screens/explore-search-results/index.jsx @@ -1,24 +1,24 @@ -import React, { useEffect, useMemo, useState } from "react"; -import { Pressable, StyleSheet, Text, View } from "react-native"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; -import GlobalScreen from "../../components/ui/global-screen"; -import Tabs from "./_components/tabs"; -import PaddedContainer from "../../components/ui/padded-container"; -import PopularView from "./views/popular-view"; -import { Stack, useLocalSearchParams } from "expo-router"; -import SearchBar from "./_components/search-bar"; -import { IconAdjustments } from "@tabler/icons-react-native"; -import SubForumsView from "./views/subforums-view"; -import TagsView from "./views/tags-view"; -import PostsView from "./views/posts-view"; -import UsersView from "./views/users-view"; -import AssetsView from "./views/asset-view"; -import { searchOnExplore } from "../../mock-services/explore"; +import React, { useEffect, useMemo, useState } from 'react' +import { Pressable, StyleSheet, Text, View } from 'react-native' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import GlobalScreen from '../../components/ui/global-screen' +import Tabs from './_components/tabs' +import PaddedContainer from '../../components/ui/padded-container' +import PopularView from './views/popular-view' +import { Stack, useLocalSearchParams } from 'expo-router' +import SearchBar from './_components/search-bar' +import { IconAdjustments } from '@tabler/icons-react-native' +import SubForumsView from './views/subforums-view' +import TagsView from './views/tags-view' +import PostsView from './views/posts-view' +import UsersView from './views/users-view' +import AssetsView from './views/asset-view' +import { searchOnExplore } from '../../mock-services/explore' export default function ExploreRootScreen() { - const [selectedTab, setSelectedTab] = useState("popular"); + const [selectedTab, setSelectedTab] = useState('popular') - const [updatedSearchKey, setUpdatedSearchKey] = useState(""); + const [updatedSearchKey, setUpdatedSearchKey] = useState('') const [data, setData] = useState({ popular: [], @@ -27,13 +27,16 @@ export default function ExploreRootScreen() { sub_forums: [], posts: [], people: [], - }); + }) - const { searchKey } = useLocalSearchParams(); + const { searchKey } = useLocalSearchParams() useEffect(() => { - const data = searchOnExplore(updatedSearchKey ?? searchKey); + setUpdatedSearchKey(searchKey) + }, [searchKey]) + useEffect(() => { + const data = searchOnExplore(updatedSearchKey ?? searchKey) setData({ popular: data.popular, assets: data.assets, @@ -41,8 +44,8 @@ export default function ExploreRootScreen() { sub_forums: data.subforums, posts: data.posts, people: data.users, - }); - }, [searchKey, updatedSearchKey]); + }) + }, [searchKey, updatedSearchKey]) return ( { - setUpdatedSearchKey(val); + setUpdatedSearchKey(val) }} value={searchKey} /> {data && ( <> - {selectedTab === "popular" && } - {selectedTab === "assets" && } - {selectedTab === "tags" && } - {selectedTab === "sub_forums" && ( + {selectedTab === 'popular' && } + {selectedTab === 'assets' && } + {selectedTab === 'tags' && } + {selectedTab === 'sub_forums' && ( )} - {selectedTab === "posts" && } - {selectedTab === "people" && } + {selectedTab === 'posts' && } + {selectedTab === 'people' && } )} - ); + ) } const styles = StyleSheet.create({ @@ -110,4 +113,4 @@ const styles = StyleSheet.create({ fontSize: SIZE_CONSTANT * 1, color: COLORS.graytext, }, -}); +}) diff --git a/mobile/tradeverse/screens/explore-search-results/views/asset-view.jsx b/mobile/tradeverse/screens/explore-search-results/views/asset-view.jsx index 74b5c337..956ba8a1 100644 --- a/mobile/tradeverse/screens/explore-search-results/views/asset-view.jsx +++ b/mobile/tradeverse/screens/explore-search-results/views/asset-view.jsx @@ -1,7 +1,7 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import PostCard from "../_components/result-cards/post-result"; -import AssetResult from "../_components/result-cards/asset-result"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import PostCard from '../_components/result-cards/post-result' +import AssetResult from '../_components/result-cards/asset-result' export default function AssetsView({ data }) { return ( @@ -10,5 +10,5 @@ export default function AssetsView({ data }) { ))} - ); -} \ No newline at end of file + ) +} diff --git a/mobile/tradeverse/screens/explore-search-results/views/popular-view.jsx b/mobile/tradeverse/screens/explore-search-results/views/popular-view.jsx index edb4abd8..71378602 100644 --- a/mobile/tradeverse/screens/explore-search-results/views/popular-view.jsx +++ b/mobile/tradeverse/screens/explore-search-results/views/popular-view.jsx @@ -1,6 +1,6 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import PostCard from "../_components/result-cards/post-result"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import PostCard from '../_components/result-cards/post-result' export default function PopularView({ data }) { return ( @@ -9,5 +9,5 @@ export default function PopularView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/views/posts-view.jsx b/mobile/tradeverse/screens/explore-search-results/views/posts-view.jsx index a25732b8..7826333f 100644 --- a/mobile/tradeverse/screens/explore-search-results/views/posts-view.jsx +++ b/mobile/tradeverse/screens/explore-search-results/views/posts-view.jsx @@ -1,6 +1,6 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import PostResult from "../_components/result-cards/post-result"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import PostResult from '../_components/result-cards/post-result' export default function PostsView({ data }) { return ( @@ -9,5 +9,5 @@ export default function PostsView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/views/subforums-view.jsx b/mobile/tradeverse/screens/explore-search-results/views/subforums-view.jsx index ad88f44a..dbe6e0a7 100644 --- a/mobile/tradeverse/screens/explore-search-results/views/subforums-view.jsx +++ b/mobile/tradeverse/screens/explore-search-results/views/subforums-view.jsx @@ -1,6 +1,6 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import SubForumResult from "../_components/result-cards/sub-forum-result"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import SubForumResult from '../_components/result-cards/sub-forum-result' export default function SubForumsView({ data }) { return ( @@ -9,5 +9,5 @@ export default function SubForumsView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/views/tags-view.jsx b/mobile/tradeverse/screens/explore-search-results/views/tags-view.jsx index 741bac5b..1e0afd59 100644 --- a/mobile/tradeverse/screens/explore-search-results/views/tags-view.jsx +++ b/mobile/tradeverse/screens/explore-search-results/views/tags-view.jsx @@ -1,7 +1,7 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import SubForumResult from "../_components/result-cards/sub-forum-result"; -import TagResult from "../_components/result-cards/tag-result"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import SubForumResult from '../_components/result-cards/sub-forum-result' +import TagResult from '../_components/result-cards/tag-result' export default function TagsView({ data }) { return ( @@ -10,5 +10,5 @@ export default function TagsView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/explore-search-results/views/users-view.jsx b/mobile/tradeverse/screens/explore-search-results/views/users-view.jsx index 8044d67c..c0d7249a 100644 --- a/mobile/tradeverse/screens/explore-search-results/views/users-view.jsx +++ b/mobile/tradeverse/screens/explore-search-results/views/users-view.jsx @@ -1,6 +1,6 @@ -import { View, Text, ScrollView } from "react-native"; -import React from "react"; -import UserResult from "../_components/result-cards/user-result"; +import { View, Text, ScrollView } from 'react-native' +import React from 'react' +import UserResult from '../_components/result-cards/user-result' export default function UsersView({ data }) { return ( @@ -9,5 +9,5 @@ export default function UsersView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/followed-topics/index.jsx b/mobile/tradeverse/screens/followed-topics/index.jsx index 48aa01a6..af35167a 100644 --- a/mobile/tradeverse/screens/followed-topics/index.jsx +++ b/mobile/tradeverse/screens/followed-topics/index.jsx @@ -10,48 +10,48 @@ // ); // } -import React from "react"; +import React from 'react' import { View, Text, TouchableOpacity, StyleSheet, FlatList, -} from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import { Stack } from "expo-router"; +} from 'react-native' +import { Stack } from 'expo-router' +import GlobalScreen from '../../components/ui/global-screen' +import FullScrollView from '../../components/ui/full-scroll-view' const FollowedTagsScreen = () => { const followedTags = [ - { id: "1", name: "Investing", followers: 1500 }, - { id: "2", name: "Stock Market", followers: 2000 }, - { id: "3", name: "Personal Finance", followers: 1200 }, - { id: "4", name: "Cryptocurrency", followers: 1800 }, - { id: "5", name: "Financial Literacy", followers: 800 }, - { id: "6", name: "Budgeting", followers: 1600 }, - { id: "7", name: "Retirement Planning", followers: 900 }, - { id: "8", name: "Wealth Management", followers: 1300 }, - { id: "9", name: "Real Estate Investing", followers: 1700 }, - { id: "10", name: "Debt Management", followers: 1100 }, - { id: "11", name: "Passive Income", followers: 1400 }, - { id: "12", name: "Credit Score", followers: 700 }, - { id: "13", name: "Tax Planning", followers: 1000 }, - { id: "14", name: "Financial Independence", followers: 850 }, - { id: "15", name: "Investment Strategies", followers: 950 }, - { id: "16", name: "Mutual Funds", followers: 750 }, - { id: "17", name: "Forex Trading", followers: 1300 }, - { id: "18", name: "Insurance", followers: 600 }, - { id: "19", name: "Expense Tracking", followers: 1100 }, - { id: "20", name: "Economic Trends", followers: 1200 }, - ]; + { id: '1', name: 'Investing', followers: 1500 }, + { id: '2', name: 'Stock Market', followers: 2000 }, + { id: '3', name: 'Personal Finance', followers: 1200 }, + { id: '4', name: 'Cryptocurrency', followers: 1800 }, + { id: '5', name: 'Financial Literacy', followers: 800 }, + { id: '6', name: 'Budgeting', followers: 1600 }, + { id: '7', name: 'Retirement Planning', followers: 900 }, + { id: '8', name: 'Wealth Management', followers: 1300 }, + { id: '9', name: 'Real Estate Investing', followers: 1700 }, + { id: '10', name: 'Debt Management', followers: 1100 }, + { id: '11', name: 'Passive Income', followers: 1400 }, + { id: '12', name: 'Credit Score', followers: 700 }, + { id: '13', name: 'Tax Planning', followers: 1000 }, + { id: '14', name: 'Financial Independence', followers: 850 }, + { id: '15', name: 'Investment Strategies', followers: 950 }, + { id: '16', name: 'Mutual Funds', followers: 750 }, + { id: '17', name: 'Forex Trading', followers: 1300 }, + { id: '18', name: 'Insurance', followers: 600 }, + { id: '19', name: 'Expense Tracking', followers: 1100 }, + { id: '20', name: 'Economic Trends', followers: 1200 }, + ] const renderTagItem = ({ item }) => ( {item.name} {item.followers} Followers - ); + ) return ( @@ -59,7 +59,7 @@ const FollowedTagsScreen = () => { @@ -77,68 +77,68 @@ const FollowedTagsScreen = () => { - ); -}; + ) +} const styles = StyleSheet.create({ container: { flex: 1, paddingTop: 40, - backgroundColor: "#fff", + backgroundColor: '#fff', }, header: { fontSize: 18, - fontWeight: "bold", + fontWeight: 'bold', marginBottom: 20, - textAlign: "center", + textAlign: 'center', }, tagList: { paddingBottom: 60, // Extra padding for the bottom nav bar }, tagBox: { - backgroundColor: "#FFF", + backgroundColor: '#FFF', padding: 15, marginVertical: 10, borderRadius: 10, elevation: 2, // Adds shadow effect - alignItems: "center", + alignItems: 'center', borderWidth: 1, // Add a border around the box - borderColor: "#EAEAEA", // Border color + borderColor: '#EAEAEA', // Border color }, tagName: { fontSize: 16, - fontWeight: "bold", - color: "#333", + fontWeight: 'bold', + color: '#333', }, tagFollowers: { fontSize: 14, - color: "#777", + color: '#777', }, bottomNav: { - position: "absolute", // Position at the bottom of the screen + position: 'absolute', // Position at the bottom of the screen bottom: 0, left: 0, right: 0, - flexDirection: "row", - justifyContent: "space-around", - alignItems: "center", - backgroundColor: "#4B49F5", // Main background color of the nav bar + flexDirection: 'row', + justifyContent: 'space-around', + alignItems: 'center', + backgroundColor: '#4B49F5', // Main background color of the nav bar height: 60, // Height of the navigation bar borderTopWidth: 1, - borderTopColor: "#EAEAEA", // Adds a border on top of the nav bar for separation + borderTopColor: '#EAEAEA', // Adds a border on top of the nav bar for separation }, navButton: { - justifyContent: "center", - alignItems: "center", + justifyContent: 'center', + alignItems: 'center', }, activeButton: { width: 50, height: 50, borderRadius: 25, // Rounded button - backgroundColor: "#624BF6", // Different color for the active button - justifyContent: "center", - alignItems: "center", + backgroundColor: '#624BF6', // Different color for the active button + justifyContent: 'center', + alignItems: 'center', }, -}); +}) -export default FollowedTagsScreen; +export default FollowedTagsScreen diff --git a/mobile/tradeverse/screens/followed-users/_components/UserCard.jsx b/mobile/tradeverse/screens/followed-users/_components/UserCard.jsx index 0452dd88..e3f76455 100644 --- a/mobile/tradeverse/screens/followed-users/_components/UserCard.jsx +++ b/mobile/tradeverse/screens/followed-users/_components/UserCard.jsx @@ -1,25 +1,25 @@ -import { View, Text } from "react-native"; -import React from "react"; -import ProfileImage from "../../../components/images/profile-image"; +import { View, Text } from 'react-native' +import React from 'react' +import ProfileImage from '../../../components/images/profile-image' import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES, -} from "../../../constants/theme"; +} from '../../../constants/theme' export default function UserCard({ user }) { return ( @@ -34,8 +34,8 @@ export default function UserCard({ user }) { @@ -53,7 +53,7 @@ export default function UserCard({ user }) { - ); + ) } diff --git a/mobile/tradeverse/screens/followed-users/index.jsx b/mobile/tradeverse/screens/followed-users/index.jsx index 599893c5..4b01fbab 100644 --- a/mobile/tradeverse/screens/followed-users/index.jsx +++ b/mobile/tradeverse/screens/followed-users/index.jsx @@ -1,5 +1,5 @@ // Import necessary components and libraries -import React from "react"; +import React from 'react' import { View, Text, @@ -8,12 +8,12 @@ import { FlatList, StyleSheet, SafeAreaView, -} from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import ProfileImage from "../../components/images/profile-image"; -import UserCard from "./_components/UserCard"; -import { Stack } from "expo-router"; +} from 'react-native' +import { Stack } from 'expo-router' +import GlobalScreen from '../../components/ui/global-screen' +import FullScrollView from '../../components/ui/full-scroll-view' +import ProfileImage from '../../components/images/profile-image' +import UserCard from './_components/UserCard' // Mock data: 14 users with username, followers, and profile picture const mockUsers = Array.from({ length: 14 }, (_, i) => ({ @@ -22,30 +22,29 @@ const mockUsers = Array.from({ length: 14 }, (_, i) => ({ name: `Name ${i + 1}`, surname: `Surname ${i + 1}`, followers: Math.floor(Math.random() * 500), - profilePic: "https://via.placeholder.com/50", // Placeholder image for avatar -})); + profilePic: 'https://via.placeholder.com/50', // Placeholder image for avatar +})) // Main screen component -const FollowedUsersScreen = () => { - - return ( - - - - - {mockUsers.map((item) => ( - - - - ))} - - - - ); -}; +const FollowedUsersScreen = () => ( + + + + + {mockUsers.map((item) => ( + + + + ))} + + + +) // Styles for the screen const styles = StyleSheet.create({ @@ -55,34 +54,34 @@ const styles = StyleSheet.create({ topBlock: { flex: 1, paddingTop: 20, // Adds space to prevent title from colliding with the notification bar - backgroundColor: "#fff", + backgroundColor: '#fff', }, title: { fontSize: 24, - fontWeight: "bold", - color: "#6a0dad", + fontWeight: 'bold', + color: '#6a0dad', marginBottom: 10, - textAlign: "center", // Center aligns the title + textAlign: 'center', // Center aligns the title }, profilePic: { width: 50, height: 50, borderRadius: 25, // Makes the avatar circular marginRight: 15, - backgroundColor: "#d3d3d3", // Adds a background color to indicate where the profile picture is + backgroundColor: '#d3d3d3', // Adds a background color to indicate where the profile picture is }, userInfo: { flex: 1, }, username: { fontSize: 18, - fontWeight: "600", - color: "#4b0082", + fontWeight: '600', + color: '#4b0082', }, followers: { fontSize: 14, - color: "#6a0dad", + color: '#6a0dad', }, -}); +}) -export default FollowedUsersScreen; +export default FollowedUsersScreen diff --git a/mobile/tradeverse/screens/home-root/_components/post-card.jsx b/mobile/tradeverse/screens/home-root/_components/post-card.jsx index 177da7b8..d617f52c 100644 --- a/mobile/tradeverse/screens/home-root/_components/post-card.jsx +++ b/mobile/tradeverse/screens/home-root/_components/post-card.jsx @@ -1,23 +1,23 @@ -import { View, Text } from "react-native"; -import React from "react"; -import { - COLORS, - FONT_WEIGHTS, - SIZE_CONSTANT, - SIZES, -} from "../../../constants/theme"; -import ProfileImage from "../../../components/images/profile-image"; +import { View, Text } from 'react-native' +import React from 'react' import { IconEye, IconMessage, IconMessageCircle2, IconThumbDown, IconThumbUp, -} from "@tabler/icons-react-native"; -import UserLink from "../../../components/links/user-link"; -import paths from "../../../config/screen-paths"; -import PostLink from "../../../components/links/post-link"; -import SubforumLink from "../../../components/links/subforum-link"; +} from '@tabler/icons-react-native' +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../../constants/theme' +import ProfileImage from '../../../components/images/profile-image' +import UserLink from '../../../components/links/user-link' +import paths from '../../../config/screen-paths' +import PostLink from '../../../components/links/post-link' +import SubforumLink from '../../../components/links/subforum-link' // { // title: 'Title', @@ -40,144 +40,131 @@ import SubforumLink from "../../../components/links/subforum-link"; // }, // } -const AuthorInfo = ({ author }) => { - return ( - - - - - - ( + + + + - - {author.name} {author.surname} - - - @{author.username} - - + src={author.avatar} + /> - - ); -}; - -const SubforumInfo = ({ subforum }) => { - return ( - - {subforum.title} + {author.name} {author.surname} - - - ); -}; - -const TagText = ({ tag, index = 0, isLast = false }) => { - return ( - - {index === 0 ? "" : " "}@{tag.value} - - ); -}; - -const DefaultText = ({ text, index = 0 }) => { - return ( - - {index === 0 ? "" : " "} - {text.value} - - ); -}; - -const InteractionInfo = ({ icon = () => {}, value }) => { - return ( - - {icon({ prop: { color: "#444" } })} - - {value} + @{author.username} - ); -}; + +) + +const SubforumInfo = ({ subforum }) => ( + + + + {subforum.title} + + + +) + +const TagText = ({ tag, index = 0, isLast = false }) => ( + + {index === 0 ? '' : ' '}@{tag.value} + +) + +const DefaultText = ({ text, index = 0 }) => ( + + {index === 0 ? '' : ' '} + {text.value} + +) + +const InteractionInfo = ({ icon = () => {}, value }) => ( + + {icon({ prop: { color: '#444' } })} + + + {value} + + + +) export default function PostCard({ style, post }) { - return ( @@ -218,11 +205,11 @@ export default function PostCard({ style, post }) { {post.content.map((content, index) => { - if (content.type === "text") { - return ; + if (content.type === 'text') { + return } - if (content.type === "tag") { - return ; + if (content.type === 'tag') { + return } })} @@ -230,9 +217,9 @@ export default function PostCard({ style, post }) { @@ -243,8 +230,8 @@ export default function PostCard({ style, post }) { @@ -264,5 +251,5 @@ export default function PostCard({ style, post }) { - ); + ) } diff --git a/mobile/tradeverse/screens/home-root/_components/tabs.jsx b/mobile/tradeverse/screens/home-root/_components/tabs.jsx index b207d7a7..5264adbc 100644 --- a/mobile/tradeverse/screens/home-root/_components/tabs.jsx +++ b/mobile/tradeverse/screens/home-root/_components/tabs.jsx @@ -1,28 +1,31 @@ import React from 'react' import { Pressable, View, Text } from 'react-native' -import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES } from '../../../constants/theme' - -export default function Tabs({selectedTab, setSelectedTab}) { - - - const TABS = [ - { - label: 'For You', - value: 'for_you', - }, - { - label: 'Followed Topics', - value: 'followed_topics', - }, - { - label: 'Followed People', - value: 'followed_people', - } - ] +import { + COLORS, + FONT_WEIGHTS, + SIZE_CONSTANT, + SIZES, +} from '../../../constants/theme' +export default function Tabs({ selectedTab, setSelectedTab }) { + const TABS = [ + { + label: 'For You', + value: 'for_you', + }, + { + label: 'Followed Topics', + value: 'followed_topics', + }, + { + label: 'Followed People', + value: 'followed_people', + }, + ] return ( - - {TABS.map((tab, index) => ( - setSelectedTab(tab.value)} - style={{ - flex: 1, - justifyContent: 'center', - alignItems: 'center', - paddingVertical: 10, - backgroundColor:selectedTab === tab.value ? `${COLORS.primary50}80` : 'transparent', - borderBottomWidth: selectedTab === tab.value ? SIZE_CONSTANT*0.3 : 0, - borderBottomColor: selectedTab === tab.value ? COLORS.primary500 : 'transparent' - }} - > - {tab.label} - - ))} - + borderBottomColor: '#f1f1f1', + }} + > + {TABS.map((tab, index) => ( + setSelectedTab(tab.value)} + style={{ + flex: 1, + justifyContent: 'center', + alignItems: 'center', + paddingVertical: 10, + backgroundColor: + selectedTab === tab.value + ? `${COLORS.primary50}80` + : 'transparent', + borderBottomWidth: + selectedTab === tab.value ? SIZE_CONSTANT * 0.3 : 0, + borderBottomColor: + selectedTab === tab.value ? COLORS.primary500 : 'transparent', + }} + > + + {tab.label} + + + ))} ) } diff --git a/mobile/tradeverse/screens/home-root/index.jsx b/mobile/tradeverse/screens/home-root/index.jsx index 82854170..0c445601 100644 --- a/mobile/tradeverse/screens/home-root/index.jsx +++ b/mobile/tradeverse/screens/home-root/index.jsx @@ -1,31 +1,30 @@ -import React, { useEffect, useState } from "react"; -import { StyleSheet, Text, View } from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import ForYouView from "./views/for-you-view"; -import Tabs from "./_components/tabs"; -import FollowedTopicsView from "./views/followed-topics-view"; -import FollowedPeopleView from "./views/followed-people-view"; -import { getHomeFeed } from "../../mock-services/home"; -export default function HomeRootScreen() { - +import React, { useEffect, useState } from 'react' +import { StyleSheet, Text, View } from 'react-native' +import GlobalScreen from '../../components/ui/global-screen' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' +import FullScrollView from '../../components/ui/full-scroll-view' +import ForYouView from './views/for-you-view' +import Tabs from './_components/tabs' +import FollowedTopicsView from './views/followed-topics-view' +import FollowedPeopleView from './views/followed-people-view' +import { getHomeFeed } from '../../mock-services/home' - const [selectedTab, setSelectedTab] = useState("for_you"); // for_you, followed_topics, followed_people +export default function HomeRootScreen() { + const [selectedTab, setSelectedTab] = useState('for_you') // for_you, followed_topics, followed_people const [data, setData] = useState({ forYouPosts: [], followedTopicsPosts: [], followedPeoplePosts: [], - }); + }) useEffect(() => { - const data = getHomeFeed(); + const data = getHomeFeed() setData({ forYouPosts: data.forYouPosts, followedTopicsPosts: data.followedTopicsPosts, followedPeoplePosts: data.followedPeoplePosts, - }); - }, []); + }) + }, []) return ( {data && ( - {selectedTab === "for_you" && } - {selectedTab === "followed_topics" && ( + {selectedTab === 'for_you' && } + {selectedTab === 'followed_topics' && ( )} - {selectedTab === "followed_people" && ( + {selectedTab === 'followed_people' && ( )} )} - ); + ) } const styles = StyleSheet.create({ @@ -57,4 +56,4 @@ const styles = StyleSheet.create({ fontSize: SIZE_CONSTANT * 1, color: COLORS.graytext, }, -}); +}) diff --git a/mobile/tradeverse/screens/home-root/views/followed-people-view.jsx b/mobile/tradeverse/screens/home-root/views/followed-people-view.jsx index 8220854a..d4a5722d 100644 --- a/mobile/tradeverse/screens/home-root/views/followed-people-view.jsx +++ b/mobile/tradeverse/screens/home-root/views/followed-people-view.jsx @@ -1,6 +1,6 @@ -import { View, Text } from "react-native"; -import React from "react"; -import PostCard from "../_components/post-card"; +import { View, Text } from 'react-native' +import React from 'react' +import PostCard from '../_components/post-card' export default function FollowedPeopleView({ data }) { return ( @@ -9,5 +9,5 @@ export default function FollowedPeopleView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/home-root/views/followed-topics-view.jsx b/mobile/tradeverse/screens/home-root/views/followed-topics-view.jsx index b2a69737..b830d52d 100644 --- a/mobile/tradeverse/screens/home-root/views/followed-topics-view.jsx +++ b/mobile/tradeverse/screens/home-root/views/followed-topics-view.jsx @@ -1,6 +1,6 @@ -import { View, Text } from "react-native"; -import React from "react"; -import PostCard from "../_components/post-card"; +import { View, Text } from 'react-native' +import React from 'react' +import PostCard from '../_components/post-card' export default function FollowedTopicsView({ data }) { return ( @@ -9,5 +9,5 @@ export default function FollowedTopicsView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/home-root/views/for-you-view.jsx b/mobile/tradeverse/screens/home-root/views/for-you-view.jsx index 8cd3fb0d..e07e7113 100644 --- a/mobile/tradeverse/screens/home-root/views/for-you-view.jsx +++ b/mobile/tradeverse/screens/home-root/views/for-you-view.jsx @@ -1,6 +1,6 @@ -import { View, Text } from "react-native"; -import React from "react"; -import PostCard from "../_components/post-card"; +import { View, Text } from 'react-native' +import React from 'react' +import PostCard from '../_components/post-card' export default function ForYouView({ data }) { return ( @@ -9,5 +9,5 @@ export default function ForYouView({ data }) { ))} - ); + ) } diff --git a/mobile/tradeverse/screens/portfolio/index.jsx b/mobile/tradeverse/screens/portfolio/index.jsx index 1ef8cdc7..bbb7cf3c 100644 --- a/mobile/tradeverse/screens/portfolio/index.jsx +++ b/mobile/tradeverse/screens/portfolio/index.jsx @@ -1,28 +1,28 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState } from 'react' import { View, Text, ScrollView, StyleSheet, TouchableOpacity, -} from "react-native"; -import FullScrollView from "../../components/ui/full-scroll-view"; -import GlobalScreen from "../../components/ui/global-screen"; -import { SIZE_CONSTANT } from "../../constants/theme"; -import { router, Stack } from "expo-router"; -import paths from "../../config/screen-paths"; -import { searchAssets } from "../../mock-services/assets"; +} from 'react-native' +import { router, Stack } from 'expo-router' +import FullScrollView from '../../components/ui/full-scroll-view' +import GlobalScreen from '../../components/ui/global-screen' +import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT } from '../../constants/theme' +import paths from '../../config/screen-paths' +import { searchAssets } from '../../mock-services/assets' // Mock Data const PortfolioScreen = () => { - const [data, setData] = useState([]); + const [data, setData] = useState([]) useEffect(() => { - const data = searchAssets("") + const data = searchAssets('') .slice(0, 5) - .map((a) => ({ ...a, value: Math.floor(Math.random() * 10000) })); - setData(data); - }, []); + .map((a) => ({ ...a, value: Math.floor(Math.random() * 10000) })) + setData(data) + }, []) return ( @@ -30,7 +30,7 @@ const PortfolioScreen = () => { @@ -38,7 +38,7 @@ const PortfolioScreen = () => { My Portfolio { - router.push(paths.PORTFOLIO.ADD_ASSET); + router.push(paths.PORTFOLIO.ADD_ASSET) }} style={styles.addButton} > @@ -54,8 +54,8 @@ const PortfolioScreen = () => { { router.push( - paths.PORTFOLIO.ASSET_DETAIL + `?assetId=${asset.id}` - ); + `${paths.PORTFOLIO.ASSET_DETAIL}?assetId=${asset.id}` + ) }} key={index} style={styles.assetBlock} @@ -70,8 +70,8 @@ const PortfolioScreen = () => { - ); -}; + ) +} // Styles const styles = StyleSheet.create({ @@ -79,57 +79,62 @@ const styles = StyleSheet.create({ flex: 1, }, titleBlock: { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', marginBottom: 20, }, title: { fontSize: 24, - fontWeight: "bold", - color: "#4A148C", // Dark purple + fontWeight: 'bold', + color: COLORS.primary800, }, addButton: { - backgroundColor: "#7B1FA2", // Medium purple + backgroundColor: COLORS.primary500, width: 48, height: 48, - display: "flex", - alignItems: "center", - justifyContent: "center", + display: 'flex', + alignItems: 'center', + justifyContent: 'center', borderRadius: 25, }, addButtonText: { fontSize: SIZE_CONSTANT * 2, - color: "#FFFFFF", // White text + fontWeight: FONT_WEIGHTS.medium, + color: '#FFFFFF', // White text }, scrollViewContent: { paddingBottom: 30, }, portfolioBlock: { - flexDirection: "row", - flexWrap: "wrap", - justifyContent: "space-between", + flexDirection: 'row', + flexWrap: 'wrap', + justifyContent: 'space-between', }, assetBlock: { - backgroundColor: "#D1C4E9", // Lighter purple - width: "48%", + borderColor: COLORS.primary50, // Light purple + borderWidth: 0.5, + backgroundColor: COLORS.primary100, // Lighter purple + width: '48%', height: 100, borderRadius: 10, padding: 10, - justifyContent: "space-between", + justifyContent: 'space-between', marginBottom: 20, }, + assetName: { fontSize: 18, - fontWeight: "bold", - color: "#4A148C", // Dark purple for text + fontWeight: 'bold', + color: COLORS.primary700, }, + assetValue: { fontSize: 16, - color: "#7B1FA2", // Medium purple for value - alignSelf: "flex-end", + color: COLORS.primary800, + alignSelf: 'flex-end', }, -}); +}) -export default PortfolioScreen; +export default PortfolioScreen diff --git a/mobile/tradeverse/screens/post-detail/_components/post-header.jsx b/mobile/tradeverse/screens/post-detail/_components/post-header.jsx index 3142ab3e..68d8372c 100644 --- a/mobile/tradeverse/screens/post-detail/_components/post-header.jsx +++ b/mobile/tradeverse/screens/post-detail/_components/post-header.jsx @@ -1,21 +1,18 @@ -import { View, Text } from "react-native"; -import React from "react"; -import { - COLORS, - FONT_WEIGHTS, -} from "../../../constants/theme"; -import ProfileImage from "../../../components/images/profile-image"; +import { View, Text } from 'react-native' +import React from 'react' import { IconEye, IconMessage, IconMessageCircle2, IconThumbDown, IconThumbUp, -} from "@tabler/icons-react-native"; -import UserLink from "../../../components/links/user-link"; -import paths from "../../../config/screen-paths"; -import PostLink from "../../../components/links/post-link"; -import SubforumLink from "../../../components/links/subforum-link"; +} from '@tabler/icons-react-native' +import { COLORS, FONT_WEIGHTS } from '../../../constants/theme' +import ProfileImage from '../../../components/images/profile-image' +import UserLink from '../../../components/links/user-link' +import paths from '../../../config/screen-paths' +import PostLink from '../../../components/links/post-link' +import SubforumLink from '../../../components/links/subforum-link' // { // title: 'Title', @@ -37,152 +34,139 @@ import SubforumLink from "../../../components/links/subforum-link"; // id: 1, // }, // } -const SIZE_CONSTANT = 14; +const SIZE_CONSTANT = 14 const SIZES = { - xxSmall: SIZE_CONSTANT * 1, - xSmall: SIZE_CONSTANT * 1.2, - small: SIZE_CONSTANT * 1.4, - medium: SIZE_CONSTANT * 1.6, - large: SIZE_CONSTANT * 1.8, - xLarge: SIZE_CONSTANT * 2, - + xxSmall: SIZE_CONSTANT * 1, + xSmall: SIZE_CONSTANT * 1.2, + small: SIZE_CONSTANT * 1.4, + medium: SIZE_CONSTANT * 1.6, + large: SIZE_CONSTANT * 1.8, + xLarge: SIZE_CONSTANT * 2, } -const AuthorInfo = ({ author }) => { - return ( - - - - - - ( + + + + - - {author.name} {author.surname} - - - @{author.username} - - + src={author.avatar} + /> - - ); -}; - -const SubforumInfo = ({ subforum }) => { - return ( - - {subforum.title} + {author.name} {author.surname} - - - ); -}; - -const TagText = ({ tag, index = 0, isLast = false }) => { - return ( - - {index === 0 ? "" : " "}@{tag.value} - - ); -}; - -const DefaultText = ({ text, index = 0 }) => { - return ( - - {index === 0 ? "" : " "} - {text.value} - - ); -}; - -const InteractionInfo = ({ icon = () => {}, value }) => { - return ( - - {icon({ prop: { color: "#444" } })} - - {value} + @{author.username} - ); -}; + +) + +const SubforumInfo = ({ subforum }) => ( + + + + {subforum.title} + + + +) + +const TagText = ({ tag, index = 0, isLast = false }) => ( + + {index === 0 ? '' : ' '}@{tag.value} + +) + +const DefaultText = ({ text, index = 0 }) => ( + + {index === 0 ? '' : ' '} + {text.value} + +) + +const InteractionInfo = ({ icon = () => {}, value }) => ( + + {icon({ prop: { color: '#444' } })} + + + {value} + + + +) export default function PostHeader({ style, post }) { return ( @@ -193,15 +177,15 @@ export default function PostHeader({ style, post }) { paddingTop: SIZE_CONSTANT * 1.2, paddingBottom: SIZE_CONSTANT * 1.4, borderBottomWidth: 0.5, - borderBottomColor: "#E5E5E5", + borderBottomColor: '#E5E5E5', }} > @@ -225,11 +209,11 @@ export default function PostHeader({ style, post }) { {post.content.map((content, index) => { - if (content.type === "text") { - return ; + if (content.type === 'text') { + return } - if (content.type === "tag") { - return ; + if (content.type === 'tag') { + return } })} @@ -237,9 +221,9 @@ export default function PostHeader({ style, post }) { @@ -250,8 +234,8 @@ export default function PostHeader({ style, post }) { @@ -271,5 +255,5 @@ export default function PostHeader({ style, post }) { - ); + ) } diff --git a/mobile/tradeverse/screens/post-detail/index.jsx b/mobile/tradeverse/screens/post-detail/index.jsx index af62e2fa..f0f3f751 100644 --- a/mobile/tradeverse/screens/post-detail/index.jsx +++ b/mobile/tradeverse/screens/post-detail/index.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState } from 'react' import { View, Text, @@ -7,57 +7,54 @@ import { Image, TouchableOpacity, Dimensions, -} from "react-native"; -import { Ionicons } from "@expo/vector-icons"; // Icon library -import { useLocalSearchParams } from "expo-router"; -import { getPostById } from "../../mock-services/post"; -import PostCard from "../home-root/_components/post-card"; -import PostHeader from "./_components/post-header"; -import GlobalScreen from "../../components/ui/global-screen"; +} from 'react-native' +import { Ionicons } from '@expo/vector-icons' // Icon library +import { useLocalSearchParams } from 'expo-router' +import { getPostById } from '../../mock-services/post' +import PostCard from '../home-root/_components/post-card' +import PostHeader from './_components/post-header' +import GlobalScreen from '../../components/ui/global-screen' -const { width } = Dimensions.get("window"); // Get screen width +const { width } = Dimensions.get('window') // Get screen width // Expanded mock comments to test scrolling const mockComments = Array.from({ length: 20 }).map((_, index) => ({ id: String(index + 1), name: `User ${index + 1}`, username: `@user${index + 1}`, - text: "This is a sample comment.", + text: 'This is a sample comment.', image: null, -})); +})) const post = { - user: { name: "Daron Acemoğlu", username: "@godofinvestment", image: null }, - forum: "Stock Market Trends & Day Trading Discussions", - title: "How to pass into profitable area in stock marketing.", - text: "Economic downturns can be challenging, but they also offer opportunities for strategic investments. 💡 In uncertain times, those who adapt and stay informed can turn risk into reward.", - hashtags: ["#Stocks", "#Investing", "#MarketTrends"], + user: { name: 'Daron Acemoğlu', username: '@godofinvestment', image: null }, + forum: 'Stock Market Trends & Day Trading Discussions', + title: 'How to pass into profitable area in stock marketing.', + text: 'Economic downturns can be challenging, but they also offer opportunities for strategic investments. 💡 In uncertain times, those who adapt and stay informed can turn risk into reward.', + hashtags: ['#Stocks', '#Investing', '#MarketTrends'], stats: { views: 12300, comments: 132, likes: 132, dislikes: 132 }, -}; +} const PostScreen = () => { - const [likeStatus, setLikeStatus] = useState(null); + const [likeStatus, setLikeStatus] = useState(null) const handlePress = (type) => { - setLikeStatus((prev) => (prev === type ? null : type)); - }; + setLikeStatus((prev) => (prev === type ? null : type)) + } - const { postId } = useLocalSearchParams(); - const [data, setData] = useState(null); + const { postId } = useLocalSearchParams() + const [data, setData] = useState(null) useEffect(() => { - console.log('===================================='); - console.log('Post ID:', postId); - console.log('===================================='); - const postDetail = getPostById(postId); - setData(postDetail); - }, [postId]); + const postDetail = getPostById(postId) + setData(postDetail) + }, [postId]) const renderComment = ({ item }) => ( @@ -67,12 +64,14 @@ const PostScreen = () => { {item.text} - ); + ) if (data) { return ( - + { contentContainerStyle={{ paddingBottom: 20 }} /> - ); - } else { - return <>; + ) } -}; + return <> +} const styles = StyleSheet.create({ - container: { flex: 1, backgroundColor: "white" }, - postBlock: { padding: 15, backgroundColor: "#f3e5f5", marginBottom: 10 }, + container: { flex: 1, backgroundColor: 'white' }, + postBlock: { padding: 15, backgroundColor: '#f3e5f5', marginBottom: 10 }, postHeader: { - flexDirection: "row", - justifyContent: "space-between", + flexDirection: 'row', + justifyContent: 'space-between', marginBottom: 10, }, - userInfo: { flexDirection: "row", alignItems: "center" }, + userInfo: { flexDirection: 'row', alignItems: 'center' }, avatar: { width: 40, height: 40, borderRadius: 20, marginRight: 10 }, - username: { fontWeight: "bold", fontSize: 16 }, - handle: { color: "gray" }, - forum: { color: "purple", fontSize: 14, marginLeft: 10 }, + username: { fontWeight: 'bold', fontSize: 16 }, + handle: { color: 'gray' }, + forum: { color: 'purple', fontSize: 14, marginLeft: 10 }, postContent: { marginTop: 10 }, - title: { fontSize: 18, fontWeight: "bold", marginBottom: 5 }, + title: { fontSize: 18, fontWeight: 'bold', marginBottom: 5 }, postImage: { width: width - 30, height: 200, marginVertical: 10 }, postText: { fontSize: 16, marginBottom: 5 }, - hashtags: { flexDirection: "row", flexWrap: "wrap" }, - hashtag: { color: "purple", marginRight: 10 }, + hashtags: { flexDirection: 'row', flexWrap: 'wrap' }, + hashtag: { color: 'purple', marginRight: 10 }, postFooter: { - flexDirection: "row", - justifyContent: "space-between", + flexDirection: 'row', + justifyContent: 'space-between', marginTop: 10, }, - stat: { flexDirection: "row", alignItems: "center", marginRight: 15 }, + stat: { flexDirection: 'row', alignItems: 'center', marginRight: 15 }, commentBlock: { marginBottom: 10, paddingHorizontal: 15 }, commentText: { marginLeft: 50, fontSize: 16 }, -}); +}) -export default PostScreen; +export default PostScreen diff --git a/mobile/tradeverse/screens/profile/index.jsx b/mobile/tradeverse/screens/profile/index.jsx index 65fbc1f5..f6b60f9f 100644 --- a/mobile/tradeverse/screens/profile/index.jsx +++ b/mobile/tradeverse/screens/profile/index.jsx @@ -1,31 +1,31 @@ -import React, { useEffect, useState } from "react"; -import { View, Text, StyleSheet, Image, TouchableOpacity } from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import { Stack, useLocalSearchParams } from "expo-router"; -import PostCard from "../home-root/_components/post-card"; -import PaddedContainer from "../../components/ui/padded-container"; -import { getUserByUsername } from "../../mock-services/users"; -import { getPostsByUser } from "../../mock-services/post"; -import formatInteractionNumber from "../../util/format-number"; -import ProfileImage from "../../components/images/profile-image"; +import React, { useEffect, useState } from 'react' +import { View, Text, StyleSheet, Image, TouchableOpacity } from 'react-native' +import GlobalScreen from '../../components/ui/global-screen' +import { Stack, useLocalSearchParams } from 'expo-router' +import PostCard from '../home-root/_components/post-card' +import PaddedContainer from '../../components/ui/padded-container' +import { getUserByUsername } from '../../mock-services/users' +import { getPostsByUser } from '../../mock-services/post' +import formatInteractionNumber from '../../util/format-number' +import ProfileImage from '../../components/images/profile-image' const ProfileHeader = () => { - const [activeTab, setActiveTab] = useState("Recent"); // State for tab selection - const [postsData, setPostsData] = useState([]); - const [profile, setProfile] = useState({}); + const [activeTab, setActiveTab] = useState('Recent') // State for tab selection + const [postsData, setPostsData] = useState([]) + const [profile, setProfile] = useState({}) - const { username } = useLocalSearchParams(); + const { username } = useLocalSearchParams() useEffect(() => { - const profileResult = getUserByUsername(username); - const postsResult = getPostsByUser(username); + const profileResult = getUserByUsername(username) + const postsResult = getPostsByUser(username) - setPostsData(postsResult); - setProfile(profileResult); - }, [username]); + setPostsData(postsResult) + setProfile(profileResult) + }, [username]) if (!profile || !postsData) { - return ; + return } return ( @@ -37,7 +37,7 @@ const ProfileHeader = () => { @@ -76,16 +76,16 @@ const ProfileHeader = () => { - setActiveTab("Recent")}> + setActiveTab('Recent')}> Recent - setActiveTab("Popular")}> + setActiveTab('Popular')}> Popular @@ -96,18 +96,18 @@ const ProfileHeader = () => { ))} - ); -}; + ) +} const styles = StyleSheet.create({ upperBar: { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', }, profileInfo: { - flexDirection: "row", - alignItems: "center", + flexDirection: 'row', + alignItems: 'center', }, profileImage: { width: 70, @@ -119,62 +119,62 @@ const styles = StyleSheet.create({ }, name: { fontSize: 20, - fontWeight: "bold", + fontWeight: 'bold', }, username: { fontSize: 16, - color: "gray", + color: 'gray', }, threeDots: { paddingHorizontal: 10, }, dotsText: { fontSize: 24, - color: "gray", + color: 'gray', }, middleBar: { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', marginVertical: 20, }, stat: { - alignItems: "center", + alignItems: 'center', }, statNumber: { fontSize: 18, - fontWeight: "bold", + fontWeight: 'bold', }, statLabel: { fontSize: 14, - color: "gray", + color: 'gray', }, followButton: { - backgroundColor: "#6C63FF", + backgroundColor: '#6C63FF', paddingHorizontal: 20, paddingVertical: 8, borderRadius: 5, }, followButtonText: { - color: "white", + color: 'white', fontSize: 16, - fontWeight: "bold", + fontWeight: 'bold', }, tabSection: { - flexDirection: "row", - justifyContent: "space-around", + flexDirection: 'row', + justifyContent: 'space-around', borderTopWidth: 1, - borderTopColor: "#eee", + borderTopColor: '#eee', paddingTop: 10, }, tab: { fontSize: 16, - fontWeight: "bold", - color: "#6C63FF", + fontWeight: 'bold', + color: '#6C63FF', }, activeTab: { - textDecorationLine: "underline", + textDecorationLine: 'underline', }, -}); +}) -export default ProfileHeader; +export default ProfileHeader diff --git a/mobile/tradeverse/screens/subforum-detail/index.jsx b/mobile/tradeverse/screens/subforum-detail/index.jsx index 7117cdf4..36c93911 100644 --- a/mobile/tradeverse/screens/subforum-detail/index.jsx +++ b/mobile/tradeverse/screens/subforum-detail/index.jsx @@ -1,24 +1,20 @@ -import React, { useEffect, useState } from "react"; -import { View, Text, ScrollView, StyleSheet } from "react-native"; -import GlobalScreen from "../../components/ui/global-screen"; -import { useLocalSearchParams } from "expo-router"; -import { getSubForumById } from "../../mock-services/subforums"; -import PostCard from "../home-root/_components/post-card"; -import { COLORS, SIZE_CONSTANT } from "../../constants/theme"; +import React, { useEffect, useState } from 'react' +import { View, Text, ScrollView, StyleSheet } from 'react-native' +import GlobalScreen from '../../components/ui/global-screen' +import { useLocalSearchParams } from 'expo-router' +import { getSubForumById } from '../../mock-services/subforums' +import PostCard from '../home-root/_components/post-card' +import { COLORS, SIZE_CONSTANT } from '../../constants/theme' const SubforumScreen = () => { - const [data, setData] = useState(null); + const [data, setData] = useState(null) - const { subforumId } = useLocalSearchParams(); + const { subforumId } = useLocalSearchParams() useEffect(() => { - console.log('===================================='); - console.log('subforumId', subforumId); - console.log('===================================='); - const res = getSubForumById(subforumId); - console.log(res.title); - setData(res); - }, [subforumId]); + const res = getSubForumById(subforumId) + setData(res) + }, [subforumId]) return ( { {data && ( - {data?.title} - - - - - {`✍️ ${data?.posts?.length}`} - - + {data?.title} + {`✍️ ${data?.posts?.length}`} {data?.posts.map((post) => ( - + ))} )} - ); -}; + ) +} // Styles const styles = StyleSheet.create({ - titleBlock: { marginLeft: SIZE_CONSTANT * 1, marginBottom: 20, }, title: { fontSize: 24, - fontWeight: "bold", - color:COLORS.primary950, + fontWeight: 'bold', + color: COLORS.primary950, }, scrollViewContent: { paddingBottom: 30, }, postContainer: { - backgroundColor: "#F3E5F5", // Lightest purple + backgroundColor: '#F3E5F5', // Lightest purple borderRadius: 10, padding: 15, marginBottom: 20, }, userInfo: { - flexDirection: "row", - alignItems: "center", + flexDirection: 'row', + alignItems: 'center', marginBottom: 10, }, profilePhoto: { @@ -83,43 +72,43 @@ const styles = StyleSheet.create({ }, userName: { fontSize: 16, - fontWeight: "bold", - color: "#4A148C", + fontWeight: 'bold', + color: '#4A148C', }, userHandle: { fontSize: 14, - color: "#7B1FA2", + color: '#7B1FA2', }, postTitle: { fontSize: 18, - fontWeight: "bold", - color: "#4A148C", + fontWeight: 'bold', + color: '#4A148C', marginBottom: 10, }, postActions: { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', }, viewCount: { fontSize: 14, - color: "#7B1FA2", + color: '#7B1FA2', }, interactionButtons: { - flexDirection: "row", - alignItems: "center", + flexDirection: 'row', + alignItems: 'center', }, actionButton: { marginLeft: 15, fontSize: 14, - color: "#7B1FA2", + color: '#7B1FA2', }, likedButton: { - color: "#E91E63", // Red for liked + color: '#E91E63', // Red for liked }, dislikedButton: { - color: "#D32F2F", // Dark red for disliked + color: '#D32F2F', // Dark red for disliked }, -}); +}) -export default SubforumScreen; +export default SubforumScreen diff --git a/mobile/tradeverse/screens/welcoming/index.jsx b/mobile/tradeverse/screens/welcoming/index.jsx index fb4de51c..04112c5e 100644 --- a/mobile/tradeverse/screens/welcoming/index.jsx +++ b/mobile/tradeverse/screens/welcoming/index.jsx @@ -1,194 +1,187 @@ -import React, { useContext, useState } from "react"; +import React, { useContext, useState } from 'react' import { Text, StyleSheet, TouchableOpacity, View, Pressable, -} from "react-native"; +} from 'react-native' +import { launchImageLibraryAsync } from 'expo-image-picker' import { COLORS, FONT_WEIGHTS, SIZE_CONSTANT, SIZES, -} from "../../constants/theme"; -import GlobalScreen from "../../components/ui/global-screen"; -import MainButton from "../../components/buttons/main-button"; -import ProfileImage from "../../components/images/profile-image"; -import { launchImageLibraryAsync } from "expo-image-picker"; -import { AuthContext } from "../../auth/context"; +} from '../../constants/theme' +import GlobalScreen from '../../components/ui/global-screen' +import MainButton from '../../components/buttons/main-button' +import ProfileImage from '../../components/images/profile-image' +import { AuthContext } from '../../auth/context' export default function WelcomingScreen() { - const [currentStep, setCurrentStep] = useState("profile"); // user_tag, profile - const [selectedImage, setSelectedImage] = useState(null); - const [selectedUserTag, setSelectedUserTag] = useState(null); + const [currentStep, setCurrentStep] = useState('profile') // user_tag, profile + const [selectedImage, setSelectedImage] = useState(null) + const [selectedUserTag, setSelectedUserTag] = useState(null) - const { setIsTagSelected } = useContext(AuthContext); + const { setIsTagSelected } = useContext(AuthContext) const openImageGallery = async () => { const result = await launchImageLibraryAsync({ - mediaTypes: "Images", + mediaTypes: 'Images', allowsEditing: true, aspect: [4, 3], quality: 1, - }); + }) if (!result.canceled) { - setSelectedImage(result.assets[0]); + setSelectedImage(result.assets[0]) } - }; - - + } const options = [ - { label: "Beginner", icon: "🏁", value: "beginner" }, - { label: "Day Trader", icon: "📊", value: "day_trader" }, - { label: "Investor", icon: "💼", value: "investor" }, - { label: "Finance Enthusiast", icon: "💸", value: "finance_enthusiast" }, - { label: "Financial Analyst", icon: "📈", value: "finance_analyst" }, - ]; + { label: 'Beginner', icon: '🏁', value: 'beginner' }, + { label: 'Day Trader', icon: '📊', value: 'day_trader' }, + { label: 'Investor', icon: '💼', value: 'investor' }, + { label: 'Finance Enthusiast', icon: '💸', value: 'finance_enthusiast' }, + { label: 'Financial Analyst', icon: '📈', value: 'finance_analyst' }, + ] const handleNext = () => { - if (currentStep === "profile") { - setCurrentStep("user_tag"); + if (currentStep === 'profile') { + setCurrentStep('user_tag') } else { - setIsTagSelected(true); + setIsTagSelected(true) } - }; - - const ProfileView = () => { - return ( - - ( + + + Set a profile picture + + + - Set a profile picture - - + + + + + + - - - - - + Skip for now + + + {selectedImage && ( - - - - Skip for now - - - {selectedImage && ( - - )} - - - ); - }; - - const UserTagView = () => { - return ( - - - What is your experience with finance ? - - - {options.map((option, index) => ( - setSelectedUserTag(option.value)} - key={index} - style={styles.optionButton(option.value === selectedUserTag)} - > - - {option.label} - - {option.icon} - - ))} - - + )} - ); - }; + + ) + + const UserTagView = () => ( + + + What is your experience with finance ? + + + {options.map((option, index) => ( + setSelectedUserTag(option.value)} + key={index} + style={styles.optionButton(option.value === selectedUserTag)} + > + + {option.label} + + {option.icon} + + ))} + + + + ) return ( Welcome Huseyin ! - {currentStep === "user_tag" && } - {currentStep === "profile" && } + {currentStep === 'user_tag' && } + {currentStep === 'profile' && } - ); + ) } const styles = StyleSheet.create({ container: { flex: 1, - backgroundColor: "#FFFFFF", + backgroundColor: '#FFFFFF', padding: 20, }, gradientText: { - alignSelf: "stretch", + alignSelf: 'stretch', marginTop: 40, marginBottom: 40, }, welcomeText: { fontSize: SIZE_CONSTANT * 2.4, fontWeight: FONT_WEIGHTS.bold, - textAlign: "center", + textAlign: 'center', color: COLORS.primary700, marginBottom: SIZE_CONSTANT * 8, letterSpacing: -0.03, @@ -196,37 +189,33 @@ const styles = StyleSheet.create({ questionText: { fontSize: SIZE_CONSTANT * 1.6, - color: "#1D1B4B", + color: '#1D1B4B', marginBottom: 20, fontWeight: FONT_WEIGHTS.medium, letterSpacing: -0.3, }, - optionButton: (isSelected = false) => { - return { - flexDirection: "row", - justifyContent: "space-between", - alignItems: "center", - backgroundColor: isSelected ? COLORS.primary500 : "#EEF2FF", - padding: 15, - paddingHorizontal: SIZE_CONSTANT * 2, - borderRadius: SIZE_CONSTANT * 0.6, - marginBottom: SIZE_CONSTANT * 1.2, - height: SIZE_CONSTANT * 6, - }; - }, - optionText: (isSelected = false) => { - return { - fontSize: SIZES.medium, - color: isSelected ? COLORS.white : COLORS.primary800, - fontWeight: FONT_WEIGHTS.medium, - }; - }, + optionButton: (isSelected = false) => ({ + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + backgroundColor: isSelected ? COLORS.primary500 : '#EEF2FF', + padding: 15, + paddingHorizontal: SIZE_CONSTANT * 2, + borderRadius: SIZE_CONSTANT * 0.6, + marginBottom: SIZE_CONSTANT * 1.2, + height: SIZE_CONSTANT * 6, + }), + optionText: (isSelected = false) => ({ + fontSize: SIZES.medium, + color: isSelected ? COLORS.white : COLORS.primary800, + fontWeight: FONT_WEIGHTS.medium, + }), continueButton: { - flexDirection: "row", - justifyContent: "center", - alignItems: "center", + flexDirection: 'row', + justifyContent: 'center', + alignItems: 'center', backgroundColor: COLORS.primary500, padding: 15, height: SIZE_CONSTANT * 4.4, @@ -239,4 +228,4 @@ const styles = StyleSheet.create({ fontWeight: FONT_WEIGHTS.medium, color: COLORS.white, }, -}); +}) diff --git a/mobile/tradeverse/services/_axios.js b/mobile/tradeverse/services/_axios.js index 960dd577..66490de8 100644 --- a/mobile/tradeverse/services/_axios.js +++ b/mobile/tradeverse/services/_axios.js @@ -1,27 +1,23 @@ /* eslint-disable no-param-reassign */ -import AsyncStorage from '@react-native-async-storage/async-storage'; -import axios from 'axios'; -import { Platform } from 'react-native'; +import AsyncStorage from '@react-native-async-storage/async-storage' +import axios from 'axios' const api = axios.create({ -baseURL: 'http://35.246.188.121:8080/api', + baseURL: 'http://35.246.188.121:8080/api', headers: { - 'content-type': 'application/json' - } -}); - + 'content-type': 'application/json', + }, +}) api.interceptors.request.use( - async config => { - const token = await AsyncStorage.getItem('authToken'); + async (config) => { + const token = await AsyncStorage.getItem('authToken') if (token) { - config.headers.Authorization = `Bearer ${token}`; + config.headers.Authorization = `Bearer ${token}` } - return config; + return config }, - error => { - return Promise.reject(error); - } -); + (error) => Promise.reject(error) +) -export default api; +export default api diff --git a/mobile/tradeverse/services/auth.js b/mobile/tradeverse/services/auth.js index a8a1469e..0a2b5645 100644 --- a/mobile/tradeverse/services/auth.js +++ b/mobile/tradeverse/services/auth.js @@ -1,64 +1,60 @@ -import AsyncStorage from "@react-native-async-storage/async-storage"; -import api from "./_axios"; +import AsyncStorage from '@react-native-async-storage/async-storage' +import api from './_axios' -export async function getMe({ authToken = "", username = "" }) { +export async function getMe({ authToken = '', username = '' }) { try { const response = await api({ - url: "/auth/get-user-details", - method: "POST", - // method: "GET", // In future + url: '/auth/get-user-details', + method: 'POST', + // method: "GET", // In future headers: { Authorization: authToken ? `Bearer ${authToken}` : null, }, - data: username ? { username } : {}, //TODO:/ Delete later - }); - return response.data; + // TODO:/ Delete later + data: username ? { username } : {}, + }) + + return response.data } catch (error) { - console.error("Get me failed", error); + throw new Error(error.message || 'Kullanıcı bilgileri alınamadı') } - return null; } export async function login({ username, password }) { - console.log(username, password); - try { - await AsyncStorage.removeItem("authToken"); + await AsyncStorage.removeItem('authToken') const response = await api({ - url: "/auth/login", - method: "POST", + url: '/auth/login', + method: 'POST', headers: { Authorization: undefined, }, data: { username, password }, - }); - await AsyncStorage.removeItem("authToken"); - console.log(response.data); + }) + await AsyncStorage.removeItem('authToken') - api.defaults.headers.common.Authorization = `Bearer ${response.data.token}`; - AsyncStorage.setItem("authToken", response.data.token); - return response; + api.defaults.headers.common.Authorization = `Bearer ${response.data.token}` + AsyncStorage.setItem('authToken', response.data.token) + return response } catch (error) { - throw new Error(error.message ?? "Giriş başarısız"); + throw new Error(error.message || 'Giriş başarısız') } } export async function register({ email, password, - name = "", + name = '', username, tag = 0, - profilePhoto = "", + profilePhoto = '', }) { try { - console.log(email, password, name, username, tag, profilePhoto); - - await AsyncStorage.removeItem("authToken"); + await AsyncStorage.removeItem('authToken') const response = await api({ - url: "/auth/register", - method: "POST", + url: '/auth/register', + method: 'POST', data: { email, password, @@ -70,17 +66,13 @@ export async function register({ headers: { Authorization: undefined, }, - }); - await AsyncStorage.removeItem("authToken"); - console.log(response.data); + }) + await AsyncStorage.removeItem('authToken') - api.defaults.headers.common.Authorization = `Bearer ${response.data.token}`; - AsyncStorage.setItem("authToken", response.data.token); - return response; + api.defaults.headers.common.Authorization = `Bearer ${response.data.token}` + AsyncStorage.setItem('authToken', response.data.token) + return response } catch (error) { - console.log("basarisiz"); - console.log(error); - - throw new Error(error.message ?? "Kayıt başarısız"); + throw new Error(error.message || 'Kayıt başarısız') } } diff --git a/mobile/tradeverse/services/user.js b/mobile/tradeverse/services/user.js index 50186ca6..adc16a3c 100644 --- a/mobile/tradeverse/services/user.js +++ b/mobile/tradeverse/services/user.js @@ -1,25 +1,19 @@ -import api from "./_axios"; +import api from './_axios' -export async function getUserByUsername({ username }) { - console.log("===================================="); - console.log("params", { username }); - console.log("===================================="); +export default async function getUserByUsername({ username }) { try { const response = await api({ - url: "/auth/get-user-details", - method: "POST", + url: '/auth/get-user-details', + method: 'POST', headers: { Authorization: undefined, }, data: { username }, - }); - console.log("===================================="); - console.log("get user by username"); - console.log(response.data); - console.log("===================================="); - return response.data; + }) + + return response.data } catch (error) { - console.error("Get user by username failed", error); + // console.error('Get user by username failed', error) } - return null; + return null } diff --git a/mobile/tradeverse/tsconfig.json b/mobile/tradeverse/tsconfig.json index b78065bb..0c7d5c9d 100644 --- a/mobile/tradeverse/tsconfig.json +++ b/mobile/tradeverse/tsconfig.json @@ -3,15 +3,17 @@ "compilerOptions": { "strict": true, "paths": { - "@/*": [ - "./*" - ] + "@/*": ["./*"] } }, "include": [ "**/*.ts", + "**/*.js", "**/*.tsx", ".expo/types/**/*.ts", - "expo-env.d.ts" -, "app/(tabs)/_layout.jsx", "app/_layout.jsx" ] + "expo-env.d.ts", + "app/(tabs)/_layout.jsx", + "app/_layout.jsx", + "components/inputs/TextField.style.jsx" + ] } diff --git a/mobile/tradeverse/util/format-number.js b/mobile/tradeverse/util/format-number.js index 641c89b2..0cf54c11 100644 --- a/mobile/tradeverse/util/format-number.js +++ b/mobile/tradeverse/util/format-number.js @@ -1,16 +1,17 @@ function formatInteractionNumber(num) { - if(num === undefined || num === null) { - return "0"; - } - if (num >= 1000000000) { - return (num / 1000000000).toFixed(1).replace(/\.0$/, '') + 'B'; - } else if (num >= 1000000) { - return (num / 1000000).toFixed(1).replace(/\.0$/, '') + 'M'; - } else if (num >= 1000) { - return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'k'; - } else { - return num.toString(); - } + if (num === undefined || num === null) { + return '0' + } + if (num >= 1000000000) { + return `${(num / 1000000000).toFixed(1).replace(/\.0$/, '')}B` + } + if (num >= 1000000) { + return `${(num / 1000000).toFixed(1).replace(/\.0$/, '')}M` + } + if (num >= 1000) { + return `${(num / 1000).toFixed(1).replace(/\.0$/, '')}k` + } + return num.toString() } -export default formatInteractionNumber; \ No newline at end of file +export default formatInteractionNumber diff --git a/web/tradeverse/public/logo_new.png b/web/tradeverse/public/logo_new.png new file mode 100644 index 00000000..a73c63d1 Binary files /dev/null and b/web/tradeverse/public/logo_new.png differ diff --git a/web/tradeverse/src/App.css b/web/tradeverse/src/App.css index 56fb0111..35491104 100644 --- a/web/tradeverse/src/App.css +++ b/web/tradeverse/src/App.css @@ -79,7 +79,7 @@ /* Register button specific styles */ .registerButton { - background-color: #F48023; + background-color: #5D5FEF; color: white; } diff --git a/web/tradeverse/src/components/structure/RenderNavigation.js b/web/tradeverse/src/components/structure/RenderNavigation.js index a03a5099..b4560709 100644 --- a/web/tradeverse/src/components/structure/RenderNavigation.js +++ b/web/tradeverse/src/components/structure/RenderNavigation.js @@ -82,11 +82,16 @@ export const RenderMenu = () => {
- Tradeverse Logo + Tradeverse Logo
+
+ + + +
{user.isAuthenticated ? (
@@ -112,7 +117,7 @@ export const RenderMenu = () => { )}
- +
); } \ No newline at end of file diff --git a/web/tradeverse/src/components/structure/navigation.js b/web/tradeverse/src/components/structure/navigation.js index dc7f42b3..19a250e8 100644 --- a/web/tradeverse/src/components/structure/navigation.js +++ b/web/tradeverse/src/components/structure/navigation.js @@ -2,7 +2,7 @@ import Home from "../../pages/Home" import About from "../../pages/About" import Login from "../../pages/Login" import SignUp from "../../pages/SignUp" - +import Search from "../../pages/Search" export const nav = [ { path: "/", name: "Home", element: , isMenu: false, isPrivate: false , isAdmin:false}, @@ -13,5 +13,6 @@ export const nav = [ { path: "/notfound", name: "Not Found", element: , isMenu: false, isPrivate: false , isAdmin:false}, { path: "/notauthorized", name: "Not Authorized", element: , isMenu: false, isPrivate: false , isAdmin:false}, { path: "/adduser", name: "Add User", element: , isMenu: false, isPrivate: false, isAdmin: false }, + { path: "/search", name: "Search", element: , isMenu: false, isPrivate: false, isAdmin: false }, ] \ No newline at end of file diff --git a/web/tradeverse/src/components/styles/feed.css b/web/tradeverse/src/components/styles/feed.css index 382f0355..a3ee3e6c 100644 --- a/web/tradeverse/src/components/styles/feed.css +++ b/web/tradeverse/src/components/styles/feed.css @@ -38,7 +38,7 @@ } .sortButton.active { - background-color: darkorange; + background-color: #5D5FEF; color: white; } diff --git a/web/tradeverse/src/pages/Search.js b/web/tradeverse/src/pages/Search.js new file mode 100644 index 00000000..5a8aa7b9 --- /dev/null +++ b/web/tradeverse/src/pages/Search.js @@ -0,0 +1,53 @@ +import React, { useState } from 'react'; +import Feed from "../components/structure/feed"; +import mockData from "../data/mockData"; + +const Search = () => { + const [searchTerm, setSearchTerm] = useState(''); + const [filteredSubforums, setFilteredSubforums] = useState(mockData.subforums); + + // Filter function to find matching subforums + const handleSearch = (event) => { + const term = event.target.value.toLowerCase(); + setSearchTerm(term); + + // Filter posts within each subforum based on the search term in name, description, or tags + const newFilteredSubforums = mockData.subforums.map((subforum) => { + const filteredPosts = subforum.posts.filter((post) => + (post.name && post.name.toLowerCase().includes(term)) || + (post.description && post.description.toLowerCase().includes(term)) || + (post.tags && post.tags.some(tag => tag && tag.toLowerCase().includes(term))) + ); + + // Return subforums only if they have matching posts + return { ...subforum, posts: filteredPosts }; + }).filter(subforum => subforum.posts.length > 0); + + setFilteredSubforums(newFilteredSubforums); + }; + + + return ( +
+ + + {/* Render Feed component for each filtered subforum */} + {filteredSubforums.map((subforum) => ( + + ))} + + {/* If no results, show a message */} + {filteredSubforums.length === 0 && ( +

No results found for "{searchTerm}"

+ )} +
+ ); +}; + +export default Search; diff --git a/web/tradeverse/src/pages/styles/Login.css b/web/tradeverse/src/pages/styles/Login.css index 282d543f..3ffda493 100644 --- a/web/tradeverse/src/pages/styles/Login.css +++ b/web/tradeverse/src/pages/styles/Login.css @@ -42,7 +42,7 @@ height: 38px; margin-top: 10px; padding: 0 ; - background-color: #F48023; + background-color: #5D5FEF; color: white; font-size: 16px; font-weight: bold;