├── src ├── services │ ├── index.ts │ └── auth.service.ts ├── vite-env.d.ts ├── pages │ ├── Login │ │ ├── index.ts │ │ └── Login.tsx │ └── Private │ │ ├── Home │ │ ├── index.ts │ │ └── Home.tsx │ │ ├── Dashboard │ │ ├── index.ts │ │ └── Dashboard.tsx │ │ ├── index.ts │ │ └── Private.tsx ├── components │ └── Logout │ │ ├── index.ts │ │ └── Logout.tsx ├── models │ ├── roles.ts │ ├── index.ts │ ├── user.model.ts │ └── routes.ts ├── guards │ ├── index.ts │ ├── rol.guard.tsx │ └── auth.guard.tsx ├── utilities │ ├── index.ts │ ├── localStorage.utility.tsx │ └── RoutesWithNotFound.utility.tsx ├── main.tsx ├── redux │ ├── store.ts │ └── states │ │ └── user.ts ├── App.css ├── index.css ├── App.tsx └── assets │ └── react.svg ├── vite.config.ts ├── tsconfig.node.json ├── .gitignore ├── index.html ├── tsconfig.json ├── package.json ├── LICENSE ├── public └── vite.svg └── pnpm-lock.yaml /src/services/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth.service'; 2 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/pages/Login/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Login } from './Login'; 2 | -------------------------------------------------------------------------------- /src/pages/Private/Home/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Home } from './Home'; 2 | -------------------------------------------------------------------------------- /src/components/Logout/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Logout } from './Logout'; 2 | -------------------------------------------------------------------------------- /src/models/roles.ts: -------------------------------------------------------------------------------- 1 | export enum Roles { 2 | ADMIN = 'admin', 3 | USER = 'user' 4 | } 5 | -------------------------------------------------------------------------------- /src/pages/Private/Dashboard/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Dashboard } from './Dashboard'; 2 | -------------------------------------------------------------------------------- /src/models/index.ts: -------------------------------------------------------------------------------- 1 | export * from './roles'; 2 | export * from './routes'; 3 | export * from './user.model'; 4 | -------------------------------------------------------------------------------- /src/pages/Private/Home/Home.tsx: -------------------------------------------------------------------------------- 1 | function Home() { 2 | return
Home
; 3 | } 4 | export default Home; 5 | -------------------------------------------------------------------------------- /src/guards/index.ts: -------------------------------------------------------------------------------- 1 | export { default as AuthGuard } from './auth.guard'; 2 | export { default as RoleGuard } from './rol.guard'; 3 | -------------------------------------------------------------------------------- /src/pages/Private/Dashboard/Dashboard.tsx: -------------------------------------------------------------------------------- 1 | function Dashboard() { 2 | return
Dashboard
; 3 | } 4 | export default Dashboard; 5 | -------------------------------------------------------------------------------- /src/pages/Private/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dashboard'; 2 | export * from './Home'; 3 | export { default as Private } from './Private'; 4 | -------------------------------------------------------------------------------- /src/utilities/index.ts: -------------------------------------------------------------------------------- 1 | export { default as RoutesWithNotFound } from './RoutesWithNotFound.utility'; 2 | export * from './localStorage.utility'; 3 | -------------------------------------------------------------------------------- /src/models/user.model.ts: -------------------------------------------------------------------------------- 1 | import { Roles } from './roles'; 2 | 3 | export interface UserInfo { 4 | id: number; 5 | name: string; 6 | email: string; 7 | rol: Roles; 8 | } 9 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import ReactDOM from 'react-dom/client'; 2 | import App from './App'; 3 | import './index.css'; 4 | 5 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(); 6 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()] 7 | }) 8 | -------------------------------------------------------------------------------- /src/models/routes.ts: -------------------------------------------------------------------------------- 1 | export const PublicRoutes = { 2 | LOGIN: 'login' 3 | }; 4 | 5 | export const PrivateRoutes = { 6 | PRIVATE: 'private', 7 | DASHBOARD: 'Dashboard', 8 | HOME: 'Home' 9 | }; 10 | -------------------------------------------------------------------------------- /src/services/auth.service.ts: -------------------------------------------------------------------------------- 1 | const baseUrl = 'https://rickandmortyapi.com/api/'; 2 | const characterUrl = baseUrl + 'character/'; 3 | 4 | export const getMorty = () => { 5 | return fetch(characterUrl + '2').then(res => res.json()); 6 | }; 7 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /src/utilities/localStorage.utility.tsx: -------------------------------------------------------------------------------- 1 | export const persistLocalStorage = (key: string, value: T) => { 2 | localStorage.setItem(key, JSON.stringify({ ...value })); 3 | }; 4 | 5 | export const clearLocalStorage = (key: string) => { 6 | localStorage.removeItem(key); 7 | }; 8 | -------------------------------------------------------------------------------- /src/redux/store.ts: -------------------------------------------------------------------------------- 1 | import { configureStore } from '@reduxjs/toolkit'; 2 | import { UserInfo } from '../models'; 3 | import userSliceReducer from './states/user'; 4 | 5 | export interface AppStore { 6 | user: UserInfo; 7 | } 8 | 9 | export default configureStore({ 10 | reducer: { 11 | user: userSliceReducer 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /src/utilities/RoutesWithNotFound.utility.tsx: -------------------------------------------------------------------------------- 1 | import { Route, Routes } from 'react-router-dom'; 2 | 3 | interface Props { 4 | children: JSX.Element[] | JSX.Element; 5 | } 6 | function RoutesWithNotFound({ children }: Props) { 7 | return ( 8 | 9 | {children} 10 | Not Found} /> 11 | 12 | ); 13 | } 14 | export default RoutesWithNotFound; 15 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/guards/rol.guard.tsx: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux'; 2 | import { Navigate, Outlet } from 'react-router-dom'; 3 | import { PrivateRoutes, PublicRoutes, Roles } from '../models'; 4 | import { AppStore } from '../redux/store'; 5 | 6 | interface Props { 7 | rol: Roles; 8 | } 9 | 10 | function RoleGuard({ rol }: Props) { 11 | const userState = useSelector((store: AppStore) => store.user); 12 | return userState.rol === rol ? : ; 13 | } 14 | export default RoleGuard; 15 | -------------------------------------------------------------------------------- /src/components/Logout/Logout.tsx: -------------------------------------------------------------------------------- 1 | import { useDispatch } from 'react-redux'; 2 | import { useNavigate } from 'react-router-dom'; 3 | import { PublicRoutes } from '../../models'; 4 | import { resetUser, UserKey } from '../../redux/states/user'; 5 | import { clearLocalStorage } from '../../utilities'; 6 | 7 | function Logout() { 8 | const navigate = useNavigate(); 9 | const dispatch = useDispatch(); 10 | const logOut = () => { 11 | clearLocalStorage(UserKey); 12 | dispatch(resetUser()); 13 | navigate(PublicRoutes.LOGIN, { replace: true }); 14 | }; 15 | return ; 16 | } 17 | export default Logout; 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /src/pages/Private/Private.tsx: -------------------------------------------------------------------------------- 1 | import { lazy } from 'react'; 2 | import { Navigate, Route } from 'react-router-dom'; 3 | import { PrivateRoutes } from '../../models'; 4 | import { RoutesWithNotFound } from '../../utilities'; 5 | 6 | const Dashboard = lazy(() => import('./Dashboard/Dashboard')); 7 | const Home = lazy(() => import('./Home/Home')); 8 | 9 | function Private() { 10 | return ( 11 | 12 | } /> 13 | } /> 14 | } /> 15 | 16 | ); 17 | } 18 | export default Private; 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gentleman-router", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@reduxjs/toolkit": "^1.8.4", 13 | "@types/react-redux": "^7.1.24", 14 | "@types/react-router-dom": "^5.3.3", 15 | "react": "^18.2.0", 16 | "react-dom": "^18.2.0", 17 | "react-redux": "^8.0.2", 18 | "react-router-dom": "^6.3.0" 19 | }, 20 | "devDependencies": { 21 | "@types/react": "^18.0.17", 22 | "@types/react-dom": "^18.0.6", 23 | "@vitejs/plugin-react": "^2.0.1", 24 | "typescript": "^4.6.4", 25 | "vite": "^3.0.7" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | max-width: 1280px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | text-align: center; 6 | } 7 | 8 | .logo { 9 | height: 6em; 10 | padding: 1.5em; 11 | will-change: filter; 12 | } 13 | .logo:hover { 14 | filter: drop-shadow(0 0 2em #646cffaa); 15 | } 16 | .logo.react:hover { 17 | filter: drop-shadow(0 0 2em #61dafbaa); 18 | } 19 | 20 | @keyframes logo-spin { 21 | from { 22 | transform: rotate(0deg); 23 | } 24 | to { 25 | transform: rotate(360deg); 26 | } 27 | } 28 | 29 | @media (prefers-reduced-motion: no-preference) { 30 | a:nth-of-type(2) .logo { 31 | animation: logo-spin infinite 20s linear; 32 | } 33 | } 34 | 35 | .card { 36 | padding: 2em; 37 | } 38 | 39 | .read-the-docs { 40 | color: #888; 41 | } 42 | -------------------------------------------------------------------------------- /src/guards/auth.guard.tsx: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux'; 2 | import { Navigate, Outlet } from 'react-router-dom'; 3 | import { PrivateRoutes, PublicRoutes } from '../models'; 4 | import { Private } from '../pages/Private'; 5 | import { AppStore } from '../redux/store'; 6 | 7 | interface Props { 8 | privateValidation: boolean; 9 | } 10 | 11 | const PrivateValidationFragment = ; 12 | const PublicValidationFragment = ; 13 | 14 | export const AuthGuard = ({ privateValidation }: Props) => { 15 | const userState = useSelector((store: AppStore) => store.user); 16 | return userState.name ? ( 17 | privateValidation ? ( 18 | PrivateValidationFragment 19 | ) : ( 20 | PublicValidationFragment 21 | ) 22 | ) : ( 23 | 24 | ); 25 | }; 26 | 27 | export default AuthGuard; 28 | -------------------------------------------------------------------------------- /src/pages/Login/Login.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | import { useDispatch } from 'react-redux'; 3 | import { useNavigate } from 'react-router-dom'; 4 | import { PrivateRoutes, PublicRoutes, Roles } from '../../models'; 5 | import { createUser, resetUser, UserKey } from '../../redux/states/user'; 6 | import { getMorty } from '../../services'; 7 | import { clearLocalStorage } from '../../utilities'; 8 | 9 | function Login() { 10 | const dispatch = useDispatch(); 11 | const navigate = useNavigate(); 12 | 13 | useEffect(() => { 14 | clearLocalStorage(UserKey); 15 | dispatch(resetUser()); 16 | navigate(`/${PublicRoutes.LOGIN}`, { replace: true }); 17 | }, []); 18 | 19 | const login = async () => { 20 | try { 21 | const result = await getMorty(); 22 | dispatch(createUser({ ...result, rol: Roles.USER })); 23 | navigate(`/${PrivateRoutes.PRIVATE}`, { replace: true }); 24 | } catch (error) {} 25 | }; 26 | return ( 27 |
28 |

HOLA ESTE ES EL LOGIN

29 | 30 |
31 | ); 32 | } 33 | export default Login; 34 | -------------------------------------------------------------------------------- /src/redux/states/user.ts: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | import { UserInfo } from '../../models'; 3 | import { clearLocalStorage, persistLocalStorage } from '../../utilities'; 4 | 5 | export const EmptyUserState: UserInfo = { 6 | id: 0, 7 | name: '', 8 | email: '' 9 | }; 10 | 11 | export const UserKey = 'user'; 12 | 13 | export const userSlice = createSlice({ 14 | name: 'user', 15 | initialState: localStorage.getItem('user') ? JSON.parse(localStorage.getItem('user') as string) : EmptyUserState, 16 | reducers: { 17 | createUser: (state, action) => { 18 | persistLocalStorage(UserKey, action.payload); 19 | return action.payload; 20 | }, 21 | updateUser: (state, action) => { 22 | const result = { ...state, ...action.payload }; 23 | persistLocalStorage(UserKey, result); 24 | return result; 25 | }, 26 | resetUser: () => { 27 | clearLocalStorage(UserKey); 28 | return EmptyUserState; 29 | } 30 | } 31 | }); 32 | 33 | export const { createUser, updateUser, resetUser } = userSlice.actions; 34 | 35 | export default userSlice.reducer; 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Gentleman-Programming 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, Avenir, Helvetica, Arial, sans-serif; 3 | font-size: 16px; 4 | line-height: 24px; 5 | font-weight: 400; 6 | 7 | color-scheme: light dark; 8 | color: rgba(255, 255, 255, 0.87); 9 | background-color: #242424; 10 | 11 | font-synthesis: none; 12 | text-rendering: optimizeLegibility; 13 | -webkit-font-smoothing: antialiased; 14 | -moz-osx-font-smoothing: grayscale; 15 | -webkit-text-size-adjust: 100%; 16 | } 17 | 18 | a { 19 | font-weight: 500; 20 | color: #646cff; 21 | text-decoration: inherit; 22 | } 23 | a:hover { 24 | color: #535bf2; 25 | } 26 | 27 | body { 28 | margin: 0; 29 | display: flex; 30 | place-items: center; 31 | min-width: 320px; 32 | min-height: 100vh; 33 | } 34 | 35 | h1 { 36 | font-size: 3.2em; 37 | line-height: 1.1; 38 | } 39 | 40 | button { 41 | border-radius: 8px; 42 | border: 1px solid transparent; 43 | padding: 0.6em 1.2em; 44 | font-size: 1em; 45 | font-weight: 500; 46 | font-family: inherit; 47 | background-color: #1a1a1a; 48 | cursor: pointer; 49 | transition: border-color 0.25s; 50 | } 51 | button:hover { 52 | border-color: #646cff; 53 | } 54 | button:focus, 55 | button:focus-visible { 56 | outline: 4px auto -webkit-focus-ring-color; 57 | } 58 | 59 | @media (prefers-color-scheme: light) { 60 | :root { 61 | color: #213547; 62 | background-color: #ffffff; 63 | } 64 | a:hover { 65 | color: #747bff; 66 | } 67 | button { 68 | background-color: #f9f9f9; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { lazy, Suspense } from 'react'; 2 | import { Provider } from 'react-redux'; 3 | import { BrowserRouter, Navigate, Route } from 'react-router-dom'; 4 | import './App.css'; 5 | import { Logout } from './components/Logout'; 6 | import { AuthGuard, RoleGuard } from './guards'; 7 | import { PrivateRoutes, PublicRoutes, Roles } from './models'; 8 | import { Dashboard } from './pages/Private'; 9 | import store from './redux/store'; 10 | import { RoutesWithNotFound } from './utilities'; 11 | 12 | const Login = lazy(() => import('./pages/Login/Login')); 13 | const Private = lazy(() => import('./pages/Private/Private')); 14 | 15 | function App() { 16 | return ( 17 |
18 | Cargando}> 19 | 20 | 21 | 22 | 23 | } /> 24 | } /> 25 | }> 26 | } /> 27 | 28 | }> 29 | } /> 30 | 31 | 32 | 33 | 34 | 35 |
36 | ); 37 | } 38 | 39 | export default App; 40 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@reduxjs/toolkit': ^1.8.4 5 | '@types/react': ^18.0.17 6 | '@types/react-dom': ^18.0.6 7 | '@types/react-redux': ^7.1.24 8 | '@types/react-router-dom': ^5.3.3 9 | '@vitejs/plugin-react': ^2.0.1 10 | react: ^18.2.0 11 | react-dom: ^18.2.0 12 | react-redux: ^8.0.2 13 | react-router-dom: ^6.3.0 14 | typescript: ^4.6.4 15 | vite: ^3.0.7 16 | 17 | dependencies: 18 | '@reduxjs/toolkit': 1.8.4_react-redux@8.0.2+react@18.2.0 19 | '@types/react-redux': 7.1.24 20 | '@types/react-router-dom': 5.3.3 21 | react: 18.2.0 22 | react-dom: 18.2.0_react@18.2.0 23 | react-redux: 8.0.2_ff80cd9dfb626a6c6c4251864122e347 24 | react-router-dom: 6.3.0_react-dom@18.2.0+react@18.2.0 25 | 26 | devDependencies: 27 | '@types/react': 18.0.17 28 | '@types/react-dom': 18.0.6 29 | '@vitejs/plugin-react': 2.0.1_vite@3.0.7 30 | typescript: 4.7.4 31 | vite: 3.0.7 32 | 33 | packages: 34 | 35 | /@ampproject/remapping/2.2.0: 36 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 37 | engines: {node: '>=6.0.0'} 38 | dependencies: 39 | '@jridgewell/gen-mapping': 0.1.1 40 | '@jridgewell/trace-mapping': 0.3.15 41 | dev: true 42 | 43 | /@babel/code-frame/7.18.6: 44 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 45 | engines: {node: '>=6.9.0'} 46 | dependencies: 47 | '@babel/highlight': 7.18.6 48 | dev: true 49 | 50 | /@babel/compat-data/7.18.8: 51 | resolution: {integrity: sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==} 52 | engines: {node: '>=6.9.0'} 53 | dev: true 54 | 55 | /@babel/core/7.18.10: 56 | resolution: {integrity: sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==} 57 | engines: {node: '>=6.9.0'} 58 | dependencies: 59 | '@ampproject/remapping': 2.2.0 60 | '@babel/code-frame': 7.18.6 61 | '@babel/generator': 7.18.12 62 | '@babel/helper-compilation-targets': 7.18.9_@babel+core@7.18.10 63 | '@babel/helper-module-transforms': 7.18.9 64 | '@babel/helpers': 7.18.9 65 | '@babel/parser': 7.18.11 66 | '@babel/template': 7.18.10 67 | '@babel/traverse': 7.18.11 68 | '@babel/types': 7.18.10 69 | convert-source-map: 1.8.0 70 | debug: 4.3.4 71 | gensync: 1.0.0-beta.2 72 | json5: 2.2.1 73 | semver: 6.3.0 74 | transitivePeerDependencies: 75 | - supports-color 76 | dev: true 77 | 78 | /@babel/generator/7.18.12: 79 | resolution: {integrity: sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==} 80 | engines: {node: '>=6.9.0'} 81 | dependencies: 82 | '@babel/types': 7.18.10 83 | '@jridgewell/gen-mapping': 0.3.2 84 | jsesc: 2.5.2 85 | dev: true 86 | 87 | /@babel/helper-annotate-as-pure/7.18.6: 88 | resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} 89 | engines: {node: '>=6.9.0'} 90 | dependencies: 91 | '@babel/types': 7.18.10 92 | dev: true 93 | 94 | /@babel/helper-compilation-targets/7.18.9_@babel+core@7.18.10: 95 | resolution: {integrity: sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==} 96 | engines: {node: '>=6.9.0'} 97 | peerDependencies: 98 | '@babel/core': ^7.0.0 99 | dependencies: 100 | '@babel/compat-data': 7.18.8 101 | '@babel/core': 7.18.10 102 | '@babel/helper-validator-option': 7.18.6 103 | browserslist: 4.21.3 104 | semver: 6.3.0 105 | dev: true 106 | 107 | /@babel/helper-environment-visitor/7.18.9: 108 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 109 | engines: {node: '>=6.9.0'} 110 | dev: true 111 | 112 | /@babel/helper-function-name/7.18.9: 113 | resolution: {integrity: sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==} 114 | engines: {node: '>=6.9.0'} 115 | dependencies: 116 | '@babel/template': 7.18.10 117 | '@babel/types': 7.18.10 118 | dev: true 119 | 120 | /@babel/helper-hoist-variables/7.18.6: 121 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 122 | engines: {node: '>=6.9.0'} 123 | dependencies: 124 | '@babel/types': 7.18.10 125 | dev: true 126 | 127 | /@babel/helper-module-imports/7.18.6: 128 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 129 | engines: {node: '>=6.9.0'} 130 | dependencies: 131 | '@babel/types': 7.18.10 132 | dev: true 133 | 134 | /@babel/helper-module-transforms/7.18.9: 135 | resolution: {integrity: sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==} 136 | engines: {node: '>=6.9.0'} 137 | dependencies: 138 | '@babel/helper-environment-visitor': 7.18.9 139 | '@babel/helper-module-imports': 7.18.6 140 | '@babel/helper-simple-access': 7.18.6 141 | '@babel/helper-split-export-declaration': 7.18.6 142 | '@babel/helper-validator-identifier': 7.18.6 143 | '@babel/template': 7.18.10 144 | '@babel/traverse': 7.18.11 145 | '@babel/types': 7.18.10 146 | transitivePeerDependencies: 147 | - supports-color 148 | dev: true 149 | 150 | /@babel/helper-plugin-utils/7.18.9: 151 | resolution: {integrity: sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==} 152 | engines: {node: '>=6.9.0'} 153 | dev: true 154 | 155 | /@babel/helper-simple-access/7.18.6: 156 | resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} 157 | engines: {node: '>=6.9.0'} 158 | dependencies: 159 | '@babel/types': 7.18.10 160 | dev: true 161 | 162 | /@babel/helper-split-export-declaration/7.18.6: 163 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 164 | engines: {node: '>=6.9.0'} 165 | dependencies: 166 | '@babel/types': 7.18.10 167 | dev: true 168 | 169 | /@babel/helper-string-parser/7.18.10: 170 | resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} 171 | engines: {node: '>=6.9.0'} 172 | dev: true 173 | 174 | /@babel/helper-validator-identifier/7.18.6: 175 | resolution: {integrity: sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==} 176 | engines: {node: '>=6.9.0'} 177 | dev: true 178 | 179 | /@babel/helper-validator-option/7.18.6: 180 | resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} 181 | engines: {node: '>=6.9.0'} 182 | dev: true 183 | 184 | /@babel/helpers/7.18.9: 185 | resolution: {integrity: sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==} 186 | engines: {node: '>=6.9.0'} 187 | dependencies: 188 | '@babel/template': 7.18.10 189 | '@babel/traverse': 7.18.11 190 | '@babel/types': 7.18.10 191 | transitivePeerDependencies: 192 | - supports-color 193 | dev: true 194 | 195 | /@babel/highlight/7.18.6: 196 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 197 | engines: {node: '>=6.9.0'} 198 | dependencies: 199 | '@babel/helper-validator-identifier': 7.18.6 200 | chalk: 2.4.2 201 | js-tokens: 4.0.0 202 | dev: true 203 | 204 | /@babel/parser/7.18.11: 205 | resolution: {integrity: sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==} 206 | engines: {node: '>=6.0.0'} 207 | hasBin: true 208 | dev: true 209 | 210 | /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.18.10: 211 | resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} 212 | engines: {node: '>=6.9.0'} 213 | peerDependencies: 214 | '@babel/core': ^7.0.0-0 215 | dependencies: 216 | '@babel/core': 7.18.10 217 | '@babel/helper-plugin-utils': 7.18.9 218 | dev: true 219 | 220 | /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.18.10: 221 | resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} 222 | engines: {node: '>=6.9.0'} 223 | peerDependencies: 224 | '@babel/core': ^7.0.0-0 225 | dependencies: 226 | '@babel/core': 7.18.10 227 | '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.18.10 228 | dev: true 229 | 230 | /@babel/plugin-transform-react-jsx-self/7.18.6_@babel+core@7.18.10: 231 | resolution: {integrity: sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==} 232 | engines: {node: '>=6.9.0'} 233 | peerDependencies: 234 | '@babel/core': ^7.0.0-0 235 | dependencies: 236 | '@babel/core': 7.18.10 237 | '@babel/helper-plugin-utils': 7.18.9 238 | dev: true 239 | 240 | /@babel/plugin-transform-react-jsx-source/7.18.6_@babel+core@7.18.10: 241 | resolution: {integrity: sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==} 242 | engines: {node: '>=6.9.0'} 243 | peerDependencies: 244 | '@babel/core': ^7.0.0-0 245 | dependencies: 246 | '@babel/core': 7.18.10 247 | '@babel/helper-plugin-utils': 7.18.9 248 | dev: true 249 | 250 | /@babel/plugin-transform-react-jsx/7.18.10_@babel+core@7.18.10: 251 | resolution: {integrity: sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==} 252 | engines: {node: '>=6.9.0'} 253 | peerDependencies: 254 | '@babel/core': ^7.0.0-0 255 | dependencies: 256 | '@babel/core': 7.18.10 257 | '@babel/helper-annotate-as-pure': 7.18.6 258 | '@babel/helper-module-imports': 7.18.6 259 | '@babel/helper-plugin-utils': 7.18.9 260 | '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.18.10 261 | '@babel/types': 7.18.10 262 | dev: true 263 | 264 | /@babel/runtime/7.18.9: 265 | resolution: {integrity: sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==} 266 | engines: {node: '>=6.9.0'} 267 | dependencies: 268 | regenerator-runtime: 0.13.9 269 | dev: false 270 | 271 | /@babel/template/7.18.10: 272 | resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} 273 | engines: {node: '>=6.9.0'} 274 | dependencies: 275 | '@babel/code-frame': 7.18.6 276 | '@babel/parser': 7.18.11 277 | '@babel/types': 7.18.10 278 | dev: true 279 | 280 | /@babel/traverse/7.18.11: 281 | resolution: {integrity: sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==} 282 | engines: {node: '>=6.9.0'} 283 | dependencies: 284 | '@babel/code-frame': 7.18.6 285 | '@babel/generator': 7.18.12 286 | '@babel/helper-environment-visitor': 7.18.9 287 | '@babel/helper-function-name': 7.18.9 288 | '@babel/helper-hoist-variables': 7.18.6 289 | '@babel/helper-split-export-declaration': 7.18.6 290 | '@babel/parser': 7.18.11 291 | '@babel/types': 7.18.10 292 | debug: 4.3.4 293 | globals: 11.12.0 294 | transitivePeerDependencies: 295 | - supports-color 296 | dev: true 297 | 298 | /@babel/types/7.18.10: 299 | resolution: {integrity: sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==} 300 | engines: {node: '>=6.9.0'} 301 | dependencies: 302 | '@babel/helper-string-parser': 7.18.10 303 | '@babel/helper-validator-identifier': 7.18.6 304 | to-fast-properties: 2.0.0 305 | dev: true 306 | 307 | /@esbuild/linux-loong64/0.14.54: 308 | resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} 309 | engines: {node: '>=12'} 310 | cpu: [loong64] 311 | os: [linux] 312 | dev: true 313 | optional: true 314 | 315 | /@jridgewell/gen-mapping/0.1.1: 316 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 317 | engines: {node: '>=6.0.0'} 318 | dependencies: 319 | '@jridgewell/set-array': 1.1.2 320 | '@jridgewell/sourcemap-codec': 1.4.14 321 | dev: true 322 | 323 | /@jridgewell/gen-mapping/0.3.2: 324 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 325 | engines: {node: '>=6.0.0'} 326 | dependencies: 327 | '@jridgewell/set-array': 1.1.2 328 | '@jridgewell/sourcemap-codec': 1.4.14 329 | '@jridgewell/trace-mapping': 0.3.15 330 | dev: true 331 | 332 | /@jridgewell/resolve-uri/3.1.0: 333 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 334 | engines: {node: '>=6.0.0'} 335 | dev: true 336 | 337 | /@jridgewell/set-array/1.1.2: 338 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 339 | engines: {node: '>=6.0.0'} 340 | dev: true 341 | 342 | /@jridgewell/sourcemap-codec/1.4.14: 343 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 344 | dev: true 345 | 346 | /@jridgewell/trace-mapping/0.3.15: 347 | resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} 348 | dependencies: 349 | '@jridgewell/resolve-uri': 3.1.0 350 | '@jridgewell/sourcemap-codec': 1.4.14 351 | dev: true 352 | 353 | /@reduxjs/toolkit/1.8.4_react-redux@8.0.2+react@18.2.0: 354 | resolution: {integrity: sha512-IpFq1WI7sCYeLQpDCGvlcQY9wn70UpAM3cOLq78HRnVn1746RI+l3y5xcuOeVOxORaxABJh3cfJMxycD2IwH5w==} 355 | peerDependencies: 356 | react: ^16.9.0 || ^17.0.0 || ^18 357 | react-redux: ^7.2.1 || ^8.0.2 358 | peerDependenciesMeta: 359 | react: 360 | optional: true 361 | react-redux: 362 | optional: true 363 | dependencies: 364 | immer: 9.0.15 365 | react: 18.2.0 366 | react-redux: 8.0.2_ff80cd9dfb626a6c6c4251864122e347 367 | redux: 4.2.0 368 | redux-thunk: 2.4.1_redux@4.2.0 369 | reselect: 4.1.6 370 | dev: false 371 | 372 | /@types/history/4.7.11: 373 | resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} 374 | dev: false 375 | 376 | /@types/hoist-non-react-statics/3.3.1: 377 | resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} 378 | dependencies: 379 | '@types/react': 18.0.17 380 | hoist-non-react-statics: 3.3.2 381 | dev: false 382 | 383 | /@types/prop-types/15.7.5: 384 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 385 | 386 | /@types/react-dom/18.0.6: 387 | resolution: {integrity: sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==} 388 | dependencies: 389 | '@types/react': 18.0.17 390 | dev: true 391 | 392 | /@types/react-redux/7.1.24: 393 | resolution: {integrity: sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==} 394 | dependencies: 395 | '@types/hoist-non-react-statics': 3.3.1 396 | '@types/react': 18.0.17 397 | hoist-non-react-statics: 3.3.2 398 | redux: 4.2.0 399 | dev: false 400 | 401 | /@types/react-router-dom/5.3.3: 402 | resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} 403 | dependencies: 404 | '@types/history': 4.7.11 405 | '@types/react': 18.0.17 406 | '@types/react-router': 5.1.18 407 | dev: false 408 | 409 | /@types/react-router/5.1.18: 410 | resolution: {integrity: sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==} 411 | dependencies: 412 | '@types/history': 4.7.11 413 | '@types/react': 18.0.17 414 | dev: false 415 | 416 | /@types/react/18.0.17: 417 | resolution: {integrity: sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==} 418 | dependencies: 419 | '@types/prop-types': 15.7.5 420 | '@types/scheduler': 0.16.2 421 | csstype: 3.1.0 422 | 423 | /@types/scheduler/0.16.2: 424 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 425 | 426 | /@types/use-sync-external-store/0.0.3: 427 | resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} 428 | dev: false 429 | 430 | /@vitejs/plugin-react/2.0.1_vite@3.0.7: 431 | resolution: {integrity: sha512-uINzNHmjrbunlFtyVkST6lY1ewSfz/XwLufG0PIqvLGnpk2nOIOa/1CACTDNcKi1/RwaCzJLmsXwm1NsUVV/NA==} 432 | engines: {node: ^14.18.0 || >=16.0.0} 433 | peerDependencies: 434 | vite: ^3.0.0 435 | dependencies: 436 | '@babel/core': 7.18.10 437 | '@babel/plugin-transform-react-jsx': 7.18.10_@babel+core@7.18.10 438 | '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.18.10 439 | '@babel/plugin-transform-react-jsx-self': 7.18.6_@babel+core@7.18.10 440 | '@babel/plugin-transform-react-jsx-source': 7.18.6_@babel+core@7.18.10 441 | magic-string: 0.26.2 442 | react-refresh: 0.14.0 443 | vite: 3.0.7 444 | transitivePeerDependencies: 445 | - supports-color 446 | dev: true 447 | 448 | /ansi-styles/3.2.1: 449 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 450 | engines: {node: '>=4'} 451 | dependencies: 452 | color-convert: 1.9.3 453 | dev: true 454 | 455 | /browserslist/4.21.3: 456 | resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} 457 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 458 | hasBin: true 459 | dependencies: 460 | caniuse-lite: 1.0.30001375 461 | electron-to-chromium: 1.4.217 462 | node-releases: 2.0.6 463 | update-browserslist-db: 1.0.5_browserslist@4.21.3 464 | dev: true 465 | 466 | /caniuse-lite/1.0.30001375: 467 | resolution: {integrity: sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==} 468 | dev: true 469 | 470 | /chalk/2.4.2: 471 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 472 | engines: {node: '>=4'} 473 | dependencies: 474 | ansi-styles: 3.2.1 475 | escape-string-regexp: 1.0.5 476 | supports-color: 5.5.0 477 | dev: true 478 | 479 | /color-convert/1.9.3: 480 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 481 | dependencies: 482 | color-name: 1.1.3 483 | dev: true 484 | 485 | /color-name/1.1.3: 486 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 487 | dev: true 488 | 489 | /convert-source-map/1.8.0: 490 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 491 | dependencies: 492 | safe-buffer: 5.1.2 493 | dev: true 494 | 495 | /csstype/3.1.0: 496 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} 497 | 498 | /debug/4.3.4: 499 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 500 | engines: {node: '>=6.0'} 501 | peerDependencies: 502 | supports-color: '*' 503 | peerDependenciesMeta: 504 | supports-color: 505 | optional: true 506 | dependencies: 507 | ms: 2.1.2 508 | dev: true 509 | 510 | /electron-to-chromium/1.4.217: 511 | resolution: {integrity: sha512-iX8GbAMij7cOtJPZo02CClpaPMWjvN5meqXiJXkBgwvraNWTNH0Z7F9tkznI34JRPtWASoPM/xWamq3oNb49GA==} 512 | dev: true 513 | 514 | /esbuild-android-64/0.14.54: 515 | resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==} 516 | engines: {node: '>=12'} 517 | cpu: [x64] 518 | os: [android] 519 | dev: true 520 | optional: true 521 | 522 | /esbuild-android-arm64/0.14.54: 523 | resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==} 524 | engines: {node: '>=12'} 525 | cpu: [arm64] 526 | os: [android] 527 | dev: true 528 | optional: true 529 | 530 | /esbuild-darwin-64/0.14.54: 531 | resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==} 532 | engines: {node: '>=12'} 533 | cpu: [x64] 534 | os: [darwin] 535 | dev: true 536 | optional: true 537 | 538 | /esbuild-darwin-arm64/0.14.54: 539 | resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==} 540 | engines: {node: '>=12'} 541 | cpu: [arm64] 542 | os: [darwin] 543 | dev: true 544 | optional: true 545 | 546 | /esbuild-freebsd-64/0.14.54: 547 | resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==} 548 | engines: {node: '>=12'} 549 | cpu: [x64] 550 | os: [freebsd] 551 | dev: true 552 | optional: true 553 | 554 | /esbuild-freebsd-arm64/0.14.54: 555 | resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==} 556 | engines: {node: '>=12'} 557 | cpu: [arm64] 558 | os: [freebsd] 559 | dev: true 560 | optional: true 561 | 562 | /esbuild-linux-32/0.14.54: 563 | resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==} 564 | engines: {node: '>=12'} 565 | cpu: [ia32] 566 | os: [linux] 567 | dev: true 568 | optional: true 569 | 570 | /esbuild-linux-64/0.14.54: 571 | resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==} 572 | engines: {node: '>=12'} 573 | cpu: [x64] 574 | os: [linux] 575 | dev: true 576 | optional: true 577 | 578 | /esbuild-linux-arm/0.14.54: 579 | resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==} 580 | engines: {node: '>=12'} 581 | cpu: [arm] 582 | os: [linux] 583 | dev: true 584 | optional: true 585 | 586 | /esbuild-linux-arm64/0.14.54: 587 | resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==} 588 | engines: {node: '>=12'} 589 | cpu: [arm64] 590 | os: [linux] 591 | dev: true 592 | optional: true 593 | 594 | /esbuild-linux-mips64le/0.14.54: 595 | resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==} 596 | engines: {node: '>=12'} 597 | cpu: [mips64el] 598 | os: [linux] 599 | dev: true 600 | optional: true 601 | 602 | /esbuild-linux-ppc64le/0.14.54: 603 | resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==} 604 | engines: {node: '>=12'} 605 | cpu: [ppc64] 606 | os: [linux] 607 | dev: true 608 | optional: true 609 | 610 | /esbuild-linux-riscv64/0.14.54: 611 | resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==} 612 | engines: {node: '>=12'} 613 | cpu: [riscv64] 614 | os: [linux] 615 | dev: true 616 | optional: true 617 | 618 | /esbuild-linux-s390x/0.14.54: 619 | resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==} 620 | engines: {node: '>=12'} 621 | cpu: [s390x] 622 | os: [linux] 623 | dev: true 624 | optional: true 625 | 626 | /esbuild-netbsd-64/0.14.54: 627 | resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==} 628 | engines: {node: '>=12'} 629 | cpu: [x64] 630 | os: [netbsd] 631 | dev: true 632 | optional: true 633 | 634 | /esbuild-openbsd-64/0.14.54: 635 | resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==} 636 | engines: {node: '>=12'} 637 | cpu: [x64] 638 | os: [openbsd] 639 | dev: true 640 | optional: true 641 | 642 | /esbuild-sunos-64/0.14.54: 643 | resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==} 644 | engines: {node: '>=12'} 645 | cpu: [x64] 646 | os: [sunos] 647 | dev: true 648 | optional: true 649 | 650 | /esbuild-windows-32/0.14.54: 651 | resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==} 652 | engines: {node: '>=12'} 653 | cpu: [ia32] 654 | os: [win32] 655 | dev: true 656 | optional: true 657 | 658 | /esbuild-windows-64/0.14.54: 659 | resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==} 660 | engines: {node: '>=12'} 661 | cpu: [x64] 662 | os: [win32] 663 | dev: true 664 | optional: true 665 | 666 | /esbuild-windows-arm64/0.14.54: 667 | resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==} 668 | engines: {node: '>=12'} 669 | cpu: [arm64] 670 | os: [win32] 671 | dev: true 672 | optional: true 673 | 674 | /esbuild/0.14.54: 675 | resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==} 676 | engines: {node: '>=12'} 677 | hasBin: true 678 | requiresBuild: true 679 | optionalDependencies: 680 | '@esbuild/linux-loong64': 0.14.54 681 | esbuild-android-64: 0.14.54 682 | esbuild-android-arm64: 0.14.54 683 | esbuild-darwin-64: 0.14.54 684 | esbuild-darwin-arm64: 0.14.54 685 | esbuild-freebsd-64: 0.14.54 686 | esbuild-freebsd-arm64: 0.14.54 687 | esbuild-linux-32: 0.14.54 688 | esbuild-linux-64: 0.14.54 689 | esbuild-linux-arm: 0.14.54 690 | esbuild-linux-arm64: 0.14.54 691 | esbuild-linux-mips64le: 0.14.54 692 | esbuild-linux-ppc64le: 0.14.54 693 | esbuild-linux-riscv64: 0.14.54 694 | esbuild-linux-s390x: 0.14.54 695 | esbuild-netbsd-64: 0.14.54 696 | esbuild-openbsd-64: 0.14.54 697 | esbuild-sunos-64: 0.14.54 698 | esbuild-windows-32: 0.14.54 699 | esbuild-windows-64: 0.14.54 700 | esbuild-windows-arm64: 0.14.54 701 | dev: true 702 | 703 | /escalade/3.1.1: 704 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 705 | engines: {node: '>=6'} 706 | dev: true 707 | 708 | /escape-string-regexp/1.0.5: 709 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 710 | engines: {node: '>=0.8.0'} 711 | dev: true 712 | 713 | /fsevents/2.3.2: 714 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 715 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 716 | os: [darwin] 717 | dev: true 718 | optional: true 719 | 720 | /function-bind/1.1.1: 721 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 722 | dev: true 723 | 724 | /gensync/1.0.0-beta.2: 725 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 726 | engines: {node: '>=6.9.0'} 727 | dev: true 728 | 729 | /globals/11.12.0: 730 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 731 | engines: {node: '>=4'} 732 | dev: true 733 | 734 | /has-flag/3.0.0: 735 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 736 | engines: {node: '>=4'} 737 | dev: true 738 | 739 | /has/1.0.3: 740 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 741 | engines: {node: '>= 0.4.0'} 742 | dependencies: 743 | function-bind: 1.1.1 744 | dev: true 745 | 746 | /history/5.3.0: 747 | resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} 748 | dependencies: 749 | '@babel/runtime': 7.18.9 750 | dev: false 751 | 752 | /hoist-non-react-statics/3.3.2: 753 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} 754 | dependencies: 755 | react-is: 16.13.1 756 | dev: false 757 | 758 | /immer/9.0.15: 759 | resolution: {integrity: sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==} 760 | dev: false 761 | 762 | /is-core-module/2.10.0: 763 | resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} 764 | dependencies: 765 | has: 1.0.3 766 | dev: true 767 | 768 | /js-tokens/4.0.0: 769 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 770 | 771 | /jsesc/2.5.2: 772 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 773 | engines: {node: '>=4'} 774 | hasBin: true 775 | dev: true 776 | 777 | /json5/2.2.1: 778 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 779 | engines: {node: '>=6'} 780 | hasBin: true 781 | dev: true 782 | 783 | /loose-envify/1.4.0: 784 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 785 | hasBin: true 786 | dependencies: 787 | js-tokens: 4.0.0 788 | dev: false 789 | 790 | /magic-string/0.26.2: 791 | resolution: {integrity: sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==} 792 | engines: {node: '>=12'} 793 | dependencies: 794 | sourcemap-codec: 1.4.8 795 | dev: true 796 | 797 | /ms/2.1.2: 798 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 799 | dev: true 800 | 801 | /nanoid/3.3.4: 802 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 803 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 804 | hasBin: true 805 | dev: true 806 | 807 | /node-releases/2.0.6: 808 | resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} 809 | dev: true 810 | 811 | /path-parse/1.0.7: 812 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 813 | dev: true 814 | 815 | /picocolors/1.0.0: 816 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 817 | dev: true 818 | 819 | /postcss/8.4.16: 820 | resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} 821 | engines: {node: ^10 || ^12 || >=14} 822 | dependencies: 823 | nanoid: 3.3.4 824 | picocolors: 1.0.0 825 | source-map-js: 1.0.2 826 | dev: true 827 | 828 | /react-dom/18.2.0_react@18.2.0: 829 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 830 | peerDependencies: 831 | react: ^18.2.0 832 | dependencies: 833 | loose-envify: 1.4.0 834 | react: 18.2.0 835 | scheduler: 0.23.0 836 | dev: false 837 | 838 | /react-is/16.13.1: 839 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 840 | dev: false 841 | 842 | /react-is/18.2.0: 843 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 844 | dev: false 845 | 846 | /react-redux/8.0.2_ff80cd9dfb626a6c6c4251864122e347: 847 | resolution: {integrity: sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==} 848 | peerDependencies: 849 | '@types/react': ^16.8 || ^17.0 || ^18.0 850 | '@types/react-dom': ^16.8 || ^17.0 || ^18.0 851 | react: ^16.8 || ^17.0 || ^18.0 852 | react-dom: ^16.8 || ^17.0 || ^18.0 853 | react-native: '>=0.59' 854 | redux: ^4 855 | peerDependenciesMeta: 856 | '@types/react': 857 | optional: true 858 | '@types/react-dom': 859 | optional: true 860 | react-dom: 861 | optional: true 862 | react-native: 863 | optional: true 864 | redux: 865 | optional: true 866 | dependencies: 867 | '@babel/runtime': 7.18.9 868 | '@types/hoist-non-react-statics': 3.3.1 869 | '@types/react': 18.0.17 870 | '@types/react-dom': 18.0.6 871 | '@types/use-sync-external-store': 0.0.3 872 | hoist-non-react-statics: 3.3.2 873 | react: 18.2.0 874 | react-dom: 18.2.0_react@18.2.0 875 | react-is: 18.2.0 876 | use-sync-external-store: 1.2.0_react@18.2.0 877 | dev: false 878 | 879 | /react-refresh/0.14.0: 880 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 881 | engines: {node: '>=0.10.0'} 882 | dev: true 883 | 884 | /react-router-dom/6.3.0_react-dom@18.2.0+react@18.2.0: 885 | resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} 886 | peerDependencies: 887 | react: '>=16.8' 888 | react-dom: '>=16.8' 889 | dependencies: 890 | history: 5.3.0 891 | react: 18.2.0 892 | react-dom: 18.2.0_react@18.2.0 893 | react-router: 6.3.0_react@18.2.0 894 | dev: false 895 | 896 | /react-router/6.3.0_react@18.2.0: 897 | resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==} 898 | peerDependencies: 899 | react: '>=16.8' 900 | dependencies: 901 | history: 5.3.0 902 | react: 18.2.0 903 | dev: false 904 | 905 | /react/18.2.0: 906 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 907 | engines: {node: '>=0.10.0'} 908 | dependencies: 909 | loose-envify: 1.4.0 910 | dev: false 911 | 912 | /redux-thunk/2.4.1_redux@4.2.0: 913 | resolution: {integrity: sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==} 914 | peerDependencies: 915 | redux: ^4 916 | dependencies: 917 | redux: 4.2.0 918 | dev: false 919 | 920 | /redux/4.2.0: 921 | resolution: {integrity: sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==} 922 | dependencies: 923 | '@babel/runtime': 7.18.9 924 | dev: false 925 | 926 | /regenerator-runtime/0.13.9: 927 | resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} 928 | dev: false 929 | 930 | /reselect/4.1.6: 931 | resolution: {integrity: sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==} 932 | dev: false 933 | 934 | /resolve/1.22.1: 935 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 936 | hasBin: true 937 | dependencies: 938 | is-core-module: 2.10.0 939 | path-parse: 1.0.7 940 | supports-preserve-symlinks-flag: 1.0.0 941 | dev: true 942 | 943 | /rollup/2.77.3: 944 | resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==} 945 | engines: {node: '>=10.0.0'} 946 | hasBin: true 947 | optionalDependencies: 948 | fsevents: 2.3.2 949 | dev: true 950 | 951 | /safe-buffer/5.1.2: 952 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 953 | dev: true 954 | 955 | /scheduler/0.23.0: 956 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 957 | dependencies: 958 | loose-envify: 1.4.0 959 | dev: false 960 | 961 | /semver/6.3.0: 962 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 963 | hasBin: true 964 | dev: true 965 | 966 | /source-map-js/1.0.2: 967 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 968 | engines: {node: '>=0.10.0'} 969 | dev: true 970 | 971 | /sourcemap-codec/1.4.8: 972 | resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} 973 | dev: true 974 | 975 | /supports-color/5.5.0: 976 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 977 | engines: {node: '>=4'} 978 | dependencies: 979 | has-flag: 3.0.0 980 | dev: true 981 | 982 | /supports-preserve-symlinks-flag/1.0.0: 983 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 984 | engines: {node: '>= 0.4'} 985 | dev: true 986 | 987 | /to-fast-properties/2.0.0: 988 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 989 | engines: {node: '>=4'} 990 | dev: true 991 | 992 | /typescript/4.7.4: 993 | resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} 994 | engines: {node: '>=4.2.0'} 995 | hasBin: true 996 | dev: true 997 | 998 | /update-browserslist-db/1.0.5_browserslist@4.21.3: 999 | resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} 1000 | hasBin: true 1001 | peerDependencies: 1002 | browserslist: '>= 4.21.0' 1003 | dependencies: 1004 | browserslist: 4.21.3 1005 | escalade: 3.1.1 1006 | picocolors: 1.0.0 1007 | dev: true 1008 | 1009 | /use-sync-external-store/1.2.0_react@18.2.0: 1010 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 1011 | peerDependencies: 1012 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1013 | dependencies: 1014 | react: 18.2.0 1015 | dev: false 1016 | 1017 | /vite/3.0.7: 1018 | resolution: {integrity: sha512-dILhvKba1mbP1wCezVQx/qhEK7/+jVn9ciadEcyKMMhZpsuAi/eWZfJRMkmYlkSFG7Qq9NvJbgFq4XOBxugJsA==} 1019 | engines: {node: ^14.18.0 || >=16.0.0} 1020 | hasBin: true 1021 | peerDependencies: 1022 | less: '*' 1023 | sass: '*' 1024 | stylus: '*' 1025 | terser: ^5.4.0 1026 | peerDependenciesMeta: 1027 | less: 1028 | optional: true 1029 | sass: 1030 | optional: true 1031 | stylus: 1032 | optional: true 1033 | terser: 1034 | optional: true 1035 | dependencies: 1036 | esbuild: 0.14.54 1037 | postcss: 8.4.16 1038 | resolve: 1.22.1 1039 | rollup: 2.77.3 1040 | optionalDependencies: 1041 | fsevents: 2.3.2 1042 | dev: true 1043 | --------------------------------------------------------------------------------